(via:
破船之家,原文:Provision iOS IPA App for In-House Enterprise Distribution)
在企業內部分發 iOS 應用程序很是複雜。通過努力,我成功實現了在企業內部的應用程序分發。我決定用此文來記錄個人最佳實踐方法,以供未來參考。
若是你但願經過 Safari 能在任意的 iOS 設備上安裝應用程序 (不須要發佈到 App Store,也不須要經過 iTunes,以及 MDM – 經過 MDM 方法會用到本文建立的 IPA 和 manifest,那麼這篇文章能夠幫助你。
在開始發佈企業應用以前,須要具有如下條件:
1. 必須是
iOS Developer Enterprise Program 中的團隊成員 (至少是一個 admin)。每一年須要向蘋果支付費用 299$。普通的 iOS Developer Program 沒法進行企業應用發佈。膩味蘋果但願額外確保客戶可以對你和你的公司信任,因此你須要申請企業計劃。公司的 CEO 須要跟蘋果籤一個合同。
2. 域名須要一個有效的 SSL 證書,該域名用來放置應用程序。沒有有效的 SSL 證書,iOS 設備將沒法從站點安裝應用程序。這樣的 SSL 證書也很是昂貴。
下面介紹一下我開發中的相關環境配置。我使用 Xcode 5.1,和 iOS 7.1。我仍是一個 iOS Developer Program team 的 admin 成員。互聯網上我發現許多過期的相關設置。若是在之後,你發現了錯誤,或者有更好的解決方案,請回復告訴我!
要想按照本文完成應用的企業分發,必須按照如下內容做爲出發點: 1. 在 Xcode 中有一個用於企業級分發的工程。 2. 在 iOS Developer Enterprise Program team 中爲此工程建立一個 App ID。稍後將在 配置文件中使用到這個 ID。若是尚未準備好這些,先來這裏
建立一個恰當的 App ID。此處再也不詳細介紹如何建立 App ID。
在本文中,咱們將建立下面這些內容:
1. 建立發佈證書 (distribution certificate)
2. 建立配置文件 (provisioning profile)
3. 建立 IPA 和 manifest
建立發佈證書 (distribution certificate)
針對企業級發佈,須要一個發佈證書 (發佈證書與開發證書不一樣)對代碼進行簽名。這個證書僅對建立發佈的應用程序有用。不能在 Xcode 的開發中使用。
在上圖中,列出了建立好的全部證書。若是已經建立了一個發佈證書,能夠重用。不過,重要的是建立證書時所用的證書籤名請求文件。若是這個文件沒有,那麼在 Keychain 中的證書將不會有對應的私鑰,也就不能用這個證書對代碼作簽名。若是你已經記不得是否建立過證書,能夠先下載相關的證書,而後雙擊打開它,在 Keychain Access 應用程序中能夠看到相關信息。若是在證書的左側有一個小的箭頭,那麼說明在大家的 Mac 電腦中已經存儲了此證書對應的私鑰,也就能夠用該證書對代碼進行簽名。經過單擊箭頭展開證書,看起來以下圖所示:
若是沒有箭頭,說明尚未私鑰。要麼就是私鑰存儲在另一臺 Mac 電腦,那麼能夠將其傳到當前 Mac 電腦中。要麼就是你沒有私鑰,這種狀況下,你是不能用這個證書來簽名分發應用程序的。解決辦法就是:在蘋果開發網站中試試別的證書,或者建立一個新的證書:經過在 Mac 電腦中建立一個新的證書籤名請求文件。
若是尚未構建的話,經過點擊右上角的 ? 按鈕來建立發佈證書,會看到以下界面 (但願截圖與你看到的稍微有點不一樣):
選中圓形按鈕 In-House and Ad Hoc。不知道爲什麼,當我爲本文截圖時,我沒法點擊這個按鈕。多是我已經建立了一個發佈證書,因此這個按鈕不可選。無論怎樣,你應該能夠選這個按鈕的。
在接下來的界面中,會看到這樣:
這個界面告訴你如何建立一個 CSR 文件,該文件用於證書的建立。若是你不知道是否已經建立好了這樣的一個文件,那麼建議在 Spotlight 中輸入 certSigningRequest,對電腦中的內容進行搜索。若是有這樣一個文件,能夠將其用來建立證書,要是沒有的話,就手動建立一個。
建立好 CSR 文件以後,點擊 Continue 來到下一個界面:
選擇 CSR 文件,而後點擊 Generate。
如今,證書已經建立好了:
將其下載到本地,而後雙擊安裝到 Keychain中。
建立配置文件 (provisioning profile)
選中 In House,而後單擊 Continue。選擇爲程序建立的 App ID:
而後單擊 Continue。如今選擇正確的發佈證書:
單擊 Continue。最後,命名配置文件,而後單擊 Generate。
下載生成的配置文件,雙擊安裝它:
建立 IPA 和 manifest
打開 Xcode,開始建立 IPA 文件。單擊左上角中的項目名稱。在中間區域,選擇 targets 中的項目名稱。選擇頂部的 General。在 Team 中,選擇 iOS Developer Enterprise Program 團隊的名稱。(爲了本文,我選擇了私人帳號中的團隊,記得用企業團隊替代!):
在中間區域,選擇 Project 中的工程名。單擊頂部的 Build Settings。在 Code Signing 中選擇發佈證書:
回到 中間區域的 target 中。單擊項目名稱。單擊頂部的 Build Settings。在 Debug, Any iOS SDK, Release 和 Any iOS SDK 中選擇發佈證書。在 provisioning,選擇以前建立的配置文件:
記住,上面這樣的配置沒法從 Xcode 將 應用程序運行至設備中。這些配置僅用於發佈。(你能夠點擊 ? ,Xcode 將編譯整個工程,並嘗試將程序運行到設備或者模擬器中。可是以後會看到一個錯誤信息)。如今,點擊菜單中的 Product –> Archive。若是 Archive 不可用,那麼須要在 run scheme 中選擇一個真實的 iOS 設備。Run scheme 的意思是:
選擇 Archive 將爲程序建立一個 archive。位了建立一個 archive,須要按照上面介紹的,安裝一個合適的配置文件。archiving 完成以後,Xcode 將在 Organizer 中顯示 archive:
點擊 Distribute...,選擇 Save for Enterprise or Ad Hoc Deployment:
接着在下拉列表中選擇以前建立的配置文件:
接下來的界面中,勾選上 Save for Enterprise Distribution。將會呈現出一些文本框,此處容許你輸入一些信息,這些信息將被填入程序的 manifest 文件中。這個 manifest 文件是一個 plist 文件,咱們能夠用文本編輯器對其編輯。因此,這裏填錯了不要緊,稍後能夠對其修改。我填入的信息以下所示:
上面的 URL 就是 IPA 文件在互聯網中可被訪問的路徑。注意:雖而後面的處理過程都是基於 HTTPS 的,不過 IPA URL 必須是 HTTP。(註釋:譯者嘗試過 IPA 的路徑能夠是 http 或 https,固然不排除之後蘋果會嚴格限制)。
如今,你應該得到了兩個文件,IPA 文件和 一個 manifest 文件。將它們上傳到服務器上 (通常經過 FTP),路徑就是在 manifest 文件中指定的相關路徑 (本示例的路徑是 mydomain.com/apps)。如今建立一個 html 文件,文件中包括以下 html 標記:
- <a href="itms-services://?action=download-manifest&url=https://mydomain.com/apps/MyInHouseApp.plist" id="text">Install the In-House App</a>
manifest 文件的路徑必須是 HTTPS!將 html 文件跟 IPA 和 manifest 文件一塊兒放置到服務器上。
如今咱們來了解一下 HTTPS/SSL:爲了可以經過互聯網安裝 IPA 文件,自從 iOS 7.1 以來,蘋果就強制要求,manifest 文件必須經過 HTTPS 方式加載。
爲了容許 IPA 文件安裝成功,HTTPS 鏈接須要用 SSL 證書來認證,這個證書是從證書籤發中心那裏針對域名註冊獲得的。這樣的證書很是的昂貴。不過你都已經爲 iOS Enterprise Developer Program 支付了299$,那證書的價格就不算什麼了。
爲了安裝 IPA,咱們在 iOS 設備的 Safari 中輸入 html 文件的 URL 地址(以 HTTPS 開頭),而後點擊連接,並確認安裝提示。
若是安裝過程當中又錯誤提示框,大多數時候這個錯誤提示框沒法定位具體緣由。爲了找到錯誤緣由,將 iOS 設備鏈接到電腦,在 Xcode 中的 Organizer 裏面選擇對應設備中的 Console,就能夠看到並分析相關的日誌信息:
在上面示例中,我試圖使用自簽名的證書,經過 HTTPS 來安裝程序。可是點擊鏈接以後,我遇到了一個錯誤提示信息:Cannot connect to johannesluderschmidt.de。經過 Xcode 中的 Console,我看到這些信息:
- NSErrorFailingURLStringKey=https:
看吧,Safari 給的提示信息不多,可是在 console 中提供的信息就很是有用。
就是這樣啦。很是容易,不是嗎?我大約用了一天時間,並查閱了 stackoverflow 中的許多文章就搞定在企業內部分發 iOS 應用程序的技術原理了。
但願你也能很快掌握!