在企業內部分發 iOS 應用程序

(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 的開發中使用。

 

如何獲得發佈證書:在 iOS Dev Center 中,導航至 Certificates 小節。這裏需要登錄到企業開發中心!另外還需要一個至少是 admin 的角色成員 (點擊查閱iOS 開發中心更多關於角色介紹)。然後點擊 Production,會看到如下內容 (敏感部分已經塗黑)

 

在上圖中,列出了創建好的所有證書。如果已經創建了一個發佈證書,可以重用。不過,重要的是創建證書時所用的證書籤名請求文件。如果這個文件沒有,那麼在 Keychain 中的證書將不會有對應的私鑰,也就不能用這個證書對代碼做簽名。如果你已經記不得是否創建過證書,可以先下載相關的證書,然後雙擊打開它,在 Keychain Access 應用程序中可以看到相關信息。如果在證書的左側有一個小的箭頭,那麼說明在你們的 Mac 電腦中已經存儲了此證書對應的私鑰,也就可以用該證書對代碼進行簽名。通過單擊箭頭展開證書,看起來如下圖所示:

如果沒有箭頭,說明還沒有私鑰。要麼就是私鑰存儲在另外一臺 Mac 電腦,那麼可以將其傳到當前 Mac 電腦中。要麼就是你沒有私鑰,這種情況下,你是不能用這個證書來簽名分發應用程序的。解決辦法就是:在蘋果開發網站中試試別的證書,或者創建一個新的證書:通過在 Mac 電腦中創建一個新的證書籤名請求文件。

 

如果還沒有構建的話,通過點擊右上角的 ? 按鈕來創建發佈證書,會看到如下界面 (希望截圖與你看到的稍微有點不同):

選中圓形按鈕 In-House and Ad Hoc。不知道爲何,當我爲本文截圖時,我無法點擊這個按鈕。可能是我已經創建了一個發佈證書,所以這個按鈕不可選。不管怎樣,你應該可以選這個按鈕的。

 

在接下來的界面中,會看到這樣:

這個界面告訴你如何創建一個 CSR 文件,該文件用於證書的創建。如果你不知道是否已經創建好了這樣的一個文件,那麼建議在 Spotlight 中輸入 certSigningRequest,對電腦中的內容進行搜索。如果有這樣一個文件,可以將其用來創建證書,要是沒有的話,就手動創建一個。

 

創建好 CSR 文件之後,點擊 Continue 來到下一個界面:

選擇 CSR 文件,然後點擊 Generate。

 

現在,證書已經創建好了:

 

將其下載到本地,然後雙擊安裝到 Keychain中。

 

創建配置文件 (provisioning profile)

要創建用於發佈的配置文件,定位到 Provisioning Profiles 的 Distribution 小節。然後點擊右上角的 ? 按鈕。現在看到如下圖所示界面:

 

選中 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://johannesluderschmidt.de/app/appName.plist, NSUnderlyingError=0x165c7f30 “The certificate for this server is invalid. You might be connecting to a server that is pretending to be “johannesluderschmidt.de” which could put your confidential information at risk.”

看吧,Safari 給的提示信息很少,但是在 console 中提供的信息就非常有用。

就是這樣啦。非常容易,不是嗎?我大約用了一天時間,並查閱了 stackoverflow 中的許多文章就搞定在企業內部分發 iOS 應用程序的技術原理了。

希望你也能很快掌握!

CocoaChina是全球最大的蘋果開發中文社區,官方微信每日定時推送各種精彩的研發教程資源和工具,介紹app推廣營銷經驗,最新企業招聘和外包信息,以及Cocos2d引擎、Cocos Studio開發工具包的最新動態及培訓信息。關注微信可以第一時間瞭解最新產品和服務動態,微信在手,天下我有!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章