1. 程式人生 > >Valid signing identity not found解決辦法(原有IDP私鑰丟失)及Certificate、App ID、Devices、Provisioning Profiles之間區別

Valid signing identity not found解決辦法(原有IDP私鑰丟失)及Certificate、App ID、Devices、Provisioning Profiles之間區別

前言:

剛剛把mini換成了macbookair,之前一直在mini上進行開發,到換air之前,第一個專案剛剛上線,第一次申請測試,釋出證書等等都是在mini上完成的,由於粗心未能料到,換成air後,就把mini的全部清空,然後二手賣了,之前的開發證書也被我刪除了,其實應該備份和匯出的。。。。

導致現在在新air上,登陸網站:


想直接下載之前建立好的證書,可是下載雙擊後,在鑰匙串裡發現:


總是感覺少點東西,終於發現,我們download的這個證書沒有之前開發電腦上的小鑰匙了,就是所謂的私人祕鑰。

然後在網站的provision標籤裡下載專案的provisioning檔案,看看效果如何:


下載後雙擊,開啟Xcode----organizer,看一看provising files裡的status,壞了:


系統識別不了了,也就是說,我們缺少那個之前開發電腦的個人祕鑰,就是按照當時首次真機除錯網上流程,生成CertificateSigningRequest.certSigningRequest上傳,下載的那個私人證書祕鑰!!

你是不是也遇到了我這種情況,而現如今,之前開發時的電腦還找不到了,也就是說,無法匯出來了。

1,Valid signing identity not found解決辦法

解決辦法:

一:沿用原來的證書

找到之前開發電腦的證書,匯出-匯入,這是最簡單簡便省事的方法!

1,在原來電腦上點開鑰匙串訪問 工具,找到我們iphone developer 開發證書,然後右鍵匯出


注意那條小鑰匙,必須帶這個才能匯出p12。

右擊證書,匯出,(p12方式),輸入密碼,這個密碼任意,記住就好。

然後將這個檔案拷到新電腦,雙擊匯入,輸入剛剛的密碼即可。

如果Organizer裡面沒有顯示,則再次雙擊mobileprovision證書,就可以看到綠色的“Valid profile”。大功告成!

通過P12和證書檔案,使用另一Account真機除錯

如果你想使用別人的account來真機除錯,確保他會發給你以下檔案:證書檔案、授權檔案和p12檔案


雙擊development

distribution的cer以及他們的p12檔案(有祕鑰的話需要輸入祕鑰),自己的鑰匙串會有如下:


再雙擊dev和distProfile檔案(mobileprovision)然後在自己專案的TARGETS和PROJECT中更改Provisioning Profile和Code Signing,更改profile為對方account的Developer和Distribution,如下:


最後,執行如果失敗,如下提示:


檢視工程的PROJECT下的Code Signing是否更換成了目標account證書,如果沒問題,確保目標account添加了你真機測試的Devices!

二、revoke掉,重新生成(建議只有在原來的找不到的情況下)

刪掉鑰匙串裡所有的相關證書,主要是下面這個:
然後到Provisioning Portal,
刪掉以前的東西,重新來一次,revoke。
revoke後,發現又回到了最初時的狀態,如下圖:
很熟悉的樣子,又回到了我們第一次上傳私鑰的步驟,我們在重新制作證書前,先看一下此時distribution標籤下的釋出證書還有沒有,如下圖所示,釋出證書麼有收到牽連,還存在,表明還可以使用:
繼續看一下devices欄下的裝置是否存在: 繼續看一下provisioning files 是否還存在,貌似status變成了invalid的,不過後面有modify選項,貌似可以啟用,回頭等更新版本時,再來嘗試:
繼續切換distribution標籤的provision files,status還是活躍的,到目前為止,彷彿明白,真機除錯,需要具備私鑰+(公鑰);而釋出時,擁有符合的公鑰就可以了?
繼續下一步,我們看看APP ID 還是否存在,如下圖所示:跟之前的一樣
綜上所述,revoke後,只有對除錯的provision files有些影響,其餘的都可以照常使用,哪麼,我們就可以放心的重新制作證書啦。 我們用鑰匙串工具,生成本地的私人祕鑰(CertificateSigningRequest.certSigningRequest),通過點選網頁上的request Certificate 上傳後,apple驗證我們的開發者身份,並簽名生成(私有+公有)開發證書,按照當時建立的教程再重複一遍。 雙擊新制作的ios_development.cer之後再開啟xocde-organizer,就會發現,provisioning files可以使用了(記得在網站上modify後再下載下來)

2,在MAC下建立多使用者進行ios開發時證書和Provisionfile的問題


情景:在一臺MAC機上,建立了一個新的使用者,然後切換到新使用者下,進行ios開發,此時發現真機連線後,在Organizer提示Valid signing identity not found~~~我嘗試把主使用者下的私鑰和證書都拷貝到新使用者下,還是不行。可是我在切換回主使用者下,一切又沒問題了,由此推斷:【同一臺電腦,建立不同的使用者,鑰匙串不能共享?】

所以我們目前只有公鑰,缺少一個私鑰,mac os 下,不同的使用者,相當於不同的mac了,我們只能各自生成一個私鑰。接下來的步驟,你應該都是熟悉的,開啟developer.apple.com網站


1,新增Add iOS Certificate

(如果IOS APP Development不能選擇,那麼說明你需要revoke掉一個development證書了) 2,在當前使用者下生成私鑰

鑰匙串訪問-證書助理-從證書頒發機構請求證書-郵件-名稱-儲存到磁碟=生成-CertificateSigningRequest.certSigningRequest,然後網站提交,生成一個新的development證書。

3,download新的證書,雙擊新增到鑰匙串裡,此時你的新使用者下已經有了新的公鑰和私鑰,那麼我們還缺一個provisionfile,開啟要使用的provision file-edit,


把我們新建立的development證書新增進來,儲存,接下來,就可以再次進行真機除錯了,注意先要把手機上原有的provisionfile刪除掉,重新新增。至此,開啟Organizer,會發現status = Valid profile了。

3,AppleWWDRCA.cer、Development Certificates、App ID、Devices和Provisioning Profiles之間的區別和聯絡

AppleWWDRCA.cer先來看官方的解釋:

在網站的Certificates項中選擇-Add iOS Certificate,底部會有這樣的描述:


E文不好的可以google翻譯一下,大體的意思是如果我們想建立自己的證書(certificate),必須首先要有Apple的中間簽名證書(AppleWWDRCA.cer),也就是說首先要下載Apple的中間簽名證書,下載後雙擊就可以新增到鑰匙串裡了(或許還會自動新增到Xcode),如下圖所示:


有了它,我們就可以建立自己的開發者證書,進而進行真機除錯或程式釋出了,這個東西只需要下載一次就可以了,即便我們有多個IDP,有不同的開發者賬號,只需要一個足矣,如果不小心刪掉了或是換了電腦,再點選下面的連線下載便可以了。

CertificateSigningRequest.certSigningRequest官方的解釋:

 With the creation of your CSR, Keychain Access simultaneously generated a public and private key pair. Your private key is stored on your Mac in the login Keychain by default and can be viewed in the Keychain Access application under the "Keys" category. Your requested certificate will be the public half of your key pair.


Download your certificate to your Mac, then double click the .cer file to install in Keychain Access. Make sure to save a backup copy of your private and public keys somewhere secure. 

Development Certificates分為 Development和Production(Distribution)前者是開發證書,關係到真機除錯,後者是釋出證書,關係到釋出到AppStore。

建立Development證書時,需要在電腦通過鑰匙串生成一個私人祕鑰,這就是:CertificateSigningRequest.certSigningRequest 簡稱CSR,相當於跟Apple說:"我這裡有臺MAC mMac"!也就是說pending好的development證書相當於某臺MAC機上某一個開發者的標識,所以說,團隊開發時,不同的開發者應該都要有獨自的development證書。

App ID 相當於你建立的某一個工程(專案)的唯一標識,體現在專案中就是建立時填寫的Bundle Identifier,在網站新增app id的作用相當於跟Apple說:“我這裡有個APP mApp”!

Devices 相當於你的真實測試裝置:iphone、iPad、mini等,每一臺裝置都有identifier(UDID),只有新增到網站上,才會是被apple承認的合法的測試裝置,所有的測試裝置都要新增進來,相當於跟Apple說:“我這裡有臺Device mDevice”!

Provisioning Profiles 分為Development和Distribution 前者是開發,關係到聯機測試,後者是釋出,關係到上傳APP到Store。建立時首先要選擇類別、其次 App ID(程式的 bundle identifier,我們建立的App ID )、再次選擇certificates,也就是說允許哪些個開發者(可多選),最後選擇devices,也就是說允許安裝在哪些裝置(可多選)。所以,無論是Development和Distribution,provisioning file只跟app id繫結,也就是每個App都應該有獨自的pro profile。但是一個APP可以允許不同的開發者,在不同的多個裝置上除錯!所以,Provisioning Profile相當於跟Apple說:"我想 在我的mMac上面,連線到 mDevice ,跑myApp這個app"!

所以綜述,Provisioning profile是把 development、App id、device連線起來的橋樑,表面上來看,它跟Appid 和device有關聯,你edit某一個profile時,可以隨意設定AppID(配置到哪一個APP)、Certificates(允許哪些開發者)、device(允許哪些裝置)。

Provisioning profile是否跟mac(development certificate)有關?

也就是說如果我把mMac吊銷了,自己又在新的電腦上提交CSR建立了一個新的 mMac2(development certificate),此時之前的provisioning profile還可以繼續用嗎?

答案是肯定的!不然在建立provisioning profile時,不會讓你選擇多個MAC(certificates),之所以允許選擇多個certificates,本意就是允許團隊中不同的開發者,在不同的電腦上使用同一個provisioning profile!

你只需要編輯這個provisioning profile把自己新建立的mMac2(certificates)新增進來就可以了,然後在真機裡刪除原有的profile、download新的profile新增到真機,就沒問題了。

附下傳送門,我曾經無知時的提問,現在恍然大悟: