介绍
xcodebuild 是苹果发布自动构建的工具。一般持续集成的时候都需要用到它。可以在终端输入man xcodebuild
查看用法及介绍。也可以在官方文档中查看,官方文档可能会更新不及时,我用到的就好几个跟终端中输出的解释不一样。
在介绍中可以看到,xcodebuild
主要就是用来构建projects
和workspaces
的:
xcodebuild -- build Xcode projects and workspaces
相关路径说明
基础路径
xcode设置的基础路径是:
/Users/username/Library/Developer/Xcode/DerivedData/xxxWorkspace-caepeadwrerdcrftijaolkkagbjf
这个路径可以在Xcode->Preferences->Locations
里设置。
下面用$()代替上面一长串东东
$(SYMROOT) = $()/Build/Products
$(BUILD_DIR) = $()/Build/Products
$(BUILD_ROOT) = $()/Build/Products
在此目录下没一个配置或者模拟器真机都会有一个目录,比如
$()/Build/Products/Debug-iphonesimulator
$()/Build/Products/Release-iphonesimulator
$()/Build/Products/Debug-iphoneos
$()/Build/Products/Release-iphoneos
路径介绍
我们能在xcodebuild的相关action说明里看到这些路径:SYMROOT
、DSTROOT
、SRCROOT
。
-
SYMROOT(Build Products Path)
:
debug版本编译结果路径,默认是在
/Users/username/Library/Developer/Xcode/DerivedData/tragetname-******/Build/Products
例子:
xcodebuild -workspace Demo.xcworkspace -scheme DemoTest SYMROOT="/Users/username/Desktop"运行以上例子之后就会在桌面上生成一个文件夹
Debug-iphoneos
,里面会有每一个pod对应的编译结果和此工程scheme的DemoTest.app
文件和DemoTest.app.dSYM
或者可以指定对应的配置configuration:
xcodebuild -workspace Demo.xcworkspace -scheme DemoTest SYMROOT="/Users/username/Desktop" -configuration ${CONFIGURATION}基本上默认的配置是为Debug或Release,有时候我们会自己添加一些配置,比如Dev,Publish之类的。那么最后桌面生成的文件夹就是
Dev-iphoneos
或者Publish-iphoneos
了
DSTROOT
全称
distribution root
, 表示archive的可安装文件路径。默认路径为/tmp/$(PROJECT_NAME).dst
。只有当build setting->$DEPLOYMENT_LOCATION
设置为YES的时候才会出现。当为YES时$(DSTROOT)
和$(SYMROOT)
都会有DemoTest.app
,而$(SYMROOT)
里的即为$(DSTROOT)
里的替身版本。例子:
xcodebuild install -workspace Demo.xcworkspace -scheme DemoTest DSTROOT="/Users/username/Desktop"
或
xcodebuild -workspace Demo.xcworkspace -scheme DemoTest DSTROOT="/Users/username/Desktop" archive运行以上例子之后就会在桌面上生成一个文件夹
Applications
,里面就是对应的可安装文件DemoTest.app
SRCROOT
即当前工程所在的目录
相关命令说明
参数 | 值 | 说明 |
---|---|---|
-project | name.xcodeproj | 在当前目录下有多个项目时需要指定 |
-target | targetname | 如果不指定的话默认会构建第一个target |
-alltargets | 无 | 表示同时构建所有的target |
-workspace | name.xcworkspace | 构建workspace, 需要指定scheme |
-scheme | schemename | 指定对应的scheme,当构建workspace时是必选项 |
-destination | destinationspecifier | 通过描述使用对应的设备,默认使用当前scheme所匹配的设备 |
-destination-timeout | timeout | 搜索对应设备时需要时间,可以设置搜索超时时间,默认为30s |
-configuration | configurationname | 使用对应的配置进行构建,configurationname一般为Debug和Release |
-arch | architecture | 指定构建的包所支持的指令集:arm64 armv7 armv7s
|
-sdk | sdkfullpath sdkname | 针对指定的SDK选择适合的构建工具构建。如-sdk iphoneos
|
-showsdks | 无 | 列出所有的SDK,一般列出的后面都会跟上版本号,-sdk 不写版本号的话默认就是所有版本 |
-list | 无 | 列出当前项目所有的Targets、Build Configurations、Schemes
|
-derivedDataPath | path | 构建成功时相关的缓存文件路径,默认为/Users/dasheng/Library/Developer/Xcode/DerivedData 执行xcodebuild -scheme schemeName archive build 时才会有相关缓存 |
-archivePath | xcarchivepath | 设置导出的.xcarchive 文件的路径 |
Action
参数 | 说明 |
---|---|
build | 构建target,当没有其他action指定时,这是xcodebuild默认的一个action |
build-for-testing | 构建target和对应的相关单元测试,需要指定scheme |
analyze | 构建和分析target或scheme,需要指定scheme |
archive | 存档对应的构建scheme,需要指定scheme |
test | 从SYMROOT目录测试scheme,需要指定scheme和可选的destination |
install | 构建target然后安装到target的安装目录的发布目录(DSTROOT) |
clean | 从构建目录(SYMROOT)删除构建的products和一些中间文件 |
-destination
表示给特定的设备进行构建,使用:-destination destinationspecifier
,destinationspecifier表示对应设备的描述,例子如下所示:
xcodebuild -destination "platform=iOS Simulator,id=36EB495C-4C6E-4233-A555-EF2B3866D470"
描述根据key=value的方式并用逗号进行分割,key包括platform
、id
、name
、OS
。
相关设置的值可以通过终端执行instruments -s
命令得到。
-showBuildSettings
显示当前所有的BuildSettings的配置
xcodebuild -showBuildSettings
参考
apple documentation xcodebuild
iOS 自动构建命令——xcodebuild
环境变量路径相关
buildsettings
Xcode Build Settings - Products Path