一些app不適合發(fā)布在應(yīng)用商店暴备,那flutter 如何構(gòu)建ipa呢围小。
代碼混淆
flutter的代碼混淆就是混淆代碼。
代碼混淆是修改應(yīng)用程序二進制文件的過程酣衷,以使人們更難以理解交惯。混淆將函數(shù)名和類名隱藏在已編譯的Dart代碼中穿仪,從而使攻擊者很難對您的專有應(yīng)用程序進行反向工程席爽。
要混淆應(yīng)用程序,請使用--obfuscate標志和--split-debug-info標志相結(jié)合來構(gòu)建發(fā)行版本啊片。
--split-debug-info標志指定Flutter可以在其中輸出調(diào)試文件的目錄只锻。該命令生成符號圖。目前支持apk紫谷,appbundle齐饮,ios和ios框架目標。
簽名
flutter build ios --release
會自動簽名碴里,如果沒有簽名配置打包會不成功沈矿。
直接構(gòu)建ipa時上真,往往是由第三方分發(fā)咬腋,或者用企業(yè)證書重新簽名。這時就不需要帶上開發(fā)者自己的證書信睡互,可以使用 --no-codesign 參數(shù)這樣就不會簽名了根竿。
手工制作ipa
每次用Xcode編譯運行陵像,都會自動產(chǎn)生一個相應(yīng)后綴為app的文件,可以通過這個自己手動創(chuàng)建一個ipa包寇壳。
在文件夾中醒颖,找到該文件,找到之后壳炎,新建一個文件名為Payload的文件夾泞歉,這里只能是這個命名,不能改成其他命名匿辩,然后將后綴為app的文件拖入到新建的Payload文件夾中腰耙,壓縮,然后將文件后綴名zip改成ipa,這樣就可以通過PP助手或者其他的進行安裝了铲球。
自動化
可以簡單的將上面過程寫成腳本
rm -rf Payload
mkdir Payload
mv Runner.app Payload/Runner.app
zip -9 -r app.zip Payload
rm -rf app.ipa
mv app.zip app.ipa
優(yōu)化包大小
flutter 框架的二進程文件帶bitcode挺庞,上傳appstore后會自己將bitcode刪除,但手工打包的ipa文件由于是自己分發(fā)稼病,bitcode需要在打包前手工刪除
這里使用 bitcode_strip來精簡二進制大小
完整代碼
#!/usr/bin/env bash
flutter clean
flutter build ios --release --no-codesign --obfuscate --split-debug-info=./symbols
cd build/ios/iphoneos/Runner.app/Frameworks
cd App.framework
xcrun bitcode_strip -r app -o app
cd ..
cd Flutter.framework
xcrun bitcode_strip -r Flutter -o Flutter
cd ..
xcrun bitcode_strip -r libswiftCore.dylib -o libswiftCore.dylib
xcrun bitcode_strip -r libswiftFoundation.dylib -o libswiftFoundation.dylib
xcrun bitcode_strip -r libswiftDispatch.dylib -o libswiftDispatch.dylib
cd Flutter.framework
cd ../../../
rm -rf Payload
mkdir Payload
mv Runner.app Payload/Runner.app
zip -9 -r app.zip Payload
rm -rf app.ipa
mv app.zip app.ipa
cd ../../../
exit 0