-
Couldn't load subscription status.
- Fork 0
about ios codesigning
liubin ouyang edited this page Jun 11, 2017
·
1 revision
iOS App 签名的原理 这篇文章对原理讲解很清楚。
如果要对iOS应用安装包做自动签名,需要提供以下信息:
- 私钥和证书,一般是以p12文件的形式提供,同时也要提供p12文件的密码。
- Provisioning Profile:包含了 证书 / Entitlements ,测试设备的device id等数据。
日常做持续集成的过程中,基本流程如下:
- 创建一个专门用于签名的Keychain。
- 解锁Keychain。
- 将证书、私钥(p12文件)导入keychain。
- 根据Provisioning Profile确定identity 并生成 entitlements.plist。
- 执行
security set-key-partition-list,具体原因参考 security / codesign in Sierra: Keychain ignores access control settings and UI-prompts for permission - 解压安装包。
- 重签名,指定identity和entitlements。
- 压缩生成新的安装包。
一段示例shell代码如下:
INPUT_PACKAGE=/data/work/app.ipa
OUTPUT_PACKAGE=/data/work/app-development-signed.ipa
TEMP_PATH=/tmp/codesign/
P12_FILE=/data/work/development_key_and_certificate.p12
P12_PASSWORD=1234
PROVISION_PROFILE=/data/work/development.mobileprovision
IDENTITY="iPhone Developer: Ze Ming (T5FWQ2TQ69)"
cd $HOME/Library/Keychains/
rm -f build.keychain build.keychain-db
security create-keychain -p mysecretpassword build.keychain
security list-keychain -s build.keychain login.keychain
security unlock-keychain -p mysecretpassword build.keychain
security set-keychain-settings -l build.keychain
security import $P12_FILE -P $P12_PASSWORD -k build.keychain -T /usr/bin/codesign
# https://stackoverflow.com/a/40039594/223545
security set-key-partition-list -S apple-tool:,apple: -s -k mysecretpassword build.keychain
security find-identity -v build.keychain
rm -rf $TEMP_PATH
mkdir -p $TEMP_PATH
unzip -d $TEMP_PATH $INPUT_PACKAGE >/dev/null
app_path=$(find $TEMP_PATH -type d -iname '*.app')
rm -rf $app_path/_CodeSignature/*
cp $PROVISION_PROFILE $app_path/embedded.mobileprovision
/usr/bin/codesign --deep --force --verbose --keychain build.keychain --sign "$IDENTITY" "$app_path"
cd $TEMP_PATH && zip -r $OUTPUT_PACKAGE .