iOS開發-真機調試遇到“The executable was signed with invalid entitlements.

昨天遇到了一個讓人絕望的問題。。。事情是這樣的。。

昨天高高興興的完成了新的版本的開發,老大說有了新的Apple賬號,需要用新的賬號提交App Store,于是登上了新的AppleID,然后創建證書,創建ID,Apple Connect上創建應用,一氣呵成,把證書下載下來配置一下,cmd+R,應用順利的跑起來了,然后打包,上傳TestFlight,也是非常順利,也成功的發布到了TestFlight,然后測試那邊報了一個bug給我,一看不是什么大問題么,改好之后用模擬器測試,OK沒問題,想想再用真機調試一下吧,于是接上了測試機,cmd+R,然后去接杯水,等著回來看看真機上有沒有什么問題,結果接完水回來。。。并不是期待的需要解鎖的alert,而是。。。

final.png

The executable was signed with invalid entitlements.

Profile The entitlements specified in your application’s Code Signing Entitlements file are invalid, not permitted, or do not match those specified in your provisioning profile. (0xE8008016).

看來來好像是Provisioning Profile(pp)的問題,仔細檢查了一下,好像沒有什么問題么??不過這個問題看著好像不是什么大問題,結果耗費了我一天多的時間。。。所以準備寫下來記錄一下。

可能出現問題的原因

出現這個報錯的原因一般來說是遠程Provisioning Profile(以下簡稱PP)和本地的配置不同造成的問題,細看下來可能有這么幾種可能:

  • 1.PP文件和Capability配置不匹配;

  • 2.PP文件和本地證書不匹配;

  • 3.跑應用時Debug和Release選擇錯誤;

  • 4.PP文件中沒有包含當前要運行設備的UUID;

  • 5.Xcode10中Build System問題(這個好像最新的Xcode已經修復了);

  • 6.項目中多個Targets的證書選擇錯誤(我就是這個問題);

另外Apple官方也有針對Entitlements出錯時的檢查方案,地址在這里Entitlements Troubleshooting

解決方案

OK,大概了解了情況,那就一個一個來檢查修改吧。

對了,先po一個查看Provisioning Profile信息的 shell:


/usr/bin/security cms -D -i profile_path/profileName.mobileprovision"

置空Code Signing Entitlements

這個是google和stackoverflow上能搜到比較多的答案,具體的操作為將如下步驟下打開的選項設置為空:

** Project -> Target ->* 項目名稱 *-> Build Settings -> Code Signing Entitlements **

1.png

然而這個方法并沒有對我有什么幫助。

清空xxx.entitlements文件

這個方法實際上和上一個方法的操作差不多,具體步驟為:

在項目目錄下找到xxx(項目名).entitlements文件,并刪除這個文件中的全部字段。

其實這個方法應該跟上一個方法差別不大,對我也并沒有什么幫助。

重新開啟Capabilities中的選項

這個方法其實是讓Xcode自動來配置xxx.entitlements中的字段,具體步驟就是:

** Project -> Target ->* 項目名稱 -> Capabilities -> 找到已經打開的配置,關閉再打開 **

結果同樣令人悲傷,并沒有什么作用。。。

重新配置Apple Developler中的PP文件并下載

這時候我有點崩潰了。。。我以為是之前創建開發證書的時候出了什么問題,因為可以正常上傳到Apple Connect,所以發布證書應該沒有什么問題,但是索性我還是把所有的證書和PP文件都revoke掉,然后重新生成了一遍,并且檢查了App ID的配置,查看有沒有和本地的Capabilities不匹配的字段。

當然,結果還是沒有什么用處。

Debug和Release選擇錯誤

google到有大佬說cmd+shift+<打開配置查看一下選中的Debug和Release是否正確,我不知道這個會不會照成影響,但是我覺得這個可能不會有什么用處,正常的配置應該就是如圖:

2.png

然而沒有什么辦法,只能改改看了,最后發現還是不對。

info.plist中的id和target中不一致

這個問題是項目的info.plist文件中的Bundle identifier字段和

** Project -> Target -> 項目名稱 -> Build Setting -> Packaging -> Product Bundle Identifier ** 中的ID字段不匹配照成的。

但是我的info.plist文件中的ID為$(PRODUCT_BUNDLE_IDENTIFIER),如果你的不是,建議你也要改成這樣,避免以后不必要的麻煩。

檢查所有的Targets下的證書

就是這個方法解決了我的問題,因為我本地管理的Apple ID有點多,而且之前google都是配置PP之類的回答,所以沒有想到這個問題,昨天跟證書和PP混戰了一天之后腦子也有點糊涂,今天早上來,仔細查看了編譯日志,發現!咦!好像這個地方有問題,于是檢查了Targets下的

  • XXX(項目名)

  • XXXTests

  • XXX-tvOS

  • XXX-tvOSTests

.

.

.

如果你還有其他Target請都檢查一遍!發現其他的證書都是用的另外一個賬號的證書。改了一下。。頓時預感要成功,cmd+R了一下,果然出現了久違的畫面:

final.png

最后

這篇文章僅供個人學習使用,如果有什么不對的地方還請大佬們多多指教,另外如果你也遇到了這個問題,有這邊沒有提到的解決辦法,請留言告訴我。謝謝。

參考文檔

Entitlements file do not match those specified in your provisioning profile.(0xE8008016)

iOS開發 The executable was signed with invalid entitlements.

Xcode entitlement 問題定位和解決指南

Entitlements Troubleshooting

The entitlements specified in your application’s Code Signing Entitlements file are invalid, not permitted, or do not match those specified in your provisioning profile. (0xE8008016).

The entitlements specified in your application’s Code Signing Entitlements file do not match those specified in your provisioning profile. (0xE8008016).

The entitlements specified in your application’s Code Signing Entitlements file are invalid, not permitted, or do not match those specified in your provisioning profile. (0xE8008016).

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容