Skip to content

Fix xcodegen clobbering Info.plist/entitlements; add device-install script#1

Merged
JacobStephens2 merged 2 commits into
mainfrom
fix/xcodegen-infoplist-entitlements
May 31, 2026
Merged

Fix xcodegen clobbering Info.plist/entitlements; add device-install script#1
JacobStephens2 merged 2 commits into
mainfrom
fix/xcodegen-infoplist-entitlements

Conversation

@JacobStephens2
Copy link
Copy Markdown
Owner

Problem

XcodeGen's info:/entitlements: blocks generate those files on every xcodegen generate, overwriting the hand-authored ones in the source tree. Because project.yml carried no properties:, each run silently stripped required keys — and since CI only checks compilation, the loss never surfaced:

  • iOS lost UIBackgroundModes=[audio] (background audio for long sessions), MPNowPlayingInfoPropertyMediaType, launch screen + orientations.
  • watchOS lost WKApplication=true → installd rejects the embedded watch bundle, blocking install of the iOS app on device/simulator.
  • macOS lost NSHighResolutionCapable, now-playing media type, and the app-sandbox / network.client entitlements (built unsandboxed).

Fix

Move these keys into project.yml's info.properties / entitlements.properties so xcodegen emits them every time. Also add WKCompanionAppBundleIdentifier to pair the watch app with its iOS host (referenced in a comment but never actually present).

Plus

apps/apple/scripts/install-device.sh — one command to build, sign, install, and launch CascadeiOS on a connected iPhone (auto-detects device + team, registers the device on first run).

Verified

  • Regenerated bundles carry the keys (UIBackgroundModes, WKApplication, sandbox entitlement).
  • Full iOS+watch bundle installs on the simulator.
  • Built, signed, installed, and launched on a physical iPhone 15 Pro.
  • macOS app builds sandboxed and runs.

🤖 Generated with Claude Code

admin and others added 2 commits May 29, 2026 23:56
XcodeGen's `info:`/`entitlements:` blocks *generate* those files on every
`xcodegen generate`, overwriting the hand-authored ones in the source tree.
Because project.yml carried no `properties:`, each run silently stripped
required keys, and the loss only ever showed up at runtime (CI checks
compilation only), so it went unnoticed:

- iOS: lost `UIBackgroundModes=[audio]` (background audio for long sessions),
  `MPNowPlayingInfoPropertyMediaType`, launch screen + orientations.
- watchOS: lost `WKApplication=true` — installd then rejects the embedded
  watch bundle, blocking install of the iOS app on device/simulator.
- macOS: lost `NSHighResolutionCapable`, now-playing media type, and the
  app-sandbox / network.client entitlements (built unsandboxed).

Move these keys into project.yml's `info.properties` / `entitlements.properties`
so xcodegen emits them every time. Also add `WKCompanionAppBundleIdentifier`
to pair the watch app with its iOS host (referenced in a comment but never
actually present). Verified: the regenerated bundles carry the keys, the
macOS app is sandboxed again, and the full iOS+watch bundle installs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…iPhone

Auto-detects the connected device UDID and the Apple Development team (from
the signing cert), builds CascadeiOS with automatic signing, and installs +
launches it via devicectl. Uses -allowProvisioningDeviceRegistration so a
freshly-connected device is registered with the team on first run.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@JacobStephens2 JacobStephens2 merged commit 156f6ac into main May 31, 2026
1 check passed
@JacobStephens2 JacobStephens2 deleted the fix/xcodegen-infoplist-entitlements branch May 31, 2026 03:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant