如何正確設定 AFNetworking 的安全連線
TL;DR前一陣子 AFNetworking被爆出存在安全性漏洞,它們也針對這件事情發出聲明稿。簡單的說,就是建議開發者使用最新版的 AFNetworking,並且啟用安全連線。不過它們也承認這一部份的說明文件沒有寫得很齊全,所以困擾了不少開發者。今天花了一點時間研究,順手把它記錄下來。安全相關的東西不是我的專長,所以如果有任何錯誤的地方,請留言告訴我。取得安全憑證1....
View ArticleReactiveCocoa 範例 - 處理網路請求
前言最近這半年來我開始使用 ReactiveCocoa開發 APP,覺得它真的是很適合一般的 APP 使用情境,在我看來,它可以很漂亮的解決 當 XX 發生的時候,就執行 YY的需求。今天這篇文章來分享一下,我是如何使用 ReactiveCocoa強化舊有的網路請求功能。我是用 AFNetworking來實現網路請求功能,然後用 Mantle來建立我的 model。現在我有個...
View Article開發產品學到的一些事(下)
一個 APP 開發工程師在 start-up 打滾幾年之後,得到的一些心得跟體會,上集在這裡。善用追蹤工具做任何決定之前都要有所本,不要突然「通靈」了就做出莫名其妙的決策。那要根據什麼做決定呢?很簡單,讓數據說話。善用至少一款追蹤工具(GA、Mixpanel、Flurry、Kissmetrics、Keen...
View Article產生 Auto Layout Constraints 的程式碼要放在哪裡
由於種種原因,所以到目前為止,我在公司的專案還是沒有用 Interface Builder,所有的 UI 完全用程式碼一行一行刻出來,當然這也包含 auto layout 相關的程式碼。如果是一個 UIViewController的話,程式碼架構大概長這樣:- (void)viewDidLoad { [super viewDidLoad]; [self setupConstraints]; } -...
View Article必備的 Xcode plugins
不得不說 Xcode 的功能跟其他 IDE 相比,真的挺陽春的,多虧網路上一堆熱心的開發者,幫忙開發了不少 plugins,稍稍補強了 Xcode 的功能。底下就列出我目前有用到的 plugins,當作一個備忘,也歡迎大家跟我分享好用的 plugins。強烈推薦使用 Alcatraz管理這些 plugins!Backlight高亮度當前列,這是很多編輯器都有的功能,不知道為何 Xcode...
View Article自動解決 Xcode project file 的合併衝突
之前寫過一篇文章,分享如何 讓 Xcode 專案易於版本控制的方法,最近又看到另外一個小技巧,跟我原本的方法結合起來的話,基本上就萬無一失了!這個方法的步驟如下:建立一個 .gitattributes檔輸入 *.pbxproj merge=unioncommit 這個 .gitattributes檔這些動作告訴 Git 「針對 .pbxproj 檔要使用 union 的 merge...
View Article如何在 Debug mode 自動停用 ATS
蘋果在 WWDC 2015 上發表了 App Transport Security (ATS),大力推廣網路安全連線。對於這樣的發展,我個人是樂見其成的,也相信在蘋果的影響力之下,安全連線也會進一步的普及。不過對工程師來說,這代表你又要修改程式,以便符合蘋果規範了。在修改的過程中,我就遇到了一個問題:Release 版的 app 是會走安全連線的,但在 Debug...
View Article我的第一個 Xcode plugin - Auto Highlight Symbol
前不久我寫了一篇文章記錄我有在用的 Xcode plugins,看到網路上那麼多的 plugins 都開放原始碼,讓我不由得也手癢想要寫一個自己來用,所以我的第一個 Xcode plugin 就這麼產生了。Auto Highlight Symbol在使用 Xcode 看程式碼的時候,都很希望它能像其他 IDE 一樣,有自動高亮度同一個變數的功能(例如 Sublime...
View Article解決 Xcode 無法任意設定字型的問題
最近灌了一台全新的電腦,用的是最新的 OS X El Capitan + Xcode 7.1,身為一位開發者,裝好 Xcode 要做的第一件事當然是把佈景主題的字型換成看得順眼的等寬字型(我個人偏好使用 Adobe Source Code Pro)。只是不知道為什麼,當我要調整字型的時候,卻發現字型挑選器無法讓我看到更多的字型:問了一下社群的朋友,發現有不少安裝「全新的電腦 +...
View ArticleNSDateFormatter Cheat Sheet for Dash
Dash是 Mac 系統下最好用的 API 文件瀏覽器,我認真覺得每個程式設計師都應該買一套,它真的能大幅提高你的生產力!它除了可以拿來瀏覽多種 API 文件之外,還能讓使用者自行上傳 cheat sheet,我整理了一個 NSDateFormatter的 cheat sheet 方便查閱,有需要的人可以參考下圖,下載來使用。它的 cheat sheet 是 ruby...
View Article用 Objective-C 實作 Redux 架構
前言有一定的程式設計經驗之後,會愈來愈感受到程式架構的重要性,在 iOS app 開發的世界裡,最常見的莫過於 MVC 架構,因為它夠簡單而且是蘋果推薦的架構。但當你的程式越來越龐大,流程越來越複雜的時候,就會發現 MVC 架構已經無法滿足需求了。這幾年最為人所知的就是 MVP / MVVM / VIPER / Coordinator...
View Article讓 Xcode 8 再度支援 plugins
眾所皆知的,Xcode 8 把之前的 plugins 都擋掉了,然後推出了 Source Editor Extension,但 Source Editor Extension 的能力還很有限,基本上只能對「文字」操作。所以就有人提出了一個解法,把 Xcode 8 app unsign,這樣就能讓 plugins 再度作用了。具體作法如下:下載 MakeXcodePluginsWorkchmod...
View Article為何 Startup 不該用 Swift
最近跟朋友聊天,聊到說我不建議 startup 使用 Swift 開發 app,趁著有空紀錄一下為何我會這麼說。還是得先聲明一下,Swift 是一個很酷的語言,我沒有不喜歡它,只是站在公司的角度,我認為 startup 不應該使用 Swift 開發它們的主力產品,而是應該用 Objective-C。主要是因為以下幾點理由:Swift 還不穩定Swift 是一個很新的語言,大家都還在摸索怎樣才是...
View Article一個 AFNetworking 的 retain cycle 問題
AFNetworking封裝了網路連線的許多工作,讓 iOS/Mac 開發者可以用簡潔的寫法去處理連線,但你知道要如何正確使用,才不會出現 retain cycle 嗎?舉個例子舉個最簡單的例子,我們可能會在自訂的 UIViewController 裡頭建立一個 AFHTTPSessionManager,透過它來進行網路連線,大部分的寫法大概如下:@interface...
View Article如何解決 NSTimer 造成的 retain cycle
故事是這麼開始的最近在替公司 app 做健康檢查,找到一些 memory leaks 的問題,其中一個就是由 NSTimer所引起的 retain cycle。NSTimer是個很容易造成 retain cycle 的物件,無論是新手或是老手都很可能一個不留意就踩到這個坑。舉個很常見的例子,這樣寫就產生 retain cycle 了:@interface MyViewController()...
View Article為何 Git-Flow 可能不適合你
什麼是 Git-FlowGit-Flow是 Vincent Driessen在 2010 年提出的一套 Git 分支模型,簡單的說,它有 master跟 develop這兩個主要的分支,以及 feature / release / hotfix這三個支援型分支,至於各個分支的用途看圖片應該就懂了,或是看原文有更詳細的說明。由於當時大家對如何使用 Git...
View Article如何為各個 Pod 指定 Swift 版本
最近升上 Swift 4.2,發現我用到的 Pods 有些還沒支援 4.2 導致編譯錯誤。解決方法也很簡單,只要指定每個 Pod target 的 SWIFT_VERSION為 4.0即可。但是我們不能手動在 Xcode 裡頭調整,因為 CocoaPods 會把 Pods 的 SWIFT_VERSION設為跟你的 project 一樣,所以下次 pod install又會被改掉。我們可以在...
View ArticleiOS App 如何支援 RTL 語言
公司的產品越做越大,前一陣子幫公司的 app 加上阿拉伯文介面,開發過程也累積了一些支援 RTL 語系的心得,藉這個機會跟大家分享。找到 Native Speaker對於書寫方向是「從左到右」的我們來說,最困難的其實不是看不懂這個語言,而是不知道這樣的 layout 是否正確,因為 layout 絕對不是全部都無腦的換成「從右到左」就好。所以如果情況許可,最好找個 native speaker...
View Article本站搬家了
為了更高的彈性以及更好的資料自主性,我把部落格搬到 GitHub Page,這邊將不再維護。想看最新文章的朋友,請移駕到 https://chiahsien.github.io/,它也有提供 RSS 訂閱服務喔。
View Article