BroV: single Mac target, chat brain = local claude CLI (stream-json, resume)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+23
-346
@@ -1,119 +1,45 @@
|
||||
name: NotchBuddy
|
||||
name: BroV
|
||||
options:
|
||||
bundleIdPrefix: fr.louisraille
|
||||
bundleIdPrefix: local.maksar
|
||||
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.
|
||||
# BroV — personal fork of Coucou (MIT). Mac app only, local unsigned builds.
|
||||
configs:
|
||||
Debug: debug
|
||||
DebugCloud: debug
|
||||
Release: release
|
||||
ReleaseCloud: release
|
||||
|
||||
settings:
|
||||
base:
|
||||
SWIFT_VERSION: "6.0"
|
||||
ENABLE_HARDENED_RUNTIME: YES
|
||||
CODE_SIGN_STYLE: Manual
|
||||
ENABLE_HARDENED_RUNTIME: NO
|
||||
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
|
||||
# Ad-hoc signature: runs locally, no Apple Developer account needed.
|
||||
CODE_SIGN_STYLE: Manual
|
||||
CODE_SIGN_IDENTITY: "-"
|
||||
CODE_SIGNING_REQUIRED: NO
|
||||
CODE_SIGNING_ALLOWED: YES
|
||||
DEVELOPMENT_TEAM: ""
|
||||
|
||||
schemes:
|
||||
NotchBuddy:
|
||||
BroV:
|
||||
build:
|
||||
targets:
|
||||
NotchBuddy: all
|
||||
BroV: 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:
|
||||
BroV:
|
||||
type: application
|
||||
platform: macOS
|
||||
sources:
|
||||
- path: Sources
|
||||
type: group
|
||||
excludes:
|
||||
- "Phone/**"
|
||||
- "Widgets/**"
|
||||
- "NotificationContent/**"
|
||||
- path: Assets.xcassets
|
||||
buildPhase: resources
|
||||
- path: Resources/sounds
|
||||
@@ -122,274 +48,25 @@ targets:
|
||||
info:
|
||||
path: Resources/Info.plist
|
||||
properties:
|
||||
CFBundleName: Coucou
|
||||
CFBundleDisplayName: Coucou
|
||||
CFBundleIdentifier: fr.louisraille.NotchBuddy
|
||||
CFBundleVersion: "10"
|
||||
CFBundleShortVersionString: "0.1.9"
|
||||
CFBundleName: BroV
|
||||
CFBundleDisplayName: BroV
|
||||
CFBundleIdentifier: local.maksar.BroV
|
||||
CFBundleVersion: "1"
|
||||
CFBundleShortVersionString: "0.1.0"
|
||||
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."
|
||||
NSAppleEventsUsageDescription: "BroV jumps to your terminal, sends mail and controls Music."
|
||||
NSAccessibilityUsageDescription: "BroV reads the front window's title to attach it as context."
|
||||
NSAppTransportSecurity:
|
||||
NSAllowsLocalNetworking: true
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_BUNDLE_IDENTIFIER: fr.louisraille.NotchBuddy
|
||||
PRODUCT_NAME: Coucou
|
||||
PRODUCT_BUNDLE_IDENTIFIER: local.maksar.BroV
|
||||
PRODUCT_NAME: BroV
|
||||
PRODUCT_MODULE_NAME: NotchBuddy
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user