name: Apple on: pull_request: paths: - ".github/workflows/apple.yml" - "appleApp/**" - "build-logic/**" - "core/**" - "data/**" - "player/**" - "shared/**" - "gradle/**" - "gradle.properties" - "settings.gradle.kts" - "build.gradle.kts" push: branches: [master] paths: - ".github/workflows/apple.yml" - "appleApp/**" - "build-logic/**" - "core/**" - "data/**" - "player/**" - "shared/**" - "gradle/**" - "gradle.properties" - "settings.gradle.kts" - "build.gradle.kts" workflow_dispatch: inputs: fluxa_core_ref: description: Fluxa Rust core ref to build required: false default: master type: string permissions: contents: read jobs: ios: name: iOS simulator runs-on: macos-26 timeout-minutes: 45 steps: - uses: actions/checkout@v7 - uses: actions/checkout@v7 with: repository: FluxaMedia/fluxa-core path: fluxa-core ref: ${{ inputs.fluxa_core_ref || 'master' }} - name: Link sibling Rust core run: ln -sfn "$GITHUB_WORKSPACE/fluxa-core" "$(dirname "$GITHUB_WORKSPACE")/fluxa-core" - uses: actions/setup-java@v5 with: distribution: temurin java-version: "17" - uses: gradle/actions/setup-gradle@v4 - name: Set up Rust uses: dtolnay/rust-toolchain@master with: toolchain: stable targets: aarch64-apple-ios,aarch64-apple-ios-sim,x86_64-apple-ios,aarch64-apple-tvos,aarch64-apple-tvos-sim - name: Cache Rust build uses: Swatinem/rust-cache@v2 with: workspaces: fluxa-core cache-on-failure: true - name: Set up XcodeGen run: | if ! command -v xcodegen >/dev/null; then brew install xcodegen fi - name: Verify iOS shared code run: >- ./gradlew --no-daemon checkAppleTypedCatalogBridge checkSharedPlayerBoundary :core:linkIosSimulatorArm64 :data:compileIosMainKotlinMetadata :player:compileIosMainKotlinMetadata :shared:iosSimulatorArm64Test - name: Verify Apple streaming bridge working-directory: fluxa-core run: cargo test -p fluxa_streaming_engine --no-default-features --features apple --lib - name: Generate Apple host project working-directory: appleApp run: xcodegen generate - name: Build Fluxa Rust core env: FLUXA_BUILD_STREAMING_ENGINE: "1" run: appleApp/scripts/build-rust-core-xcframework.sh - name: Build iOS host run: >- xcodebuild -project appleApp/FluxaApple.xcodeproj -scheme FluxaIos -sdk iphonesimulator -destination 'generic/platform=iOS Simulator' ARCHS=arm64 CODE_SIGNING_ALLOWED=NO build tvos: name: tvOS simulator runs-on: macos-26 timeout-minutes: 45 steps: - uses: actions/checkout@v7 - uses: actions/checkout@v7 with: repository: FluxaMedia/fluxa-core path: fluxa-core ref: ${{ inputs.fluxa_core_ref || 'master' }} - name: Link sibling Rust core run: ln -sfn "$GITHUB_WORKSPACE/fluxa-core" "$(dirname "$GITHUB_WORKSPACE")/fluxa-core" - uses: actions/setup-java@v5 with: distribution: temurin java-version: "17" - uses: gradle/actions/setup-gradle@v4 - name: Set up Rust uses: dtolnay/rust-toolchain@master with: toolchain: stable targets: aarch64-apple-ios,aarch64-apple-ios-sim,x86_64-apple-ios,aarch64-apple-tvos,aarch64-apple-tvos-sim - name: Cache Rust build uses: Swatinem/rust-cache@v2 with: workspaces: fluxa-core cache-on-failure: true - name: Set up XcodeGen run: | if ! command -v xcodegen >/dev/null; then brew install xcodegen fi - name: Verify tvOS shared code run: >- ./gradlew --no-daemon checkAppleTvosKmpBoundary checkSharedPlayerBoundary :core:linkDebugFrameworkTvosSimulatorArm64 :data:linkDebugFrameworkTvosSimulatorArm64 :player:linkDebugFrameworkTvosSimulatorArm64 :core:tvosSimulatorArm64Test :data:tvosSimulatorArm64Test :player:tvosSimulatorArm64Test - name: Generate Apple host project working-directory: appleApp run: xcodegen generate - name: Build Fluxa Rust core run: appleApp/scripts/build-rust-core-xcframework.sh - name: Build tvOS host run: >- xcodebuild -project appleApp/FluxaApple.xcodeproj -scheme FluxaTvos -sdk appletvsimulator -destination 'generic/platform=tvOS Simulator' ARCHS=arm64 CODE_SIGNING_ALLOWED=NO build