name: iOS CI on: push: branches: [main] paths: - "Lendair/**" - ".github/workflows/ios-ci.yml" pull_request: branches: [main] paths: - "Lendair/**" - ".github/workflows/ios-ci.yml" concurrency: group: ios-ci-${{ github.ref }} cancel-in-progress: true jobs: lint: name: Swift Lint runs-on: macos-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Select Xcode run: sudo xcode-select -s ${{ env.XCODE_APP_PATH || '/Applications/Xcode_15.4.app' }} env: XCODE_APP_PATH: ${{ vars.XCODE_APP_PATH || '/Applications/Xcode_15.4.app' }} - name: Swift Format Check run: | swift format lint --recursive Lendair/Models Lendair/Services Lendair/ViewModels Lendair/Views || { echo "::warning::Swift format issues detected (non-blocking)" } build: name: Build runs-on: macos-latest needs: lint steps: - name: Checkout uses: actions/checkout@v4 - name: Select Xcode run: sudo xcode-select -s ${{ env.XCODE_APP_PATH || '/Applications/Xcode_15.4.app' }} env: XCODE_APP_PATH: ${{ vars.XCODE_APP_PATH || '/Applications/Xcode_15.4.app' }} - name: Swift version run: swift --version - name: Resolve dependencies run: swift package resolve working-directory: Lendair - name: Build run: swift build --target LendairApp working-directory: Lendair test: name: Test runs-on: macos-latest needs: build steps: - name: Checkout uses: actions/checkout@v4 - name: Select Xcode run: sudo xcode-select -s ${{ env.XCODE_APP_PATH || '/Applications/Xcode_15.4.app' }} env: XCODE_APP_PATH: ${{ vars.XCODE_APP_PATH || '/Applications/Xcode_15.4.app' }} - name: Run tests run: swift test working-directory: Lendair deploy-testflight: name: Deploy to TestFlight runs-on: macos-latest needs: test if: github.ref == 'refs/heads/main' && github.event_name == 'push' steps: - name: Checkout uses: actions/checkout@v4 - name: Select Xcode run: sudo xcode-select -s ${{ env.XCODE_APP_PATH || '/Applications/Xcode_15.4.app' }} env: XCODE_APP_PATH: ${{ vars.XCODE_APP_PATH || '/Applications/Xcode_15.4.app' }} - name: Generate Xcode project run: swift package generate-xcodeproj working-directory: Lendair - name: Create keychain for code signing run: | security create-keychain -p "" build.keychain security default-keychain -s build.keychain security unlock-keychain -p "" build.keychain security set-keychain-settings -t 3600 -u build.keychain - name: Create Export Options Plist run: | cat > Lendair/ExportOptions.plist << EOF method app-store uploadBitcode uploadSymbols compileBitcode EOF - name: Archive with xcodebuild run: | xcodebuild archive \ -project Lendair/Lendair.xcodeproj \ -scheme LendairApp \ -configuration Release \ -destination "generic/platform=iOS" \ -archivePath Lendair/build/Lendair.xcarchive \ CODE_SIGN_STYLE=Automatic \ PROVISIONING_PROFILE_SPECIFIER=Automatic \ DEVELOPMENT_TEAM=${{ secrets.APPLE_TEAM_ID }} - name: Export IPA run: | xcodebuild -exportArchive \ -archivePath Lendair/build/Lendair.xcarchive \ -exportPath Lendair/build/export \ -exportOptionsPlist Lendair/ExportOptions.plist - name: Upload to TestFlight uses: apple-actions/upload-testflight-binary@v1 with: app-path: Lendair/build/export/LendairApp.ipa github-token: ${{ secrets.GITHUB_TOKEN }} env: APPLE_ID: ${{ secrets.APPLE_ID }} APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}