昨天遇到了一個讓人絕望的問題。昼接。爽篷。事情是這樣的。慢睡。
昨天高高興興的完成了新的版本的開發(fā)逐工,老大說有了新的Apple賬號,需要用新的賬號提交App Store漂辐,于是登上了新的AppleID泪喊,然后創(chuàng)建證書,創(chuàng)建ID髓涯,Apple Connect上創(chuàng)建應(yīng)用窘俺,一氣呵成,把證書下載下來配置一下复凳,cmd+R,應(yīng)用順利的跑起來了灶泵,然后打包育八,上傳TestFlight,也是非常順利赦邻,也成功的發(fā)布到了TestFlight髓棋,然后測試那邊報了一個bug給我,一看不是什么大問題么惶洲,改好之后用模擬器測試按声,OK沒問題,想想再用真機調(diào)試一下吧恬吕,于是接上了測試機签则,cmd+R,然后去接杯水铐料,等著回來看看真機上有沒有什么問題渐裂,結(jié)果接完水回來豺旬。。柒凉。并不是期待的需要解鎖的alert族阅,而是。膝捞。坦刀。
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)的問題,仔細(xì)檢查了一下蔬咬,好像沒有什么問題么鲤遥??不過這個問題看著好像不是什么大問題计盒,結(jié)果耗費了我一天多的時間渴频。。北启。所以準(zhǔn)備寫下來記錄一下卜朗。
可能出現(xiàn)問題的原因
出現(xiàn)這個報錯的原因一般來說是遠程Provisioning Profile(以下簡稱PP)和本地的配置不同造成的問題,細(xì)看下來可能有這么幾種可能:
1.PP文件和Capability配置不匹配咕村;
2.PP文件和本地證書不匹配场钉;
3.跑應(yīng)用時Debug和Release選擇錯誤;
4.PP文件中沒有包含當(dāng)前要運行設(shè)備的UUID懈涛;
5.Xcode10中Build System問題(這個好像最新的Xcode已經(jīng)修復(fù)了)逛万;
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上能搜到比較多的答案拷呆,具體的操作為將如下步驟下打開的選項設(shè)置為空:
** Project -> Target ->* 項目名稱 *-> Build Settings -> Code Signing Entitlements **
然而這個方法并沒有對我有什么幫助闲坎。
清空xxx.entitlements文件
這個方法實際上和上一個方法的操作差不多,具體步驟為:
在項目目錄下找到xxx(項目名).entitlements文件茬斧,并刪除這個文件中的全部字段腰懂。
其實這個方法應(yīng)該跟上一個方法差別不大,對我也并沒有什么幫助项秉。
重新開啟Capabilities中的選項
這個方法其實是讓Xcode自動來配置xxx.entitlements中的字段绣溜,具體步驟就是:
** Project -> Target ->* 項目名稱 -> Capabilities -> 找到已經(jīng)打開的配置,關(guān)閉再打開 **
結(jié)果同樣令人悲傷娄蔼,并沒有什么作用涮毫。瞬欧。。
重新配置Apple Developler中的PP文件并下載
這時候我有點崩潰了罢防。艘虎。。我以為是之前創(chuàng)建開發(fā)證書的時候出了什么問題咒吐,因為可以正常上傳到Apple Connect野建,所以發(fā)布證書應(yīng)該沒有什么問題,但是索性我還是把所有的證書和PP文件都revoke掉恬叹,然后重新生成了一遍候生,并且檢查了App ID的配置,查看有沒有和本地的Capabilities不匹配的字段绽昼。
當(dāng)然唯鸭,結(jié)果還是沒有什么用處。
Debug和Release選擇錯誤
google到有大佬說cmd+shift+<打開配置查看一下選中的Debug和Release是否正確硅确,我不知道這個會不會照成影響目溉,但是我覺得這個可能不會有什么用處,正常的配置應(yīng)該就是如圖:
然而沒有什么辦法菱农,只能改改看了缭付,最后發(fā)現(xiàn)還是不對。
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混戰(zhàn)了一天之后腦子也有點糊涂赋元,今天早上來,仔細(xì)查看了編譯日志飒房,發(fā)現(xiàn)搁凸!咦!好像這個地方有問題狠毯,于是檢查了Targets下的
XXX(項目名)
XXXTests
XXX-tvOS
XXX-tvOSTests
.
.
.
如果你還有其他Target請都檢查一遍护糖!發(fā)現(xiàn)其他的證書都是用的另外一個賬號的證書。改了一下嚼松。嫡良。頓時預(yù)感要成功锰扶,cmd+R了一下,果然出現(xiàn)了久違的畫面:
最后
這篇文章僅供個人學(xué)習(xí)使用寝受,如果有什么不對的地方還請大佬們多多指教坷牛,另外如果你也遇到了這個問題,有這邊沒有提到的解決辦法很澄,請留言告訴我京闰。謝謝。
參考文檔
Entitlements file do not match those specified in your provisioning profile.(0xE8008016)
iOS開發(fā) The executable was signed with invalid entitlements.
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).