简介

xcodebuild 是苹果发布自动构建的工具。它在一个Xcode项目下能构建一个或者多个targets ,也能在一个workspace或者Xcode项目上构建scheme,总的来说,用它没错就是了。

用法说明

Tips:在终端输入man xcodebuild,可以看到Description里面有介绍用法。

也可以看官方文档

当你想构建一个Xcode项目,在项目目录下运行xcodebuild就可以了(目录下面包含着projectname.xcodeproj文件就行),如果目录下有多个项目,你需要用参数-project指定一个项目。默认xcodebuild命令会构建你第一个target的。当然你也可以用-targetname指定。

如果要构建workspace,你必须指定-workspace-scheme参数。

当然你可以以用就比如-version、-showsdks、-list等一些命令来获取一些项目相关的参数。

构建

在shell里面 [ ]表示这个参数是可选的,< > 表示参数是必须的

话不多说,先上个命令:

xcodebuild [-project projectname] [-target targetname ...] [-configuration configurationname]
[-sdk [sdkfullpath | sdkname]] [buildaction ...] [setting=value ...]
[-userdefault=value ...]
  • -project 这个很清楚啦?你的项目名字
  • -target 这个也很清楚了吧?不过可以通过xcodebuild -list获取
  • -configrtion 一些参数,也可以通过xcodebuild -list获取
  • -sdk 这个可由 xcodebuild -showsdks得到,我一般都是默认
  • buildaction 这个指的是构建的动作,一般有build,analyze,archive,test,install,clean,默认当然是build

    还有其他的一些参数比较少用到

    来看看xcodebuild -list

    Information about project "ThreeDTouchTest":

     Targets:
    ThreeDTouchTest
    ThreeDTouchTestTests
    ThreeDTouchTestUITests Build Configurations:
    Debug
    Release If no build configuration is specified and -scheme is not passed then "Release" is used. Schemes:
    ThreeDTouchTest

你们想要的Target有了,Schemes也有了,Configurations也有了,来看看xcodebuild -showsdks

OS X SDKs:
OS X 10.11 -sdk macosx10.11 iOS SDKs:
iOS 9.2 -sdk iphoneos9.2 iOS Simulator SDKs:
Simulator - iOS 9.2 -sdk iphonesimulator9.2 tvOS SDKs:
tvOS 9.1 -sdk appletvos9.1 tvOS Simulator SDKs:
Simulator - tvOS 9.1 -sdk appletvsimulator9.1 watchOS SDKs:
watchOS 2.1 -sdk watchos2.1 watchOS Simulator SDKs:
Simulator - watchOS 2.1 -sdk watchsimulator2.1

构建吧,兄台们,还等什么?接着来看看构建workspace命令是怎么样的

xcodebuild -workspace workspacename -scheme schemename [-destination destinationspecifier]
[-destination-timeout value] [-configuration configurationname]
[-sdk [sdkfullpath | sdkname]] [buildaction ...] [setting=value ...]
[-userdefault=value ...]

基本都一样,只不过这里的workspacename跟schemename必须要指定。

命令运行成功后,一般会在你的项目目录下生成build文件夹,你可以在里面看到你的生成的包,还有dSYM文件。(好像对workspace构建后不会在项目目录下生成build文件夹,那你可以在你的命令后面添加SYMROOT=buildDir指定一个build文件夹)。

对了,还有这个命令可以查看项目设置:

xcodebuild -target <target> -configuration <configuration> -showBuildSettings

生成ipa文件

生成文件使用的是xrun命令:

xcrun -sdk iphoneos -v PackageApplication ./build/Release-iphoneos/xxx.app -o ~/Desktop/xxx.ipa

打包成功后,会在桌面找到你的ipa。

是不是很简单呢?

上传到Fir

这个就更简单了,敬请参照:Fir的命令行客户端

总结

作为开发人员,肯定不可能天天跟着测试人员跑。自动化是非常有必要的,所以会点脚本,肯定不会吃亏。

最后推荐一个好东西:自动构建打包,不是我写的,有这么好的轮子怎么会自已再写一个呢?

参考文档

官方文档

iOS自动打包并发布脚本

iOS Xcodebuild的更多相关文章

  1. iOS xcodebuild 打包app

    1.传统的app打包(没有使用cocopods) 在打包之前,先把证书和配置文件选好. step1:打开终端,cd 进入到工程目录中 step2:xcodebuild clean(如果buid文件存在 ...

  2. IOS开发基础知识--碎片41

    1:UIWebView加载本地的HTML NSString *path = [[NSBundle mainBundle] bundlePath]; NSURL *baseURL = [NSURL fi ...

  3. iOS代码组件化--利用cocoaPods创建私有库

    如果项目模块多,模块间逻辑复杂,我们发现多个人同时维护一个代码仓库需要十分小心,一不小心,造成冲突,解决起来很烦,相信很多人都遇到手工删除合并的冲突的文件的经历. 如果利用组件化思想,每个人维护自己的 ...

  4. iOS组件化开发一使用source管理远端库升级(四)

    一.克隆远端库代码到本地选择master分支 1.克隆 2.代码会显示出你所有版本的tag 二.可以在Example目录下验证代码的正确行: cd 到库的文件夹然后 pod install comma ...

  5. iOS组件化实践

    参考资料: http://wereadteam.github.io/2016/03/19/iOS-Component/#more https://casatwy.com/iOS-Modulizatio ...

  6. github + SourceTree管理自己的库并上传到cocoapods及各种坑的解决办法

    一.上传写好的库到github(我这里使用SourceTree客户端) 1.在github上创建一个仓库 2.将仓库拉倒本地 复制仓库地址 将刚才复制的地址粘贴到这里 3.上传项目到github 将写 ...

  7. pod出现include of non-modular header inside framework module 错误

    今天打包pod 的时候 出现的错误 -> AFNetworking+RX (3.1.0.18) - ERROR | [iOS] xcodebuild: Returned an unsuccess ...

  8. iOS系统提供开发环境下命令行编译工具:xcodebuild

    iOS系统提供开发环境下命令行编译工具:xcodebuild[3] xcodebuild 在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念[4]: Workspace:简单 ...

  9. xcodebuild和xcrun实现自动打包iOS应用程序

    随着苹果手持设备用户的不断增加,ios应用也增长迅速,同时随着iphone被越狱越来越多的app 的渠道也不断增多,为各个渠道打包成了一件费时费力的工作,本文提供一种比较智能的打包方式来减少其带来的各 ...

随机推荐

  1. NSISの堆栈操作

    一 .堆栈 堆栈是 NSIS 维护的一堆数据,你可以根据需要往堆栈中存入任意大小的数据(as big as you like),所以你可以向堆栈中推入或读取数据,堆栈只有一个,堆栈遵守 LIFO (后 ...

  2. flex垂直居中

    最近遇到一个令我绞尽脑汁的布局 T.T.T.T,分享下.重点--垂直居中. 布局说明:1. 场次为一场比赛 2. 比赛双方是交战的两个队伍 3. 一场比赛可以有多种玩法,所以场的每个玩法的布局的高度都 ...

  3. js的一些复习

    JavaScript Js是一种直译式的脚本语言,是一种弱类型,基于对象的语言.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言 ...

  4. C#连接上sql server 2008 第一次实践

    花了一早上的时间,终于连接上了我的本地数据库,我想应该记一下! 先贴个代码: using System; using System.Collections.Generic; using System. ...

  5. HTTP笔记之一

    1  URL 统一资源定位符(URL)是资源标识符最常见的格式.大部分的URL都遵循一种标准格式,这种格式包含三个部分. URL的第一部分:方案(scheme),说明了访问资源所使用的协议类型.通常是 ...

  6. 06-scanf函数

    本文目录 变量的内存分析 scanf函数 回到顶部 一. 变量的内存分析 1. 字节和地址 为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”. 1> 内存以“字节为单 ...

  7. AC自动机模板

    贴份模板 胡大神和崔大神的组合模板 #include <iostream> #include<cstdio> #include<cstring> #include& ...

  8. windows下开启mysql远程访问

    USE mysql;SELECT * FROM USER ; 直接修改user=root host=127.0.0.1为% FLUSH PRIVILEGES;

  9. Spring <bean> 参数意义

    1.id bean的唯一标识, 2.class 类的完全限定名, 3.parent 父类bean定义的名字. 如果没有任何声明,会使用父bean,但是也可以重写父类.重写父类时,子bean 必须与父b ...

  10. 与Status Bar和Navigation Bar相关的一些东西

    Android Navigation Bar Status Bar   与StatusBar和NavigationBar相关的东西有两种,一是控制它们的显示与隐藏,二是控制它们的透明与否及背景. 在2 ...