jenkins扫码安装iOS ipa包实现关键技术点

问题背景

在完成iOS APP持续集成打包的需求后,一直想实现APP扫码安装,方便开发和测试调试APP。但因为没有研发人员的配合,只能拖到新来的研发同事进场,我们一起克服各种问题实现了这个功能。

不想使用第三方的分发测试平台,总是有些担心安全的问题,但不可否认,使用第三方就是最简便快捷的。不过个人还是喜欢将一切尽可能控制在自己手里了。

总体说明

整个过程分为几个关键点:

  1. 二维码生成
  2. 下载二维码格式
  3. plist文件
  4. https服务器
  5. plist的URL
  6. 二维码显示插件
  7. 阻碍二维码显示的jenkins安全配置

二维码生成

参考: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的值;

plist模板

如下模板,修改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>

https服务器

上述plist必须放到一个https服务器上,否则无法下载安装;
尝试了github,gitee,发现gitee可用,plist就放到gitee上了,以后自建https服务器,放在内网环境中。

我们实现中是将ipa包放在本地http服务器上了,只将plist配置文件和APP icon文件放到gitee服务器上。

plist的URL

就是第二步下载二维码中的URL地址,这里一定要填写plist的raw URL,就是打开该URL,能够直接看到文件内容的。

这个坑,失败了很多次才趟过去。

二维码显示插件

使用build discription插件吧,这个跟当前的jenkins兼容。

后来尝试另一个插件,直接把jenkins 搞惨了。参见之前的文章。

<img src='二维码图片的URL' height='120' width='120'/>

参数根据实际修改吧
二维码图片的URL地址跟第一个脚本的第二个参数有个对应关系,这里是URL,第一个脚本中是文件的路径,两者存在映射关系。

阻碍二维码显示的jenkins安全配置

有了上面的配置,job中还是不能显示URL,因为jenkins安全配置问题。

修改jenkins的配置后,才能显示:
系统管理–》全局安全配置–》标记格式器,将纯文本改为Safe HTML,保存设置。

总结

前前后后跟开发联调了接近一周,失败了上百次,才搞清楚全部细节。记录一下吧。

你可能感兴趣的:(持续集成,iOS,jenkins,iOS,app,APP分发平台)