iOS TestFlight包獲取不到資源圖片

公司內(nèi)部項(xiàng)目多使用的是組件化的開(kāi)發(fā),可以把項(xiàng)目打包后給內(nèi)部或者外部公司集成使用,但是在打包給公司內(nèi)部的app打包到TestFlight中進(jìn)行內(nèi)部測(cè)試發(fā)現(xiàn)項(xiàng)目?jī)?nèi)有一個(gè)我們自己開(kāi)發(fā)維護(hù)的庫(kù)內(nèi)的所有資源文件都獲取不到了,這個(gè)項(xiàng)目庫(kù)是利用cocoapods管理生成的,所以進(jìn)行排查后找到癥結(jié)所在做一次技術(shù)總結(jié)以及分享;

在出現(xiàn)問(wèn)題后,我仔細(xì)對(duì)項(xiàng)目目前可能出現(xiàn)的問(wèn)題進(jìn)行了幾點(diǎn)總結(jié),目前排查到得出來(lái)的問(wèn)題有以下幾個(gè):
1.項(xiàng)目是模塊化的,出現(xiàn)問(wèn)題的包是特定的一個(gè)單獨(dú)進(jìn)行改造后的pod庫(kù);
2.項(xiàng)目在進(jìn)行Jenkins打包的時(shí)候沒(méi)出現(xiàn)這個(gè)出現(xiàn)問(wèn)題的框架內(nèi)找不到資源文件的問(wèn)題;
3.進(jìn)行驗(yàn)證的時(shí)候檢查來(lái)代碼中bundle獲取方式是以這種方式獲取的:
NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"xxxx" ofType:@"bundle"];
斷點(diǎn)時(shí)發(fā)現(xiàn)路徑是可以正常獲取的,那么打包給外部使用的時(shí)候肯定也是可以獲取的到路徑的。
4.在項(xiàng)目?jī)?nèi)也斷點(diǎn)進(jìn)行資源查找,發(fā)現(xiàn)項(xiàng)目資源在主工程中都可以在控制臺(tái)打印出來(lái),可以保證資源文件是已經(jīng)打包進(jìn)去了的;
5.在打包出來(lái)的ipa包檢查到出現(xiàn)問(wèn)題的framework中顯示包內(nèi)容的時(shí)候也可以發(fā)現(xiàn)bundle正常,利用AssetCatalogTinkerer
解包獲取.car資源文件確認(rèn)了數(shù)據(jù)沒(méi)有丟失。
6.出現(xiàn)問(wèn)題的框架做過(guò)改造使用了資源文件打包成bunlde包的方式;

在經(jīng)過(guò)網(wǎng)上查詢(xún)資料后發(fā)現(xiàn)apple developer中也有一位哥們出現(xiàn)了相似問(wèn)題 點(diǎn)擊跳轉(zhuǎn)
在經(jīng)過(guò)閱讀當(dāng)前帖子后就清晰很多,發(fā)現(xiàn)Xcode13 新增打包選項(xiàng) manageAppVersionAndBuildNumber 默認(rèn)開(kāi)啟,會(huì)同步修改版本號(hào):CFBundleVersion,CFBundleShortVersionString,bundle版本號(hào) 小于 framework版本號(hào) 且framework與bundle同名 且屬于同一模塊,認(rèn)為資源文件是過(guò)期的,不進(jìn)行查找,導(dǎo)致framework無(wú)法加載bundle內(nèi)的資源文件。

解決方案:
1.將出現(xiàn)問(wèn)題的framework的資源文件拷貝一份到mainBundle中;  
2.修改TestFlight包 manageAppVersionAndBuildNumber 配置設(shè)置為關(guān),不同步修改版本號(hào);
3.修改bundle名稱(chēng),使bundle的名稱(chēng)不同于framework的包名;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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