自动打包
一键完成以下步骤:
- 打包ipa和apk
- 上传app托管平台
- 发送飞书提醒
ios打包
签名/描述文件更新
采用手动签名。
安装描述文件,实际是把描述文件放到~/Library/MobileDevice/Provisioning Profiles
目录,并重命名描述文件为$uuid.mobileprovision
。
uuid
可以从描述文件读取,每个描述文件的uuid
唯一。
sh
uuid=$(grep UUID -A1 -a "$file" | grep -io '[-A-F0-9]\{36\}')
cp "$file" ~/Library/MobileDevice/Provisioning\ Profiles/"$uuid".mobileprovision
导出配置
命令行打包,通过ExportOptions.plist
文件指定打包的teamId、描述文件信息导出ipa
。
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>compileBitcode</key>
<true/>
<key>destination</key>
<string>export</string>
<key>method</key>
<string>ad-hoc</string>
<key>provisioningProfiles</key>
<dict>
<key>com.test.example</key>
<string>example_adhoc</string>
<key>com.test.example.developNSE</key>
<string>example_adhoc_nse</string>
</dict>
<key>signingCertificate</key>
<string>Apple Distribution</string>
<key>signingStyle</key>
<string>manual</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>XXXXXXXXXX</string>
<key>thinning</key>
<string><none></string>
</dict>
</plist>
打包命令
bash
fvm flutter build ipa --target lib/main.dart --flavor develop --export-options-plist ios/provision/DevelopExportOptions.plist
安卓打包
打包命令
target和flavor根据实际情况修改
android打包有可能会内存溢出,可以修改gradle.properties文件。org.gradle.jvmargs=-Xmx2560M
bash
fvm flutter build apk --target lib/main.dart --flavor develop
apk签名
~/Library/Android/sdk/build-tools
目录下自带各sdk版本的签名工具,需要先添加到PATH。
shell
# 签名工具添加至PATH
export PATH=$HOME/Library/Android/sdk/build-tools/34.0.0:$PATH
# 给apk签名
apksigner sign --ks ~/Works/code/keystore/android.keystore \
--ks-key-alias android.keystore \
--ks-pass pass:123456 \
--out "$PROJECT_PATH"/build/app/outputs/flutter-apk/signed.apk \
"$PROJECT_PATH"/build/app/outputs/flutter-apk/app-develop-release.apk
完整打包脚本
shell
#!/bin/zsh
# jenkins脚本不会自动加入用户的环境变量,需要手动添加
export PATH=/usr/local/bin:/opt/homebrew/bin/:"$PATH"
# xcode打包需要指定en_US.UTF-8
export LANG=en_US.UTF-8
source ~/.zshrc
PROJECT_PATH=~/Works/code
cd "$PROJECT_PATH" || exit 1
echo "------------------ 更新代码..."
git reset --hard
git checkout dev
git pull
git submodule sync
git submodule init
git submodule update
echo "------------------ 更新描述文件..."
# 获取描述文件uuid,存放文件到xcode描述文件目录
for file in "$PROJECT_PATH"/ios/provision/*; do
if [ "${file##*.}" = "mobileprovision" ]; then
uuid=$(grep UUID -A1 -a "$file" | grep -io '[-A-F0-9]\{36\}')
cp "$file" ~/Library/MobileDevice/Provisioning\ Profiles/"$uuid".mobileprovision
fi
done
fvm use 3.13.9 -f
fvm flutter clean
rm -rf build
echo "------------------ IOS开始打包"
rm -rf ios/Podfile.lock ios/.symlinks ios/Pods
# 打ipa包 需要指定target、flavor、ExportOptions.plist
fvm flutter build ipa --target lib/main.dart --flavor develop --export-options-plist ios/provision/DevelopExportOptions.plist
echo "------------------ Android开始打包"
# 打apk包 需要指定target、flavor
rm -rf android/.gradle
fvm flutter build apk --target lib/main.dart --flavor develop
# apk签名
apksigner sign --ks ~/Works/code/keystore/android.keystore \
--ks-key-alias android.keystore \
--ks-pass pass:123456 \
--out "$PROJECT_PATH"/build/app/outputs/flutter-apk/signed.apk \
"$PROJECT_PATH"/build/app/outputs/flutter-apk/app-develop-release.apk