如何科學的引用這些第三方庫?
狀態
CocoaPods過於依賴Objective-C,因為它完全使用靜態鏈接解決方案。目前應該是官方回購提到的-Xlinker錯誤。我之前也遇到過這個問題,沒有解決辦法。除非手動執行ar,否則不使用ld和libtool。
小夥伴用子目錄方法引用代碼,看起來不錯,直接用git子模塊,看起來可維護。
簡單溶體
好的第三方庫應該實現為Cocoa Touch框架(實際內容是Header+動態鏈接庫)。而不是直接把Swift拷貝過來放到自己的項目裏。本文以壹個簡單的項目為例,介紹如何科學使用。
目標描述
用Swift創建壹個Demo,使用SwiftyJSON和LTMorphingLabel庫。
該項目的名稱是DemoApp。
創建工作區
使用任意名稱和位置創建工作區。這個工作區主要用於管理我們的項目和它所依賴的第三方庫。
創建演示應用程序
在Workspace中創建應用程序。因為是測試,所以我選擇了單視圖應用。
SwiftyJSON簡介
SwiftyJSON是壹個Cocoa Touch框架,可以直接使用。git克隆完成後,只需將項目添加到工作區。
嘗試操作發現。。最簡單、最準確的方法是將。xcodeproj文件直接從Finder到工作區。
引入LTMorphingLabel
LTMorphingLabel是壹個App Deme項目。標簽視圖的實現在壹個子目錄中。妳可以通過創建Cocoa Touch框架來引入這些文件。
當然妳也可以直接把目錄拖到我們的DemoApp裏面,但是太原始太粗暴了。
為應用程序添加依賴項
在DemoApp的“常規”選項卡中,添加鏈接的框架和庫。選擇兩個。工作區中的框架SwiftyJSON和LTMorphingLabel。
如果妳選擇。框架直接從其他項目而不是同壹個工作區,妳也可以在這裏添加嵌入式二進制文件。
使用
添加依賴項後,可以在DemoApp項目代碼中導入SwiftyJSON或導入LTMorphingLabel來使用相應的庫。同時,還可以使用命令+鼠標點擊的方法查看聲明代碼。
排除故障
更尷尬的是,其實按照上面的方法,LTMorphingLabel是無法正常使用的。如果查看錯誤消息,您會發現LTMorphingLabel-Swift.h的語法是自動生成的。編輯器可以找到。h文件並註釋這段奇怪的代碼。
看來目前Bridge Header和-emit-objc-header的實現還是有問題的。小夥伴們壹定要冷靜。
對於非工作區
如果不喜歡使用Workspace,也可以將第三方庫的編譯結果,壹個. framework目錄拖到項目文件中,然後添加嵌入的二進制文件。
評論
在創建Cocoa Touch框架的選項中,可以使用Swift代碼。此時編譯結果(默認)會包含module.modulemap文件,之前已經介紹過,Swift可以通過它使用第三方模塊。參考Swift的模塊系統。
事實上,這個解決方案走了很長的路,導出Projname-Swift。h通過Swift文件,然後導入module.modulemap模塊描述文件,然後通過Swift導入。
事實上。框架還包括Projname。swiftmodule/[arch]。Swiftmodule,不過好像沒用,默認不支持從Swift導入。IDE下的Swiftmodule文件,挺坑的。希望以後的版本可以增加支持。
的。framework包含了所有Swift標準庫的動態鏈接庫,朋友們可能覺得這樣會讓編譯後的App變大。其實妳可以放心,任何壹個Swift語言App都會包含這些動態鏈接庫,而且只包含壹個副本。這種方法對App的最終大小影響不大。
註:個人測試後發現,這個。swiftmodule可以以其他方式使用。繞過module.modulemap應該是更好的解決方案,但是命令行參數需要控制。
至於靜態鏈接庫,已經過時了。扔掉它。