如何无线安装 ipa

目标 & 背景

项目在测试 iOS 包时,通常安装都需要借助 iTunes, 或者使用 ideviceinstaller 命令行工具进行安装

ideviceinstaller  -i xxx.ipa

但是在实际开发过程中,总是会来问,iOS 怎么测试,如何安装,一次两次还行,被问的次数多了难免会不耐烦,在很久以前在 蒲公英 上看到过可以直接在浏览器下载安装 ipa,而他们使用的则是苹果的 in-house 功能

必要条件

  • ipa 的下载链接必须是 https,否则无法完成安装,iOS 设备安装失败也不会有任何细节提示
  • ssl 支持的协议最好参考下方的配置,1~1.2 都设置上

这里的 ssl 证书,推荐使用正规 CA 签发的证书,减少不必要的麻烦,苹果在信任自签证书上故意做的非常恶心

nginx 配置

下方配置是在 nginx 默认配置下,增加了 ssl 证书和文件服务器相关的配置

user root owner;

worker_processes 1;

events {
worker_connections 1024;
}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

server {

listen 443 ssl;

server_name xxx.com; # 域名

ssl_certificate xxx/cert.crt; # 证书
ssl_certificate_key xxx/key.key; # 秘钥
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

location / {

root /xxx; # 文件路径

index index.html index.htm;

autoindex on;

}
}
}

index.html

在 nginx 上创建 index.html 文件,填入你的域名,后面的 manifest.plist 是接下来要配置的文件

<a href="itms-services://?action=download-manifest&url=https://xxx.com/manifest.plist">Install App</a>

终端用户只需要点击 Install App 就可以完成应用安装了
image

manifest.plist

这里需要填入如下内容

  • url 中对应的 ipa 下载路径
  • bundle-identifier 中对应的包名
  • bundle-version 中对应的包版本
  • title 中对应的 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://xxx.com/xxx.ipa</string>

</dict>

</array>

<key>metadata</key>

<dict>

<key>bundle-identifier</key>

<string>com.xxx.xxx</string>

<key>bundle-version</key>

<string>1.0.0</string>

<key>kind</key>

<string>software</string>

<key>title</key>

<string>应用名称</string>

</dict>

</dict>

</array>

</dict>

</plist>

dns 解析配置

这里有两个选择,如果公司内部网络有 DNS 解析服务器,直接在后台配置域名对应的内网 ip 即可,但如果没有,直接在 DNS 域名中配置一个 A 类型的解析,指向公司内网 ip 也是 ok 的

最后

如果公司有多个项目,只需要在 CI/CD 中增加一个 ipa 拷贝流程到指定的文件服务器就全妥了,基本上可以告别如何装 ipa 这种蛋疼的问题了