軟件:xcode12
FrameWork既可能是動態(tài)庫蜒滩,也可能是靜態(tài)庫熔掺,我們這里創(chuàng)建的是動態(tài)庫靖秩。
選擇FrameWork。默認(rèn)創(chuàng)建的是Framework動態(tài)庫
設(shè)置動態(tài)庫名稱
修改項目的iOS Deployment Target為10.0(與使用動態(tài)庫項目保持一致,或者低于使用的項目)
MyFramework.h是默認(rèn)生成的蜈项,會自動添加到暴露的header中,可以在內(nèi)部import一些自己需要暴露使用的頭文件。
創(chuàng)建文件锋谐,并添加想要暴露的頭文件
(可選)設(shè)置動態(tài)庫支持bitcode,如果不支持bitcode截酷,使用動態(tài)庫的項目就不能支持bitcode
動態(tài)庫支持bitcode:http://www.reibang.com/p/c5570751fdbc
第一步涮拗,DEPLOYMENT_POSTPROCESSING = YES
第二步,設(shè)置 STRIP_STYLE 為 Debugging Symbols(默認(rèn)是)
第三步迂苛,Build Settings -> Compiler Flags添加 -fembed-bitcode 參數(shù)
第四步三热,確認(rèn)Build Settings -> Enable Bitcode 為YES(默認(rèn)是)
設(shè)置Edit Scheme的Run的build Configuration為Release,以便于打出來的framework是release的三幻。當(dāng)然你也可以使用debug的進(jìn)行調(diào)試就漾。
simulator和真機的framework包如果需要進(jìn)行合成一個調(diào)試包,需要去掉模擬器的arm64念搬,因為xcode12合成的時候抑堡,會因為simulator和真機的包都包含arm64的而產(chǎn)生沖突摆出。
選擇任何simulator進(jìn)行build,生成simulator的包首妖,使用Any iOS Device進(jìn)行build偎漫,生成真機的包。
生成之后在項目目錄的products下的Myframework.framework進(jìn)行Show in Finder有缆,就可以看到生成的framework包象踊。我們可以把兩個包拷貝出來然后
兩個包都可以單獨進(jìn)行調(diào)試,但是真機的包需要使用本地的證書進(jìn)行重簽名妒貌。
將兩個包的可執(zhí)行文件進(jìn)行合成:
1> cd到你合成文件想要放置的文件夾下(避免當(dāng)前文件夾下有和可執(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> 對合成的包進(jìn)行開發(fā)者證書(使用動態(tài)庫項目的開發(fā)者證書)簽名菊碟,簽名之后就生成了可進(jìn)行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進(jìn)行簽名。
注意:打包測試或者發(fā)布的時候是直接使用沒有簽名過的真機的framework蚣驼,xcode會自動進(jìn)行簽名魄幕。
項目使用動態(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不能上線使用)進(jìn)行加載获讳,加載成功之后進(jìn)行使用阴颖。
動態(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> 使用
如果重復(fù)添加動態(tài)庫量愧,則后面添加的動態(tài)庫失效。
如果framework中使用到了Category那么在使用framework的工程中要設(shè)置Build Settings中的Other Link Flag為-ObjC或者-all_load