fix(ios): wire share extension app group signing · openclaw/openclaw@f7f415f
joshavant
·
2026-06-19
·
via Recent Commits to openclaw:main
File tree
shared/OpenClawKit/Sources/OpenClawKit
| Original file line number | Diff line number | Diff line change |
|---|
@@ -3,6 +3,7 @@
|
3 | 3 | "signingRepo": "git@github.com:openclaw/apps-signing.git", |
4 | 4 | "signingBranch": "main", |
5 | 5 | "profileType": "appstore", |
| 6 | +"appGroupId": "group.ai.openclawfoundation.app.shared", |
6 | 7 | "targets": [ |
7 | 8 | { |
8 | 9 | "target": "OpenClaw", |
@@ -11,7 +12,8 @@
|
11 | 12 | "platform": "IOS", |
12 | 13 | "profileKey": "OPENCLAW_APP_PROFILE", |
13 | 14 | "profileName": "OpenClaw App Store ai.openclawfoundation.app", |
14 | | -"capabilities": ["PUSH_NOTIFICATIONS"] |
| 15 | +"capabilities": ["PUSH_NOTIFICATIONS", "APP_GROUPS"], |
| 16 | +"appGroups": ["group.ai.openclawfoundation.app.shared"] |
15 | 17 | }, |
16 | 18 | { |
17 | 19 | "target": "OpenClawShareExtension", |
@@ -20,7 +22,8 @@
|
20 | 22 | "platform": "IOS", |
21 | 23 | "profileKey": "OPENCLAW_SHARE_PROFILE", |
22 | 24 | "profileName": "OpenClaw App Store ai.openclawfoundation.app.share", |
23 | | -"capabilities": [] |
| 25 | +"capabilities": ["APP_GROUPS"], |
| 26 | +"appGroups": ["group.ai.openclawfoundation.app.shared"] |
24 | 27 | }, |
25 | 28 | { |
26 | 29 | "target": "OpenClawActivityWidget", |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -7,6 +7,7 @@ OPENCLAW_DEVELOPMENT_TEAM = $(OPENCLAW_IOS_SELECTED_TEAM)
|
7 | 7 | OPENCLAW_CODE_SIGN_STYLE = Automatic |
8 | 8 | OPENCLAW_CODE_SIGN_IDENTITY = Apple Development |
9 | 9 | OPENCLAW_APP_BUNDLE_ID = ai.openclawfoundation.app |
| 10 | +OPENCLAW_APP_GROUP_ID = group.ai.openclawfoundation.app.shared |
10 | 11 | OPENCLAW_WATCH_APP_BUNDLE_ID = ai.openclawfoundation.app.watchkitapp |
11 | 12 | OPENCLAW_ACTIVITY_WIDGET_BUNDLE_ID = ai.openclawfoundation.app.activitywidget |
12 | 13 | OPENCLAW_ACTIVITY_WIDGET_PROFILE = |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -7,6 +7,7 @@ OPENCLAW_DEVELOPMENT_TEAM = YOUR_TEAM_ID
|
7 | 7 | |
8 | 8 | OPENCLAW_APP_BUNDLE_ID = ai.openclawfoundation.app |
9 | 9 | OPENCLAW_SHARE_BUNDLE_ID = ai.openclawfoundation.app.share |
| 10 | +OPENCLAW_APP_GROUP_ID = group.ai.openclawfoundation.app.shared |
10 | 11 | OPENCLAW_ACTIVITY_WIDGET_BUNDLE_ID = ai.openclawfoundation.app.activitywidget |
11 | 12 | OPENCLAW_WATCH_APP_BUNDLE_ID = ai.openclawfoundation.app.watchkitapp |
12 | 13 | |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -101,6 +101,7 @@ Release-owner secrets:
|
101 | 101 | |
102 | 102 | - App Store Connect API auth uses Keychain for private key material plus non-secret `apps/ios/fastlane/.env` variables. |
103 | 103 | - The encrypted signing repo password lives outside this repo in the release-owner vault and is exposed locally as `MATCH_PASSWORD`. |
| 104 | +- The share sheet requires the Apple Developer App Group in `apps/ios/Config/AppStoreSigning.json` to be associated with both the app and share-extension bundle IDs before App Store profiles are regenerated. |
104 | 105 | - Apple Distribution private keys, certificates, provisioning profiles, and decrypted signing sync output stay under `apps/ios/build/` or Keychain and are gitignored. |
105 | 106 | - Rotating release signing means refreshing Fastlane `match` assets and pushing a fresh encrypted sync state. |
106 | 107 | |
@@ -156,6 +157,8 @@ This should create `apps/ios/fastlane/.env` with non-secret App Store Connect va
|
156 | 157 | - `ai.openclawfoundation.app.activitywidget` |
157 | 158 | - `ai.openclawfoundation.app.watchkitapp` |
158 | 159 | |
| 160 | + The main app and share extension must both be associated with the App Group pinned in `apps/ios/Config/AppStoreSigning.json`. |
| 161 | + |
159 | 162 | Use `pnpm ios:release:signing:setup` for the initial portal setup, then `MATCH_PASSWORD=... pnpm ios:release:signing:sync:push` to publish encrypted Fastlane match assets to the shared private repo. |
160 | 163 | |
161 | 164 | 4. Optional: set a custom official relay URL for the build. If unset, the release flow uses `https://ios-push-relay.openclaw.ai`. |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -41,5 +41,7 @@
|
41 | 41 | <key>NSExtensionPrincipalClass</key> |
42 | 42 | <string>$(PRODUCT_MODULE_NAME).ShareViewController</string> |
43 | 43 | </dict> |
| 44 | + <key>OpenClawAppGroupIdentifier</key> |
| 45 | + <string>$(OPENCLAW_APP_GROUP_ID)</string> |
44 | 46 | </dict> |
45 | 47 | </plist> |
| Original file line number | Diff line number | Diff line change |
|---|
|
| 1 | +<?xml version="1.0" encoding="UTF-8"?> |
| 2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
| 3 | +<plist version="1.0"> |
| 4 | +<dict> |
| 5 | + <key>com.apple.security.application-groups</key> |
| 6 | + <array> |
| 7 | + <string>$(OPENCLAW_APP_GROUP_ID)</string> |
| 8 | + </array> |
| 9 | +</dict> |
| 10 | +</plist> |
| Original file line number | Diff line number | Diff line change |
|---|
@@ -10,6 +10,7 @@ OPENCLAW_DEVELOPMENT_TEAM = FWJYW4S8P8
|
10 | 10 | |
11 | 11 | OPENCLAW_APP_BUNDLE_ID = ai.openclawfoundation.app |
12 | 12 | OPENCLAW_SHARE_BUNDLE_ID = ai.openclawfoundation.app.share |
| 13 | +OPENCLAW_APP_GROUP_ID = group.ai.openclawfoundation.app.shared |
13 | 14 | OPENCLAW_WATCH_APP_BUNDLE_ID = ai.openclawfoundation.app.watchkitapp |
14 | 15 | OPENCLAW_ACTIVITY_WIDGET_BUNDLE_ID = ai.openclawfoundation.app.activitywidget |
15 | 16 | OPENCLAW_APNS_ENTITLEMENT_ENVIRONMENT = development |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -78,6 +78,8 @@
|
78 | 78 | <string>OpenClaw uses on-device speech recognition for talk mode and voice wake.</string> |
79 | 79 | <key>NSSupportsLiveActivities</key> |
80 | 80 | <true/> |
| 81 | + <key>OpenClawAppGroupIdentifier</key> |
| 82 | + <string>$(OPENCLAW_APP_GROUP_ID)</string> |
81 | 83 | <key>OpenClawCanonicalVersion</key> |
82 | 84 | <string>$(OPENCLAW_IOS_VERSION)</string> |
83 | 85 | <key>OpenClawPushAPNsEnvironment</key> |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -4,5 +4,9 @@
|
4 | 4 | <dict> |
5 | 5 | <key>aps-environment</key> |
6 | 6 | <string>$(OPENCLAW_APNS_ENTITLEMENT_ENVIRONMENT)</string> |
| 7 | + <key>com.apple.security.application-groups</key> |
| 8 | + <array> |
| 9 | + <string>$(OPENCLAW_APP_GROUP_ID)</string> |
| 10 | + </array> |
7 | 11 | </dict> |
8 | 12 | </plist> |
| Original file line number | Diff line number | Diff line change |
|---|
@@ -3,6 +3,10 @@ import OpenClawKit
|
3 | 3 | import Testing |
4 | 4 | |
5 | 5 | @Suite struct ShareToAgentDeepLinkTests { |
| 6 | +@Test func appGroupIdentifierUsesCanonicalOpenClawGroup() { |
| 7 | + #expect(OpenClawAppGroup.canonicalIdentifier == "group.ai.openclawfoundation.app.shared") |
| 8 | +} |
| 9 | + |
6 | 10 | @Test func buildMessageIncludesSharedFields() { |
7 | 11 | let payload = SharedContentPayload( |
8 | 12 | title: "Article", |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。