iOS開(kāi)發(fā)-真機(jī)調(diào)試遇到“The executable was signed with invalid entitlements.

昨天遇到了一個(gè)讓人絕望的問(wèn)題。。。事情是這樣的。。

昨天高高興興的完成了新的版本的開(kāi)發(fā),老大說(shuō)有了新的Apple賬號(hào),需要用新的賬號(hào)提交App Store,于是登上了新的AppleID,然后創(chuàng)建證書(shū),創(chuàng)建ID,Apple Connect上創(chuàng)建應(yīng)用,一氣呵成,把證書(shū)下載下來(lái)配置一下,cmd+R,應(yīng)用順利的跑起來(lái)了,然后打包,上傳TestFlight,也是非常順利,也成功的發(fā)布到了TestFlight,然后測(cè)試那邊報(bào)了一個(gè)bug給我,一看不是什么大問(wèn)題么,改好之后用模擬器測(cè)試,OK沒(méi)問(wèn)題,想想再用真機(jī)調(diào)試一下吧,于是接上了測(cè)試機(jī),cmd+R,然后去接杯水,等著回來(lái)看看真機(jī)上有沒(méi)有什么問(wèn)題,結(jié)果接完水回來(lái)。。。并不是期待的需要解鎖的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).

看來(lái)來(lái)好像是Provisioning Profile(pp)的問(wèn)題,仔細(xì)檢查了一下,好像沒(méi)有什么問(wèn)題么??不過(guò)這個(gè)問(wèn)題看著好像不是什么大問(wèn)題,結(jié)果耗費(fèi)了我一天多的時(shí)間。。。所以準(zhǔn)備寫(xiě)下來(lái)記錄一下。

可能出現(xiàn)問(wèn)題的原因

出現(xiàn)這個(gè)報(bào)錯(cuò)的原因一般來(lái)說(shuō)是遠(yuǎn)程Provisioning Profile(以下簡(jiǎn)稱(chēng)PP)和本地的配置不同造成的問(wèn)題,細(xì)看下來(lái)可能有這么幾種可能:

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

  • 2.PP文件和本地證書(shū)不匹配;

  • 3.跑應(yīng)用時(shí)Debug和Release選擇錯(cuò)誤;

  • 4.PP文件中沒(méi)有包含當(dāng)前要運(yùn)行設(shè)備的UUID;

  • 5.Xcode10中Build System問(wèn)題(這個(gè)好像最新的Xcode已經(jīng)修復(fù)了);

  • 6.項(xiàng)目中多個(gè)Targets的證書(shū)選擇錯(cuò)誤(我就是這個(gè)問(wèn)題);

另外Apple官方也有針對(duì)Entitlements出錯(cuò)時(shí)的檢查方案,地址在這里Entitlements Troubleshooting。

解決方案

OK,大概了解了情況,那就一個(gè)一個(gè)來(lái)檢查修改吧。

對(duì)了,先po一個(gè)查看Provisioning Profile信息的 shell:


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

置空Code Signing Entitlements

這個(gè)是google和stackoverflow上能搜到比較多的答案,具體的操作為將如下步驟下打開(kāi)的選項(xiàng)設(shè)置為空:

** Project -> Target ->* 項(xiàng)目名稱(chēng) *-> Build Settings -> Code Signing Entitlements **

1.png

然而這個(gè)方法并沒(méi)有對(duì)我有什么幫助。

清空xxx.entitlements文件

這個(gè)方法實(shí)際上和上一個(gè)方法的操作差不多,具體步驟為:

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

其實(shí)這個(gè)方法應(yīng)該跟上一個(gè)方法差別不大,對(duì)我也并沒(méi)有什么幫助。

重新開(kāi)啟Capabilities中的選項(xiàng)

這個(gè)方法其實(shí)是讓Xcode自動(dòng)來(lái)配置xxx.entitlements中的字段,具體步驟就是:

** Project -> Target ->* 項(xiàng)目名稱(chēng) -> Capabilities -> 找到已經(jīng)打開(kāi)的配置,關(guān)閉再打開(kāi) **

結(jié)果同樣令人悲傷,并沒(méi)有什么作用。。。

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

這時(shí)候我有點(diǎn)崩潰了。。。我以為是之前創(chuàng)建開(kāi)發(fā)證書(shū)的時(shí)候出了什么問(wèn)題,因?yàn)榭梢哉I蟼鞯紸pple Connect,所以發(fā)布證書(shū)應(yīng)該沒(méi)有什么問(wèn)題,但是索性我還是把所有的證書(shū)和PP文件都revoke掉,然后重新生成了一遍,并且檢查了App ID的配置,查看有沒(méi)有和本地的Capabilities不匹配的字段。

當(dāng)然,結(jié)果還是沒(méi)有什么用處。

Debug和Release選擇錯(cuò)誤

google到有大佬說(shuō)cmd+shift+<打開(kāi)配置查看一下選中的Debug和Release是否正確,我不知道這個(gè)會(huì)不會(huì)照成影響,但是我覺(jué)得這個(gè)可能不會(huì)有什么用處,正常的配置應(yīng)該就是如圖:

2.png

然而沒(méi)有什么辦法,只能改改看了,最后發(fā)現(xiàn)還是不對(duì)。

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

這個(gè)問(wèn)題是項(xiàng)目的info.plist文件中的Bundle identifier字段和

** Project -> Target -> 項(xiàng)目名稱(chēng) -> Build Setting -> Packaging -> Product Bundle Identifier ** 中的ID字段不匹配照成的。

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

檢查所有的Targets下的證書(shū)

就是這個(gè)方法解決了我的問(wèn)題,因?yàn)槲冶镜毓芾淼腁pple ID有點(diǎn)多,而且之前google都是配置PP之類(lèi)的回答,所以沒(méi)有想到這個(gè)問(wèn)題,昨天跟證書(shū)和PP混戰(zhàn)了一天之后腦子也有點(diǎn)糊涂,今天早上來(lái),仔細(xì)查看了編譯日志,發(fā)現(xiàn)!咦!好像這個(gè)地方有問(wèn)題,于是檢查了Targets下的

  • XXX(項(xiàng)目名)

  • XXXTests

  • XXX-tvOS

  • XXX-tvOSTests

.

.

.

如果你還有其他Target請(qǐng)都檢查一遍!發(fā)現(xiàn)其他的證書(shū)都是用的另外一個(gè)賬號(hào)的證書(shū)。改了一下。。頓時(shí)預(yù)感要成功,cmd+R了一下,果然出現(xiàn)了久違的畫(huà)面:

final.png

最后

這篇文章僅供個(gè)人學(xué)習(xí)使用,如果有什么不對(duì)的地方還請(qǐng)大佬們多多指教,另外如果你也遇到了這個(gè)問(wèn)題,有這邊沒(méi)有提到的解決辦法,請(qǐng)留言告訴我。謝謝。

參考文檔

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

iOS開(kāi)發(fā) The executable was signed with invalid entitlements.

Xcode entitlement 問(wèn)題定位和解決指南

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).

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容