xcodebuild 自动化构建

摘要

在开发过程中,打包是一个相当繁琐、耗时且重复的一块工作,所以每个有志成为优秀的攻城狮人都在自动化解决打包的问题,今天我就说说自动化打包的第一步。

简介

xcodebuild是苹果发布自动构建的工具。它在一个xcode项目下能构建一个或者多个targets也能在workspace或者xcode项目上构建scheme.

用法说明

在终端输入man xcodebuild,查看文档,也可以查看官方文档

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

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

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

Archive包

命令:

xcodebuild archive  -workspace 项目名称.xcworkspace  -scheme 项目名称  -configuration 构建配置  -archivePath archive包存储路径 CODE_SIGN_IDENTITY=证书  PROVISIONING_PROFILE=描述文件UUID
  • -workspace 项目名称
  • scheme 可以通过xcodebuild -list获取
  • configration 一些参数,也可以通过xcodebuild -list获取,一般使用DebugRelease
  • archivePath archive后的路径
  • CODE_SIGN_IDENTITY 证书的Inentity
  • PROVISIONING_PROFILE 描述文件UUID


    C34F6B07-F71A-419D-B815-4B8D4D645BA3.png

证书Identity获取:

钥匙串访问->选中证书->上方的标题就是我们需要的Identity

77C51801-49F2-4F01-8449-5636C7C4705C.png

获取Provisioning文件UUID

在xcode8.0以上,Provisioning文件的位置是:

/Users/用户名/Library/MobileDevice/Provisioning Profiles

使用security cms -D -i XXX.mobilprovision查看描述文件的信息

生成ipa文件

xcodebuild -exportArchive -archivePath archive文件的地址.xcarchive  -exportPath 导出的文件夹地址 -exportOptionsPlist "${EXPORT_PLIST}" CODE_SIGN_IDENTITY=证书  PROVISIONING_PROFILE=描述文件UUID

如果你不需要的指定证书和Provisioning文件,可以把上面的两个参数去掉,它会根据你的Xcode配置去匹配

  • exportOptionsPlist 自己创建的plist文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>teamID</key>
        <string>99WG99HF75</string> 
        <key>method</key>
        <string>ad-hoc</string> 
        <key> compileBitcode</key> 
        <false/>
    </dict>
</plist>

这里有三个参数:
teamID: 团队ID
method: ad-hoc或者app-store 如果找不到该参数,就会使用dev证书签名。。。
compileBitcode: 是否需要bitcode

推荐阅读更多精彩内容

  • 本文转自CaryaLiu's Blog。 本文最终实现的是使用脚本打 Ad-hoc 包,并发布测试,当然稍微修改一...
    M_Baron阅读 592评论 1 0
  • 前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段。用户们都是很挑剔的。如果一个公司的推广...
    偏偏就是祢阅读 7,412评论 32 55
  • Java 篇 抽象类 定义 抽象类是使用关键字 abstract 声明的类。抽象类与普通类的最大区别是抽象类不能被...
    bookislife阅读 497评论 0 0
  • 一直觉得自己是一个没太有想法的人,最明显的在于提意见和建议的时候,我经常是那个+1到+10086的人。 进入小灶群...
    鱼妈财商阅读 64评论 4 7
  • 我要告诉所有人,我在平安,我是综合金融服务经理!可,我又不知道该告诉谁! 开始的每一步都异常艰辛,我的第一单会以怎...
    陟缦阅读 43评论 0 0