纯Flutter项目iOS真机打包闪退EXC_BAD_ACCESS (SIGKILL - CODESIGNING)

6,010 阅读2分钟

前言

最近公司有个小项目准备用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为什么需要这一步,暂时也不清楚,有时间在了解。记录一下这个过程,多提供点关键字,给跟我一样粗心大意的朋友能搜到这个文章看看,少走弯路,我自己是没搜到。。。