eleven / ocho Public

docs: how a team member builds Eleven on device with their own Apple ID (#81)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Paul Campbell baa0cb3a722bb69d253f53ae53379dcfb3886925 parent a5a2317
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.