1. Overview
一個應用的誕生大致經過以下歷程:
(Idea)想法誕生 --> (Prototype)原型設計 --> (App)應用實體 --> (Users)用戶使用
你為了解決某個問題而產生想法,設計了應用的基本樣式和頁面交互等,然后把原型轉換成真正的App,最后給用戶使用,本 section 聚焦在最后一個環(huán)節(jié),結合應用發(fā)布的四個途徑,描述如何用最合適的方法將開發(fā)好的應用交付到用戶使用。
2. Distribution Methods
應用發(fā)布總共有四種途徑:Ad Hoc、App Store、In-House、Custom Apps

關于途徑的選擇,你需要考慮很多問題。應用的受眾是誰?誰會購買你的應用?應用的歸屬是誰?應用發(fā)布面向的設備是誰持有的?源碼的所有權屬于誰?編譯應用的工作誰負責?需要開發(fā)者賬號的是誰?歸根結底,就是需要明確應用的使用者是誰。

蘋果將應用的使用者歸類為個人用戶和群體用戶,面向個人的用戶可以選擇 Ad Hoc 和 App Store,其中 Ad Hoc 是受限制的私有途徑,主要限制了使用者數(shù)量和設備,而 App Store 則是四種途徑中唯一一個公開的應用發(fā)布途徑,面向所有個人用戶,因此需要經過蘋果嚴格的審核才得以發(fā)布。面向群體用戶,比方說是一個企業(yè)里的員工,可以選擇 In-House 和 Custom Apps 的方式發(fā)布應用,這兩種都是私有的途徑。在不同階段的應用發(fā)布可能需要選擇不同途徑,這就需要你明白應用的預期效果和最優(yōu)方案,選擇最合適你的應用使用場景的途徑。在這里蘋果通過一個真實的應用例子講述選擇不同途徑的情況。
2.1 Ad Hoc Distribution
在完成 App 開發(fā),準備進行發(fā)布之前,我們都希望 App 能在周圍的同事之間先進行測試,提提意見,修改完善之后再發(fā)布到 App Store 上。另外,我們應用可能使用了類似 CloudKit、APNS 等不能通過調試測試的功能,但是又希望能測試到這些功能。Apple 考慮到這些問題,通過 Ad Hoc 來實現(xiàn)發(fā)布前的用戶測試。使用 Ad Hoc 發(fā)布非常簡單,配置好 Ad Hoc 證書后打包導出ipa,就可以給別人安裝了。但是使用 Ad Hoc 是有限制的,使用 App 的設備需要在開發(fā)者賬號上注冊,一個賬號每年最多只能注冊100臺設備。關于 Ad Hoc 的要點大致如下:
用于在已注冊的設備上進行測試;
短期發(fā)布的解決方案;
發(fā)布的應用不可長期使用,過期后將無法使用;
設備限制每年都會重置一次;
隨著測試的規(guī)模擴大,Ad Hoc 發(fā)布的方法將不能滿足需求,一方面是手動添加設備UDID的過程比較耗費時間,另一方面測試設備數(shù)量的限制也會限制測試規(guī)模的擴大。這時候可以使用 TestFlight 來擴大 Beta 測試的規(guī)模。

TestFlight 有分內部測試(Internal Testing)和外部測試(External Testing),內部測試 app 不需要經過審核,只要上傳即可,但是只能邀請被添加到團隊的成員參加,而且最多只能添加25人。而公測是需要審核的,不過只需要知道對方的郵箱即可發(fā)送邀請,而且最多可以邀請10000人。TestFlight 發(fā)布的一個版本有效期最多只有90天。
2.2 Submitting to App Store
在完成 Beta 測試后,你對 App 提煉出符合更多用戶使用的特性,接下來可以準備宣傳的資料、演示視頻等,就可以準備上架 App Store,向外發(fā)布你的應用了。 App Store 上架的應用面向你選擇的商店的所有用戶,應用的審核和管理由 Apple 完成,因此你需要了解并遵循 App Store 的審核準則,確保你的應用適合大眾使用,并不斷更新應用以適配新的設備和系統(tǒng)。
2.3 In-House Distribution

針對企業(yè)內部應用,Apple 提供了 In-House Distribution 途徑,讓你可以完全控制應用發(fā)布的整個流程。企業(yè)自身擁有并維護應用的源碼,不需要上傳到 App Store,借助移動設備管理系統(tǒng)(MDM),就可以完全在企業(yè)內部完成應用開發(fā)到發(fā)布使用的整個過程。
In-House 發(fā)布方式要求應用的使用者都是企業(yè)內部人員,使用 In-House 發(fā)布的應用要求設備可以聯(lián)網,所以無法連接外網的設備可能無法使用。因為應用整個流程都是企業(yè)掌控,不能依托 TestFlight等工具,所以對于應用的測試和管理需要企業(yè)自行處理好。In-House 所使用的發(fā)布證書需要妥善保管,證書有效期只有三年,Provision Profile 有效期只有一年,所以要管理好證書生命周期,及時發(fā)布證書更新的應用版本,以免出現(xiàn)過期等情況導致應用失效。如果需要出于某些原因需要撤銷證書,那么使用該證書發(fā)布的應用會馬上失效,企業(yè)需要重新簽名和發(fā)布應用,否則會可能出現(xiàn)非常糟糕的情況。
2.4 Custom Apps
Custom Apps 也是私有的發(fā)布途徑,主要使用于企業(yè)對企業(yè)提供定制化的應用服務,負責開發(fā)的一方可以在不提供源碼的情況下直接提供可購買的 App 給請求開發(fā)的一方使用。另外還可以是企業(yè)為自己提供,應用可由企業(yè)自己開發(fā)并在自己的賬號上發(fā)布。
Custom Apps 屬于蘋果開發(fā)者計劃(Apple Developer Program)的一部分,依托 Apple Business Manager 進行管理。此前 Custom Apps 只可用于企業(yè)為企業(yè)提供定制化應用服務,現(xiàn)在也可以像 In-House 那樣企業(yè)為自己提供服務,你可以給你的合作伙伴、客戶、加盟商、內部員工、分公司等提供應用,通過 MDM 或兌現(xiàn)碼分發(fā)許可證。
Custom Apps 可在一個平臺上管理內部和外部的所有應用,發(fā)布的應用沒有使用期限,不用擔心過期的問題。In-House 發(fā)布的應用只能提供給企業(yè)內部員工使用,而 Custom Apps 則可以提供給分公司等更多人一起使用。 Custom Apps 本身設定是企業(yè)對企業(yè)提供服務,因此對于尋求第三方軟件服務支持的企業(yè)來說,他們無需訪問源碼就可以獲得已發(fā)布好的應用,也不需要對應用的二進制包進行重簽名等操作。另外,你可以使用 App Store 提供的不斷更新的基礎設施服務,比如說支付系統(tǒng)、App Thining、TestFlight 和 App Store Connect 工具等特性。
Custom Apps 要求購買應用的用戶需要有一個 Apple Businsess Manager 賬號,應用需要支持和適配好其選擇發(fā)布的國家,最好支持所有的國家。如果使用兌換碼購買應用,需要確保兌換碼只會給到特定的用戶,因為兌換碼只能在對應企業(yè)內可用。Custom Apps 需要經過審核,審核要求可以訪問應用所有的功能,審核通過發(fā)布后,不能再提交到 App Store 作為公開應用。

Apple 在此環(huán)節(jié)還描述了如何使用 Custom Apps 發(fā)布應用,以及出現(xiàn)問題后解決的幾個思路,詳情可見視頻或官方文檔。
3. Summary
綜上所述,關于選擇途徑,主要是根據(jù)應用的使用者是對外還是內部進行選擇,Ad Hoc 可供內部測試時發(fā)布使用,App Store 用于對公眾發(fā)布,In-House 和 Custom Apps 用于私有應用發(fā)布使用。Ad Hoc 途徑一般只適用于 Beta 測試,針對發(fā)布正式應用的途徑選擇,Apple 總結成一下表格:
| 使用場景 | App Store | In-House | Custom Apps |
|---|---|---|---|
| 面向公眾 | ?? | ||
| 不愿向企業(yè)提供知識產權 | ?? | ?? | |
| 企業(yè)沒有 MDM | ?? | ||
| 被雇傭作為應用開發(fā)顧問 | ?? | ?? | |
| 企業(yè)沒有使用 Apple Business Manager | ?? | ||
| App 只面向內部員工 | ?? | ?? | |
| 為自己的企業(yè)發(fā)布應用 | ?? | ?? |
Apps are like cannonballs, it is better to know where they are going before they deploy.
Apple 希望你的應用可以用最明智的方式發(fā)布應用,這就需要你考慮清楚你的客戶和用戶是誰、合理分配對應版本的應用、知道并了解蘋果應用審核的準則,從而選出最合適的發(fā)布途徑。
Section Video
WWDC 2019 Section 304: App Distribution – From Ad-hoc to Enterprise