在完成iOS APP持续集成打包的需求后,一直想实现APP扫码安装,方便开发和测试调试APP。但因为没有研发人员的配合,只能拖到新来的研发同事进场,我们一起克服各种问题实现了这个功能。
不想使用第三方的分发测试平台,总是有些担心安全的问题,但不可否认,使用第三方就是最简便快捷的。不过个人还是喜欢将一切尽可能控制在自己手里了。
整个过程分为几个关键点:
参考:python之qrcode模块生成二维码
直接给脚本:
import qrcode
import argparse
parser = argparse.ArgumentParser(description='manual to this script')
parser.add_argument('--urlPath', type=str, default = None)
parser.add_argument('--imagePath', type=str, default = None)
args = parser.parse_args()
urlData = args.urlPath
img_path = args.imagePath
# 实例化QRCode生成qr对象
qr = qrcode.QRCode(
version=1, error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4
)
# 传入数据
qr.add_data(urlData)
qr.make(fit=True)
# 生成二维码
img = qr.make_image()
# 保存二维码
img.save(img_path)
itms-services://?action=download-manifest&url=
这个就是上面脚本的第一个输入参数urlPath的值;
如下模板,修改5个参数即可。
DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>itemskey>
<array>
<dict>
<key>assetskey>
<array>
<dict>
<key>kindkey>
<string>software-packagestring>
<key>urlkey>
<string>ipa安装包的URLstring>
dict>
<dict>
<key>kindkey>
<string>full-size-imagestring>
<key>needs-shinekey>
<true/>
<key>urlkey>
<string>安装包icon URLstring>
dict>
array>
<key>metadatakey>
<dict>
<key>bundle-identifierkey>
<string>APP标识,根据打包参数修改string>
<key>bundle-versionkey>
<string>APP版本,根据打包参数修改string>
<key>kindkey>
<string>softwarestring>
<key>titlekey>
<string>APP名称,根据打包参数修改string>
dict>
dict>
array>
dict>
plist>
上述plist必须放到一个https服务器上,否则无法下载安装;
尝试了github,gitee,发现gitee可用,plist就放到gitee上了,以后自建https服务器,放在内网环境中。
我们实现中是将ipa包放在本地http服务器上了,只将plist配置文件和APP icon文件放到gitee服务器上。
就是第二步下载二维码中的URL地址,这里一定要填写plist的raw URL,就是打开该URL,能够直接看到文件内容的。
这个坑,失败了很多次才趟过去。
使用build discription插件吧,这个跟当前的jenkins兼容。
后来尝试另一个插件,直接把jenkins 搞惨了。参见之前的文章。
<img src='二维码图片的URL' height='120' width='120'/>
参数根据实际修改吧
二维码图片的URL地址跟第一个脚本的第二个参数有个对应关系,这里是URL,第一个脚本中是文件的路径,两者存在映射关系。
有了上面的配置,job中还是不能显示URL,因为jenkins安全配置问题。
修改jenkins的配置后,才能显示:
系统管理–》全局安全配置–》标记格式器,将纯文本改为Safe HTML,保存设置。
前前后后跟开发联调了接近一周,失败了上百次,才搞清楚全部细节。记录一下吧。