To prepare the Flutter environment in Xcode Cloud, create a ci_post_clone.sh script located in ios/ci_scripts/. This script must handle Flutter installation based on the machine architecture (arm64 vs x86_64), disable telemetry, run flutter pub get, manually generate Generated.xcconfig if missing (to ensure pod install works), and execute pod install.
Critical constraints:
- Do not use
sudo (it fails silently in Xcode Cloud). - Do not use
--repo-update with pod install due to SSL expiration issues with the CocoaPods Source CDN. - Avoid activating
flutterfire_cli without Firebase to prevent 15-minute timeouts. - Use
uname -m to detect architecture for the correct Flutter SDK download URL.
#!/bin/sh
set -e
FLUTTER_VERSION="3.38.5"
FLUTTER_DIR="$HOME/flutter"
REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
echo "==> Installation de Flutter $FLUTTER_VERSION"
ARCH=$(uname -m)
if [ "$ARCH" = "arm64" ]; then
FLUTTER_URL="https://storage.googleapis.com/flutter_infra_release/releases/stable/macos/flutter_macos_arm64_${FLUTTER_VERSION}-stable.zip"
else
FLUTTER_URL="https://storage.googleapis.com/flutter_infra_release/releases/stable/macos/flutter_macos_${FLUTTER_VERSION}-stable.zip"
fi
curl -fsSL -o /tmp/flutter.zip "$FLUTTER_URL"
unzip -q /tmp/flutter.zip -d "$HOME"
rm /tmp/flutter.zip
export PATH="$FLUTTER_DIR/bin:$PATH"
flutter config --no-analytics --suppress-analytics 2>/dev/null || true
cd "$REPO_ROOT"
flutter pub get
mkdir -p ios/Flutter
if [ ! -f "ios/Flutter/Generated.xcconfig" ]; then
cat > ios/Flutter/Generated.xcconfig << XCCONFIG
FLUTTER_ROOT=${FLUTTER_DIR}
FLUTTER_APPLICATION_PATH=${REPO_ROOT}
COCOAPODS_PARALLEL_CODE_SIGN=true
FLUTTER_TARGET=lib/main.dart
FLUTTER_BUILD_DIR=build
FLUTTER_BUILD_MODE=release
DART_DEFINES=
DART_OBFUSCATION=false
TRACK_WIDGET_CREATION=false
TREE_SHAKE_ICONS=false
PACKAGE_CONFIG=.dart_tool/package_config.json
XCCONFIG
fi
cd "$REPO_ROOT/ios"
pod install