53b4f60da1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
396 lines
14 KiB
YAML
396 lines
14 KiB
YAML
name: NotchBuddy
|
|
options:
|
|
bundleIdPrefix: fr.louisraille
|
|
deploymentTarget:
|
|
macOS: "15.0"
|
|
xcodeVersion: "27.0"
|
|
createIntermediateGroups: true
|
|
|
|
# DebugCloud = Debug, but signed with iCloud (CloudKit) and push entitlements
|
|
# and compiled with PHONE_LINK, for the iPhone link spike. ReleaseCloud = the
|
|
# same for a Developer ID build with its provisioning profile
|
|
# (scripts/cloud-test-build.sh); a Developer ID profile only allows the
|
|
# Production CloudKit environment, so the iPhone joins it with the
|
|
# CoucouPhoneProduction scheme. Release also compiles PHONE_LINK (the sync
|
|
# stays off until turned on in Settings); Debug stays unsigned without it.
|
|
configs:
|
|
Debug: debug
|
|
DebugCloud: debug
|
|
Release: release
|
|
ReleaseCloud: release
|
|
|
|
settings:
|
|
base:
|
|
SWIFT_VERSION: "6.0"
|
|
ENABLE_HARDENED_RUNTIME: YES
|
|
CODE_SIGN_STYLE: Manual
|
|
OTHER_SWIFT_FLAGS: "-strict-concurrency=complete"
|
|
configs:
|
|
Debug:
|
|
CODE_SIGNING_REQUIRED: NO
|
|
CODE_SIGNING_ALLOWED: NO
|
|
DebugCloud:
|
|
CODE_SIGNING_REQUIRED: YES
|
|
CODE_SIGNING_ALLOWED: YES
|
|
CODE_SIGN_STYLE: Automatic
|
|
CODE_SIGN_IDENTITY: "Apple Development"
|
|
DEVELOPMENT_TEAM: 256AUJ9555
|
|
Release:
|
|
CODE_SIGNING_REQUIRED: YES
|
|
CODE_SIGNING_ALLOWED: YES
|
|
CODE_SIGN_IDENTITY: "Developer ID Application"
|
|
DEVELOPMENT_TEAM: 256AUJ9555
|
|
OTHER_CODE_SIGN_FLAGS: "--timestamp"
|
|
CODE_SIGN_INJECT_BASE_ENTITLEMENTS: NO
|
|
CODE_SIGN_ENTITLEMENTS: Resources/Coucou.entitlements
|
|
ReleaseCloud:
|
|
CODE_SIGNING_REQUIRED: YES
|
|
CODE_SIGNING_ALLOWED: YES
|
|
CODE_SIGN_IDENTITY: "Developer ID Application"
|
|
DEVELOPMENT_TEAM: 256AUJ9555
|
|
OTHER_CODE_SIGN_FLAGS: "--timestamp"
|
|
CODE_SIGN_INJECT_BASE_ENTITLEMENTS: NO
|
|
|
|
schemes:
|
|
NotchBuddy:
|
|
build:
|
|
targets:
|
|
NotchBuddy: all
|
|
run:
|
|
config: Debug
|
|
archive:
|
|
config: Release
|
|
CoucouAppStore:
|
|
build:
|
|
targets:
|
|
CoucouAppStore: all
|
|
run:
|
|
config: Debug
|
|
archive:
|
|
config: Release
|
|
NotchBuddyCloud:
|
|
build:
|
|
targets:
|
|
NotchBuddy: all
|
|
run:
|
|
config: DebugCloud
|
|
archive:
|
|
config: Release
|
|
CoucouAppStoreCloud:
|
|
build:
|
|
targets:
|
|
CoucouAppStore: all
|
|
run:
|
|
config: DebugCloud
|
|
archive:
|
|
config: Release
|
|
CoucouPhone:
|
|
build:
|
|
targets:
|
|
CoucouPhone: all
|
|
run:
|
|
config: Debug
|
|
archive:
|
|
config: Release
|
|
# Same iPhone app on the Production CloudKit environment, to talk to the
|
|
# Developer ID build (scripts/cloud-test-build.sh), which can only use Production.
|
|
CoucouPhoneProduction:
|
|
build:
|
|
targets:
|
|
CoucouPhone: all
|
|
run:
|
|
config: DebugCloud
|
|
archive:
|
|
config: Release
|
|
|
|
targets:
|
|
NotchBuddy:
|
|
type: application
|
|
platform: macOS
|
|
sources:
|
|
- path: Sources
|
|
type: group
|
|
excludes:
|
|
- "Phone/**"
|
|
- "Widgets/**"
|
|
- "NotificationContent/**"
|
|
- path: Assets.xcassets
|
|
buildPhase: resources
|
|
- path: Resources/sounds
|
|
buildPhase: resources
|
|
type: folder
|
|
info:
|
|
path: Resources/Info.plist
|
|
properties:
|
|
CFBundleName: Coucou
|
|
CFBundleDisplayName: Coucou
|
|
CFBundleIdentifier: fr.louisraille.NotchBuddy
|
|
CFBundleVersion: "10"
|
|
CFBundleShortVersionString: "0.1.9"
|
|
CFBundlePackageType: APPL
|
|
LSUIElement: YES
|
|
NSHighResolutionCapable: YES
|
|
NSSupportsAutomaticGraphicsSwitching: YES
|
|
NSAppleEventsUsageDescription: "Pour sauter au terminal, envoyer des mails et piloter Musique."
|
|
NSAccessibilityUsageDescription: "Pour lire le titre de la fenêtre active et l'attacher comme contexte."
|
|
NSAppTransportSecurity:
|
|
NSAllowsLocalNetworking: true
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: fr.louisraille.NotchBuddy
|
|
PRODUCT_NAME: Coucou
|
|
INFOPLIST_FILE: Resources/Info.plist
|
|
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
|
|
MACOSX_DEPLOYMENT_TARGET: "15.0"
|
|
ENABLE_SANDBOX: NO
|
|
configs:
|
|
DebugCloud:
|
|
CODE_SIGN_ENTITLEMENTS: Resources/CoucouCloud.entitlements
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS: "DEBUG PHONE_LINK"
|
|
# The distributed build carries the iPhone sync (off until the user
|
|
# turns it on in Settings), so it needs iCloud and its Developer ID profile.
|
|
Release:
|
|
CODE_SIGN_ENTITLEMENTS: Resources/CoucouReleaseCloud.entitlements
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS: PHONE_LINK
|
|
PROVISIONING_PROFILE_SPECIFIER: "Coucou Developer ID"
|
|
ReleaseCloud:
|
|
CODE_SIGN_ENTITLEMENTS: Resources/CoucouReleaseCloud.entitlements
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS: PHONE_LINK
|
|
PROVISIONING_PROFILE_SPECIFIER: "Coucou Developer ID"
|
|
|
|
CoucouAppStore:
|
|
type: application
|
|
platform: macOS
|
|
sources:
|
|
- path: Sources
|
|
type: group
|
|
excludes:
|
|
- "Phone/**"
|
|
- "Widgets/**"
|
|
- "NotificationContent/**"
|
|
- path: Assets.xcassets
|
|
buildPhase: resources
|
|
- path: Resources/sounds
|
|
buildPhase: resources
|
|
type: folder
|
|
info:
|
|
path: Resources/InfoAppStore.plist
|
|
properties:
|
|
CFBundleName: Coucou
|
|
CFBundleDisplayName: Coucou
|
|
CFBundleIdentifier: fr.louisraille.Coucou
|
|
CFBundleVersion: "5"
|
|
CFBundleShortVersionString: "1.1"
|
|
CFBundlePackageType: APPL
|
|
LSUIElement: YES
|
|
NSHighResolutionCapable: YES
|
|
NSSupportsAutomaticGraphicsSwitching: YES
|
|
LSApplicationCategoryType: public.app-category.developer-tools
|
|
ITSAppUsesNonExemptEncryption: NO
|
|
NSAppTransportSecurity:
|
|
NSAllowsLocalNetworking: true
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: fr.louisraille.Coucou
|
|
PRODUCT_NAME: Coucou
|
|
INFOPLIST_FILE: Resources/InfoAppStore.plist
|
|
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
|
|
MACOSX_DEPLOYMENT_TARGET: "15.0"
|
|
CODE_SIGN_STYLE: Automatic
|
|
CODE_SIGN_IDENTITY: "Apple Development"
|
|
CODE_SIGN_ENTITLEMENTS: Resources/CoucouAppStore.entitlements
|
|
DEVELOPMENT_TEAM: 256AUJ9555
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS: APPSTORE
|
|
CODE_SIGNING_ALLOWED: YES
|
|
configs:
|
|
DebugCloud:
|
|
CODE_SIGN_ENTITLEMENTS: Resources/CoucouAppStoreCloud.entitlements
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS: "APPSTORE PHONE_LINK"
|
|
# App Store archive: same iCloud entitlements; Xcode switches push to
|
|
# production when exporting for the App Store.
|
|
Release:
|
|
CODE_SIGN_ENTITLEMENTS: Resources/CoucouAppStoreCloud.entitlements
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS: "APPSTORE PHONE_LINK"
|
|
|
|
# iPhone app. Same bundle ID as the Mac App Store build, for universal purchase.
|
|
CoucouPhone:
|
|
type: application
|
|
platform: iOS
|
|
deploymentTarget: "18.0"
|
|
dependencies:
|
|
- target: CoucouWidgets
|
|
- target: CoucouNotificationContent
|
|
sources:
|
|
- path: Sources/Phone
|
|
type: group
|
|
# Shared with the Mac targets (they get it through Sources/).
|
|
- path: Sources/CoucouKit
|
|
type: group
|
|
- path: PhoneAssets.xcassets
|
|
buildPhase: resources
|
|
# Mochi's sounds for the iPhone's notifications.
|
|
- path: Resources/sounds/approval.wav
|
|
buildPhase: resources
|
|
- path: Resources/sounds/finish.wav
|
|
buildPhase: resources
|
|
- path: Resources/sounds/question.wav
|
|
buildPhase: resources
|
|
- path: Resources/sounds/error.wav
|
|
buildPhase: resources
|
|
info:
|
|
path: Resources/InfoPhone.plist
|
|
properties:
|
|
CFBundleName: Coucou
|
|
CFBundleDisplayName: Coucou
|
|
CFBundleIdentifier: fr.louisraille.Coucou
|
|
CFBundleVersion: "3"
|
|
CFBundleShortVersionString: "1.0"
|
|
CFBundlePackageType: APPL
|
|
LSRequiresIPhoneOS: YES
|
|
UILaunchScreen: {}
|
|
UIApplicationSupportsIndirectInputEvents: YES
|
|
UIBackgroundModes:
|
|
- remote-notification
|
|
# Portrait, except a diff opened full screen (PhoneAppDelegate decides).
|
|
UISupportedInterfaceOrientations:
|
|
- UIInterfaceOrientationPortrait
|
|
- UIInterfaceOrientationLandscapeLeft
|
|
- UIInterfaceOrientationLandscapeRight
|
|
ITSAppUsesNonExemptEncryption: NO
|
|
NSFaceIDUsageDescription: "Coucou asks for Face ID before allowing a command from your iPhone."
|
|
NSMicrophoneUsageDescription: "Coucou uses the microphone when you dictate an instruction for Claude Code."
|
|
NSSpeechRecognitionUsageDescription: "Coucou turns your voice into the text of an instruction for Claude Code."
|
|
NSSupportsLiveActivities: YES
|
|
# Lets Mochi move at 120 Hz on ProMotion screens, like the Mac's notch.
|
|
CADisableMinimumFrameDurationOnPhone: YES
|
|
# Steps change often while an agent works: without this, iOS holds back
|
|
# updates once its budget is spent, and "waiting for your OK" came late.
|
|
NSSupportsLiveActivitiesFrequentUpdates: YES
|
|
# coucou://session/<id>: the widgets open a session in the app.
|
|
CFBundleURLTypes:
|
|
- CFBundleURLName: fr.louisraille.Coucou
|
|
CFBundleURLSchemes:
|
|
- coucou
|
|
# Which APNs environment the Live Activity tokens belong to (read by the Mac).
|
|
CoucouAPNsEnvironment: $(COUCOU_APNS_ENV)
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: fr.louisraille.Coucou
|
|
PRODUCT_NAME: Coucou
|
|
INFOPLIST_FILE: Resources/InfoPhone.plist
|
|
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
|
|
# Mochi in other colors, picked in Settings (UIApplication.setAlternateIconName).
|
|
ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES: "AppIcon-Blue AppIcon-Green AppIcon-Purple AppIcon-Pink AppIcon-Graphite"
|
|
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS: NO
|
|
COUCOU_APNS_ENV: production
|
|
IPHONEOS_DEPLOYMENT_TARGET: "18.0"
|
|
TARGETED_DEVICE_FAMILY: "1"
|
|
SUPPORTS_MACCATALYST: NO
|
|
CODE_SIGN_STYLE: Automatic
|
|
CODE_SIGN_IDENTITY: "Apple Development"
|
|
CODE_SIGN_ENTITLEMENTS: Resources/CoucouPhone.entitlements
|
|
DEVELOPMENT_TEAM: 256AUJ9555
|
|
CODE_SIGNING_REQUIRED: YES
|
|
CODE_SIGNING_ALLOWED: YES
|
|
ENABLE_HARDENED_RUNTIME: NO
|
|
OTHER_CODE_SIGN_FLAGS: ""
|
|
configs:
|
|
Debug:
|
|
COUCOU_APNS_ENV: development
|
|
DebugCloud:
|
|
CODE_SIGN_ENTITLEMENTS: Resources/CoucouPhoneProduction.entitlements
|
|
COUCOU_APNS_ENV: development
|
|
|
|
# Home Screen and Lock Screen widgets (Solo, Team, List, accessories). They
|
|
# read the sessions the iPhone app saves to the shared App Group.
|
|
CoucouWidgets:
|
|
type: app-extension
|
|
platform: iOS
|
|
deploymentTarget: "18.0"
|
|
sources:
|
|
- path: Sources/Widgets
|
|
type: group
|
|
- path: Sources/CoucouKit
|
|
type: group
|
|
- path: Sources/Phone/SharedSessions.swift
|
|
- path: Sources/Phone/MacStubs.swift
|
|
- path: Sources/Phone/MochiActivityAttributes.swift
|
|
- path: Sources/Phone/OpenLeadMochiIntent.swift
|
|
- path: Sources/Phone/DenyApprovalIntent.swift
|
|
info:
|
|
path: Resources/InfoWidgets.plist
|
|
properties:
|
|
CFBundleName: CoucouWidgets
|
|
CFBundleDisplayName: Coucou
|
|
CFBundleIdentifier: fr.louisraille.Coucou.Widgets
|
|
CFBundleVersion: "3"
|
|
CFBundleShortVersionString: "1.0"
|
|
CFBundlePackageType: XPC!
|
|
NSExtension:
|
|
NSExtensionPointIdentifier: com.apple.widgetkit-extension
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: fr.louisraille.Coucou.Widgets
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS: "$(inherited) WIDGET_EXTENSION"
|
|
PRODUCT_NAME: CoucouWidgets
|
|
INFOPLIST_FILE: Resources/InfoWidgets.plist
|
|
IPHONEOS_DEPLOYMENT_TARGET: "18.0"
|
|
TARGETED_DEVICE_FAMILY: "1"
|
|
SUPPORTS_MACCATALYST: NO
|
|
CODE_SIGN_STYLE: Automatic
|
|
CODE_SIGN_IDENTITY: "Apple Development"
|
|
CODE_SIGN_ENTITLEMENTS: Resources/CoucouWidgets.entitlements
|
|
DEVELOPMENT_TEAM: 256AUJ9555
|
|
CODE_SIGNING_REQUIRED: YES
|
|
CODE_SIGNING_ALLOWED: YES
|
|
ENABLE_HARDENED_RUNTIME: NO
|
|
OTHER_CODE_SIGN_FLAGS: ""
|
|
SKIP_INSTALL: YES
|
|
APPLICATION_EXTENSION_API_ONLY: YES
|
|
|
|
# The expanded approval notification: Mochi alive, with the command.
|
|
CoucouNotificationContent:
|
|
type: app-extension
|
|
platform: iOS
|
|
deploymentTarget: "18.0"
|
|
sources:
|
|
- path: Sources/NotificationContent
|
|
type: group
|
|
- path: Sources/CoucouKit
|
|
type: group
|
|
- path: Sources/Phone/MochiLive.swift
|
|
- path: Sources/Phone/MacStubs.swift
|
|
info:
|
|
path: Resources/InfoNotificationContent.plist
|
|
properties:
|
|
CFBundleName: CoucouNotificationContent
|
|
CFBundleDisplayName: Coucou
|
|
CFBundleIdentifier: fr.louisraille.Coucou.NotificationContent
|
|
CFBundleVersion: "3"
|
|
CFBundleShortVersionString: "1.0"
|
|
CFBundlePackageType: XPC!
|
|
NSExtension:
|
|
NSExtensionPointIdentifier: com.apple.usernotifications.content-extension
|
|
NSExtensionPrincipalClass: $(PRODUCT_MODULE_NAME).NotificationViewController
|
|
NSExtensionAttributes:
|
|
UNNotificationExtensionCategory: COUCOU_APPROVAL
|
|
UNNotificationExtensionInitialContentSizeRatio: 0.45
|
|
UNNotificationExtensionDefaultContentHidden: true
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: fr.louisraille.Coucou.NotificationContent
|
|
PRODUCT_NAME: CoucouNotificationContent
|
|
INFOPLIST_FILE: Resources/InfoNotificationContent.plist
|
|
IPHONEOS_DEPLOYMENT_TARGET: "18.0"
|
|
TARGETED_DEVICE_FAMILY: "1"
|
|
SUPPORTS_MACCATALYST: NO
|
|
CODE_SIGN_STYLE: Automatic
|
|
CODE_SIGN_IDENTITY: "Apple Development"
|
|
DEVELOPMENT_TEAM: 256AUJ9555
|
|
CODE_SIGNING_REQUIRED: YES
|
|
CODE_SIGNING_ALLOWED: YES
|
|
ENABLE_HARDENED_RUNTIME: NO
|
|
OTHER_CODE_SIGN_FLAGS: ""
|
|
SKIP_INSTALL: YES
|
|
APPLICATION_EXTENSION_API_ONLY: YES
|