xworkmate-app/scripts/package-ios-ipa.sh
2026-04-14 13:48:04 +08:00

64 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
root_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
dist_dir="$root_dir/dist/ios"
export_method="${APPLE_EXPORT_METHOD:-ad-hoc}"
app_store_define="${APP_STORE_DEFINE:---dart-define=XWORKMATE_APP_STORE=${XWORKMATE_APP_STORE:-true}}"
source "$root_dir/scripts/ci/apple_signing.sh"
APPLE_SIGNING_CLEANUP_COMMANDS=()
trap apple_run_cleanup EXIT
mkdir -p "$dist_dir"
required_vars=(
APPLE_CERT_P12_BASE64
APPLE_CERT_PASSWORD
APPLE_PROVISION_PROFILE_BASE64
APPLE_KEYCHAIN_PASSWORD
)
missing=()
for var_name in "${required_vars[@]}"; do
if [[ -z "${!var_name:-}" ]]; then
missing+=("$var_name")
fi
done
if [[ "${#missing[@]}" -gt 0 ]]; then
echo "Missing iOS signing secrets: ${missing[*]}" >&2
exit 1
fi
eval "$(python3 "$root_dir/scripts/ci/build_version.py" --format shell)"
app_version="$DISPLAY_VERSION"
app_build="$BUILD_NUMBER"
apple_setup_signing_keychain
apple_install_provision_profile "xworkmate.mobileprovision"
tmp_dir="$APPLE_SIGNING_TMP_DIR"
export_options_path="$tmp_dir/ExportOptions.plist"
sed "s|\${EXPORT_METHOD}|$export_method|g" "$root_dir/ios/ExportOptions.plist" > "$export_options_path"
flutter pub get
flutter build ipa --release \
--build-name="$PLATFORM_RELEASE_VERSION" \
--build-number="$app_build" \
--dart-define="XWORKMATE_DISPLAY_VERSION=$app_version" \
--dart-define="XWORKMATE_BUILD_NUMBER=$app_build" \
"$app_store_define" \
--export-options-plist="$export_options_path"
archive_path="$root_dir/build/ios/archive/Runner.xcarchive"
if [[ -d "$archive_path" ]]; then
bash "$root_dir/scripts/check-apple-export-compliance.sh" "$archive_path"
fi
find "$root_dir/build/ios/ipa" -maxdepth 1 -name '*.ipa' -exec cp {} "$dist_dir/" \;
if ! compgen -G "$dist_dir/*.ipa" >/dev/null; then
echo "No IPA was produced under $dist_dir" >&2
exit 1
fi