今天又折騰了下 Swift 包管理。html
目前是用 CocoaPods,其實也沒太大問題,但總以爲 對代碼的侵入太強。這不,iPaste for iOS 起了個新項目,想換個清爽點的,因而就又折騰了下。swift
除了 Pod,主要有 2 個選擇:Carthage 和 Swift Package Manager. 後者如今還太嫩,僅適合 Swift 項目,不少第三方並不支持,遂放棄。xcode
那就來到了 Carthage;其實 Carthage 並不複雜,實質是下載第三方庫的源碼、本地編譯爲 Frameworks. 剩下的事情,就要開發者本身手動操做了。其實手動也沒什麼,就是把 Frameworks 做爲 Linked Frameworks 加入項目中,並在編譯時複製入 .app. bash
爲何不用 Embeded 方式呢?由於畢竟第三方庫是會變的,若是用 Embeded 至關於寫死了版本,後續升級時有些麻煩。固然,也是可行的。app
這裏就能夠看出 Pod 和 Carthage 的二點不一樣:優化
Carthage 這裏有個坑:Swift 編譯器版本。spa
xcrun swift --version
所獲得的 Swift 版本進行編譯的。而默認狀況下,這個確定是 Xcode 而非 Xcode Beta 的運行環境。再來個而,Swift 3.2 的項目,是沒法引用 Swift 3.1 編譯器編譯出來的 Frameworks 的。TOOLCHAINS=com.apple.dt.toolchain.Swift_3_2 carthage update --platform iOS
來指定 Swift 編譯器版本,不過貌似並無幹活),最後比較土的先將 Swift 默認編譯器改成 Xcode Beta 版本,編譯後再改回來。sudo xcode-select -s /Applications/Xcode-beta.app/Contents/Developer
carthage update --platform iOS
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer複製代碼
Carthage 這麼簡潔美好,萬萬沒想到,最後仍是倒入了 Pod 的懷抱。調試
由於 Firebase 只支持 Pod 方式集成?!code
根本緣由是,Firebase 並無徹底開源,部分代碼只能用靜態庫的方式發佈。而 Carthage 目前對靜態庫的支持並很差(雖然網上也有人成功了,但畢竟不是官方支持,有些麻煩,放棄了)orm
早說嘛,我就不折騰 Carthage 了,何須呢?
另外,還折騰了 iOS 與 macOS 項目間共享代碼。由於我不想將兩者放在一個工程裏,怕同時調試時麻煩,就分爲 2 個項目了。如今看來,主要有以下方式集成:
總算,這個事情有告終論,明天能夠靜心地優化 iOS 與 macOS 間的數據同步了。
博客原文:0830 - 迂迴於 Swift 包管理