name: iOS → App Store (GitHub Actions) on: push: branches: [main] paths: ['ios/**', '.github/workflows/ios-deploy.yml'] release: types: [published] workflow_dispatch: inputs: lane: description: 'beta (TestFlight) eller release (App Store)' required: true default: 'beta' type: choice options: [beta, release] jobs: build-ios: name: Build & Deploy iOS runs-on: macos-14 # GitHub-hosted Apple Silicon — ingen egen Mac behövs env: BUNDLE_ID: ${{ secrets.BUNDLE_ID }} APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} ASC_API_KEY_ID: ${{ secrets.ASC_API_KEY_ID }} ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }} ASC_API_KEY: ${{ secrets.ASC_API_KEY }} MATCH_GIT_URL: ${{ secrets.MATCH_GIT_URL }} MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} FASTLANE_SKIP_UPDATE_CHECK: "1" FASTLANE_HIDE_CHANGELOG: "1" steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 with: ruby-version: '3.3' bundler-cache: true working-directory: ios - name: Select Xcode run: | sudo xcode-select --switch /Applications/Xcode_16.2.app/Contents/Developer xcodebuild -version - name: Write ASC API Key run: | mkdir -p /tmp/asc echo "$ASC_API_KEY" | base64 --decode > /tmp/asc/AuthKey_${ASC_API_KEY_ID}.p8 cat > /tmp/asc/api_key.json < /tmp/ExportOptions.plist < methodapp-store teamID${APPLE_TEAM_ID} signingStylemanual provisioningProfiles ${BUNDLE_ID}match AppStore ${BUNDLE_ID} EOF xcodebuild -exportArchive \ -archivePath /tmp/AAMOS.xcarchive \ -exportPath /tmp/AAMOS-ipa \ -exportOptionsPlist /tmp/ExportOptions.plist - name: Upload to TestFlight / App Store run: | LANE="${{ github.event.inputs.lane || (github.event_name == 'release' && 'release' || 'beta') }}" if [ "$LANE" = "release" ]; then echo "→ Submitting to App Store" cd ios && bundle exec fastlane release else echo "→ Uploading to TestFlight" xcrun altool --upload-app --type ios \ --file /tmp/AAMOS-ipa/*.ipa \ --apiKey "${ASC_API_KEY_ID}" \ --apiIssuer "${ASC_ISSUER_ID}" \ --output-format json fi - name: Notify Telegram if: always() env: TG_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} TG_CHAT: ${{ secrets.TELEGRAM_CHAT_ID }} run: | STATUS="${{ job.status == 'success' && '✅' || '❌' }}" MSG="${STATUS} iOS build %23${{ github.run_number }} — ${{ job.status }}%0ABranch: ${{ github.ref_name }}%0ACommit: ${{ github.event.head_commit.message }}" curl -s "https://api.telegram.org/bot${TG_TOKEN}/sendMessage" \ -d "chat_id=${TG_CHAT}&text=${MSG}" > /dev/null - name: Cleanup if: always() run: rm -rf /tmp/asc /tmp/AAMOS.xcarchive /tmp/AAMOS-ipa