1. 内部分发平台的实现原理
参考:内部分发平台的实现原理—苹果安装app的另一种方式(通过itms-services协议,直接安装IOS应用程序)、plist如何做企业分发、企业证书不上app store的ip下载方式
ipa在线下载安装
ios安装app时,除了直接用xcode安装外,我们最常用的是通过第三方分发平台(如fir.im)。那么像fir.im这些平台是怎么做到
扫码
直接安装
的呢?。
(1) 二维码:当我们上传我们的app到服务器上的时候,我们会把所有的地址存储起来,并把相关的信息都存储在数据库,这样就会在展示页显示我们app的信息。其实就是一个字段相互引入各自的下载路径,通过判断设备来进行下载,来实现二维码合二为一。
(2) 通过plist下载并安装ipa:当我们上传我们ipa安装包到第三方分发平台时,需要输入各种应用信息(应用名称和图标等); 分发平台获取到上传的安装包后,会生成一个plist
文件(内部配置了ipa地址
、应用名称和图标
等信息),通过它我们可以下载对应的ipa文件。
为什么可以通过plist下载ipa(iPhoneApplication)并实现安装的呢?其实是利用了苹果自家的浏览器
safari
和itms-services 协议
来实现:通过itms-services协议,可以通过safari浏览器直接在iOS设备上安装应用程序。利用这种方式,只要在内网布置一个服务器,测试人员只需要通过测试设备的safari浏览器访问特定的url (添加了itms-services 协议的plist地址)既可以实现安装。
2. plist文件说明
plist文件是IOS开发过程中常用来捆绑信息的一种文件格式,它是数据格式是xml。
plist文件配置了ipa地址、应用图标地址 和 应用标示等信息,模版如下:
<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>ipa下载地址</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>图标下载地址(png格式)</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>图标下载地址(png格式)</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>应用标识(包名)</string>
<key>bundle-version</key>
<string>版本号</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>应用名称</string>
</dict>
</dict>
</array>
</dict>
</plist>
注意
:这个plist文件必须通过https访问才可以,因为现在苹果规定必须以https的方式进行访问(如https://www.liy.com.cn/app/ios/test.plist)。添加 itms-services 协议(itms-services://?action=download-manifest&url=)后,在safari中的完整访问地址示例如下itms-services://?action=download-manifest&url=https://www.liy.com.cn/app/ios/test.plist
3. iOS APP使用企业证书签名后如何让用户安装
3.1 通过第三方平台分发
把ipa文件上传到 蒲公英 或 fir 第三方平台,生成二维码让用户下载安装即可。
3.2 通过企业网站分发(通过plist做企业分发)
(1) 生成并配置plist文件
plist模板如下:复制下面的代码,在电脑上新建一个后缀为.plist的文件复制进去 并 修改对应信息即可。(服务器必须支持SSL)
<?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://www.liy.com.cn/app/ios/test.ipa</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>needs-shine</key>
<false/>
<key>url</key>
<string></string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>https://www.liy.com.cn/app/ios/test.png</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.taojindaren.test</string>
<key>bundle-version</key>
<string>1.00.01</string>
<key>kind</key>
<string>software</string>
<key>subtitle</key>
<string>UDID</string>
<key>title</key>
<string>XinDong.ipa</string>
</dict>
</dict>
</array>
</dict>
</plist>
(2) 将plist 文件和ipa包上传到企业服务器
如企业使用 OSS服务器:OSS(Open Storage Service)开放云存储服务,是阿里云对外的提供的海量,安全和高可靠的云存储服务。
(3) 直接分享如下链接 或 将该链接生成二维码分享出去 即可:如itms-services://?action=download-manifest&url=https://www.liy.com.cn/app/ios/test.plist
。其中itms-services://?action=download-manifest&url=
为固定前缀,后接plist下载地址
,访问该链接后,即能实现通过plist会安ipa。
(4) 若需要前端页面,只需配置如下下载链接即可:
<a href="itms-services://?action=download-manifest&url=https://www.liy.com.cn/app/ios/test.plist"></a>
4. 问题汇总
参考:ios13升级到ios14企业APP出现无法安装解决方案、iOS14升级后企业级安装失败、csdn、iOS应用安装失败原因排查
备注
:在iOS14上苹果对于自身提供的解决方案中ats的要求更加严格,之前我们通过 itms-services 协议安装应用时只要plist文件是https即可,iOS14之后要求ipa链接使用的也必须是https才行,否则将出现无法安装的问题。
(1) 无法验证其完整性
企业网站分发(小志手机测试):iOS14安装企业证书通过发布的app时提示“无法验证其完整性”
参考1、参考2
通过第三方分发平台fir.im分发(建国手机测试),提示“无法验证其完整性”,
原因:可能证书过期
了
解决及新问题:重新打包后不出现该提示,但又提醒“无法验证通过”。
原因:申请描述文件时,类型选择的是Ad Hoc(内测版),该类型需要添加测试设备UDID。
解决:重新申请描述文件,类型选择为In House(企业版),该类型无设备限制
,都能安装。
(2) 提示“未受信任的企业级开发者”:打开设置,点击通用,设备管理,选择未受信任的应用程序进入,信任,再次点击信任即可。