上周写了一个iOS系统在没有上架苹果应用商店的情况下,通过企业证书安装 ipa 软件的实例。
教程简介:
1、利用 itms-services 和 plist 文件,在线下载安装 ipa 文件。
2、直接跳转【设置-通用-描述文件】,信任证书。
首先需要特别注意:
1、ipa 的下载地址放到 plist 的文件中,链接指定 plist(格式见下文)
2、plist 的链接必须是 https (SSL加密)的,而且必须是公网,自签名及免费的 https 不可用。
3、链接格式要求一定是符合苹果规范的,itms-services://?action=download-manifest&url=https://****/***.plist
目前可以使用 https 测试用的域名:https://raw.githubusercontent.com/
下载安装ipa:
将 plist 上传到 github 上,查看 plist 内容页面上右上角点击“Raw”。
使用该地址链接格式为 https://raw.githubusercontent.com/用户名/项目名/master/xxxx.plist
拼接链接: itms-services://?action=download-manifest&url=
https://raw.githubusercontent.com/用户名/项目名/master/xxxx.plist
在 iPhone 手机中打开 Safari ,访问该链接,提示:在"iTunes"中打开链接吗?,点击打开。
提示“raw.githubusercontent.com”要安装“XXXXX”,点击安装即可在线下载安装 ipa 。
点击直接跳转信任证书:
针对企业应用安装后如何在 Safari 中引导用户跳转到 [设置 - 通用 - 描述文件] 页面,以便用户信任企业签名描述文件,在 iOS9 的时候很方便,无论是在应用内还是在 Safari 中都可以直接唤起,但是从 iOS10 起,苹果禁止了一切对 [设置] 的主动跳转。
iOS9 | iOS10 |
in-App (openURL) | ✓ |
Safari | ✓ |
另外还测试了一下,在应用内用 UIWebView 加载 HTML 进行跳转,结论与上一致。
URL Scheme
iOS 9 : prefs:root=General&path=ManagedConfigurationList iOS 10 : App-Prefs:root=General&path=ManagedConfigurationList
解决:
可以看到 iOS10 并不能从 Safari 直接跳转 [描述文件] 了,但是还有一个方式可以达到该效果,直接链接到一个企业签名的描述文件(.mobileprovision
),在 Safari 中直接访问 https://raw.githubusercontent.com/用户名/项目名/master/hello.mobileprovision
(你的企业描述文件地址)就可以实现跳转了。
.plist格式:
<?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>http://xxxxxxxxxxxxxxxxxxx/xxx.ipa</string> </dict> <dict> <key>kind</key> <string>full-size-image</string> <key>needs-shine</key> <true/> <key>url</key> <string>http://xxxxxxxxxxxxxxxxxx.png</string> </dict> <dict> <key>kind</key> <string>display-image</string> <key>needs-shine</key> <true/> <key>url</key> <string>http://xxxxxxxxxxxxxxxxxx.png</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>com.xxxx.demo</string> <key>bundle-version</key> <string>1.0.0</string> <key>kind</key> <string>software</string> <key>title</key> <string>XXXX App download</string> </dict> </dict> </array> </dict> </plist>
参考文档: