iOS 創(chuàng)建Framework(轉(zhuǎn)載)

iOS 創(chuàng)建Framework :?http://www.itdecent.cn/p/9a1a3f5be434

iOS framework動態(tài)庫的創(chuàng)建和使用 :?http://www.itdecent.cn/p/4301a6f3e426

iOS framework動態(tài)庫的創(chuàng)建和使用

love_p關注

0.112021.02.25 18:27:38字數(shù) 1,032閱讀 880

軟件:xcode12

FrameWork既可能是動態(tài)庫,也可能是靜態(tài)庫,我們這里創(chuàng)建的是動態(tài)庫。

選擇FrameWork。默認創(chuàng)建的是Framework動態(tài)庫

設置動態(tài)庫名稱

修改項目的iOS Deployment Target為10.0(與使用動態(tài)庫項目保持一致,或者低于使用的項目)

MyFramework.h是默認生成的,會自動添加到暴露的header中,可以在內(nèi)部import一些自己需要暴露使用的頭文件。

創(chuàng)建文件,并添加想要暴露的頭文件

(可選)設置動態(tài)庫支持bitcode,如果不支持bitcode,使用動態(tài)庫的項目就不能支持bitcode

動態(tài)庫支持bitcode:http://www.itdecent.cn/p/c5570751fdbc

第一步,DEPLOYMENT_POSTPROCESSING = YES

第二步,設置 STRIP_STYLE 為 Debugging Symbols(默認是)

第三步,Build Settings -> Compiler Flags添加 -fembed-bitcode 參數(shù)

第四步,確認Build Settings -> Enable Bitcode 為YES(默認是)

設置Edit Scheme的Run的build Configuration為Release,以便于打出來的framework是release的。當然你也可以使用debug的進行調(diào)試。

simulator和真機的framework包如果需要進行合成一個調(diào)試包,需要去掉模擬器的arm64,因為xcode12合成的時候,會因為simulator和真機的包都包含arm64的而產(chǎn)生沖突。

選擇任何simulator進行build,生成simulator的包,使用Any iOS Device進行build,生成真機的包。

生成之后在項目目錄的products下的Myframework.framework進行Show in Finder,就可以看到生成的framework包。我們可以把兩個包拷貝出來然后

兩個包都可以單獨進行調(diào)試,但是真機的包需要使用本地的證書進行重簽名。

將兩個包的可執(zhí)行文件進行合成:

1> cd到你合成文件想要放置的文件夾下(避免當前文件夾下有和可執(zhí)行文件名稱相同的文件或者文件夾,有的話會報錯)

2> 終端執(zhí)行命令:lipo -create sumulator的framework的可執(zhí)行文件的目錄?真機的framework的可執(zhí)行文件的目錄?-output?可執(zhí)行文件名

lipo -create /Users/admin/Desktop/work/dylib/Release-iphonesimulator/MyFramework.framework/MyFramework /Users/admin/Desktop/work/dylib/Release-iphoneos/MyFramework.framework/MyFramework -output MyFramework

3> 將生成的可執(zhí)行文件替換Release-iphoneos中的MyFramework.framework下的可執(zhí)行文件。MyFramework.framework則就是合成的包。

4> 對合成的包進行開發(fā)者證書(使用動態(tài)庫項目的開發(fā)者證書)簽名,簽名之后就生成了可進行sumulator和真機調(diào)試的framework動態(tài)包。

簽名方式:重新打開終端輸入/usr/bin/security find-identity -v -p codesigning?列出電腦上可用的簽名,cd到XX.framework所在的目錄,然后codesign -fs "Apple Development: xxxx (XXXX)"?xx.framework進行簽名。

注意:打包測試或者發(fā)布的時候是直接使用沒有簽名過的真機的framework,xcode會自動進行簽名。

項目使用動態(tài)庫framework

把動態(tài)庫添加到項目,然后在Build Phases的Copy Bundle Resources中添加動態(tài)庫,這樣動態(tài)庫在打包的時候可以打包到bundle中。Link Binary Libraries如果添加了的話,動態(tài)庫在程序運行的時候就會自動動態(tài)加載,可以直接使用,如果沒有添加,則需要我們使用loadAndReturnError或者dlopen(私有api不能上線使用)進行加載,加載成功之后進行使用。

動態(tài)加載庫方式:

1>?Build Phases的Copy Bundle Resources中添加動態(tài)庫,Link Binary Libraries刪掉動態(tài)庫。如果Link Binary Libraries需要鏈接的話需要在Build Settings->Links->Runpath Search Paths中添加@executable_path/

2> 使用

如果重復添加動態(tài)庫,則后面添加的動態(tài)庫失效。

如果framework中使用到了Category那么在使用framework的工程中要設置Build Settings中的Other Link Flag為-ObjC或者-all_load

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容