0830 - 迂迴於 Swift 包管理

今天又折騰了下 Swift 包管理。html

目前是用 CocoaPods,其實也沒太大問題,但總以爲 對代碼的侵入太強。這不,iPaste for iOS 起了個新項目,想換個清爽點的,因而就又折騰了下。swift

除了 Pod,主要有 2 個選擇:CarthageSwift Package Manager. 後者如今還太嫩,僅適合 Swift 項目,不少第三方並不支持,遂放棄。xcode

那就來到了 Carthage;其實 Carthage 並不複雜,實質是下載第三方庫的源碼、本地編譯爲 Frameworks. 剩下的事情,就要開發者本身手動操做了。其實手動也沒什麼,就是把 Frameworks 做爲 Linked Frameworks 加入項目中,並在編譯時複製入 .app. bash

爲何不用 Embeded 方式呢?由於畢竟第三方庫是會變的,若是用 Embeded 至關於寫死了版本,後續升級時有些麻煩。固然,也是可行的。app

這裏就能夠看出 Pod 和 Carthage 的二點不一樣優化

  • Pod 實質是使用源代碼集成
    • 好處:在寫代碼時能夠方便跳轉至第三方庫的源碼中
    • 壞處:編譯速度慢,尤爲是全新編譯或打包時
  • Carthage 實質是使用 Framework 集成
    • 好處與壞處,正好與 Pod 相反
    • 不過,在集成 dYMS 後,也能夠在調試期間跳入第三方庫的源碼中,但依然不能在寫代碼時跳轉

Carthage 這裏有個坑:Swift 編譯器版本spa

  • 若是你電腦上僅有一個 Xcode,沒什麼問題。而若是你同時安裝了 Xcode Beta、又恰巧要爲 Xcode Beta 的項目添加依賴,就有問題了。
  • Carthage 默認是用 xcrun swift --version 所獲得的 Swift 版本進行編譯的。而默認狀況下,這個確定是 Xcode 而非 Xcode Beta 的運行環境。再來個而,Swift 3.2 的項目,是沒法引用 Swift 3.1 編譯器編譯出來的 Frameworks 的。
  • 解決方案也很解決,使用 Xcode Beta 中的編譯器便可。只是,貌似 Carthage 並無相關的參數方便地切換(好比,我試了 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 個項目了。如今看來,主要有以下方式集成:

  • 建立本地 Pod 項目
    • 好處是能夠方便跳入源碼,道理和上面介紹的同樣
    • 壞處是,建立本地 Pod 項目,麻煩啊
    • 最後,仍是用了這個方式
  • 使用 Frameworks + Carthage 集成
    • 好處是集成簡單
    • 壞處也是 Carthage 自己的限制:看源碼麻煩
  • 共享相同的源碼文件
    • 因爲我是本身寫代碼,不須要和別人共享,這也不失爲一條路。
    • 並且,這個方式最簡單。

總算,這個事情有告終論,明天能夠靜心地優化 iOS 與 macOS 間的數據同步了。


博客原文:0830 - 迂迴於 Swift 包管理

相關文章
相關標籤/搜索