Watch: share with the complication through a Keychain group, not an App Group

Automatic signing with an App Store Connect API key registers bundle IDs and
profiles but cannot create or assign App Groups, so the archive failed. A
keychain-access-groups entry needs no portal setup. The demo flag and last
summary move into the same group; tests cover the round trip and the
migration of a pre-complication token.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
gibandClaude Opus 5.5 committed 2026-11-01 11:15:31 -05:00
1 parent 67992dbf43
commit 27469dbc77
11 files changed
+132 -49

No files matched your search

+8 -5
View File
@@ -41,15 +41,17 @@ targets:
CFBundleURLTypes:
- CFBundleURLName: org.gbrown.wristcode
CFBundleURLSchemes: [wristcode]
WristCodeKeychainGroup: $(AppIdentifierPrefix)org.gbrown.wristcode.shared
entitlements:
path: WristCode/WristCode.entitlements
properties:
# Archives are signed for development; exporting for App Store Connect re-signs with the
# distribution profile, which turns this into production.
aps-environment: development
# Shared with the complication: the App Group's defaults, and its Keychain access group
# for the device token.
com.apple.security.application-groups: [group.org.gbrown.wristcode]
# Shared with the complication: the device token, gateway URL, demo flag and last summary.
# A Keychain group rather than an App Group, because automatic signing with an App Store
# Connect API key can register IDs and profiles but not App Groups.
keychain-access-groups: [$(AppIdentifierPrefix)org.gbrown.wristcode.shared]
settings:
base:
# The container's bundle ID plus .watchkitapp, as App Store validation requires. This is also
@@ -57,7 +59,7 @@ targets:
PRODUCT_BUNDLE_IDENTIFIER: org.gbrown.wristcode.watchkitapp
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
# The complication. It shares the API client, models, Keychain store and demo fixtures with the
# app, and reads the device token through the App Group.
# app, and reads the device token through the shared Keychain group.
WristCodeWidget:
type: app-extension
platform: watchOS
@@ -76,10 +78,11 @@ targets:
CFBundleVersion: $(CURRENT_PROJECT_VERSION)
NSExtension:
NSExtensionPointIdentifier: com.apple.widgetkit-extension
WristCodeKeychainGroup: $(AppIdentifierPrefix)org.gbrown.wristcode.shared
entitlements:
path: WristCodeWidget/WristCodeWidget.entitlements
properties:
com.apple.security.application-groups: [group.org.gbrown.wristcode]
keychain-access-groups: [$(AppIdentifierPrefix)org.gbrown.wristcode.shared]
settings:
base:
# Extensions take the watch app's bundle ID as a prefix.