现象:
Debug模式下,程序启动正常,功能也正常。但Archive打包后,LaunchScreen显示一下,程序闪退。
工程为Swift项目,并且嵌入了一个Swift 库(Alamofire)。
查看设备日子,发现如下异常:
Dyld Error Message:
Library not loaded:@rpath/Alamofire.framework/Alamofire
Referenced from: /private/var/mobile/Containers/Bundle/Application/2307B97A-4DE2-4BB0-9B3C-9B58FB3617CB/YNYDQX.app/YNYDQX
Reason: no suitable image found. Did find:
/private/var/mobile/Containers/Bundle/Application/
检查Alamofire,发现代码没有签名,而且Bundle ID不能匹配。怎么回事?明明记得以前嵌入框架(.a文件)是不需要签名的(O-C项目)?!
不管了,先解决这个问题再说。于是进行签名,并修改Bundle ID。
再次运行程序,发现故障依旧,控制台输出:
[deny-mmap] mapped file has no teamidentifier and is not a platform binary: /private/var/mobile/Containers/Bundle/Application/2307B97A-4DE2-4BB0-9B3C-9B58FB3617CB/YNYDQX.app/YNYDQX
在stackoverflow上查找答案,有人说需要撤销原来的inHouse证书,然后重新制作新的证书和provisioning profile。
于是登录Portal,重新制作证书和Provisioning Profile。
将代码重新签名,再次打包。
程序正常启动。
比较老的证书和新制作的证书,发下以下部分有所不同:
在新的inHouse证书的主题中,增加了一个新的字段:组织单位(也就是所谓的OU)。
原来,iOS(测试设备为8.1)现在开始对inHouse证书中的OU进行验证了。老的证书中并没有这个东西,于是iOS强行终止了App进程。
但是苹果官方并没有对此进行说明。对于相对小众的企业开发者来说,无疑又被苹果坑了一回。