iOS系统在线下载安装ipa文件,以及跳转描述文件信任证书的实现
周写了一个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>
参考文档:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)