iOS 命令行构建工具

2019-03-30  本文已影响0人  ccnyou

用 xcodebuild 工具尝试了自动编译,后续部署持续集成环境可以用得上,中间踩过一些坑,现记录一下。

目录结构如下:

.
├── HelloWorld          // 代码目录
├── bin                 // 最终输出的 ipa 目录
├── build               // 构建的临时目录
└── tools               // 存放脚本的目录
    ├── build.sh        // 构建脚本文件
    └── options.plist   // 构建选项 plist 文件

build.sh 脚本内容大致如下

#!/bin/bash
SRC_PATH=../HelloWorld       # 代码目录
PROJECT_NAME=HelloWorld      # 项目名称
SCHEME=$PROJECT_NAME         # 项目里面的 scheme
BUILD_DIR=../build           # 编译的临时目录
RESULT_DIR=../bin            # 生成的 ipa 目录
CODE_SIGN_IDENTITY="iPhone Distribution: xxx (xxx)" # 开发者证书名称,后面细说
PROVISIONING_PROFILE="xxx-xxx-xxx-xxx-xxx" # provisioning_profile 文件ID,后面细说

# clean
rm -rf $BUILD_DIR
mkdir $BUILD_DIR

# build archive
xcodebuild archive -workspace "$SRC_PATH/$PROJECT_NAME.xcworkspace" \
                  -scheme $SCHEME \
                  -configuration Release \
                  -archivePath "$BUILD_DIR/$PROJECT_NAME" \
                  CODE_SIGN_IDENTITY="$CODE_SIGN_IDENTITY" \
                  PROVISIONING_PROFILE="$PROVISIONING_PROFILE"

# export archive
xcodebuild -exportArchive -archivePath "$BUILD_DIR/$PROJECT_NAME.xcarchive" \
                          -exportPath "$BUILD_DIR" \
                          -exportOptionsPlist ./options.plist \
                          -allowProvisioningUpdates YES \
                          CODE_SIGN_IDENTITY="$CODE_SIGN_IDENTITY" \
                          PROVISIONING_PROFILE="$PROVISIONING_PROFILE"

# copy bin
cp "$BUILD_DIR/$PROJECT_NAME.ipa" "$RESULT_DIR/"

options.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>method</key>
    <string>app-store</string> // 可选项:app-store, ad-hoc, package, enterprise, development, developer-id
    <key>provisioningProfiles</key>
    <dict>
        <key>com.xxx.xxx</key>  // 包名
        <string>xxx_appstore</string>  // provisioning_profile 文件在 developer.apple.com 下面的名称
    </dict>
</dict>
</plist>

然后在 tools 目录,执行 ./build.sh,代码没有错误的话,bin目录即可看到对应的 ipa。

上一篇 下一篇

猜你喜欢

热点阅读