xctoo简介:facebook那帮人,耐不住每天打包的烦恼,搞了一些自动化组件工具。基于xcodebuild封装了一层形成了xctool。
xctool有哪些好处呢?
1、它可以从命令行构建和运行单元测试,这和Xcode.app从图形化界面上达到一样的效果。如果你为iOS设置了持续集成系统,那么这就非常重要了。你想要能够自动化运行测试,那些测试与你的开发人员在本地计算机上运行的完全相同,而xcodebuild不会用和Xcode.app相同的方式来构建和运行测试。在Xcode 4中,苹果把单元测试集成到了Xcode中——与“构建”和“运行”一起,有一个新的“测试”动作;使用Xcode scheme,你可以选择启用或者禁用哪些单元测试;如果你依赖于iOS模拟器(也就是应用程序测试)来编写测试,那么Xcode会自动载入模拟器并运行测试。这些都是很大的改进,但看起来苹果并没有把这些改进融入到xcodebuild中,那使得自动化构建和测试非常困难。
2、 另一个重大的问题是构建和测试失败的报告。使用xcodebuild,你会得到大量文本输出,其中包含编译命令、编译错误和警告以及OCUnit的测试输出。如果你想要自动确定哪个组件编译失败,或者哪个单元测试失败,那么你就需要编写自己的正则表达式解析器,那也是我们和其他iOS社区中的人一直在做的工作。那会有效果,但实在很麻烦。有了xctool,我们会让xcodebuild和OCUnit测试运行器把构建输出和测试结果作为JSON对象的结构化流输出。 这让我们可以很容易地以需要的形式来显示构建和测试结果。例如,我们创建了一个报表,以吸引人的、带有颜色的输出形式来显示结果(https://fpotter_public.s3.amazonaws.com/xctool-uicatalog.gif)。 还有人使用这来把测试结果输出为JUnit XML,那在流行的Jenkins构建系统中会显示得很好。>>>>
xctool的使用:常用命令在他们工程的readme里有详细描述和例子:https://github.com/facebook/xctool/blob/master/README.md
xctool 不支持指定target如 -target
; 必须用scheme例如
path/to/xctool.sh \
-project YourProject.xcodeproj \
-scheme YourScheme \
build
xctool指定打印报告
path/to/xctool.sh \
-workspace YourWorkspace.xcworkspace \
-scheme YourScheme \
-reporter plain:/path/to/plain-output.txt \
build
可以指定的格式如下
- pretty: a text-based reporter that uses ANSI colors and unicode symbols for pretty output (the default).
- plain: like pretty, but with no colors or unicode.
- phabricator: outputs a JSON array of build/test results which can be fed into the Phabricator code-review tool.
- junit: produces a JUnit/xUnit compatible XML file with test results.
- json-stream: a stream of build/test events as JSON dictionaries, one per line (example output).
- json-compilation-database: outputs a JSON Compilation Database of build events which can be used by Clang Tooling based tools, e.g. OCLint.
- user-notifications: sends notification to Notification Center when action is completed (example notifications).
- teamcity: sends service messages to TeamCity Continuous Integration Server
bibibi一堆,不知道大家愿意不愿意看 我们来整点实际上手的。 下面用xcodebuild和xctool实际动手打几个包来练练手。
一:fuck fuck fuck fuck 测试了半天xcode8以后不支持xctool了 汗!!!!!!
二:我们回到xcodebuild上
project_path=$(pwd)
echo "project_path:${project_path}"
schemeName="FunnyProject"
outPutPath="${project_path}/outputDir"
echo "outputPath:${outPutPath}"
#xcodebuild clean -workspace ${schemeName}.workspace -scheme ${schemeName} -configuration Debug
xcodebuild -project $schemeName.xcodeproj -scheme $schemeName clean
xcodebuild archive -project $schemeName.xcodeproj -scheme $schemeName -archivePath "${outPutPath}/${schemeName}.xcarchive" -configuration Debug
xcodebuild -archivePath "${outPutPath}/${schemeName}.xcarchive" -exportPath "${outPutPath}/${schemeName}.ipa" -exportOptionsPlist "${outPutPath}/ExportOptions.plist" -exportArchive
//这里有个参数exportOptionsPlist 需要收到打包导出文件夹里有这个文件,相当于一个配置文件,用这个文件来导出包,把这个文件copy到当前目录即可
#-exportOptionsPlist "${outPutPath}/${schemeName}.plist"
#xcodebuild -exportArchive -exportSigningIdentity 'Developer ID Application: My Team'
#xcodebuild -exportArchive -archivePath <xcarchivepath> -exportPath <destinationpath> -exportOptionsPlist <plistpath>
#xctool -workspace GWMovie.xcworkspace -scheme GWMovie -sdk iphonesimulator run-tests
echo "${SECONDS}s"