#!/bin/zsh set -e d=${0:a:h} cd $d source $d/.env xcrun simctl uninstall booted $BUNDLE_ID echo "Running iOS preview workflow..." cd "$REPO_DIR" # 0. Environment Setup (Fix Node Version) export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm echo "Checking Node version..." if command -v nvm >/dev/null; then nvm use 22 || nvm use 20 || echo "Warning: Could not switch to Node 22/20. Current: $(node -v)" else echo "nvm not found, using system node: $(node -v)" fi # 1. Install dependencies echo "1. Installing dependencies (yarn)..." yarn install # 1.5. Copy assets echo "1.5. Copying assets..." ASSETS_DIR="${0:a:h}/assets" if [ -d "$ASSETS_DIR" ]; then cp -rf "$ASSETS_DIR/"* "$REPO_DIR/assets/" echo "✅ Copied all assets (including logo.png, logo-1024.png)" else echo "⚠️ Warning: $ASSETS_DIR not found" fi # 2. Prebuild (Generate ios directory) echo "2. Running Expo Prebuild..." # Clean old ios folder to remove old entitlements/AppClip targets rm -rf ios npx expo prebuild --platform ios --clean # 3. CocoaPods echo "3. Installing CocoaPods..." # Ensure PATH includes Homebrew ruby gems if needed export PATH="/opt/homebrew/lib/ruby/gems/3.4.0/bin:$PATH" cd ios pod install cd .. # 4. Signing (Manual Step) echo "4. Opening Xcode for Signing..." XCODE_PROJ="ios/${APP_NAME}.xcodeproj" # Fallback search if variable name logic differs if [ ! -d "$XCODE_PROJ" ]; then XCODE_PROJ=$(find ios -name "*.xcodeproj" | head -n 1) fi open "$XCODE_PROJ" echo "========================================================" echo " [ACTION REQUIRED] " echo " Xcode opened ($XCODE_PROJ)." echo " 1. Go to 'Signing & Capabilities' tab." echo " 2. Select your Team." echo " 3. Verify 'App Clip' target is gone." echo " 4. Ensure no red errors exist." echo " Press ENTER here once you are done to continue building." echo "========================================================" read # 5. Run echo "5. Building and Running..." # If user wants specific device ID, uncomment below, otherwise let Expo ask/pick boot simulator case $1 in d|devicei) npx expo run:ios --device "$DEVICE_ID" --configuration Release ;; *) npx expo run:ios ;; esac