docs: how a team member builds Eleven on device with their own Apple ID (#81)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 file changed,
+37
−0
ios/README.md+37 −0
diff --git a/ios/README.md b/ios/README.md| index c5852cd..19b1f84 100644 |
| --- a/ios/README.md |
| +++ b/ios/README.md |
| @@ -178,3 +178,40 @@ To go live (needs a paid Apple Developer membership): |
| `<TeamID>.<bundle id>.shared`). |
| 4. Dev builds register with `sandbox: true` (`#if DEBUG`) and are delivered via |
| Apple's sandbox gateway; TestFlight/App Store builds use production. |
| + |
| +## Building on a device as a team member (not the account holder) |
| + |
| +Once the account holder invites you to their Apple Developer team (App Store |
| +Connect → Users and Access, **Developer** or Admin role), you build with **your |
| +own Apple ID** — no shared credentials: |
| + |
| +1. Xcode → Settings → Accounts → add your Apple ID (the one that was invited). |
| +2. Sign with the **shared team** and the **existing bundle id** so you reuse the |
| + already-configured App ID (it carries the Push capability + the shared |
| + keychain group). Easiest is the command line — automatic signing mints *your* |
| + development cert and registers your device under the team: |
| + |
| + ```sh |
| + cd ios && xcodegen generate |
| + xcodebuild -project LChat.xcodeproj -scheme LChat -destination 'generic/platform=iOS' \ |
| + -derivedDataPath build -allowProvisioningUpdates \ |
| + DEVELOPMENT_TEAM=<TEAM_ID> LCHAT_APP_BUNDLE_ID=com.rushedsunlight.eleven \ |
| + CODE_SIGN_STYLE=Automatic build |
| + xcrun devicectl device install app --device <YOUR_UDID> \ |
| + build/Build/Products/Debug-iphoneos/LChat.app |
| + ``` |
| + |
| + In Xcode's UI instead: pick the team in Signing & Capabilities and set the |
| + bundle id to `com.rushedsunlight.eleven`, then ⌘R. |
| + |
| +Do **not** build with the default `com.lchat.client` bundle id against the shared |
| +team — that would try to mint a new App ID without the Push/keychain setup, and |
| +enabling push on it needs an Admin. Reusing `com.rushedsunlight.eleven` gives you |
| +push + on-device decryption with no further config. (`<TEAM_ID>` and the shared |
| +keychain group's prefix are the same team, so `SharedThreadKeys` matches for |
| +every member automatically.) |
| + |
| +If you'd rather not join the team, build with your **own** free personal team and |
| +a unique `LCHAT_APP_BUNDLE_ID` — but first remove `aps-environment` and the |
| +`keychain-access-groups` from `LChat/LChat.entitlements` (a free team can't |
| +provision them); you'll lose push locally but everything else runs. |