為何 Startup 不該用 Swift

最近跟朋友聊天,聊到說我不建議 startup 使用 Swift 開發 app,趁著有空紀錄一下為何我會這麼說。

還是得先聲明一下,Swift 是一個很酷的語言,我沒有不喜歡它,只是站在公司的角度,我認為 startup 不應該使用 Swift 開發它們的主力產品,而是應該用 Objective-C。

主要是因為以下幾點理由:

繼續閱讀 ➜

用 Objective-C 實作 Redux 架構

有一定的程式設計經驗之後,會愈來愈感受到程式架構的重要性,在 iOS app 開發的世界裡,最常見的莫過於 MVC 架構,因為它夠簡單而且是蘋果推薦的架構。但當你的程式越來越龐大,流程越來越複雜的時候,就會發現 MVC 架構已經無法滿足需求了。這幾年最為人所知的就是 MVP / MVVM / VIPER / Coordinator 這幾個模式。

我認為這些模式的著眼點都在於「UI」:它們假設你有一套辦法去存取或修改資料,然後它們提出的方案是關於如何處理「界面顯示 / 使用者互動 / 資料存取」之間的關係。

繼續閱讀 ➜

如何在 Debug mode 自動停用 ATS

蘋果在 WWDC 2015 上發表了 App Transport Security (ATS),大力推廣網路安全連線。對於這樣的發展,我個人是樂見其成的,也相信在蘋果的影響力之下,安全連線也會進一步的普及。

不過對工程師來說,這代表你又要修改程式,以便符合蘋果規範了。在修改的過程中,我就遇到了一個問題:Release 版的 app 是會走安全連線的,但在 Debug 的時候它是連到本機(localhost),這不是安全連線。該怎麼讓它在 Release / Debug 都能正常連線呢?

繼續閱讀 ➜

自動解決 Xcode project file 的合併衝突

這個方法的步驟如下:

  1. 建立一個 .gitattributes
  2. 輸入 *.pbxproj merge=union
  3. commit 這個 .gitattributes

這些動作告訴 Git 「針對 .pbxproj 檔要使用 union 的 merge 策略」,翻成白話就是「要包含對方的修改跟自己的修改」。

在之前的文章裡頭,我們已經將檔案照檔名排序了,所以當遇到合併衝突的時候,可以安心的包含對方的修改跟自己的修改。

參考來源

如何正確設定 AFNetworking 的安全連線

TL;DR

前一陣子 AFNetworking 被爆出存在安全性漏洞,它們也針對這件事情發出聲明稿

簡單的說,就是建議開發者使用最新版的 AFNetworking,並且啟用安全連線。不過它們也承認這一部份的說明文件沒有寫得很齊全,所以困擾了不少開發者。

今天花了一點時間研究,順手把它記錄下來。安全相關的東西不是我的專長,所以如果有任何錯誤的地方,請留言告訴我。

繼續閱讀 ➜

解決地圖上 Annotation View 偏移的問題

最近在開發 iOS APP 時,有用到地圖的功能,我需要把自訂的大頭針擺放到特定的位置,並且要顯示自訂的圖片。這並不是什麼困難的要求,只是我發現自訂的大頭針圖片(MKAnnotationView)總是有所偏移,不會正好釘在我要的位置,還好最後找到解決辦法。

需求:
有自訂的大頭針圖片,「針頭」的位置就是圖片底部中央的位置,要讓「針頭」正好顯示於地圖上的特定座標,不會有所偏移。

繼續閱讀 ➜

讓 Xcode 專案易於版本控制的方法

若是你有多人協同開發 Mac/iOS 專案,並且有使用版本控制系統的話,一定會在合併 Xcode 專案檔時吃到不少苦頭,一個不小心就會誤刪某些檔案的參照,或是重複某些檔案的參照。

最近發現一個好用的 script,可以用它來幫忙「根據檔名排序」專案檔裡頭的檔案。原本你的專案可能是混雜了檔案與群組資料夾,但經過這個 script 排序之後,專案會變成所有的群組資料夾排在最前面,接著才是檔案,而且群組資料夾裡頭的內容也會被排序。

因為被排序過,所以在合併不同版本的時候,就可以容易看出哪些項目是新增或刪除,若是不小心重複參照了某些檔案,也比較容易找出來。

繼續閱讀 ➜