在此之前,我曾經(jīng)用Python寫(xiě)過(guò)一個(gè)自動(dòng)打包測(cè)試版ipa并發(fā)布到的fir平臺(tái)上的腳本,確實(shí)很好用,但是由于一些原因(我下面再講)后來(lái)就一直打包失敗,然后項(xiàng)目前段時(shí)間巨忙,一直沒(méi)有修復(fù),還好,現(xiàn)在終于有一些多余的時(shí)間,我轉(zhuǎn)念一想,干嘛不直接連發(fā)布正式版也自動(dòng)化起來(lái)呢?
pycharm
你可以使用pycharm來(lái)編輯你的Python文件,下載地址
激活自己想辦法吧,畢竟都是老手.
第一步,準(zhǔn)備的一些必須的路徑和常量
project_path = ""#項(xiàng)目路徑
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"#發(fā)件人
password = ""#郵箱的秘鑰
smtp_server = "smtp.163.com"#163郵箱服務(wù)地址
to_addr = ""#收件人
noError = 0
第二步,編譯
先clean下再編譯,返回狀態(tài)值
# 1.清理
def clean_project_mkdir_build():
os.system('cd %s;xcodebuild clean'%project_path)
r = os.system('cd %s;mkdir build'%project_path)
# 2.編譯項(xiàng)目
def buid_projiect():
print("開(kāi)始編譯")
os.system('xcodebuild -list')
print '正在編譯...請(qǐng)耐心等候...'
r = os.system('cd %s;xcodebuild -configuration %s -target %s'%(project_path, buidType, targetName))
print("執(zhí)行編譯的結(jié)果是:")
print(r)
return r
第三步,打包
我之前說(shuō)原來(lái)的打包現(xiàn)在一直不行了,原因之一就是xcode更新后沒(méi)有PackageApplication了,需要去老版本拷貝,你可以檢查一下你的xcode有沒(méi)有,沒(méi)有的話是沒(méi)法執(zhí)行的,路徑在這里:/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("執(zhí)行打包的結(jié)果是:")
print(r)
return r
else:
print('沒(méi)有找到.app文件')
return 1
第四步,發(fā)布到App Store
我們平時(shí)大都是用Application Loader一步一步的上傳我們好不容易編譯出來(lái)的.ipa,其實(shí)它也是內(nèi)有乾坤,不信?請(qǐng)看蘋(píng)果官方文檔,使用它直接可以直接驗(yàn)證和上傳
# 4.上傳到App Store
def upload_appstore():
if os.path.exists('%s/%s/is.ipa'%(ipa_path, dirName)):
print('正在驗(yàn)證ipa文件,請(qǐng)稍后...')
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("驗(yàn)證的結(jié)果是:")
print(r1)
if r1 == noError:
print('正在上傳ipa文件,請(qǐng)稍后...')
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('沒(méi)有找到.ipa文件')
return 1
第五步,發(fā)郵件通知
我們之所以想使用自動(dòng)打包除了簡(jiǎn)化操作之外,更想節(jié)省寶貴的時(shí)間去干其他的事情(比如交給自動(dòng)腳本之后就去嗨,嗨完了之后直接忘記了),但也不能交給自動(dòng)打包系統(tǒng)反而影響發(fā)布的進(jìn)度,所以我們希望能發(fā)送一封郵件能通知一下,如此,自動(dòng)發(fā)布系統(tǒng)就完美了:
# 5.發(fā)送郵件
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自動(dòng)發(fā)布系統(tǒng) <%s>' % from_addr)
msg['subject'] = '新版IOS端app已經(jīng)上傳'
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 '發(fā)送成功'
except Exception, e:
print str(e)
return
最后
其實(shí)我只是剛剛會(huì)一點(diǎn)點(diǎn)的Python語(yǔ)法,以上的每一步都有我原創(chuàng)純手打的,有很大優(yōu)化的空間,期待大牛們的不吝指教,可以在評(píng)論區(qū)交流,也可以私信我,喜歡的小伙伴點(diǎn)個(gè)喜歡吧??,最后我們有始有終,貼上剩余所有的代碼:
導(dǎo)入的頭
#!/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
執(zhí)行
#執(zhí)行方法
def main():
clean_project_mkdir_build()
message = "應(yīng)用"+targetName+"上傳App Store失敗了!"
r = buid_projiect()
if r == noError:
r = build_ipa()
if r == noError:
r = upload_appstore()
if r == noError:
message = "應(yīng)用" + targetName + "上傳App Store成功了!"
sendEmail(message)
return
sendEmail(message)
# 執(zhí)行
main()