苹果的又一个坑:InHouse打包后程序不能启动

现象:

 

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进程。

 

但是苹果官方并没有对此进行说明。对于相对小众的企业开发者来说,无疑又被苹果坑了一回。


你可能感兴趣的:(苹果的又一个坑:InHouse打包后程序不能启动)