在此之前,我曾经用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 = "[email protected]"#发件人
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()