1. 程式人生 > >蘋果的又一個坑:InHouse打包後程序不能啟動

蘋果的又一個坑: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程序。

但是蘋果官方並沒有對此進行說明。對於相對小眾的企業開發者來說,無疑又被蘋果坑了一回。