M2 app icon M2 Engineering Docs

Operations

Build & CI

  • Xcode with iOS + Mac Catalyst SDKs.
  • macOS environment for Catalyst builds.
  • No network dependency for core app build path.

Local Build Recipes

Simulator build

xcodebuild -project "M2.xcodeproj" -scheme "M2" -configuration Debug -sdk iphonesimulator -destination 'generic/platform=iOS Simulator' CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO clean build

Mac Catalyst build

xcodebuild -project "M2.xcodeproj" -scheme "M2" -configuration Debug -destination "platform=macOS,variant=Mac Catalyst" -derivedDataPath .derivedData build CODE_SIGNING_ALLOWED=NO

Extension target build

xcodebuild -project "M2.xcodeproj" -scheme "M2LiveActivityExtension" -configuration Debug -sdk iphonesimulator -destination 'generic/platform=iOS Simulator' CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO clean build

Run Targets

Target Destination Notes
M2 iPhone Simulator / Device Primary mobile runtime.
M2 My Mac (Mac Catalyst) Desktop runtime with sidebar shell.
M2LiveActivityExtension Built through host app Sleep timer activity rendering.

CI Workflows

  • .github/workflows/ios-ci.yml: app + extension build validation.
  • .github/workflows/ios.yml: baseline iOS build workflow.

Verification Checklist

  • Build succeeds for simulator and Catalyst targets.
  • Playlists tab opens My Playlists hub from clickable heading/arrow.
  • Hover overlay on playlist cards works with play + pin action.
  • Pinned playlists appear and open from desktop sidebar.
  • Desktop Favorites renders 2-column list and opens player correctly.

Troubleshooting

Symptom Action
CoreSimulator warnings in build logs If build still finishes with BUILD SUCCEEDED, treat as environment noise.
Stale derived data artifacts Use local -derivedDataPath .derivedData and clean build.
Desktop UI not updating pinned section Verify defaults key m2_desktop_pinned_playlists_v1 and relaunch shell tab.

Release Checklist

  1. Run simulator + Catalyst builds.
  2. Smoke-test playback, playlists, favorites, and sleep timer.
  3. Validate desktop-specific flows (hover, pin, favorites layout).
  4. Update docs pages if behavior or keys changed.
  5. Tag and push release commit.