公告

微信

欢迎大家私信交流

Skip to content

自动打包

一键完成以下步骤:

  1. 打包ipa和apk
  2. 上传app托管平台
  3. 发送飞书提醒

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>&lt;none&gt;</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

参考资料

ios签名机制

ios签名原理

ios打包-xcode命令行

ios和android提交审核

上次更新于: