蘋果的又一個坑: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程序。
但是蘋果官方並沒有對此進行說明。對於相對小眾的企業開發者來說,無疑又被蘋果坑了一回。