Just a Computer Graphics Studio & My Life

開發iOS App的朋友們一定都會遇到一些跟寫程式沒啥關係的坑!若沒有解決這些基本的設置,開發過程就會相當不順暢,像是我們想要把專案編譯到實機做測試,就需要透過供應配置文件 (Provisioning Profiles)來實現。儘管已經開發許久的老手,依然會像我一樣還是對這玩意兒半知半解呀⋯⋯

那麼我就趁這時候來記錄高手的教學吧~

%e4%be%9b%e6%87%89%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6-provisioning-profiles

以下為原文轉貼⋯⋯

1.Provisioning Profile 的概念

Provisioning Profile文件包含了上述的所有內容:證書、App ID 和 設備ID。

一個Provisioning Profile對應一個Explicit App ID或Wildcard App ID(一組相同Prefix/Seed的 App IDs )。在網站上手動創建一個Provisioning Profile時,需要依次指定App ID(單選)、證書(Certificates,可多選)和設備(Devices,可多選)。用戶可在網站上刪除(Delete)已註冊的Provisioning Profiles。

Provisioning Profile 決定Xcode用哪個證書(公鑰)/私鑰組合(Key Pair/Signing Identity)來簽署應用程序(Signing Product),並將在應用程序打包時嵌入到.ipa包裡。安裝應用程序時,Provisioning Profile文件被拷貝到iOS設備中,運行該iOS App的設備通過它來認證安裝的程序。
如果要打包到真機上運行一個APP,一般要經歷以下三步:

  • 首先,需要指明它的App ID,並且驗證Bundle ID是否與其一致;
  • 其次,需要證書對應的私鑰來進行簽名,用於標識這個APP是合法、安全、完整的;
  • 然後,如果是真機調試,需要確認這台設備是否授權運行該APP。

Provisioning Profile 把這些信息全部打包在一起,方便我們在調試和發布程序打包時使用。這樣,只要在不同的情況下選擇不同的Provisioning Profile 文件就可以了。

Provisioning Profile也分為Development和Distribution兩類,有效期同Certificate一樣。

Distribution版本的ProvisioningProfile主要用於提交App Store審核,其中不指定開發測試的Devices(0,unlimited)。App ID為Wildcard App ID(*)。App Store審核通過上架後,允許所有iOS設備(Deployment Target)上安裝運行該App。

Xcode將全部供應配置文件(包括用戶手動下載安裝的和 Xcode自動創建的Team Provisioning Profile)放在目錄 ~/Library/MobileDevice/Provisioning Profiles 下。

2. Provisioning Profile 的構成

以下為典型供應配置文件*.mobileprovision的構成簡析:

  • (1)Name:該mobileprovision的文件名。
  • (2)UUID:該mobileprovision文件的真實文件名。
  • (3)TeamName:Apple ID賬號名。
  • (4)TeamIdentifier:Team Identity。
  • (5)AppIDName:explicit/wildcard App ID name( ApplicationIdentifierPrefix)。
  • (6)ApplicationIdentifierPrefix:完整App ID的前綴( TeamIdentifier.*)。
  • (7)DeveloperCertificates:包含了可以為使用該配置文件應用簽名的所有證書<data><array>。

證書是基於 Base64編碼,符合 PEM(PrivacyEnhanced Mail, RFC 1848)格式的,可使用OpenSSL來處理(opensslx509 -text -in file.pem)。

從 DeveloperCertificates提取 <data></data>之間的內容到文件cert.cer(cert.perm):

—–BEGIN CERTIFICATE—–
將<data></data>之間的內容拷貝至此
—–END CERTIFICATE—–`

Mac下右鍵 QuickLook查看cert.cer(cert.perm),在Keychain Access中右鍵Get Info查看對應證書ios_development.cer,正常情況(公私鑰KeyPair配對)應吻合;Windows下沒有足夠信息(WWDRCA.cer),無法驗證該證書。
如果你用了一個不在這個列表中的證書進行簽名,無論這個證書是否有效,這個應用都將 CodeSign Fail。

  • (8)Entitlements 鍵<key>對應的 <dict>:
    keychain-access-groups:$(AppIdentifierPrefix),參見Code Signing Entitlements (*.entitlements)。

每個應用程序都有一個可以用於安全保存一些如密碼、認證等信息的 keychain,一般而言自己的程序只能訪問自己的 keychain。通過對應用簽名時的一些設置,還可以利用 keychain的方式實現同一開發者簽證(就是相同bundle seed)下的不同應用之間共享信息的操作。比如你有一個開發者帳戶,並開發了兩個不同的應用A和B,然後通過對A和B的keychain access group這個東西指定共用的訪問分組,就可以實現共享此keychain中的內容。

application-identifier:帶前綴的全名,例如$(AppIdentifierPrefix)com.apple.garageband。
com.apple.security.application-groups:App Group ID( group. com.apple),參見 Code Signing Entitlements (*.entitlements)。
com.apple.developer.team-identifier:同Team Identifier。

  • (9)ProvisionedDevices:該mobileprovision授權的開發設備的 UDID <array>。
    Provisioning Profile 被配置到【Xcode Target |Build Settings|Code Signing|Provisioning Profile】下,然後在Code Signing Identity下拉可選擇Identities from Profile “…"(即Provisioning Profile中包含的Certificates)。

來看一下Ad Hoc的Provision Profiles吧~

Provisioning Profile.png

provisioning-profile2

以上這文件的定義大致上了解一些,多開發幾個App就不再感到陌生,Apple的規定還真是個高門檻呢~

參考:iOS Provisioning Profile(Certificate)與Code Signing詳解Provisioning Profiles

廣告

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: