前言
最近公司有个小项目准备用Flutter编写,第一次用Flutter,要踩很多坑,今天准备打iOS Release包就出现问题了。从Archive->Distribute App->Export ipa->install
一气呵成,一打开app闪退。真机debug一点也没问题,为什么打包就有问题,以前几乎没碰到过。
原因
必现闪退的问题一般比较好定位,首先查看crash日志。
EXC_BAD_ACCESS (SIGKILL - CODESIGNING)
平时不常见,大致意思是检测到签名问题,导致app被杀死了。
猜想1:证书问题?
新建了一个纯iOS的项目,使用相同的Bundle ID
,证书,打包,安装,完全没有问题!
猜想2:Flutter的问题?
新建了一个Flutter项目,使用相同的Bundle ID
,证书,打包,安装,完全没有问题!
我打开Flutter中文网上的iOS构建应用看了半天也没找到问题,都是一些常规操作。我的应用内容也不多,跟新建项目比,多了一些第三方库,猜想跟这个有关。
解决
在网上搜了很久,也没有人解答,后来无意间瞄到,iOS打Release包前要
flutter build ios --release
试了下,果然可以了。
zzz:$ flutter build ios --release
Building com.xxxx.xxxx.xxxx for device (ios-release)...
Automatically signing iOS for device deployment using specified development team in Xcode project: R4GXXXXXMC
Running pod install... 3.9s
Running Xcode build...
├─Building Dart code...
159.6s (!)
├─Generating dSYM file... 0.5s
├─Stripping debug symbols... 0.1s
├─Assembling Flutter resources... 5.0s
└─Compiling, linking and signing... 36.2s
Xcode build done. 234.5s
Built /Users/xxxx/xxxx/build/ios/iphoneos/Runner.app.
再打包就正常了,回过头来在看官方文档iOS构建应用,这么重要的事情竟然不写,事实证明是自己粗心大意没看到,上面写的好好的,漏掉了- -!
在开发过程中,您一直在构建、调试、测试debug版本。当您准备将应用发布到App Store或TestFlight上时,您需要准备release 版本:
在命令行上,在您的应用程序目录中执行以下步骤:
运行flutter build ios以创建release版本(flutter build默认为--release)
为确保Xcode刷新release模式配置,关闭并重新打开Xcode workspace。对于Xcode 8.3和更高版本,这一步不是必需的
总结
原生iOS开发,一般情况下,debug能在真机上跑,Release打包后也基本是正常的。Flutter为什么需要这一步,暂时也不清楚,有时间在了解。记录一下这个过程,多提供点关键字,给跟我一样粗心大意的朋友能搜到这个文章看看,少走弯路,我自己是没搜到。。。