carthage 踩到雷

寫軟體開發一定會遇到要管理 3rd party module 的時候,在寫 iOS 最常見的幾個工具,像是 cocoapods , carthage 。因為之前用 cocoapods 的經驗不是很好,所以後來在專案導入 module 管理工具的時候使用  carthage

這篇文章不會講 cocoapods 有哪些缺點,有哪些解法。也不會講為什麼要選擇 carthage ,不會講 cathage 要怎麼安裝。只會講這次遇到的問題。

目前維護的案子大概寫了兩年,幾乎都是用 swift 寫的,目前是 swift 3.0,不是自己寫的 module 大概小於 10 個,之前有寫一篇怎麼挑選 3rd party module 

carthage 原本只有用來管理 objC 的 module ,雖然也是有一些 swift 的 module ,但是那些 swift module 都小小的,compile time 增加不多,所以之前都直接把 source code 放進來,都不用 framework。

上個禮拜有個需求,考慮加入一個 swift module,底層又包了一個 C library ,零零總總加起來蠻大包的。所以直覺就是要包成 swift framework 包進來。

現在這個時間 7 月中,iOS 11 也出到 beta 3 了,所以開始看看 iOS 11 有哪些問題要解,要用 xcode 9,使用 xcode 9 compile 的時候 ,swift 版本會變成 swift 3.2 ,就獲得這個 build error。


意思是 app 是用 swift 3.2 ,但是 framework 是用 swift 3.0 ,所以這樣不行喔。覺得這應該是 swift 自己的問題,為什麼 objC 寫好幾年了,都沒有版本不合的問題。

平常還是有固定出版時間,還是必須要用 xcode 8,還是要用 swift 3 ,也就是不能直接換成 3.2。這個問題也只有每次 iOS 升級前解 bug 的時候會遇到。

想一想這問題大概有幾個解法:
  1. 放棄那個 swift module,用 objC 改寫
  2. 開兩個 branch ,一個是 swift 3.0 平常出版用的,一個是 swift 3.2 + iOS 11 修 bug 用的
  3. 等 iOS 11 上線,全部工作機都換成 xcode 9  以後再來做。
我選 3

沒有留言: