IS移动开发总结

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

2018-05-30  本文已影响5人  brave_wu

在此之前,我曾经用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()
上一篇下一篇

猜你喜欢

热点阅读