diff --git a/apps/android/README.md b/apps/android/README.md index 6f12ab126c7..7dfc9aa5f09 100644 --- a/apps/android/README.md +++ b/apps/android/README.md @@ -1,8 +1,8 @@ ## OpenClaw Android App -Status: **extremely alpha**. The app is actively being rebuilt from the ground up. +OpenClaw Android is the officially released Google Play app. It connects to an OpenClaw Gateway as a companion node for chat, voice, approvals, screen, and device-aware automation. -### Rebuild Checklist +### Current App Surface - [x] New 4-step onboarding flow - [x] Connect tab with `Setup Code` + `Manual` modes @@ -18,7 +18,6 @@ Status: **extremely alpha**. The app is actively being rebuilt from the ground u - [x] Authenticated background presence beacons - [x] Voice tab full functionality - [x] Screen tab full functionality -- [ ] Full end-to-end QA and release hardening ## Open in Android Studio @@ -343,5 +342,4 @@ Common failure quick-fixes: ## Contributions -This Android app is currently being rebuilt. Maintainer: @obviyus. For issues/questions/contributions, please open an issue or reach out on Discord. diff --git a/apps/android/VERSIONING.md b/apps/android/VERSIONING.md index 7aa731928f8..056ecfcfc3d 100644 --- a/apps/android/VERSIONING.md +++ b/apps/android/VERSIONING.md @@ -39,7 +39,7 @@ When generating `apps/android/fastlane/metadata/android/en-US/release_notes.txt` Recommended workflow: -- while iterating on a Play internal testing train, keep pending notes under `## Unreleased` +- while iterating on a Google Play release train, keep pending notes under `## Unreleased` - before the production release, move or copy the final notes under `## ` and run sync again ## Release Workflow @@ -51,8 +51,8 @@ Recommended workflow: 5. Run `pnpm android:release:preflight` to validate Play auth, signing, synced versioning, and release notes. 6. Run `ANDROID_SCREENSHOT_AVD= pnpm android:screenshots` to refresh raw Google Play screenshots with a script-managed emulator, or run `pnpm android:screenshots` when exactly one ADB device is already connected. 7. Run `pnpm android:release:archive` to produce the signed Play AAB and third-party APK. -8. Run `pnpm android:release:upload` to upload metadata, screenshots, and the Play AAB to Google Play internal testing. -9. Promote to production manually in Google Play Console. +8. Run `pnpm android:release:upload` to upload metadata, screenshots, and the Play AAB to the configured Google Play track. +9. Complete production rollout manually in Google Play Console when needed. If `pnpm android:release:upload` fails, stop at that failure. Do not continue by uploading archived artifacts through `pnpm android:release:archive`, diff --git a/apps/android/fastlane/SETUP.md b/apps/android/fastlane/SETUP.md index d551acdd4fc..676a0ce3ec2 100644 --- a/apps/android/fastlane/SETUP.md +++ b/apps/android/fastlane/SETUP.md @@ -76,7 +76,7 @@ uses it. With `ANDROID_SCREENSHOT_AVD` or `--avd `, the script can boot a headless emulator, wait for boot completion, stabilize animation settings, capture screenshots, and shut down only the emulator it started. -Upload metadata, release notes, and the Play AAB to the internal testing track: +Upload metadata, release notes, and the Play AAB to the configured Google Play track: ```bash pnpm android:release:upload diff --git a/apps/ios/CHANGELOG.md b/apps/ios/CHANGELOG.md index 84ddfca3a5f..7d1803153a7 100644 --- a/apps/ios/CHANGELOG.md +++ b/apps/ios/CHANGELOG.md @@ -2,13 +2,13 @@ ## 2026.6.11 - 2026-07-01 -Maintenance update for the current OpenClaw beta release. +Maintenance update for the current OpenClaw release. - Refreshed iOS 26 visual styling, Talk controls, Gateway recovery, localization, and App Store screenshots. ## 2026.6.10 - 2026-06-21 -Maintenance update for the current OpenClaw beta release. +Maintenance update for the current OpenClaw release. - Improved notification cleanup, Watch app compatibility, and native file input handling. diff --git a/apps/ios/README.md b/apps/ios/README.md index 8741935c98f..02e1794b19b 100644 --- a/apps/ios/README.md +++ b/apps/ios/README.md @@ -1,19 +1,18 @@ -# OpenClaw iOS (Super Alpha) +# OpenClaw iOS -This iOS app is super-alpha and internal-use only. The first public App Store release targets iPhone and connects to an OpenClaw Gateway as a `role: node`. +OpenClaw iOS is the officially released iPhone app. It connects to an OpenClaw Gateway as a `role: node` for chat, voice, approvals, sharing, and device-aware automation. ## Distribution Status -- Public distribution: App Store Connect app created; production signing is configured through the App Store release Fastlane path. -- Internal TestFlight distribution: uses the same App Store distribution archive uploaded to App Store Connect. -- Local/manual deploy from source via Xcode remains the default development path. +- Public distribution: App Store. +- App Store Connect uploads use the App Store release Fastlane path. +- Local/manual deploy from source via Xcode remains the default development path for app development. -## Super-Alpha Disclaimer +## Support Notes -- Breaking changes are expected. -- UI and onboarding flows can change without migration guarantees. -- Foreground use is the only reliable mode right now. -- Treat this build as sensitive while permissions and background behavior are still being hardened. +- UI and onboarding changes ship through normal app releases. +- Some node commands require foreground access because of iOS platform limits. +- Permissions, background behavior, and push delivery are documented below so release and support checks stay explicit. ## Exact Xcode Manual Deploy Flow @@ -191,7 +190,7 @@ pnpm ios:release:upload -- --version 2026.6.11 --build-number 3 - generates `apps/ios/build/AppStoreRelease.xcconfig` - archives `OpenClaw` - validates the exported IPA's push mode, signed entitlements, and embedded App Store profile - - uploads the IPA to App Store Connect for TestFlight/App Review use + - uploads the IPA to App Store Connect for processing and App Review use - leaves App Review submission for a maintainer to complete manually 8. Expected outputs after a successful run: @@ -220,12 +219,12 @@ pnpm ios:version:sync -- --version 2026.6.11 Recommended flow: -### TestFlight iteration on an existing train +### App Store Connect iteration on an existing train 1. Choose the App Store train explicitly, for example `2026.6.11`. 2. Update `apps/ios/CHANGELOG.md`, usually under `## Unreleased` while iterating. 3. Run `pnpm ios:version:sync -- --version 2026.6.11` after changelog changes. -4. Upload more TestFlight builds with `pnpm ios:release:upload -- --version 2026.6.11`. +4. Upload additional App Store Connect builds with `pnpm ios:release:upload -- --version 2026.6.11`. 5. Let Fastlane bump only the numeric build number. ### Starting the next production release train @@ -254,7 +253,7 @@ See `apps/ios/VERSIONING.md` for the detailed spec. ## APNs Expectations For Official Builds -- Official/TestFlight builds register with the external push relay before they publish `push.apns.register` to the gateway. +- Official App Store builds register with the external push relay before they publish `push.apns.register` to the gateway. - The gateway registration for relay mode contains an opaque relay handle, a registration-scoped send grant, relay origin metadata, and installation metadata instead of the raw APNs token. - The relay registration is bound to the gateway identity fetched from `gateway.identity.get`, so another gateway cannot reuse that stored registration. - The app persists the relay handle metadata locally so reconnects can republish the gateway registration without re-registering on every connect. @@ -269,7 +268,7 @@ See `apps/ios/VERSIONING.md` for the detailed spec. - The operator session is used to fetch `gateway.identity.get`. - `iOS -> relay` - The app registers with the relay over HTTPS using App Attest plus a StoreKit app transaction JWS. - - The relay requires the official production/TestFlight distribution path, which is why local + - The relay requires the official App Store distribution path, which is why local Xcode/dev installs cannot use the hosted relay. - `gateway delegation` - The app includes the gateway identity in relay registration. diff --git a/apps/ios/VERSIONING.md b/apps/ios/VERSIONING.md index 3ea9f2913c4..2951ce02b94 100644 --- a/apps/ios/VERSIONING.md +++ b/apps/ios/VERSIONING.md @@ -125,7 +125,7 @@ pnpm ios:version:sync -- --version 2026.6.11 pnpm ios:release:upload -- --version 2026.6.11 --build-number 3 ``` -## Normal TestFlight iteration workflow +## Normal App Store Connect build iteration workflow 1. choose the App Store release train explicitly, for example `2026.6.11` 2. update `apps/ios/CHANGELOG.md` under `## ` or `## Unreleased` @@ -156,9 +156,9 @@ not appear on GitHub release or tag pages, and they do not participate in the core OpenClaw release machinery. `pnpm ios:release:upload` checks the ref before archive/upload work and records -it only after `upload_to_testflight` succeeds. Existing refs are immutable: the -same ref at the same SHA is accepted, while the same ref at a different SHA -fails. +it only after the App Store Connect upload succeeds. Existing refs are +immutable: the same ref at the same SHA is accepted, while the same ref at a +different SHA fails. Do not create this ref after a manual fallback upload. The ref is release-lane evidence, not a repair mechanism for a failed `pnpm ios:release:upload` run. diff --git a/apps/ios/fastlane/Fastfile b/apps/ios/fastlane/Fastfile index 50df8c00001..16a1194e9d1 100644 --- a/apps/ios/fastlane/Fastfile +++ b/apps/ios/fastlane/Fastfile @@ -1392,7 +1392,7 @@ platform :ios do desc "Generate screenshots, update App Store metadata and review attachment, then upload an App Store build" lane :release_upload do |options| unless ENV["OPENCLAW_IOS_RELEASE_WRAPPER"] == "1" - UI.user_error!("Use `pnpm ios:release:upload`; direct Fastlane TestFlight upload is disabled.") + UI.user_error!("Use `pnpm ios:release:upload`; direct Fastlane upload is disabled.") end release_sha = release_git_sha diff --git a/apps/ios/fastlane/SETUP.md b/apps/ios/fastlane/SETUP.md index 8ce9c1e3eef..4bf910c7be6 100644 --- a/apps/ios/fastlane/SETUP.md +++ b/apps/ios/fastlane/SETUP.md @@ -112,9 +112,9 @@ Upload to App Store Connect: pnpm ios:release:upload -- --version 2026.6.11 ``` -Direct Fastlane TestFlight upload is disabled. Use the package script so the -release wrapper, App Store push mode, and exported-IPA validation gate all run -in the same path. +Direct Fastlane upload is disabled. Use the package script so the release +wrapper, App Store push mode, and exported-IPA validation gate all run in the +same path. Maintainer recovery path for a fresh clone on the same Mac: @@ -152,7 +152,7 @@ Quick verification after upload: - confirm `apps/ios/build/app-store/OpenClaw-.ipa` exists - confirm Fastlane validates the exported IPA before upload - confirm Fastlane prints `Uploaded iOS App Store build: version= short= build=` -- remember that App Store Connect/TestFlight processing can take a few minutes after the upload succeeds +- remember that App Store Connect processing can take a few minutes after the upload succeeds Versioning rules: diff --git a/apps/ios/fastlane/metadata/README.md b/apps/ios/fastlane/metadata/README.md index 1c914c14e01..4b469e7bf7b 100644 --- a/apps/ios/fastlane/metadata/README.md +++ b/apps/ios/fastlane/metadata/README.md @@ -47,7 +47,7 @@ Or set `APP_STORE_CONNECT_API_KEY_PATH`. - Locale files live under `metadata//`, for example `metadata/en-US/` and `metadata/sv-SE/`. Each locale directory should use the public metadata filenames consumed by the `ios metadata` lane. - `release_notes.txt` is generated from `apps/ios/CHANGELOG.md`; after changelog updates, run `pnpm ios:version:sync -- --version `. - `apps/ios/APP-REVIEW-NOTES.md` is rendered to `apps/ios/build/app-review/APP-REVIEW-NOTES.pdf` and uploaded as the App Review attachment when metadata is uploaded. -- Release notes resolve from `## ` first, then fall back to `## Unreleased` while a TestFlight train is still in progress. +- Release notes resolve from `## ` first, then fall back to `## Unreleased` while an App Store Connect build train is still in progress. - When starting a new production release train, sync metadata with `pnpm ios:version:sync -- --version `. - The release upload flow uploads release notes, screenshots, and the App Review PDF attachment before the IPA, and never submits for App Review. - `privacy_url.txt` is set to `https://openclaw.ai/privacy`. diff --git a/apps/ios/fastlane/metadata/en-US/release_notes.txt b/apps/ios/fastlane/metadata/en-US/release_notes.txt index 99279328bfc..b1e7bf5d45c 100644 --- a/apps/ios/fastlane/metadata/en-US/release_notes.txt +++ b/apps/ios/fastlane/metadata/en-US/release_notes.txt @@ -1,3 +1,3 @@ -Maintenance update for the current OpenClaw beta release. +Maintenance update for the current OpenClaw release. - Refreshed iOS 26 visual styling, Talk controls, Gateway recovery, localization, and App Store screenshots. diff --git a/docs/assets/showcase/ios-testflight.jpg b/docs/assets/showcase/ios-testflight.jpg deleted file mode 100644 index 4e19768f974..00000000000 Binary files a/docs/assets/showcase/ios-testflight.jpg and /dev/null differ diff --git a/docs/gateway/configuration-reference.md b/docs/gateway/configuration-reference.md index bd3e5a354ca..aa91f4f67a5 100644 --- a/docs/gateway/configuration-reference.md +++ b/docs/gateway/configuration-reference.md @@ -613,7 +613,7 @@ See [Inferred commitments](/concepts/commitments). - `remote.transport`: `ssh` (default) or `direct` (ws/wss). For `direct`, `remote.url` must be `wss://` for public hosts; plaintext `ws://` is accepted only for loopback, LAN, link-local, `.local`, `.ts.net`, and Tailscale CGNAT hosts. - `remote.remotePort`: gateway port on the remote SSH host. Defaults to `18789`; use this when the local tunnel port differs from the remote gateway port. - `gateway.remote.token` / `.password` are remote-client credential fields. They do not configure gateway auth by themselves. -- `gateway.push.apns.relay.baseUrl`: base HTTPS URL for the external APNs relay used after relay-backed iOS builds publish registrations to the gateway. Public App Store/TestFlight builds use the hosted OpenClaw relay. Custom relay URLs must match a deliberately separate iOS build/deployment path whose relay URL points at that relay. +- `gateway.push.apns.relay.baseUrl`: base HTTPS URL for the external APNs relay used after relay-backed iOS builds publish registrations to the gateway. Public App Store builds use the hosted OpenClaw relay. Custom relay URLs must match a deliberately separate iOS build/deployment path whose relay URL points at that relay. - `gateway.push.apns.relay.timeoutMs`: gateway-to-relay send timeout in milliseconds. Defaults to `10000`. - Relay-backed registrations are delegated to a specific gateway identity. The paired iOS app fetches `gateway.identity.get`, includes that identity in the relay registration, and forwards a registration-scoped send grant to the gateway. Another gateway cannot reuse that stored registration. - `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: temporary env overrides for the relay config above. diff --git a/docs/gateway/configuration.md b/docs/gateway/configuration.md index b2f95fa2aab..7543b93ad55 100644 --- a/docs/gateway/configuration.md +++ b/docs/gateway/configuration.md @@ -337,7 +337,7 @@ candidate contains redacted secret placeholders such as `***`. - Relay-backed push for public App Store/TestFlight builds uses the hosted OpenClaw relay: `https://ios-push-relay.openclaw.ai`. + Relay-backed push for public App Store builds uses the hosted OpenClaw relay: `https://ios-push-relay.openclaw.ai`. Custom relay deployments require a deliberately separate iOS build/deployment path whose relay URL matches the gateway relay URL. If you are using a custom relay build, set this in gateway config: @@ -373,7 +373,7 @@ candidate contains redacted secret placeholders such as `***`. End-to-end flow: - 1. Install an official/TestFlight iOS build. + 1. Install the official iOS app. 2. Optional: configure `gateway.push.apns.relay.baseUrl` on the gateway only when using a deliberately separate custom relay build. 3. Pair the iOS app to the gateway and let both node and operator sessions connect. 4. The iOS app fetches the gateway identity, registers with the relay using App Attest plus the app receipt, and then publishes the relay-backed `push.apns.register` payload to the paired gateway. diff --git a/docs/maturity/scorecard.md b/docs/maturity/scorecard.md index 677a996fdd3..1f9edbdec8d 100644 --- a/docs/maturity/scorecard.md +++ b/docs/maturity/scorecard.md @@ -21,16 +21,16 @@ Use this page to answer one question: which OpenClaw surfaces are credible choic
- 67% + 68% Maturity score
-
+
Alpha Quality + completeness Coverage Experimental - 4% - Quality Alpha - 63% - Completeness Beta - 70% + Quality Alpha - 64% + Completeness Beta - 71%
@@ -92,6 +92,20 @@ Surfaces are ordered by maturity level, completeness, and quality. LTS support i
CompletenessStable87%
Partial - 4
+
+ Android appM4Stable7 areas +
CoverageExperimental0%
+
QualityStable80%
+
CompletenessStable80%
+
None
+
+
+ iOS appM4Stable8 areas +
CoverageExperimental0%
+
QualityStable80%
+
CompletenessStable80%
+
None
+
Agent RuntimeM3Beta9 areas
CoverageExperimental33%
@@ -288,13 +302,6 @@ Surfaces are ordered by maturity level, completeness, and quality. LTS support i
CompletenessAlpha67%
None
-
- Android appM2Alpha7 areas -
CoverageExperimental0%
-
QualityAlpha59%
-
CompletenessAlpha66%
-
None
-
Google ChatM2Alpha5 areas
CoverageExperimental0%
@@ -365,13 +372,6 @@ Surfaces are ordered by maturity level, completeness, and quality. LTS support i
CompletenessAlpha53%
None
-
- iOS appM1Experimental8 areas -
CoverageExperimental0%
-
QualityExperimental41%
-
CompletenessExperimental44%
-
None
-
Nix install pathM1Experimental5 areas
CoverageExperimental0%
@@ -536,6 +536,20 @@ Surfaces are ordered by maturity level, completeness, and quality. LTS support i
CompletenessStable88%
None
+
+ Android appM4Stable7 areas +
CoverageExperimental0%
+
QualityStable80%
+
CompletenessStable80%
+
None
+
+
+ iOS appM4Stable8 areas +
CoverageExperimental0%
+
QualityStable80%
+
CompletenessStable80%
+
None
+
Docker and Podman hostingM3Beta4 areas
CoverageExperimental7%
@@ -564,13 +578,6 @@ Surfaces are ordered by maturity level, completeness, and quality. LTS support i
CompletenessBeta78%
None
-
- Android appM2Alpha7 areas -
CoverageExperimental0%
-
QualityAlpha59%
-
CompletenessAlpha66%
-
None
-
Native WindowsM2Alpha4 areas
CoverageExperimental0%
@@ -585,13 +592,6 @@ Surfaces are ordered by maturity level, completeness, and quality. LTS support i
CompletenessAlpha61%
None
-
- iOS appM1Experimental8 areas -
CoverageExperimental0%
-
QualityExperimental41%
-
CompletenessExperimental44%
-
None
-
Nix install pathM1Experimental5 areas
CoverageExperimental0%
diff --git a/docs/maturity/taxonomy.md b/docs/maturity/taxonomy.md index 1291c8970bc..da6597fff6c 100644 --- a/docs/maturity/taxonomy.md +++ b/docs/maturity/taxonomy.md @@ -121,6 +121,14 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app. macOS Gateway host M4Stable7 areas - 88% complete + + Android app + M4Stable7 areas - 80% complete + + + iOS app + M4Stable8 areas - 80% complete + Docker and Podman hosting @@ -142,10 +150,6 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app. M3Beta8 areas - 78% complete - - Android app - M2Alpha7 areas - 66% complete - Native Windows @@ -157,10 +161,6 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app. M2Alpha4 areas - 61% complete - - iOS app - M1Experimental8 areas - 44% complete - Nix install path @@ -1697,6 +1697,180 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app.
+
+ + + + Official Google Play distribution exists, source build/run docs are maintained, and the Android app is documented as a normal companion node for users. + +
Coverage Experimental - 0%Quality Stable - 80%Completeness Stable - 80%None
+ +
+
AreaCoverageQualityCompletenessDocs
+
+
+ Media Capture + 1 capabilities +
+
Experimental0%
+
Stable80%
+
Stable80%
+
[Android](/platforms/android), [Camera](/nodes/camera)
+
+
+
+ Mobile Chat + 1 capabilities +
+
Experimental0%
+
Stable80%
+
Stable80%
+
[Android](/platforms/android)
+
+
+
+ Connection Setup + 1 capabilities +
+
Experimental0%
+
Stable80%
+
Stable80%
+
[Android](/platforms/android), [Bonjour](/gateway/bonjour), [Pairing](/gateway/pairing)
+
+
+
+ Distribution + 3 capabilities +
+
Experimental0%
+
Stable80%
+
Stable80%
+
[Android](/platforms/android)
+
+
+
+ Settings + 1 capabilities +
+
Experimental0%
+
Stable80%
+
Stable80%
+
[Android](/platforms/android)
+
+
+
+ Voice + 1 capabilities +
+
Experimental0%
+
Stable80%
+
Stable80%
+
[Android](/platforms/android), [Talk](/nodes/talk)
+
+
+
+ Device Runtime + 2 capabilities +
+
Experimental0%
+
Stable80%
+
Stable80%
+
[Android](/platforms/android), [Troubleshooting](/nodes/troubleshooting), [Protocol](/gateway/protocol)
+
+
+ + + +
+ + Official App Store distribution exists, relay-backed push is documented, and the iOS app is documented as a normal companion node for users. + +
Coverage Experimental - 0%Quality Stable - 80%Completeness Stable - 80%None
+ +
+
AreaCoverageQualityCompletenessDocs
+
+
+ Media and Sharing + 1 capabilities +
+
Experimental0%
+
Stable80%
+
Stable80%
+
[Ios](/platforms/ios), [Camera](/nodes/camera)
+
+
+
+ Canvas and Screen + 1 capabilities +
+
Experimental0%
+
Stable80%
+
Stable80%
+
[Ios](/platforms/ios), [Canvas](/plugins/reference/canvas)
+
+
+
+ Chat and Sessions + 1 capabilities +
+
Experimental0%
+
Stable80%
+
Stable80%
+
[Ios](/platforms/ios), [Webchat](/web/webchat), [Protocol](/gateway/protocol)
+
+
+
+ Gateway Setup and Diagnostics + 7 capabilities +
+
Experimental0%
+
Stable80%
+
Stable80%
+
[Ios](/platforms/ios), [Pairing](/channels/pairing)
+
+
+
+ Distribution + 1 capabilities +
+
Experimental0%
+
Stable80%
+
Stable80%
+
[Ios](/platforms/ios)
+
+
+
+ Device Commands + 2 capabilities +
+
Experimental0%
+
Stable80%
+
Stable80%
+
[Ios](/platforms/ios), [Protocol](/gateway/protocol)
+
+
+
+ Notifications and Background + 1 capabilities +
+
Experimental0%
+
Stable80%
+
Stable80%
+
[Ios](/platforms/ios), [Configuration](/gateway/configuration)
+
+
+
+ Voice + 1 capabilities +
+
Experimental0%
+
Stable80%
+
Stable80%
+
[Ios](/platforms/ios), [Talk](/nodes/talk)
+
+
+ @@ -1971,89 +2145,6 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app. - -
- - Public Google Play path exists, but app docs still describe the rebuild as extremely alpha and call out release hardening work. - -
Coverage Experimental - 0%Quality Alpha - 59%Completeness Alpha - 66%None
- -
-
AreaCoverageQualityCompletenessDocs
-
-
- Media Capture - 1 capabilities -
-
Experimental0%
-
Alpha59%
-
Alpha66%
-
[Android](/platforms/android), [Camera](/nodes/camera)
-
-
-
- Mobile Chat - 1 capabilities -
-
Experimental0%
-
Alpha59%
-
Alpha66%
-
[Android](/platforms/android)
-
-
-
- Connection Setup - 1 capabilities -
-
Experimental0%
-
Alpha59%
-
Alpha66%
-
[Android](/platforms/android), [Bonjour](/gateway/bonjour), [Pairing](/gateway/pairing)
-
-
-
- Distribution - 3 capabilities -
-
Experimental0%
-
Alpha59%
-
Alpha66%
-
[Android](/platforms/android)
-
-
-
- Settings - 1 capabilities -
-
Experimental0%
-
Alpha59%
-
Alpha66%
-
[Android](/platforms/android)
-
-
-
- Voice - 1 capabilities -
-
Experimental0%
-
Alpha59%
-
Alpha66%
-
[Android](/platforms/android), [Talk](/nodes/talk)
-
-
-
- Device Runtime - 2 capabilities -
-
Experimental0%
-
Alpha59%
-
Alpha66%
-
[Android](/platforms/android), [Troubleshooting](/nodes/troubleshooting), [Protocol](/gateway/protocol)
-
-
- - -
@@ -2160,99 +2251,6 @@ A surface is a product area such as Gateway runtime, Discord, or the macOS app. - - - - Internal preview / super-alpha. TestFlight and relay-backed push flows exist, but no public distribution yet. - -
Coverage Experimental - 0%Quality Experimental - 41%Completeness Experimental - 44%None
- -
-
AreaCoverageQualityCompletenessDocs
-
-
- Media and Sharing - 1 capabilities -
-
Experimental0%
-
Experimental41%
-
Experimental44%
-
[Ios](/platforms/ios), [Camera](/nodes/camera)
-
-
-
- Canvas and Screen - 1 capabilities -
-
Experimental0%
-
Experimental41%
-
Experimental44%
-
[Ios](/platforms/ios), [Canvas](/plugins/reference/canvas)
-
-
-
- Chat and Sessions - 1 capabilities -
-
Experimental0%
-
Experimental41%
-
Experimental44%
-
[Ios](/platforms/ios), [Webchat](/web/webchat), [Protocol](/gateway/protocol)
-
-
-
- Gateway Setup and Diagnostics - 7 capabilities -
-
Experimental0%
-
Experimental41%
-
Experimental44%
-
[Ios](/platforms/ios), [Pairing](/channels/pairing)
-
-
-
- Distribution - 1 capabilities -
-
Experimental0%
-
Experimental41%
-
Experimental44%
-
[Ios](/platforms/ios)
-
-
-
- Device Commands - 2 capabilities -
-
Experimental0%
-
Experimental41%
-
Experimental44%
-
[Ios](/platforms/ios), [Protocol](/gateway/protocol)
-
-
-
- Notifications and Background - 1 capabilities -
-
Experimental0%
-
Experimental41%
-
Experimental44%
-
[Ios](/platforms/ios), [Configuration](/gateway/configuration)
-
-
-
- Voice - 1 capabilities -
-
Experimental0%
-
Experimental41%
-
Experimental44%
-
[Ios](/platforms/ios), [Talk](/nodes/talk)
-
-
- - -
diff --git a/docs/platforms/ios.md b/docs/platforms/ios.md index b10b3433e60..d2e2653959d 100644 --- a/docs/platforms/ios.md +++ b/docs/platforms/ios.md @@ -75,7 +75,7 @@ openclaw gateway call node.list --params "{}" Official distributed iOS builds use the external push relay instead of publishing the raw APNs token to the gateway. -Official/TestFlight builds from the public App Store release lane use the hosted relay at `https://ios-push-relay.openclaw.ai`. +Official App Store builds from the public release lane use the hosted relay at `https://ios-push-relay.openclaw.ai`. Custom relay deployments require a deliberately separate iOS build/deployment path whose relay URL matches the gateway relay URL. The public App Store release lane does not accept custom relay URL overrides. If you are using a custom relay build, set the matching gateway relay URL: @@ -106,11 +106,11 @@ How the flow works: What the gateway does **not** need for this path: - No deployment-wide relay token. -- No direct APNs key for official/TestFlight relay-backed sends. +- No direct APNs key for official App Store relay-backed sends. Expected operator flow: -1. Install the official/TestFlight iOS build. +1. Install the official iOS app. 2. Optional: set `gateway.push.apns.relay.baseUrl` on the gateway only when using a deliberately separate custom relay build. 3. Pair the app to the gateway and let it finish connecting. 4. The app publishes `push.apns.register` automatically after it has an APNs token, the operator session is connected, and relay registration succeeds. @@ -180,7 +180,7 @@ Why this design was created: - To keep production APNs credentials out of user gateways. - To avoid storing raw official-build APNs tokens on the gateway. -- To allow hosted relay usage only for official/TestFlight OpenClaw builds. +- To allow hosted relay usage only for official OpenClaw iOS builds. - To prevent one gateway from sending wake pushes to iOS devices owned by a different gateway. Local/manual builds remain on direct APNs. If you are testing those builds without the relay, the @@ -193,7 +193,7 @@ export OPENCLAW_APNS_PRIVATE_KEY_P8="$(cat /path/to/AuthKey_KEYID.p8)" ``` These are gateway-host runtime env vars, not Fastlane settings. `apps/ios/fastlane/.env` only stores -App Store Connect / TestFlight auth such as `APP_STORE_CONNECT_KEY_ID` and +App Store Connect auth such as `APP_STORE_CONNECT_KEY_ID` and `APP_STORE_CONNECT_ISSUER_ID`; it does not configure direct APNs delivery for local iOS builds. Recommended gateway-host storage: diff --git a/docs/start/showcase.md b/docs/start/showcase.md index 4a73d24f868..901b0e0be9c 100644 --- a/docs/start/showcase.md +++ b/docs/start/showcase.md @@ -106,11 +106,9 @@ Upload to Cloudflare R2/S3 and generate secure presigned download links. Useful - **@coard** • `ios` `xcode` `testflight` + **@coard** • `ios` `xcode` `app-store` -Built a complete iOS app with maps and voice recording, deployed to TestFlight entirely via Telegram chat. - - iOS app on TestFlight +Built a complete iOS app with maps and voice recording, prepared for App Store distribution entirely via Telegram chat. diff --git a/qa/maturity-scores.yaml b/qa/maturity-scores.yaml index 4611f56f44e..f5bd7f53de1 100644 --- a/qa/maturity-scores.yaml +++ b/qa/maturity-scores.yaml @@ -5,19 +5,19 @@ counts: category_scores: 281 rollups: surface_average: - quality: - score: 63 - label: Alpha - completeness: - score: 70 - label: Beta - category_average: quality: score: 64 label: Alpha completeness: score: 71 label: Beta + category_average: + quality: + score: 66 + label: Alpha + completeness: + score: 72 + label: Beta surfaces: - id: gateway-runtime name: Gateway runtime @@ -2168,16 +2168,16 @@ surfaces: name: Android app family: platform-app level: - id: alpha - code: M2 - label: Alpha + id: stable + code: M4 + label: Stable scores: quality: - score: 59 - label: Alpha + score: 80 + label: Stable completeness: - score: 66 - label: Alpha + score: 80 + label: Stable lts: status: none supported_categories: 0 @@ -2191,77 +2191,77 @@ surfaces: categories: - name: Media Capture quality: - score: 59 - label: Alpha + score: 80 + label: Stable completeness: - score: 66 - label: Alpha + score: 80 + label: Stable lts: supported: false reason: none human_override: false - name: Mobile Chat quality: - score: 59 - label: Alpha + score: 80 + label: Stable completeness: - score: 66 - label: Alpha + score: 80 + label: Stable lts: supported: false reason: none human_override: false - name: Connection Setup quality: - score: 59 - label: Alpha + score: 80 + label: Stable completeness: - score: 66 - label: Alpha + score: 80 + label: Stable lts: supported: false reason: none human_override: false - name: Distribution quality: - score: 59 - label: Alpha + score: 80 + label: Stable completeness: - score: 66 - label: Alpha + score: 80 + label: Stable lts: supported: false reason: none human_override: false - name: Settings quality: - score: 59 - label: Alpha + score: 80 + label: Stable completeness: - score: 66 - label: Alpha + score: 80 + label: Stable lts: supported: false reason: none human_override: false - name: Voice quality: - score: 59 - label: Alpha + score: 80 + label: Stable completeness: - score: 66 - label: Alpha + score: 80 + label: Stable lts: supported: false reason: none human_override: false - name: Device Runtime quality: - score: 59 - label: Alpha + score: 80 + label: Stable completeness: - score: 66 - label: Alpha + score: 80 + label: Stable lts: supported: false reason: none @@ -2270,16 +2270,16 @@ surfaces: name: iOS app family: platform-app level: - id: experimental - code: M1 - label: Experimental + id: stable + code: M4 + label: Stable scores: quality: - score: 41 - label: Experimental + score: 80 + label: Stable completeness: - score: 44 - label: Experimental + score: 80 + label: Stable lts: status: none supported_categories: 0 @@ -2293,88 +2293,88 @@ surfaces: categories: - name: Media and Sharing quality: - score: 41 - label: Experimental + score: 80 + label: Stable completeness: - score: 44 - label: Experimental + score: 80 + label: Stable lts: supported: false reason: none human_override: false - name: Canvas and Screen quality: - score: 41 - label: Experimental + score: 80 + label: Stable completeness: - score: 44 - label: Experimental + score: 80 + label: Stable lts: supported: false reason: none human_override: false - name: Chat and Sessions quality: - score: 41 - label: Experimental + score: 80 + label: Stable completeness: - score: 44 - label: Experimental + score: 80 + label: Stable lts: supported: false reason: none human_override: false - name: Gateway Setup and Diagnostics quality: - score: 41 - label: Experimental + score: 80 + label: Stable completeness: - score: 44 - label: Experimental + score: 80 + label: Stable lts: supported: false reason: none human_override: false - name: Distribution quality: - score: 41 - label: Experimental + score: 80 + label: Stable completeness: - score: 44 - label: Experimental + score: 80 + label: Stable lts: supported: false reason: none human_override: false - name: Device Commands quality: - score: 41 - label: Experimental + score: 80 + label: Stable completeness: - score: 44 - label: Experimental + score: 80 + label: Stable lts: supported: false reason: none human_override: false - name: Notifications and Background quality: - score: 41 - label: Experimental + score: 80 + label: Stable completeness: - score: 44 - label: Experimental + score: 80 + label: Stable lts: supported: false reason: none human_override: false - name: Voice quality: - score: 41 - label: Experimental + score: 80 + label: Stable completeness: - score: 44 - label: Experimental + score: 80 + label: Stable lts: supported: false reason: none diff --git a/src/config/schema.help.ts b/src/config/schema.help.ts index 9257df65b42..afc40ab50a8 100644 --- a/src/config/schema.help.ts +++ b/src/config/schema.help.ts @@ -567,11 +567,11 @@ export const FIELD_HELP: Record = { "gateway.push": "Push-delivery settings used by the gateway when it needs to wake or notify paired devices. Configure relay-backed APNs here for official iOS builds; direct APNs auth remains env-based for local/manual builds.", "gateway.push.apns": - "APNs delivery settings for iOS devices paired to this gateway. Use relay settings for official/TestFlight builds that register through the external push relay.", + "APNs delivery settings for iOS devices paired to this gateway. Use relay settings for official App Store builds that register through the external push relay.", "gateway.push.apns.relay": "External relay settings for relay-backed APNs sends. The gateway uses the hosted OpenClaw relay by default, or this custom relay for push.test, wake nudges, and reconnect wakes after a paired official iOS build publishes a relay-backed registration.", "gateway.push.apns.relay.baseUrl": - "Optional custom base HTTPS URL for the external APNs relay service used by official/TestFlight iOS builds. Keep this aligned with the relay URL baked into the iOS build so registration and send traffic hit the same deployment.", + "Optional custom base HTTPS URL for the external APNs relay service used by official App Store iOS builds. Keep this aligned with the relay URL baked into the iOS build so registration and send traffic hit the same deployment.", "gateway.push.apns.relay.timeoutMs": "Timeout in milliseconds for relay send requests from the gateway to the APNs relay (default: 10000). Increase for slower relays or networks, or lower to fail wake attempts faster.", "gateway.http.endpoints.chatCompletions.enabled": diff --git a/taxonomy.yaml b/taxonomy.yaml index 0287e1a078e..ee13cb3f3c8 100644 --- a/taxonomy.yaml +++ b/taxonomy.yaml @@ -5670,9 +5670,9 @@ surfaces: - id: android-app name: Android app family: platform-app - level: alpha - level_code: M2 - rationale: Public Google Play path exists, but app docs still describe the rebuild as extremely alpha and call out release hardening work. + level: stable + level_code: M4 + rationale: Official Google Play distribution exists, source build/run docs are maintained, and the Android app is documented as a normal companion node for users. completeness_instructions: references/completeness/android-app.md categories: - name: Media Capture @@ -5800,9 +5800,9 @@ surfaces: - id: ios-app name: iOS app family: platform-app - level: experimental - level_code: M1 - rationale: Internal preview / super-alpha. TestFlight and relay-backed push flows exist, but no public distribution yet. + level: stable + level_code: M4 + rationale: Official App Store distribution exists, relay-backed push is documented, and the iOS app is documented as a normal companion node for users. completeness_instructions: references/completeness/ios-app.md categories: - name: Media and Sharing @@ -5893,13 +5893,13 @@ surfaces: - name: Distribution id: distribution features: - - name: Internal preview status + - name: App distribution coverageIds: [ios.internal-preview-status] - description: Internal preview status, source/Xcode manual deploy, local signing, XcodeGen project generation, Fastlane TestFlight archive/upload, versioning/changelog/metadata, release artifacts, and official-vs-local build flags + description: App Store distribution, source/Xcode manual deploy, local signing, XcodeGen project generation, Fastlane App Store archive/upload, versioning/changelog/metadata, release artifacts, and official-vs-local build flags docs: - docs/platforms/ios.md search_anchors: - - TestFlight + - App Store - Xcode manual deploy - signing category_note: install-signing-and-testflight-distribution.md @@ -6033,7 +6033,7 @@ surfaces: description: Watch app and WatchKit extension targets - name: Signing/profile variables coverageIds: [watchos.signing-profile-variables] - description: Signing/profile variables, bundle identifiers, icon assets, and iOS beta release flow + description: Signing/profile variables, bundle identifiers, icon assets, and iOS App Store release flow - name: Public/support status coverageIds: [watchos.public-support-status] description: Public/support status for the watch companion as distributed through the iOS app @@ -6042,7 +6042,7 @@ surfaces: description: Changelog and repo-history evidence for watchOS companion maturity - name: Release metadata coverageIds: [watchos.release-metadata] - description: Release metadata and app-store/TestFlight preparation evidence + description: Release metadata and App Store preparation evidence - name: Historical bug/regression themes relevant to scoring coverageIds: [watchos.historical-bug-regression-themes-relevant-to-scoring] description: Historical bug/regression themes relevant to scoring current source quality