下午打開手機上的測試App發現一打開就閃退,在Xcode中看Device Log顯示下面的錯誤:
app.app/app not valid: 0xe8008016: The executable was signed with invalid entitlements.
之前都好好的,一看就是證書出了問題,聯想到之前剛剛給開發者賬號續過費,猜測是證書過期了。
去鑰匙串里一看,果然是證書過期了。于是去開發者中心重新生成了證書,下載安裝。同時重新下載了對應的mobileprovision文件并安裝。
不知道為什么再運行的時候出現了一個下面的錯誤:
The identity used to sign the executable is no longer valid.
Please verify that your device’s clock is properly set, and that your signing certificate is not expired. (0xE8008018).
先是檢查了一下 General中的Team發現信息不對改成了正確的,然后在Build Setting中更新了Code Sign Identity設置和Provisioning Profile設置。
然后倒好,編譯時就直接出錯,提示no identity found。
這就頭痛了,證書明明已經更新為最新了,然后是Provisioning Profile的問題?根據更新xcode6 運行報錯 Command /usr/bin/codesign failed with exit code 1這篇文章的說法,我以為是Provisioning Profile過期的問題,因為這個app的profile更新過很多次,有的的確過期了,而且生成了很多同名的mobileprovision文件。
在“iphone配置使用工具”中,確實能找到同名的profile,把舊的同名profile文件都刪掉,只保留掉最新的,編譯也還是報錯。——原文里沒說怎么在“iphone配置使用工具”中刪除profile文件,剛開始找不到刪掉的辦法,強行打開~/Library/MobileDevice/Provisioning Profiles文件夾刪掉,后來還是找到了方法,是按Backspace鍵來刪除profile文件。
試過重啟Xcode,Clean所有Build,依然不能解決。
突然就想,原來的證書過期了,對應的Provisioning Profile是不是要重新生成才行?在開發者中心里刪掉舊的profile文件再重新生成,指定新的證書,下載安裝后測試果然就可以了。
現在再回顧一下,覺得問題的根源應該是mobileprovision文件綁定了證書的ID。如果證書過期,對應的mobileprovision文件也全部失效,但是你在文件預覽或者“iphone配置使用工具”中看到它沒有過期,以為還能用,這就是坑爹的地方。
no such provisioning profile was found錯誤
后來有一次做archive版本后再聯機調試安裝,Xcode報下面的錯誤:
Your build settings specify a provisioning profile with the UUID “xxxxx”, however, no such provisioning profile was found.
其中的xxxxx是provisioning profile的序列號,我檢查了一下這個profile是已經在我的Mac上安裝了,但是編譯時就是會提示上面的錯誤,按照《更新證書錯誤:No matching provisioning profiles found》上的步驟操作了一遍沒有解決問題,然后看ios - Xcode 7.2 no matching provisioning profiles found - Stack Overflow里說要重啟Xcode,這樣做了一遍,果然就好了。看來就是Xcode抽風。
your account already has a valid iOS Distribution certificate問題
以上錯誤是在用Xcode做Archive后提交AppStore遇到的錯誤,并有以下具體的說明:
you have a valid iOS Distribution certificate in the Member Center, but it is not installed locally. If your signing identity is installed on another Mac, you can export a developer profile on that Mac and import it on this Mac. You can also reset your current certificates.
但是做企業版就沒有這個問題。
搜了一下網上說有要撤銷證書再重新生成下載安裝的,還有把電腦上的證書刪掉,再從別人那里拿p12文件安裝。不排除上面的辦法對有些人有用,但是對我完全沒有效果。
其實真正的核心點在于為什么做企業版就沒有這個問題?后來我想明白了,其實是因為上次做企業版ipa包的時候,在Scheme里的Archive中將Build Configuration設置為了Enterprise,這意味著做出來的ipa包只能適用于企業版的簽名,而不能用于Appstore Distribution版。
把Build Configuration設置修改為對應Appstore Distribution版的Release,再重新試了一遍,就解決問題了。
應該還是有辦法避免這個問題的,比如用腳本進行編譯,一些參數應該是寫死的,就不會有這個問題了。
20161101更新:
昨天又遇到這個問題了,查了半天發現是我在公司開發者賬號上創建的證書被別人給刪了,對應的provision profile出現了invalid提示。更新證書和provision profile文件才解決問題
No matching provisioning profiles found問題
在Xcode中當你在更新了你得證書而再重新編譯你的程序,真機調試會出現“Your build settings specify a provisioning profile with the UUID‘XXX’, however, no such provisioning profile was found. Xcode can resolve this issue by downloading a new provisioning profile from the Member Center.”。
解決辦法:
1.關閉項目,找到項目文件XXXX.xcodeproj,在文件上點擊右鍵,選擇“顯示包內容”(Show Package Contents)。會新打開一個Finder。
2.在新打開的Finder中找到project.pbxproj,并且打開,找到你所有包含報錯的UUID‘XXX’的行,刪除。
3.保存,重新啟動項目,再編譯,就OK了。
No codesigning identities found問題
2016-12-01 15:32:20
這個是在同事的機器上發現的,不知道他做了一個怎么操作出現了一個Reset按鈕,他就點了,然后就出現類似的問題:
Code Sign error: No codesigning identities found: No codesigning identities (i.e. certificate and private key pairs) that match the provisioning profile specified in your build settings (“iOS Team Provisioning Profile: *”) were found.
因為賬號在我手里,我對證書和provision profile都沒有做操作,相信這兩項都是沒有問題的,然而教他做了各種操作,包括檢查證書私鑰,重啟Xcode等都沒有解決問題。這之中我最大的疑惑是他點的這個Reset按鈕到底做了什么事情,查了一下,根據這里,在Xcode的帳戶setting中點Reset操作,結果是這樣的: If you click the Reset button, Xcode revokes and re-creates the corresponding certificate.
但是我同事應該不是在帳戶設置里點的Reset按鈕,而是在Archive打包時點的Reset按鈕。另外一個理由是賬戶里的證書過期日期不是一年后的今天,我感覺應該是沒有創建。但是保險起見,我還是把自己電腦上的證書刪掉,然后重新下載開發者賬戶上的證書并安裝(先在鑰匙串中刪除之前的證書)。似乎并沒有解決問題。接著對相關的provision profile點擊edit按鈕,并點擊Generate按鈕重新生成(沒有刪除過),然后下載雙擊安裝(安裝之前先在iPhone配置實用工具中刪除了舊的)。。在Xcode中重新創建了一個Demo工程,用上面的證書和profile測試并無問題。
接著發給同事測試,仍然不行,待我在他的電腦上操作之后,發現他的Xcode開發者賬戶選項里有兩個相同app id的profile文件,刪除了一個舊的,重啟Xcode,再操作就沒有這樣的問題了。
我的一個使用相同證書的工程在Archive打包時出現的卻不是上述的錯誤,而是前面的"your account already has a valid iOS Distribution certificate問題",懷疑也主要是profile invalid的問題。后續再進行測試吧。
參考: