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