xcodebuild自動(dòng)打包+腳本使用

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 所有可用的 SDKs

  • xcodebuild -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)化打包腳本

  1. 比較出名的就是facebook出的 xctool

  2. 我的python腳本autobuild.py

  1. 腳本化中使用如下的命令打包:

    xcodebuild -project name.xcodeproj -target targetname -configuration Release -sdk iphoneos

    或者

    xcodebuild -workspace name.xcworkspace -scheme schemename -configuration Release -sdk iphoneos

  2. 然后使用 xcrun 生成 ipa 文件:
    xcrun -sdk iphoneos -v PackageApplication ./build/Release-iphoneos/$(target|scheme).app"

  3. 清除 build 過(guò)程中產(chǎn)生的中間文件

  4. 結(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


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末趟佃,一起剝皮案震驚了整個(gè)濱河市扇谣,隨后出現(xiàn)的幾起案子昧捷,更是在濱河造成了極大的恐慌,老刑警劉巖罐寨,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件靡挥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鸯绿,警方通過(guò)查閱死者的電腦和手機(jī)跋破,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瓶蝴,“玉大人毒返,你說(shuō)我怎么就攤上這事∠鲜郑” “怎么了拧簸?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)男窟。 經(jīng)常有香客問(wèn)我盆赤,道長(zhǎng),這世上最難降的妖魔是什么歉眷? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任牺六,我火速辦了婚禮,結(jié)果婚禮上汗捡,老公的妹妹穿的比我還像新娘淑际。我一直安慰自己,他們只是感情好扇住,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布庸追。 她就那樣靜靜地躺著,像睡著了一般台囱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上读整,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天簿训,我揣著相機(jī)與錄音,去河邊找鬼米间。 笑死强品,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的屈糊。 我是一名探鬼主播的榛,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逻锐!你這毒婦竟也來(lái)了夫晌?” 一聲冷哼從身側(cè)響起雕薪,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晓淀,沒(méi)想到半個(gè)月后所袁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凶掰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年燥爷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懦窘。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡前翎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出畅涂,到底是詐尸還是另有隱情港华,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布毅戈,位于F島的核電站苹丸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏苇经。R本人自食惡果不足惜赘理,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扇单。 院中可真熱鬧商模,春花似錦、人聲如沸蜘澜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鄙信。三九已至瞪醋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間装诡,已是汗流浹背银受。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸦采,地道東北人宾巍。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像渔伯,于是被迫代替她去往敵國(guó)和親顶霞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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