Cocoapods 創(chuàng)建私有庫網(wǎng)上的文章已經(jīng)很多了, 但是涉及到針對 Swift 遇到的問題相關(guān)文章很少,這里針對 Swift 創(chuàng)建包含 Oc 代碼的私有庫和 Framework 等問題做個梳理
創(chuàng)建流程不細(xì)說, 網(wǎng)上相關(guān)文章很多了
[方式一]
pod lib create xxxx
根據(jù)提示選擇 Swift 語言, 選擇包括 Example 項目
[方式二]
或創(chuàng)建一個 Framework 項目, 命令行輸入
pod spec create xxxx
創(chuàng)建 pod 遇到的一些問題
- pod 內(nèi)部需要引用 oc 的 .framework
在 swift 項目中, 引用 oc framework 只需添加一個 Bridging-Header.h 橋接文件即可引入, 而 swift Framework 中并不支持此種方式, 為解決這種問題, 可通過創(chuàng)建 .moudlemap 文件解決此問題, moudlemap 文件就是對一個框架,一個庫的所有頭文件的結(jié)構(gòu)化描述, 我們創(chuàng)建的 Framework 也會自動生成一個 moudlemap 文件
需要注意的是, module 名稱需和 Framework 名稱相同
module MyOcFramework {
header "myOcFramework.framework/Headers/myOcFrameworkHeader.h"
export *
}
import MyOcFramework
class Person {
......
}
如果只是某個 .h 文件也是同理
module MyOcH {
header "MyOcH.h"
export *
}
2.找不到某個 moudlemap 創(chuàng)建的 framework name
提示找不到 framework 說明 moudlemap 文件路徑錯誤, 使用[方式一]創(chuàng)建的 pod 庫需要在 .podspec 里指定 .modulemap 文件路徑
s.preserve_paths = 'xxName/***/module.modulemap'
3.如果在 pod 庫中依賴一些靜態(tài) pod 庫,編譯會失敗, 這種情況只能使用 Framework 方式引入, 參照問題1
pod 制作成 Framework
1.pod 可使用 package 插件把 pod 庫制作成 Framework, 但是如果是 swift 會報錯
**/**.modulemap not found
目前還沒有發(fā)現(xiàn)解決方法, github 上已提 issues
使用手動合并的方式目前沒有此問題, 具體模擬器和真機合并流程網(wǎng)上文章很多, 在此不再贅述
2.制作的 Framework 啟動后報錯
swift 制作的 Framework 添加到 General - Embedded Binaries
3.包含 oc Framework 并創(chuàng)建過 .moudlemap 的 Framewrok 編譯報錯找不到 .moudlemap 定義的框架名稱
此問題是由于封裝的 Framework 未包含 .moudlemap, 因此在框架內(nèi)部找不到定義的名稱, 如果只是封裝成 pod 引入項目并沒有此問題, 而封裝成 Framework 需定義一份 .moudlemap, 并在 Build Settings - Swift Compiler Search Paths -import Paths 中指定 .moudlemap 文件路徑