1魂拦、xcodebuild 簡(jiǎn)介
在終端中輸入man xcodebuild 查看其 man page介紹
NAME
xcodebuild – build Xcode projects and workspaces
SYNOPSIS
1县爬、xcodebuild [-project name.xcodeproj] [[-target targetname] … | -alltargets] [-configuration configurationname] [-sdk [sdkfullpath | sdkname]] [action …] [buildsetting=value …] [-userdefault=value …]
2、xcodebuild [-project name.xcodeproj] -scheme schemename [[-destination destinationspecifier] …] [-destination-timeout value] [-configuration configurationname] [-sdk [sdkfullpath | sdkname]] [action …] [buildsetting=value …] [-userdefault=value …]
3苇羡、xcodebuild -workspace name.xcworkspace -scheme schemename [[-destination destinationspecifier] …] [-destination-timeout value] [-configuration configurationname] [-sdk [sdkfullpath | sdkname]] [action …] [buildsetting=value …] [-userdefault=value …]
4执虹、xcodebuild -version [-sdk [sdkfullpath | sdkname]] [infoitem]
5干茉、xcodebuild -showsdks
6论颅、xcodebuild -showBuildSettings [-project name.xcodeproj | [-workspace name.xcworkspace -scheme schemename]]
7、xcodebuild -list [-project name.xcodeproj | -workspace name.xcworkspace]
8环鲤、xcodebuild -exportArchive -archivePath xcarchivepath -exportPath destinationpath -exportOptionsPlist path
9纯趋、xcodebuild -exportLocalizations -project name.xcodeproj -localizationPath path [[-exportLanguage language] …]
10、xcodebuild -importLocalizations -project name.xcodeproj -localizationPath path
幾個(gè)常用的命令有:
xcodebuild -showsdks
: 列出 Xcode 所有可用的 SDKsxcodebuild -showBuildSettings
: 6的使用方式冷离,查看當(dāng)前工程 build setting 的配置參數(shù)吵冒,Xcode 詳細(xì)的 build setting 參數(shù)參考官方文檔 Xcode Build Setting Reference, 已有的配置參數(shù)可以在終端中以 buildsetting=value 的形式進(jìn)行覆蓋重新設(shè)置-
xcodebuild -list
: 7的使用方式西剥,查看 project 中的 targets 和 configurations痹栖,或者 workspace 中 schemes, 輸出如下:Information about project "EPayment": Targets: Epayment Build Configurations: Debug Release If no build configuration is specified and -scheme is not passed then "Release" is used. Schemes: Epayment
xcodebuild [-project name.xcodeproj] [[-target targetname] ... | -alltargets] build
: 1的使用方式,會(huì) build 指定 project瞭空,其中 -target 和 -configuration 參數(shù)可以使用 xcodebuild -list 獲得揪阿,-sdk 參數(shù)可由 xcodebuild -showsdks 獲得疗我,[buildsetting=value ...] 用來(lái)覆蓋工程中已有的配置。xcodebuild -workspace name.xcworkspace -scheme scheme name build
: 3的使用方式南捂,build 指定 workspace吴裤,當(dāng)我們使用 CocoaPods 來(lái)管理第三方庫(kù)時(shí),會(huì)生成 xcworkspace 文件溺健,這樣就會(huì)用到這種打包方式
參數(shù)就很容易理解了:
-project -workspace:這兩個(gè)對(duì)應(yīng)的就是項(xiàng)目的名字也就是說(shuō)哪一個(gè)工程要打包麦牺。如果有多個(gè)工程,這里又沒(méi)有指定鞭缭,則默認(rèn)為第一個(gè)工程剖膳。
-target:打包對(duì)應(yīng)的targets,如果沒(méi)有指定這默認(rèn)第一個(gè)岭辣。
buildsetting=value ...:使用此命令去修改工程的配置吱晒。但是在實(shí)際應(yīng)用中,我選擇了讀取文件去修改一個(gè)配置沦童,而沒(méi)有應(yīng)用此種方法仑濒。
-scheme:指定打包的scheme。
2偷遗、Demo一下
方法一 使用xcodebuild和xcrun打包簽名
命令行進(jìn)入我現(xiàn)在的一個(gè)項(xiàng)目目錄躏精,查看一下項(xiàng)目信息,xcodebuild -list
然后進(jìn)行了一下命令
xcodebuild -workspace EPayment.xcworkspace -scheme Epayment -configuration Release
如果 build 成功鹦肿,會(huì)看到 ** BUILD SUCCEEDED **
字樣,我的目錄是:/Users/safiri/Library/Developer/Xcode/DerivedData/EPayment-bawbxskzmobkcybizafgxpnrdcbe/Build/Products/Release-iphoneos/xxxx.app
<u>(好像對(duì)workspace構(gòu)建后不會(huì)在項(xiàng)目目錄下生成build文件夾,那你可以在你的命令后面添加SYMROOT=buildDir指定一個(gè)build文件夾)</u>
在 Release-iphoneos 文件夾下辅柴,有我們需要的.app文件箩溃,但是要安裝到真機(jī)上,我們需要將該文件導(dǎo)出為ipa
文件碌嘀,這里使用xcrun
命令:
xcrun -sdk iphoneos -v PackageApplication /Users/egintramacbook01/Library/Developer/Xcode/DerivedData/EPayment-bawbxskzmobkcybizafgxpnrdcbe/Build/Products/Release-iphoneos/xxxx.app -o ~/Desktop/xxxx.ipa
此時(shí)你回到桌面可以看到 xxxx.ipa文件涣旨,則為成功。此ipa文件為內(nèi)測(cè)版股冗,企業(yè)版可能需要配置上描述文件霹陡,還未實(shí)驗(yàn)。
方法二止状、生成 .xcarchive 再導(dǎo)出 .ipa
由于警告warning: PackageApplication is deprecated, use xcodebuild -exportArchive
instead.
進(jìn)入到 xcode 工程文件所在目錄烹棉,然后執(zhí)行 xcodebuild clean 進(jìn)行清除
step1 xcodebuild archive
生成 .xcarchive
xcodebuild archive -workspace podsoecTest.xcworkspace -scheme podsoecTest -configuration Release -archivePath "~/Desktop/1.xcarchive"
step2 xcodebuild -exportArchive
導(dǎo)出.ipa:
xcodebuild -exportArchive -archivePath ~/Desktop/podsoecTest.xcarchive -exportPath ~/Desktop/podsoecTest.ipa -exportFormat IPA
工作中,特別是所做項(xiàng)目進(jìn)入測(cè)試階段怯疤,肯定會(huì)經(jīng)常打 Ad-hoc 包給測(cè)試人員進(jìn)行測(cè)試浆洗,但是我們肯定不想每次進(jìn)行打包的時(shí)候都要進(jìn)行一些工程的設(shè)置修改,以及一系列的 next 按鈕點(diǎn)擊操作集峦,現(xiàn)在就讓這些操作都交給腳本化吧!
3.1伏社、對(duì)方法一抠刺,使用xcodebuild和xcrun自動(dòng)化打包腳本
比較出名的就是facebook出的 xctool
我的python腳本autobuild.py
-
腳本化中使用如下的命令打包:
xcodebuild -project name.xcodeproj -target targetname -configuration Release -sdk iphoneos
或者
xcodebuild -workspace name.xcworkspace -scheme schemename -configuration Release -sdk iphoneos
然后使用 xcrun 生成 ipa 文件:
xcrun -sdk iphoneos -v PackageApplication ./build/Release-iphoneos/$(target|scheme).app"
清除 build 過(guò)程中產(chǎn)生的中間文件
結(jié)合蒲公英分發(fā)平臺(tái),將 ipa 文件上傳至蒲公英分發(fā)平臺(tái)摘昌,同時(shí)在終端會(huì)打印上傳結(jié)果以及上傳應(yīng)用后該應(yīng)用的 URL速妖。蒲公英分發(fā)平臺(tái)能夠方便地將 ipa 文件盡快分發(fā)到測(cè)試人員,該平臺(tái)有開放 API聪黎,可避免人工上傳罕容。
腳本的使用:
在腳本頂部,有幾個(gè)全局變量挺举,根據(jù)自己的項(xiàng)目情況修改杀赢。
CODE_SIGN_IDENTITY = "iPhone Distribution: companyname (9xxxxxxx9A)"
PROVISIONING_PROFILE = "xxxxx-xxxx-xxx-xxxx-xxxxxxxxx"
CONFIGURATION = "Release"
SDK = "iphoneos"
USER_KEY = "15d6xxxxxxxxxxxxxxxxxx"
API_KEY = "efxxxxxxxxxxxxxxxxxxxx"
其中,CODE_SIGN_IDENTITY
為開發(fā)者證書標(biāo)識(shí)湘纵,可以在 鑰匙串訪問(wèn) ->證書 -> 選中證書右鍵彈出菜單 -> 顯示簡(jiǎn)介 -> 常用名稱 獲取脂崔,類似 iPhone Distribution: Company name Co. Ltd (xxxxxxxx9A)
, 包括括號(hào)內(nèi)的內(nèi)容。
PROVISIONING_PROFILE
: 這個(gè)是 mobileprovision 文件的 identifier梧喷,獲取方式:
Xcode -> Preferences -> 選中申請(qǐng)開發(fā)者證書的 Apple ID -> 選中開發(fā)者證書 -> View Details… -> 根據(jù) Provisioning Profiles 的名字選中打包所需的 mobileprovision 文件 -> 右鍵菜單 -> Show in Finder -> 找到該文件后砌左,除了該文件后綴名的字符串就是 PROVISIONING_PROFILE
字段的內(nèi)容。
USER_KEY
, API_KEY
: 是蒲公英開放 API 的密鑰铺敌。
如果Xcode中不配置證書汇歹,則設(shè)置為空字符串:CODE_SIGN_IDENTITY='',PROVISIONING_PROFILE=''
偿凭,就自動(dòng)不使用指定證書打包产弹。
注意
-o命令是文件路徑不是單純的文件名
help="specify output filePath+filename"
-
使用過(guò)程中出現(xiàn)了錯(cuò)誤 :
File "autobuild.py", line 6, in <module>
import requests
ImportError: No module named requests這里requests是Python中給人用的http工具包。我通過(guò)
sudo easy_install pip
安裝了pip,然后sudo pip install requests
安裝成功 ;運(yùn)行過(guò)程中又出現(xiàn)了編碼錯(cuò)誤ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128)
弯囊,通過(guò)添加一下三行代碼解決的:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
在一系列被虐后痰哨,運(yùn)行命令:python autobuild.py -w EPayment.xcworkspace -s Epayment -o ~/Desktop/123.ipa
Upload Success...
進(jìn)入蒲公英看到了自己剛才上傳的應(yīng)用,以后每個(gè)應(yīng)用放一個(gè)修改后唯一的autobuild.py
文件匾嘱,測(cè)試斤斧,發(fā)布,就用它啦霎烙。撬讽。。
3.2悬垃、對(duì)方法二游昼,生成 .xcarchive 再導(dǎo)出 .ipa 的自動(dòng)打包腳本
我的python腳本autobuild_archive.py
腳本的使用:
在腳本頂部,有幾個(gè)全局變量尝蠕,根據(jù)自己的項(xiàng)目情況修改酱床。
CONFIGURATION = "Release"
# configuration for pgyer
PGYER_UPLOAD_URL = "http://www.pgyer.com/apiv1/app/upload"
DOWNLOAD_BASE_URL = "http://www.pgyer.com"
USER_KEY = "599xxxxxxxxxxxxxxxxxx74"
API_KEY = "39xxxxxxxxxxxxxxxxxxxxa3"
相關(guān)打包證書在Xcode中配置。
舉個(gè)例子
python autobuild_archive.py -p xcodeAutoBuild.xcodeproj -s xcodeAutoBuild -o ~/Desktop/1232.ipa