name: Apple on: pull_request: paths: - "apple/**" - "version.properties" - "packaging/version/**" - "crates/vnidrop/**" - "crates/uniffi-bindgen/**" - "Cargo.toml" - "Cargo.lock" - "Makefile" - "config.mk" - "make/**" - ".github/workflows/apple.yml" - "localization/**" push: branches: - master paths: - "apple/**" - "version.properties" - "packaging/version/**" - "crates/vnidrop/**" - "crates/uniffi-bindgen/**" - "Cargo.toml" - "Cargo.lock" - "Makefile" - "config.mk" - "make/**" - ".github/workflows/apple.yml" - "localization/**" permissions: contents: read concurrency: group: apple-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: build-test: runs-on: macos-latest timeout-minutes: 75 steps: - name: Checkout uses: actions/checkout@v4 - name: Select Xcode # Pin so the simulator device name below stays predictable. run: sudo xcode-select -s /Applications/Xcode.app - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable with: targets: aarch64-apple-ios,aarch64-apple-ios-sim,x86_64-apple-ios,aarch64-apple-darwin - name: Cache Cargo uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git target key: apple-cargo-${{ hashFiles('Cargo.lock') }} restore-keys: apple-cargo- - name: Install XcodeGen run: brew install xcodegen - name: Install SwiftLint # Required by the VniDrop target's SwiftLint build phase (typed-resources rules). run: brew install swiftlint - name: Install Bun # The Apple l10n catalog (Localizable.xcstrings) and L10n.swift are # generated from localization/strings.json at build time, not tracked. uses: oven-sh/setup-bun@v2 - name: Build and test Apple app run: make check-apple - name: Build direct-download macOS target (Sparkle, unsigned) # Keeps the VniDropDirect (.dmg/Sparkle) target compiling; signing and # notarization happen only in apple-release.yml on a tag. run: make build-apple-macos-direct