The App Store only accepts a watch-only app inside an empty iOS stub (watchapp2-container), the pair Xcode's Watch-only App template makes. The stub takes org.gbrown.wristcode; the watch app, and so the APNs topic, becomes org.gbrown.wristcode.watchkitapp. Adds ITSAppUsesNonExemptEncryption = NO and scripts/testflight.sh, which archives with API key automatic signing and a timestamp build number, then exports and uploads (or exports only with --no-upload). Co-Authored-By: Claude Opus 5.5 <[email protected]>
92 lines
3.0 KiB
YAML
92 lines
3.0 KiB
YAML
name: WristCode
|
|
options:
|
|
bundleIdPrefix: org.gbrown
|
|
createIntermediateGroups: true
|
|
deploymentTarget:
|
|
watchOS: "27.0"
|
|
settings:
|
|
base:
|
|
DEVELOPMENT_TEAM: GQJNM5YK2M
|
|
CODE_SIGN_STYLE: Automatic
|
|
SWIFT_VERSION: "6.0"
|
|
SWIFT_STRICT_CONCURRENCY: complete
|
|
MARKETING_VERSION: "0.1.0"
|
|
# Default build number; scripts/testflight.sh overrides it with CURRENT_PROJECT_VERSION=<n>.
|
|
CURRENT_PROJECT_VERSION: "1"
|
|
targets:
|
|
WristCode:
|
|
type: application
|
|
platform: watchOS
|
|
sources:
|
|
- WristCode
|
|
info:
|
|
path: WristCode/Info.plist
|
|
properties:
|
|
CFBundleDisplayName: WristCode
|
|
CFBundleShortVersionString: $(MARKETING_VERSION)
|
|
CFBundleVersion: $(CURRENT_PROJECT_VERSION)
|
|
WKApplication: true
|
|
# Watch only, with no iPhone companion. watchOS refuses to install an app that sets both
|
|
# this and WKRunsIndependentlyOfCompanionApp, and requires WKCompanionAppBundleIdentifier
|
|
# when WKRunsIndependentlyOfCompanionApp is set without WKWatchOnly.
|
|
WKWatchOnly: true
|
|
# HTTPS only, so no export compliance documentation is needed.
|
|
ITSAppUsesNonExemptEncryption: false
|
|
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
|
|
settings:
|
|
base:
|
|
# The container's bundle ID plus .watchkitapp, as App Store validation requires. This is also
|
|
# the APNs topic.
|
|
PRODUCT_BUNDLE_IDENTIFIER: org.gbrown.wristcode.watchkitapp
|
|
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
|
|
# The App Store only takes a watch-only app inside an empty iOS stub, the same pair Xcode's
|
|
# "Watch-only App" template creates. The stub owns the App Store Connect record
|
|
# (org.gbrown.wristcode) and embeds the watch app; it never installs on an iPhone.
|
|
WristCodeContainer:
|
|
type: application.watchapp2-container
|
|
platform: iOS
|
|
deploymentTarget: "27.0"
|
|
dependencies:
|
|
- target: WristCode
|
|
settings:
|
|
base:
|
|
PRODUCT_NAME: WristCode
|
|
PRODUCT_BUNDLE_IDENTIFIER: org.gbrown.wristcode
|
|
GENERATE_INFOPLIST_FILE: YES
|
|
INFOPLIST_KEY_CFBundleDisplayName: WristCode
|
|
INFOPLIST_KEY_ITSAppUsesNonExemptEncryption: NO
|
|
TARGETED_DEVICE_FAMILY: "1"
|
|
WristCodeTests:
|
|
type: bundle.unit-test
|
|
platform: watchOS
|
|
sources:
|
|
- WristCodeTests
|
|
dependencies:
|
|
- target: WristCode
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: org.gbrown.wristcode.tests
|
|
GENERATE_INFOPLIST_FILE: YES
|
|
TEST_HOST: $(BUILT_PRODUCTS_DIR)/WristCode.app/WristCode
|
|
BUNDLE_LOADER: $(TEST_HOST)
|
|
schemes:
|
|
WristCode:
|
|
build:
|
|
targets:
|
|
WristCode: all
|
|
WristCodeContainer: [archive]
|
|
WristCodeTests: [test]
|
|
run:
|
|
config: Debug
|
|
test:
|
|
config: Debug
|
|
targets:
|
|
- WristCodeTests
|
|
archive:
|
|
config: Release
|