iOS 自動(dòng)打包并上傳到App Store(python)

在此之前,我曾經(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()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末器腋,一起剝皮案震驚了整個(gè)濱河市宠纯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌击胜,老刑警劉巖握联,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桦沉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡金闽,警方通過(guò)查閱死者的電腦和手機(jī)纯露,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)代芜,“玉大人埠褪,你說(shuō)我怎么就攤上這事〖繁樱” “怎么了钞速?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)嫡秕。 經(jīng)常有香客問(wèn)我渴语,道長(zhǎng),這世上最難降的妖魔是什么淘菩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任遵班,我火速辦了婚禮,結(jié)果婚禮上潮改,老公的妹妹穿的比我還像新娘狭郑。我一直安慰自己,他們只是感情好汇在,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布翰萨。 她就那樣靜靜地躺著,像睡著了一般糕殉。 火紅的嫁衣襯著肌膚如雪亩鬼。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天阿蝶,我揣著相機(jī)與錄音雳锋,去河邊找鬼。 笑死羡洁,一個(gè)胖子當(dāng)著我的面吹牛玷过,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼辛蚊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼粤蝎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起袋马,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤初澎,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后虑凛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體碑宴,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年卧檐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了墓懂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡霉囚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匕积,到底是詐尸還是另有隱情盈罐,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布闪唆,位于F島的核電站盅粪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏悄蕾。R本人自食惡果不足惜票顾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望帆调。 院中可真熱鬧奠骄,春花似錦、人聲如沸番刊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)芹务。三九已至蝉绷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枣抱,已是汗流浹背熔吗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留佳晶,地道東北人桅狠。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親垂攘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子维雇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 用到的組件 1、通過(guò)CocoaPods安裝 2晒他、第三方類庫(kù)安裝 3吱型、第三方服務(wù) 友盟社會(huì)化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 14,625評(píng)論 1 180
  • 如何使用思維導(dǎo)圖指導(dǎo)孩子閱讀呢?本文給出了使用思維導(dǎo)圖閱讀和記憶古詩(shī)的技巧陨仅,現(xiàn)分享給大家津滞。 一、古...
    貓眼流星閱讀 657評(píng)論 0 1
  • 《防止交警執(zhí)法侵害家庭頂梁柱》 看看這一則報(bào)道《“黑車”夫妻撒潑阻礙執(zhí)法 反問(wèn)民警不配合執(zhí)法又怎樣?》 但是全篇都...
    日頭去私長(zhǎng)翻轉(zhuǎn)閱讀 101評(píng)論 0 0
  • 當(dāng)我們的APP做好了灼伤,賬號(hào)和證書(shū)也準(zhǔn)備好了触徐,到了提交審核的時(shí)候卻可能因?yàn)榉N種原因被蘋(píng)果抓小辮子。特此狐赡,下面整理了各...
    小碼僧閱讀 1,116評(píng)論 0 3
  • 為什麼要做給別人看 我從不會(huì)怕 跌倒那一剎那 雨後我相信一定會(huì)出現(xiàn)彩霞 夢(mèng)裡的童話 只有在那裡 我才可以擁有那真實(shí)...
    myunhualu閱讀 96評(píng)論 0 0