前端實現iPhone繞過AppStore從瀏覽器安裝App

dragonir發表於2021-10-27

背景

都知道 iPhone 蘋果手機應用只能通過 AppStore 進行安裝,測試包只能通過官方提供的 TestFlight 等工具安裝,而且通常有較長的稽核流程,無法及時更新安裝包,非常不方便。本文主要介紹前端實現對簽名成功的 App直接通過瀏覽器下載安裝,開發者可以及時提供測試 App

主要流程

  • 前提條件,蘋果 App 必須簽名成功,這一步由 iOS 應用開發者完成。
  • 上傳到伺服器,獲得資訊和下載地址,得到兩個檔案,一個是 plist 檔案和 ipa 檔案,及 app 圖示。
  • 通過訪問 plist 檔案來達到下載 ipa 檔案和圖片的目的,使用了蘋果 safari 瀏覽器自帶協議,用a標籤或者 window.open 方式開啟 plist 地址。
  • 信任裝置並安裝。
itms-services:///?action=download-manifest&url=一個https地址

下面是幾個過程的具體實現

具體實現

上傳資源到伺服器

公司檔案可部署到公司伺服器,自己測試檔案可以使用 github 等免費提供檔案地址的服務。

  • ipa:需要安裝的蘋果 App 打包檔案,由 iOS 客戶端提供;
  • logo:圖片格式的 App 圖示;
  • plistApp 下載配置檔案。

<br/>

由客戶端生成 plist 檔案

? app.plist:由客戶端配置或更改下面 ipa 下載地址、App 圖示地址及 App 描述資訊。

<?xml version="1.0" encoding="UTF-8"?>
<! DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>items</key>
  <array>
    <dict>
      <key>assets</key>
      <array>
        <dict>
          <key>kind</key>
          <string>software-package</string>
          <key>url</key>
          <string>https://ipa 下載地址</string>
        </dict>
        <dict>
          <key>kind</key>
          <string>display-image</string>
          <key>needs-shine</key>
          <true/>
          <key>url</key>
          <string>https://app 圖示地址</string>
        </dict>
      </array>
      <key>metadata</key>
      <dict>
        <key>bundle-identifier</key>
        <string>com.xxxx.xxxx.xxxx</string>
        <key>bundle-version</key>
        <string>0.1.0</string>
        <key>kind</key>
        <string>software</string>
        <key>title</key>
        <string>APP名稱</string>
        <key>subtitle</key>
        <string>App描述</string>
      </dict>
    </dict>
  </array>
</dict>
</plist>

<br/>

下載頁面

? install.html:提供給使用者的下載 html 頁面,具體 樣式功能可根據自己的需求調整。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
  <button id="button">下載</button>
  <script>
    document.getElementById('button').addEventListener('click', function() {
      window.open('itms-services:///?action=download-manifest&url=https://pan.xchjw.cn/download/app/CorpPrivateInstall.plist', '_self')
    })
  </script>
</body>
</html>

<br/>

實現效果

將下載地址提供給需要的人,點選下載按鈕即可實現 App 安裝。

市場上很多的分發平臺,如蒲公英就是這麼做的。

注意:

  • 只可在蘋果 safari瀏覽器 中實現下載,其他瀏覽器中開啟可做一些引導提示。
  • 需要注意的是從 ios7.1 開始,http 推送 plist 已經不能用了,只能使用 https 推送,因此訪問這個檔案的地址必須是 https 開頭的。你可以配置自己的伺服器支援 https 服務,也可以藉助第三方工具。

其他第三方app託管下載服務

我們不必這麼麻煩自己部署這麼多檔案,完全可以藉助第三方應用內測分發平臺,比較出名的有下面幾個:

  • fir.im:免費應用內測託管平臺,iOS 應用 Beta測試 分發,Android 應用內測分發
  • 蒲公英:免費的應用託管平臺,App 應用眾測分發。
  • Pre.im:APP內測託管平臺首選 - Beta測試,免費的應用內測託管平臺。
  • TestFlight Beta Testing:蘋果官方測試平臺工具。
文章地址:https://segmentfault.com/a/11... 作者:dragonir

相關文章