一些app不适合发布在应用商店,那flutter 如何构建ipa呢。
代码混淆
flutter的代码混淆就是混淆代码。
代码混淆是修改应用程序二进制文件的过程,以使人们更难以理解。混淆将函数名和类名隐藏在已编译的Dart代码中,从而使攻击者很难对您的专有应用程序进行反向工程。
要混淆应用程序,请使用--obfuscate标志和--split-debug-info标志相结合来构建发行版本。
--split-debug-info标志指定Flutter可以在其中输出调试文件的目录。该命令生成符号图。目前支持apk,appbundle,ios和ios框架目标。
签名
flutter build ios --release
会自动签名,如果没有签名配置打包会不成功。
直接构建ipa时,往往是由第三方分发,或者用企业证书重新签名。这时就不需要带上开发者自己的证书信,可以使用 --no-codesign 参数这样就不会签名了。
手工制作ipa
每次用Xcode编译运行,都会自动产生一个相应后缀为app的文件,可以通过这个自己手动创建一个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
优化包大小
flutter 框架的二进程文件带bitcode,上传appstore后会自己将bitcode删除,但手工打包的ipa文件由于是自己分发,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