本文主要介紹 xcodebuild 常用打包命令戚绕,以及使用?python 腳本實現(xiàn)自動打包 ipa 上傳到蒲公英測試平臺臣镣,并且發(fā)送郵件通知測試人員厂抖。?
xcodebuild 簡介
xcodebuild 是蘋果提供的打包工程的命令
1.需要在包含 name.xcodeproj 的目錄下執(zhí)行 xcodebuild 命令,且如果該目錄下有多個 projects朱浴,那么需要使用 -project 指定需要 build 的項目吊圾。
2.在不指定 build 的 target 的時候,默認(rèn)情況下會 build project 下的第一個 target翰蠢。
3.當(dāng) build workspace 時项乒,需要同時指定 -workspace 和 -scheme 參數(shù),scheme 參數(shù)控制了哪些 targets 會被 build 以及以怎樣的方式 build梁沧。
xcodebuild 常用命令:
1.xcodebuild -version 查看xcode工具的版本號和build版本號
2.xcodebuild -showsdks 顯示當(dāng)前系統(tǒng)的SDK檀何、及其版本
3.xcodebuild -list 先 cd 到工程目錄下執(zhí)行此命令 顯示target Schemes 等
注意:
Xcode 升級到8.3后,打包命令使用 exportArchive 替換了 PackageApplication 進(jìn)行打包廷支。這里我們需要配置一個?exportIpaOption.plist 文件频鉴,此文件里聲明了我們打包時的 Profiles(預(yù)制描述文件)以及一些其他配置。
如果你不知道這個文件怎么配置恋拍,你可以先手動用 Xcode 打一個包垛孔,包里的?ExportOptions.plist 文件就是我們自動打包需要的這個文件。如下圖:
非 cocoaPods 項目的編譯施敢、打包
第一步:編譯
編譯命令
xcodebuild archive?-scheme 工程scheme名稱?-archivePath 編譯后archive文件路徑 -configuration Release
示例:
xcodebuild archive?-scheme Test?-archivePath ./build/archive/Test.xcarchive -configuration Release
打開終端 cd 到你的工程根目錄周荐,然后執(zhí)行編譯命令狭莱。編譯成功提示信息如下:
** ARCHIVE SUCCEEDED **
第二步:打包
打包命令
xcodebuild -exportArchive -archivePath 編譯時archive文件路徑?-exportPath?ipa安裝包路徑 -exportOptionsPlist exportIpaOption.plist
示例:
xcodebuild -exportArchive -archivePath ./build/archive/Test.xcarchive?-exportPath./build/ipa/Test.ipa?-exportOptionsPlist exportIpaOption.plist
編譯完成后,接著執(zhí)行打包命令概作。打包成功提示信息如下:
** EXPORT SUCCEEDED **
到這里腋妙,使用命令就打包成功了。會在工程根目錄下生成一個 build/ipa 文件夾仆嗦,里面存放的就是我們需要的 ipa 安裝包。
使用了 CocoaPods 項目的編譯先壕、打包
第一步:編譯
編譯命令
xcodebuild archive?-workspace Test.xcworkspace?-scheme Test?-archivePath ./build/archive/Test.xcarchive -configuration Release
第二步:打包
打包命令
xcodebuild -exportArchive -archivePath ./build/archive/Test.xcarchive?-exportPath./build/Test.ipa?-exportOptionsPlist exportIpaOption.plist
到這里瘩扼,你是不是很激動,稍作整理垃僚,接下來集绰,我們怎么通過 python 腳本去自動化執(zhí)行上面的命令。
一:python 腳本打包
你可能會說谆棺,我對 python 一點都不懂呀栽燕!沒關(guān)系,如果你對自己的編程能力挺自信的話改淑,下面的打包腳本碍岔,你都能看懂,不需要擔(dān)心朵夏。下載腳本文件autobuild.py
配置打包需要的一些信息
1蔼啦、配置工程
# 項目 scheme 名稱(一般就是我們的工程名稱)
project_scheme = "xxxx"
# 指定項目下 build 編譯目錄(存放在工程根目錄 build 文件里)
build_path = "./build"
# 指定項目下 archive 編譯目錄
archive_path = build_path + "/archive/temp.xcarchive"
# 打包后ipa存儲目錄(存放在工程目錄 build 里的 ipa 文件里)
targer_ipa_path = build_path + "/ipa"
這里我們只需要修改?project_scheme 即可,其他都可以采用默認(rèn)信息仰猖。
2捏肢、配置蒲公英
# 配置蒲公英KEY
API_KEY = "xxxxxxxxxxxxxxxxxxxx"
# 配置蒲公英更新描述信息
PGYER_DESC = "xxxxxxxxxxxxxxxxxxxx"
上傳蒲公英我們需要配置蒲公英給我們分配的 API Key,以及版本描述信息饥侵。API Key是必填的鸵赫,版本信息可以不傳或者為空,后面我們會介紹其他一些上傳信息躏升,比如是否需要安裝密碼等等辩棒。
獲取?API Key 方式:
3、配置郵件
# 郵件信息
from_addr = "xxxx@163.com"
password = "xxxxxxxx"
smtp_server = "smtp.163.com"
to_addr = 'xxxx@xx.com'
發(fā)送郵件膨疏,我們需要配置發(fā)送郵件賬號盗温、密碼、郵件 smtp服務(wù)器 以及收件人成肘。我們還需要開啟發(fā)送郵件的 SMTP服務(wù)卖局,這里以163郵件開啟為例:
二:腳本介紹
第一步:清理項目 build目錄
每次打包前,我們會清理上次的build目錄
def clean_project_build():
? ? os.system("rm -r %s" % (build_path))
? ? print "\n** CLEAN ARCHIVE FILE SUCCEEDED **\n"
第二步:編譯
def build_project():
? ? os.system('xcodebuild archive -scheme %s -archivePath %s -configuration Release' % (project_scheme,archive_path))
第三步:打包ipa
def build_ipa():
? ? global ipa_filename
? ? ipa_filename = time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime(time.time()))
? ? os.system ('xcodebuild -exportArchive -archivePath %s -exportPath %s/%s -exportOptionsPlist exportIpaOption.plist'%(archive_path,targer_ipa_path,ipa_filename))
第四步:上傳蒲公英
def upload_Pgyer():
? ? ipa_path = ("%s/%s/%s.ipa" % (targer_ipa_path,ipa_filename,project_scheme))
? ? print "ipaPath:"+ipa_path
? ? ipa_path = os.path.expanduser(ipa_path)
? ? upload_com = "curl -F 'file=@%s' -F '_api_key=%s' -F 'buildUpdateDescription=%s' https://www.pgyer.com/apiv2/app/upload" % (ipa_path,API_KEY,PGYER_DESC)
? ? os.system(upload_com)
? ? print "\n** UPLOAD TO PGYER SUCCEEDED **\n"
buildUpdateDescription:(選填) 版本更新描述双霍,請傳空字符串砚偶,或不傳批销。
這是蒲公英給我們定義的接口說明,里面有好多參數(shù)染坯,具體參數(shù)請看參數(shù)說明
第四步:發(fā)郵件
def send_mail():
? ? msg = MIMEText('iOS測試項目已經(jīng)打包完畢均芽,請前往 https://www.pgyer.com/xxxxx 下載測試!', 'plain', 'utf-8')
? ? msg['From'] = _format_addr('自動打包系統(tǒng) <%s>' % from_addr)
? ? msg['To'] = _format_addr('測試人員 <%s>' % to_addr)
? ? msg['Subject'] = Header('iOS客戶端打包程序', 'utf-8').encode()
? ? server = smtplib.SMTP(smtp_server)
? ? server.ehlo()
? ? server.starttls()
? ? server.ehlo()
? ? server.login(from_addr, password)
? ? server.sendmail(from_addr, [to_addr], msg.as_string())
? ? server.quit()
? ? print "\n** SEND EMAIL SUCCEEDED **\n"
文中的腳本是以打包非 CocoaPods 項目為例单鹿,實際中我們的項目大多都是采用?CocoaPods 的掀宋,第一小節(jié)我們已經(jīng)介紹了使用了 CocoaPods 項目的編譯、打包的命令仲锄,只需要在腳本里替換一下?xcodebuild 編譯的命令即可劲妙,相信這點難不倒你。
第五步:執(zhí)行腳本
將腳本文件放到你的工程根目錄儒喊,然后在終端執(zhí)行:
python autobuild.py
Mac已經(jīng)自帶安裝了python環(huán)境镣奋,所以我們不用再安裝python運行環(huán)境了。
參考文章:
可能遇到的問題: