xcodebuild自动打包+脚本使用

1、xcodebuild 简介

在终端中输入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

几个常用的命令有:

  • xcodebuild -showsdks: 列出 Xcode 所有可用的 SDKs

  • xcodebuild -showBuildSettings: 6的使用方式,查看当前工程 build setting 的配置参数,Xcode 详细的 build setting 参数参考官方文档 Xcode Build Setting Reference, 已有的配置参数可以在终端中以 buildsetting=value 的形式进行覆盖重新设置

  • 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的使用方式,会 build 指定 project,其中 -target 和 -configuration 参数可以使用 xcodebuild -list 获得,-sdk 参数可由 xcodebuild -showsdks 获得,[buildsetting=value ...] 用来覆盖工程中已有的配置。

  • xcodebuild -workspace name.xcworkspace -scheme scheme name build: 3的使用方式,build 指定 workspace,当我们使用 CocoaPods 来管理第三方库时,会生成 xcworkspace 文件,这样就会用到这种打包方式

参数就很容易理解了:

 -project -workspace:这两个对应的就是项目的名字也就是说哪一个工程要打包。如果有多个工程,这里又没有指定,则默认为第一个工程。

-target:打包对应的targets,如果没有指定这默认第一个。


buildsetting=value ...:使用此命令去修改工程的配置。但是在实际应用中,我选择了读取文件去修改一个配置,而没有应用此种方法。

-scheme:指定打包的scheme。

2、Demo一下

方法一 使用xcodebuild和xcrun打包签名

命令行进入我现在的一个项目目录,查看一下项目信息,xcodebuild -list

然后进行了一下命令
xcodebuild -workspace EPayment.xcworkspace -scheme Epayment -configuration Release
如果 build 成功,会看到 ** BUILD SUCCEEDED **字样,我的目录是:/Users/safiri/Library/Developer/Xcode/DerivedData/EPayment-bawbxskzmobkcybizafgxpnrdcbe/Build/Products/Release-iphoneos/xxxx.app
<u>(好像对workspace构建后不会在项目目录下生成build文件夹,那你可以在你的命令后面添加SYMROOT=buildDir指定一个build文件夹)</u>

在 Release-iphoneos 文件夹下,有我们需要的.app文件,但是要安装到真机上,我们需要将该文件导出为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

此时你回到桌面可以看到 xxxx.ipa文件,则为成功。此ipa文件为内测版,企业版可能需要配置上描述文件,还未实验。

方法二、生成 .xcarchive 再导出 .ipa

由于警告warning: PackageApplication is deprecated, use xcodebuild -exportArchive instead.

进入到 xcode 工程文件所在目录,然后执行 xcodebuild clean 进行清除
step1 xcodebuild archive生成 .xcarchive
xcodebuild archive -workspace podsoecTest.xcworkspace -scheme podsoecTest -configuration Release -archivePath "~/Desktop/1.xcarchive"

step2 xcodebuild -exportArchive导出.ipa:
xcodebuild -exportArchive -archivePath ~/Desktop/podsoecTest.xcarchive -exportPath ~/Desktop/podsoecTest.ipa -exportFormat IPA


工作中,特别是所做项目进入测试阶段,肯定会经常打 Ad-hoc 包给测试人员进行测试,但是我们肯定不想每次进行打包的时候都要进行一些工程的设置修改,以及一系列的 next 按钮点击操作,现在就让这些操作都交给脚本化吧!

3.1、对方法一,使用xcodebuild和xcrun自动化打包脚本

  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 过程中产生的中间文件

  4. 结合蒲公英分发平台,将 ipa 文件上传至蒲公英分发平台,同时在终端会打印上传结果以及上传应用后该应用的 URL。蒲公英分发平台能够方便地将 ipa 文件尽快分发到测试人员,该平台有开放 API,可避免人工上传。

脚本的使用:
在脚本顶部,有几个全局变量,根据自己的项目情况修改。

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 为开发者证书标识,可以在 钥匙串访问 ->证书 -> 选中证书右键弹出菜单 -> 显示简介 -> 常用名称 获取,类似 iPhone Distribution: Company name Co. Ltd (xxxxxxxx9A), 包括括号内的内容。

PROVISIONING_PROFILE: 这个是 mobileprovision 文件的 identifier,获取方式:

Xcode -> Preferences -> 选中申请开发者证书的 Apple ID -> 选中开发者证书 -> View Details… -> 根据 Provisioning Profiles 的名字选中打包所需的 mobileprovision 文件 -> 右键菜单 -> Show in Finder -> 找到该文件后,除了该文件后缀名的字符串就是 PROVISIONING_PROFILE 字段的内容。
USER_KEY, API_KEY: 是蒲公英开放 API 的密钥。

如果Xcode中不配置证书,则设置为空字符串:CODE_SIGN_IDENTITY='',PROVISIONING_PROFILE='',就自动不使用指定证书打包。

注意

  • -o命令是文件路径不是单纯的文件名 help="specify output filePath+filename"

  • 使用过程中出现了错误 :
    File "autobuild.py", line 6, in <module>
    import requests
    ImportError: No module named requests

    这里requests是Python中给人用的http工具包。我通过sudo easy_install pip安装了pip,然后sudo pip install requests安装成功 ;运行过程中又出现了编码错误ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) ,通过添加一下三行代码解决的:
    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')

在一系列被虐后,运行命令:python autobuild.py -w EPayment.xcworkspace -s Epayment -o ~/Desktop/123.ipa

Upload Success...

进入蒲公英看到了自己刚才上传的应用,以后每个应用放一个修改后唯一的autobuild.py 文件,测试,发布,就用它啦。。。

3.2、对方法二,生成 .xcarchive 再导出 .ipa 的自动打包脚本

我的python脚本autobuild_archive.py

脚本的使用:
在脚本顶部,有几个全局变量,根据自己的项目情况修改。

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"

相关打包证书在Xcode中配置。

举个例子
python autobuild_archive.py -p xcodeAutoBuild.xcodeproj -s xcodeAutoBuild -o ~/Desktop/1232.ipa


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容