阅读 2245

iOS 持续集成方案,傻瓜式一键全自动化打包、上传!—— Python

iOS 持续集成方案(完整代码)

前言:目前市面上iOS开发持续集成的方案很多,在主流的分发平台fir、蒲公英都有相应的方案介绍(Fastlane,Jenkins,实用又强大);但就实际需求来说还是不够友好;在前面使用Python为公司开发两个自动化脚本之余,产生使用Python开发一个完全傻瓜式的自动化脚本,并满足自身需求,在公司另一台Mac mini上进行自动打包上传,测试人员可HTTP调起打包上传、自动通知产品、测试相关人员。

本人Python新手,该脚本小工具、小工具、小工具目前自学自用,许多不足之处,大神见谅指教。如果您有更好的建议,可以一起学习交流。🤓

  • 语言:Python
  • 环境:Python 3.6 (3.6开发、暂不兼容 2+)

需求

  • 可运行脚本 或 集成 App 使用,傻瓜式运行,随身携带,即插即用
  • 无需配置运行环境(构建Mac App)
  • 满足跨平台(PC、手机)调起打包上传(http服务)
  • 可唤起多个项目打包
  • 自动执行 git / svn 命令更新代码
  • 自动上传指定分发平台,包括App Store
  • 上传完毕通知测试等相关人员(邮件、QQ、微信)
  • 定时打包任务(后期添加)

设计

使用

  • 1、配置好Andromeda.plist文件
  • 2、双击Andromeda.app执行(构建的App与测试结果有出入,暂不支持)
  • 2、执行 Python脚本
python3 Andromeda.py  (暂不考虑兼容 Python 2)
复制代码
  • 3、如果设置开启HTTP服务,浏览器调起
/*
// 通过浏览器内网访问
/*
target(可选) 项目Target
type(可选) 参数 构建 的IPA类型 0:appstore / 1:adhoc / 2:enterprise / 3:development
pod (可选) 执行pod 指令  install  update   update MJRefresh ....
*/
http://192.168.0.190:8989/ipa
or
http://192.168.0.190:8989/ipa?target='TargetA'&type=0&pod=update MJRefresh

复制代码

原理

1、构建 archive & ipa -> xcodebuild 命令

文档(难找,自行问度娘、谷哥《xcodebuild》)

    def __clean(self):
        clean = '-workspace %s.xcworkspace' % (self.target) if self.is_workspace else '-project %s.xcodeproj'%(self.target)
        s = 'cd %s;' \
            'xcodebuild clean %s ' \
            '-scheme %s ' \
            '-configuration %s' \
            % (self.path, clean, self.target, self.build_type)
        ok = os.system(s)
        if ok > 0:
            raise Exception("Clean Error !")
        else:
            pass

    def __build(self):
        build = "-workspace %s.xcworkspace" % self.target if self.is_workspace else "-project %s.xcodeproj" % self.target
        s = "cd %s;" \
            "xcodebuild archive %s " \
            "-scheme %s " \
            "-archivePath %s/%s " \
            % (self.path, build, self.target, self.archive_path, self.archive_name)
        ok = os.system(s)
        if ok > 0:
            raise Exception("Archive Error !")
        else:
            pass
            
    def __ipa(self):
        s = "cd %s;" \
            "xcodebuild -exportArchive -archivePath %s/%s.xcarchive" \
            " -exportPath %s" \
            " -exportOptionsPlist '%s'" \
            % (self.path, self.archive_path, self.archive_name, self.ipa_path, self.export_plist)
        print('----------> self.archive_path', self.archive_path)
        print('----------> self.archive_name', self.archive_name)
        print('----------> self.ipa_path', self.ipa_path)
        print('----------> self.export_plist', self.export_plist)
        ok = os.system(s)
        if ok > 0:
            raise Exception("Export Error !")
        else:
            pass

复制代码

2、上传App Store Connect

文档

def upload_to_appstore(path, name, pwd, altool_path):
    print('----- 验证App----->')
    s = '%s ' \
        '--validate-app -f %s ' \
        '-u %s ' \
        '-p %s ' \
        '-t ios --output-format xml' % (altool_path, path, name, pwd)
    v = os.system(s)
    print('----------> ', v)
    if v == 0:
        print('----- 上传App----->')
        ss = '%s ' \
             '--upload-app -f %s  ' \
             '-u %s ' \
             '-p %s ' \
             '-t ios --output-format xml' % (altool_path, path, name, pwd)

        u = os.system(ss)
        if u == 0:
            print('----- 上传App 成功----->')
            pass
        else:
            raise Exception("上传 App Store 失败 !")
    else:
        raise Exception("验证 App 失败 !")

复制代码

3、上传蒲公英

文档

4、上传fir.im

文档

5、邮件通知

  • SMTP -- smtplib、email 模块

6、HTTP服务

  • Flask
pip install flask
pip install flask_restful
or
pip3 install flask
pip3 install flask_restful
复制代码

不过该脚本还没有完全开发完毕,但是完成初版的开发和测试,可投入实际运用

如果你感兴趣,可移驾GitHub - iOS 持续集成方案傻瓜式一键全自动化打包、上传!

关注下面的标签,发现更多相似文章
评论