ITMS-90429: Invalid Swift Support

ITMS-90429: Invalid Swift Support - The files libswiftDarwin.dylib, libswiftMetal.dylib, libswiftCoreAudio.dylib, libswiftsimd.dylib, libswiftQuartzCore.dylib, libswift_Concurrency.dylib, libswiftos.dylib, libswiftMapKit.dylib, libswiftObjectiveC.dylib, libswiftDispatch.dylib, libswiftCoreLocation.dylib, libswiftAccelerate.dylib, libswiftCoreGraphics.dylib, libswiftCoreData.dylib, libswiftCoreFoundation.dylib, libswiftUIKit.dylib, libswiftCoreMedia.dylib, libswiftAVFoundation.dylib, libswiftCore.dylib, libswiftFoundation.dylib, libswiftPhotos.dylib, libswiftMediaPlayer.dylib, libswiftCoreImage.dylib aren’t at the expected location

碰到一個上架問題,查找資料

image.png

得知是在app包的最外層存在一個直接暴露dylib,按照官方要求,必須打包成Framework的形式才行。
image.png

那么問題轉(zhuǎn)換成把dylib打包成framework,打包現(xiàn)成的dylib成framework需要以下幾個步驟

方式一:

直接使用CMake 生成 iOS Framework CMake Framework
該方式需要庫的源碼

方式二:

  1. 先用Xcode生成一個framework工程,build出一個release包
  2. 把dylib變成一個沒有.dylib后綴的二進(jìn)制文件,用這個二進(jìn)制文件替換第一步framework中生成的二進(jìn)制產(chǎn)物
  3. 修改這個二進(jìn)制文件的rpath.

我們首先來詳細(xì)講解

  1. 生成framework,這一步的目的是為了得到一個framework的目錄結(jié)構(gòu),注意3個點(diǎn)
  • 記得把要暴露的頭文件拽進(jìn)來,改成public
  • 把庫的適配版本改成比你的應(yīng)用的適配版本要小或者相等的版本
  • 不需要簽名
    我們這一步得到的產(chǎn)物如圖


    image.png
  1. 現(xiàn)在我們把我們的libeslog.dylib生成eslog的二進(jìn)制產(chǎn)物,替換framework的產(chǎn)物,因?yàn)檎嬲拇a段數(shù)據(jù)段符號等數(shù)據(jù)都在我們的dylib中,framework的eslog里面是空的
? lipo -create libeslog.dylib -output eslog
? chmod a+rx eslog

然后我們把新生成的eslog替換原來framwork的eslog

注意:
這一步生成的產(chǎn)物的名字一定要和framework的產(chǎn)物名字對得上,framework中有一個info.plist文件,里面有一個字段記錄了執(zhí)行文件名稱,這個取名無所謂,但是一定要保證名稱都對上

  1. 現(xiàn)在修改rpath,如果不做這一步,原來的rpath還是指向以前的libeslog.dylib,導(dǎo)入進(jìn)工程是會dyld not found的
? install_name_tool -id @rpath/eslog.framework/eslog eslog

我們重新驗(yàn)證rpath變化


image.png

注:
這里有個小坑是修改可執(zhí)行文件本身的加載路徑而非它的依賴庫路徑是沒有辦法用
istall_name_tool -change去修改的。

image.png

現(xiàn)在就是一個正常的未簽名的framework了,可以給自己用也可以給第三方用了,只需要把它拽進(jìn)工程,記得embed & singin

image.png

重新運(yùn)行即可正常加載。

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

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

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