|
|
|
@ -1,14 +1,15 @@ |
|
|
|
#!/bin/bash |
|
|
|
# usage: |
|
|
|
# ./scripts/build_ios.sh --output /absolute/path/to/output [extra flutter build args...] |
|
|
|
# ./scripts/build_ios.sh --output /absolute/path/to/output.ipa [extra flutter build args...] |
|
|
|
# ./scripts/build_ios.sh --output /absolute/path/to/dir [extra flutter build args...] |
|
|
|
|
|
|
|
set -euo pipefail |
|
|
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
|
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" |
|
|
|
|
|
|
|
DEFAULT_BUILD_DIR="$PROJECT_ROOT/build/ios_release" |
|
|
|
OUTPUT_DIR="$DEFAULT_BUILD_DIR" |
|
|
|
DEFAULT_OUTPUT_DIR="$PROJECT_ROOT/build/ios_release" |
|
|
|
OUTPUT_DIR="$DEFAULT_OUTPUT_DIR" |
|
|
|
EXTRA_ARGS=() |
|
|
|
|
|
|
|
while [[ $# -gt 0 ]]; do |
|
|
|
@ -41,23 +42,35 @@ flutter clean |
|
|
|
echo "📚 获取依赖..." |
|
|
|
flutter pub get |
|
|
|
|
|
|
|
echo "🚀 开始构建 iOS 安装包..." |
|
|
|
echo "🚀 开始构建 iOS IPA..." |
|
|
|
if [[ ${#EXTRA_ARGS[@]} -gt 0 ]]; then |
|
|
|
flutter build ios --release "${EXTRA_ARGS[@]}" |
|
|
|
flutter build ipa --release "${EXTRA_ARGS[@]}" |
|
|
|
else |
|
|
|
flutter build ios --release |
|
|
|
flutter build ipa --release |
|
|
|
fi |
|
|
|
|
|
|
|
# iOS build output is typically in build/ios/iphoneos/ |
|
|
|
BUILD_OUTPUT_DIR="$PROJECT_ROOT/build/ios/iphoneos" |
|
|
|
if [[ -d "$BUILD_OUTPUT_DIR" ]]; then |
|
|
|
echo "📦 复制构建产物到输出目录..." |
|
|
|
mkdir -p "$OUTPUT_DIR" |
|
|
|
cp -R "$BUILD_OUTPUT_DIR"/* "$OUTPUT_DIR/" 2>/dev/null || true |
|
|
|
echo "✅ 构建完成,产物目录:$OUTPUT_DIR" |
|
|
|
# IPA build output is typically in build/ios/ipa/ |
|
|
|
IPA_DIR="$PROJECT_ROOT/build/ios/ipa" |
|
|
|
BUILT_IPA="$(find "$IPA_DIR" -maxdepth 1 -name '*.ipa' -print | head -n 1)" |
|
|
|
|
|
|
|
if [[ -z "$BUILT_IPA" || ! -f "$BUILT_IPA" ]]; then |
|
|
|
echo "❌ 错误: 未找到构建出的 IPA 文件" >&2 |
|
|
|
echo "构建产物目录:$IPA_DIR" >&2 |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
# Determine target path |
|
|
|
if [[ "$OUTPUT_DIR" == *.ipa ]]; then |
|
|
|
# Output is a file path |
|
|
|
TARGET_PATH="$OUTPUT_DIR" |
|
|
|
mkdir -p "$(dirname "$TARGET_PATH")" |
|
|
|
else |
|
|
|
echo "⚠️ 警告: 未找到预期的构建输出目录 $BUILD_OUTPUT_DIR" |
|
|
|
echo "构建产物可能在:$PROJECT_ROOT/build/ios/" |
|
|
|
# Output is a directory |
|
|
|
mkdir -p "$OUTPUT_DIR" |
|
|
|
TARGET_PATH="$OUTPUT_DIR/$(basename "$BUILT_IPA")" |
|
|
|
fi |
|
|
|
|
|
|
|
cp "$BUILT_IPA" "$TARGET_PATH" |
|
|
|
echo "✅ 构建完成,IPA 已保存到:$TARGET_PATH" |
|
|
|
popd >/dev/null |
|
|
|
|