現(xiàn)象:? 上傳 ipa 包 被蘋果后臺(tái)拒絕上傳
ITMS-90338: Non-public API usage- The app references non-public symbols in Frameworks/Flutter.framework/Flutter: _ptrace.?
原因: 使用了 Flutter 的debug 版產(chǎn)物?打成 iPa 包?
就是Frameworks/Flutter.framework 是debug 版的產(chǎn)物
Debug 版的 Flutter 產(chǎn)物 ,SDK 內(nèi)部使用了 蘋果內(nèi)部私有的API , 會(huì)被蘋果審核監(jiān)測(cè)到,存在安全性隱患. 導(dǎo)致拒絕上傳到蘋果后臺(tái).
產(chǎn)生的原因: 因?yàn)殚_(kāi)發(fā)過(guò)程中,直接使用了debug 模式進(jìn)行開(kāi)發(fā), 在打包的時(shí)候,直接打開(kāi) iOS 文件夾下面的工程,在Xcode 里設(shè)置 release 模式時(shí),此時(shí),Flutter 的產(chǎn)物還是 debug 模式下的產(chǎn)物. 沒(méi)有刪除替換成 release 產(chǎn)物
解決思路:?
1.先 將工程 清理一遍,清理之前debug模式下 的Flutter 產(chǎn)物
2.然后 打開(kāi)Xcode 工程,配置好相關(guān) 版本號(hào),證書(shū),release 模式
3. 使用命令行 打包 release ,這樣Flutter.framework就會(huì)生成 release? 產(chǎn)物
4.最后 在Xcode 工程內(nèi),按照正常 打包上傳 包過(guò)程就可以了
具體解決步驟:
1.進(jìn)入 Flutter 工程 <命令行操作>
flutter clean
2 .清理之前debug 模式下的 殘留產(chǎn)物 (或者手動(dòng)進(jìn)入文件夾刪除)
rm -rf ios/Flutter/Flutter.framework
3.?獲取 Flutter 的第三方依賴庫(kù)
flutter pub get
4.編譯 release 打包 產(chǎn)物?
flutter build ios --release?
(此時(shí)這里可以打包出 app 了, 為了安全起見(jiàn),最好再次進(jìn)入Xcode 清理一遍,直接打包上傳,)
上面這一步,主要目的是生成 Flutter.framework? 的release 版本產(chǎn)物
5.進(jìn)入Xcode 工程,clean 一遍,檢查相關(guān)證書(shū)配置,版本號(hào)等
6.直接 Xcode? Archive 打包IPA 上傳 蘋果后臺(tái)
最后上傳成功:
小技巧: 檢查? Flutter.framework 是不是 debug 版
? 思路: 通過(guò)檢查Flutter.framework 它的CPU 架構(gòu)支持
? 如果: 該產(chǎn)物 支持模擬器 x86_arm64 這樣的架構(gòu)的話,說(shuō)明該產(chǎn)物就是 Debug 版的 產(chǎn)物
?? 因?yàn)閞elease 版的 產(chǎn)物是 不支持 模擬器CPU架構(gòu)的.? ?
輸入終端命令:? lipo -info? 產(chǎn)物的物理路徑
比如:? lipo -info /Users/zzc/Documents/rce_flutter/ios/Flutter/Flutter.framework/Flutter