欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

ios打包的关于xcodebuild和xctool的使用教程

程序员文章站 2022-07-28 14:34:21
xctoo简介:facebook那帮人,耐不住每天打包的烦恼,搞了一些自动化工具。基于xcodebuild封装了一层形成了xctool。 xctool有哪些好处呢?  1、它可以从命令行构...

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: likepretty, but with no colors or unicode.
  • phabricator: outputs a json array of build/test results which can be fed into thephabricatorcode-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 ajson compilation databaf build events which can be used byclang toolingbased tools, e.g.oclint.
  • user-notifications: sends notification to notification center when action is completed(example notifications).
  • teamcity: sends service messages toteamcitycontinuous integration server

bibibi一堆,不知道大家愿意不愿意看 我们来整点实际上手的。 下面用xcodebuild和xctool实际动手打几个包来练练手。

一:fuckfuckfuckfuck 测试了半天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 -exportpath -exportoptionsplist
#xctool -workspace gwmovie.xcworkspace -scheme gwmovie -sdk iphonesimulator run-tests
echo "${seconds}s"