美文网首页IS移动开发总结
iOS 自动打包并上传到App Store(python)

iOS 自动打包并上传到App Store(python)

作者: brave_wu | 来源:发表于2018-05-30 17:09 被阅读5次

    在此之前,我曾经用Python写过一个自动打包测试版ipa并发布到的fir平台上的脚本,确实很好用,但是由于一些原因(我下面再讲)后来就一直打包失败,然后项目前段时间巨忙,一直没有修复,还好,现在终于有一些多余的时间,我转念一想,干嘛不直接连发布正式版也自动化起来呢?

    pycharm

    你可以使用pycharm来编辑你的Python文件,下载地址
    激活自己想办法吧,毕竟都是老手.

    第一步,准备的一些必须的路径和常量

    project_path = ""#项目路径
    app_path = ""#.app文件路径
    ipa_path = ""#.ipa文件路径
    buidType = ""#Release还是Debug
    targetName = ""#app的target
    altool_path = ""#altool的路径
    user_id = ""#AppleID
    pass_word = ""#AppleID的密码
    from_addr = "...@163.com"#发件人
    password = ""#邮箱的秘钥
    smtp_server = "smtp.163.com"#163邮箱服务地址
    to_addr = ""#收件人
    
    noError = 0
    

    第二步,编译

    先clean下再编译,返回状态值

    # 1.清理
    def clean_project_mkdir_build():
        os.system('cd %s;xcodebuild clean'%project_path)
        r = os.system('cd %s;mkdir build'%project_path)
    
    # 2.编译项目
    def buid_projiect():
        print("开始编译")
        os.system('xcodebuild -list')
        print '正在编译...请耐心等候...'
        r = os.system('cd %s;xcodebuild -configuration %s -target %s'%(project_path, buidType, targetName))
        print("执行编译的结果是:")
        print(r)
        return r
    

    第三步,打包

    我之前说原来的打包现在一直不行了,原因之一就是xcode更新后没有PackageApplication了,需要去老版本拷贝,你可以检查一下你的xcode有没有,没有的话是没法执行的,路径在这里:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin

    # 3.生成ipa
    def build_ipa():
        if os.path.exists('%s' % app_path):
            global dirName
            dirName = time.strftime('IS_%Y-%m-%d-%H-%M-%S', time.localtime(time.time()))
            os.system('cd %s;mkdir %s'%(ipa_path, dirName))
            r = os.system('xcrun -sdk iphoneos PackageApplication -v %s -o %s/%s/is.ipa' %(app_path, ipa_path, dirName))
            print("执行打包的结果是:")
            print(r)
            return r
        else:
            print('没有找到.app文件')
            return 1
    

    第四步,发布到App Store

    我们平时大都是用Application Loader一步一步的上传我们好不容易编译出来的.ipa,其实它也是内有乾坤,不信?请看苹果官方文档,使用它直接可以直接验证和上传

    # 4.上传到App Store
    def upload_appstore():
        if os.path.exists('%s/%s/is.ipa'%(ipa_path, dirName)):
           print('正在验证ipa文件,请稍后...')
           r1 = os.system('%s -v -f %s/%s/is.ipa -u %s -p %s -t ios [--output-format xml]'%(altool_path, ipa_path, dirName, user_id, pass_word))
           print("验证的结果是:")
           print(r1)
           if r1 == noError:
              print('正在上传ipa文件,请稍后...')
              r2 = os.system('%s --upload-app -f %s/%s/is.ipa -t ios -u %s -p %s [--output-format xml]'%(altool_path, ipa_path, dirName, user_id, pass_word))
              print(r2)
              return r2
           else:
              return 1
        else:
           print('没有找到.ipa文件')
           return 1
    

    第五步,发邮件通知

    我们之所以想使用自动打包除了简化操作之外,更想节省宝贵的时间去干其他的事情(比如交给自动脚本之后就去嗨,嗨完了之后直接忘记了),但也不能交给自动打包系统反而影响发布的进度,所以我们希望能发送一封邮件能通知一下,如此,自动发布系统就完美了:

    # 5.发送邮件
    def _format_addr(s):
        name, addr = parseaddr(s)
        return formataddr((Header(name, 'utf-8').encode(), addr))
    def sendEmail(message):
        msg = MIMEText(message,'plain','utf-8')
        msg['to'] = _format_addr('<%s>' % to_addr)
        msg['from'] = _format_addr('WBL自动发布系统 <%s>' % from_addr)
        msg['subject'] = '新版IOS端app已经上传'
        try:
            server = smtplib.SMTP()
            server.set_debuglevel(1)
            server.connect(smtp_server)
            server.login(from_addr,password)
            server.sendmail(msg['from'], msg['to'],msg.as_string())
            server.quit()
            print '发送成功'
        except Exception, e:
            print str(e)
        return
    

    最后

    其实我只是刚刚会一点点的Python语法,以上的每一步都有我原创纯手打的,有很大优化的空间,期待大牛们的不吝指教,可以在评论区交流,也可以私信我,喜欢的小伙伴点个喜欢吧🌹,最后我们有始有终,贴上剩余所有的代码:

    导入的头

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    
    import os
    import sys
    import time
    import hashlib
    from email import encoders
    from email.header import Header
    from email.mime.text import MIMEText
    from email.utils import parseaddr, formataddr
    import smtplib
    

    执行

    #执行方法
    def main():
        clean_project_mkdir_build()
        message = "应用"+targetName+"上传App Store失败了!"
        r = buid_projiect()
        if r == noError:
           r = build_ipa()
           if r == noError:
              r = upload_appstore()
              if r == noError:
                 message = "应用" + targetName + "上传App Store成功了!"
                 sendEmail(message)
                 return
        sendEmail(message)
    
    # 执行
    main()
    

    相关文章

      网友评论

      本文标题:iOS 自动打包并上传到App Store(python)

      本文链接:https://www.haomeiwen.com/subject/psztsftx.html