用 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/"
-
CODE_SIGN_IDENTITY 可以通过 Keychain ,找到证书,点开简介,把证书名字复制过来,如图
证书
-
PROVISIONING_PROFILE 可以在
~/Library/MobileDevice/Provisioning Profile
中找到
PP文件
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。
网友评论