diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 86cd028..655af05 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -15,7 +15,7 @@ concurrency: jobs: simulator: - runs-on: macos-15 + runs-on: xcode-27 timeout-minutes: 25 steps: - uses: actions/checkout@v4 @@ -24,6 +24,7 @@ jobs: - name: Inspect toolchain and project run: | xcodebuild -version + xcodebuild -version | head -n 1 | grep -E "^Xcode 27([.]|$)" swift --version python3 tools/validate_project.py xcodebuild -list -project MusicBridge.xcodeproj @@ -94,7 +95,7 @@ jobs: sleep 1 xcrun simctl io "$SIMULATOR_ID" screenshot build/live-card-light-screen.png RUNTIME=$(python3 -c 'import json,os; d=json.load(open("/tmp/musicbridge-simulators.json")); print(next(k for k,v in d["devices"].items() if any(x["udid"]==os.environ["SIMULATOR_ID"] for x in v)))') - COMPACT_ID=$(xcrun simctl create MusicBridge-Compact com.apple.CoreSimulator.SimDeviceType.iPhone-SE-3rd-generation "$RUNTIME") + COMPACT_ID=$(python3 -c 'import json,os; d=json.load(open("/tmp/musicbridge-simulators.json")); v=next(v for v in d["devices"].values() if any(x["udid"]==os.environ["SIMULATOR_ID"] for x in v)); candidates=[x for x in v if x.get("isAvailable") and x.get("name", "").startswith("iPhone") and x["udid"]!=os.environ["SIMULATOR_ID"]]; print(min(candidates,key=lambda x:("Max" in x["name"] or "Plus" in x["name"], "Pro" in x["name"], x["name"]))["udid"])') xcrun simctl bootstatus "$COMPACT_ID" -b xcrun simctl install "$COMPACT_ID" DerivedData/Build/Products/Debug-iphonesimulator/MusicBridge.app xcrun simctl launch "$COMPACT_ID" ru.yukinoki.musicbridge --preview-player