| 1 | name: Klepon |
| 2 | options: |
| 3 | deploymentTarget: |
| 4 | iOS: "18.5" |
| 5 | macOS: "15.0" |
| 6 | tvOS: "18.5" |
| 7 | visionOS: "1.0" |
| 8 | watchOS: "9.0" |
| 9 | xcodeVersion: "26.0" |
| 10 | generateEmptyDirectories: false |
| 11 | createIntermediateGroups: false |
| 12 | |
| 13 | packages: |
| 14 | Ed: |
| 15 | url: https://github.com/ondeinference/ed-swift |
| 16 | exactVersion: 1.0.2 |
| 17 | SnapshotTesting: |
| 18 | url: https://github.com/pointfreeco/swift-snapshot-testing |
| 19 | from: 1.19.2 |
| 20 | |
| 21 | schemes: |
| 22 | Klepon: |
| 23 | build: |
| 24 | targets: |
| 25 | Klepon: all |
| 26 | KleponSnapshotTests: [test] |
| 27 | test: |
| 28 | config: Debug |
| 29 | gatherCoverageData: true |
| 30 | coverageTargets: |
| 31 | - Klepon |
| 32 | targets: |
| 33 | - name: KleponSnapshotTests |
| 34 | run: |
| 35 | config: Debug |
| 36 | analyze: |
| 37 | config: Debug |
| 38 | archive: |
| 39 | config: Release |
| 40 | profile: |
| 41 | config: Release |
| 42 | Klepon Watch: |
| 43 | build: |
| 44 | targets: |
| 45 | Klepon Watch: all |
| 46 | run: |
| 47 | config: Debug |
| 48 | analyze: |
| 49 | config: Debug |
| 50 | archive: |
| 51 | config: Release |
| 52 | profile: |
| 53 | config: Release |
| 54 | Klepon Mac: |
| 55 | build: |
| 56 | targets: |
| 57 | Klepon Mac: all |
| 58 | run: |
| 59 | config: Debug |
| 60 | analyze: |
| 61 | config: Debug |
| 62 | archive: |
| 63 | config: Release |
| 64 | profile: |
| 65 | config: Release |
| 66 | Klepon TV: |
| 67 | build: |
| 68 | targets: |
| 69 | Klepon TV: all |
| 70 | run: |
| 71 | config: Debug |
| 72 | analyze: |
| 73 | config: Debug |
| 74 | archive: |
| 75 | config: Release |
| 76 | profile: |
| 77 | config: Release |
| 78 | Klepon Vision: |
| 79 | build: |
| 80 | targets: |
| 81 | Klepon Vision: all |
| 82 | run: |
| 83 | config: Debug |
| 84 | analyze: |
| 85 | config: Debug |
| 86 | archive: |
| 87 | config: Release |
| 88 | profile: |
| 89 | config: Release |
| 90 | |
| 91 | targets: |
| 92 | Klepon: |
| 93 | type: application |
| 94 | platform: iOS |
| 95 | sources: |
| 96 | - path: Klepon |
| 97 | info: |
| 98 | path: Klepon/Info.plist |
| 99 | properties: |
| 100 | CFBundleShortVersionString: $(MARKETING_VERSION) |
| 101 | CFBundleVersion: $(CURRENT_PROJECT_VERSION) |
| 102 | ITSAppUsesNonExemptEncryption: false |
| 103 | OndeWebDevHost: $(ONDE_WEB_DEV_HOST) |
| 104 | OndeWebDevPort: $(ONDE_WEB_DEV_PORT) |
| 105 | OndeAppId: $(ONDE_APP_ID) |
| 106 | OndeAppSecret: $(ONDE_APP_SECRET) |
| 107 | UILaunchScreen: {} |
| 108 | UIApplicationSceneManifest: |
| 109 | UIApplicationSupportsMultipleScenes: false |
| 110 | UISceneConfigurations: |
| 111 | UIWindowSceneSessionRoleApplication: |
| 112 | - UISceneConfigurationName: Default Configuration |
| 113 | UISceneClassName: UIWindowScene |
| 114 | UISupportedInterfaceOrientations: |
| 115 | - UIInterfaceOrientationPortrait |
| 116 | UISupportedInterfaceOrientations~ipad: |
| 117 | - UIInterfaceOrientationPortrait |
| 118 | - UIInterfaceOrientationPortraitUpsideDown |
| 119 | - UIInterfaceOrientationLandscapeLeft |
| 120 | - UIInterfaceOrientationLandscapeRight |
| 121 | entitlements: |
| 122 | path: Klepon/Klepon.entitlements |
| 123 | properties: |
| 124 | com.apple.developer.kernel.increased-memory-limit: true |
| 125 | com.apple.security.application-groups: |
| 126 | - group.com.ondeinference.apps |
| 127 | configFiles: |
| 128 | Debug: Configs/Debug.xcconfig |
| 129 | Release: Configs/Release.xcconfig |
| 130 | dependencies: |
| 131 | - package: Ed |
| 132 | product: Ed |
| 133 | - target: Klepon Watch |
| 134 | preBuildScripts: |
| 135 | - name: Inject PrivacyInfo into EdFramework |
| 136 | shell: /bin/sh |
| 137 | basedOnDependencyAnalysis: false |
| 138 | showEnvVars: false |
| 139 | script: | |
| 140 | set -eu |
| 141 | # PrivacyInfo.xcprivacy is required inside every XCFramework slice. |
| 142 | # Apple's scanner does not accept the app-level manifest as a substitute |
| 143 | # for manifests inside nested third-party framework bundles. |
| 144 | # BUILD_DIR is .../DerivedData/<name>/Build/Intermediates.noindex |
| 145 | # SourcePackages is always two levels up from BUILD_DIR. |
| 146 | XCFW="${BUILD_DIR}/../../SourcePackages/artifacts/ed-swift/EdFramework/EdFramework.xcframework" |
| 147 | PRIVACY_SRC="${SRCROOT}/Scripts/OndePrivacyInfo.xcprivacy" |
| 148 | if [ ! -d "${XCFW}" ]; then |
| 149 | echo "warning: EdFramework.xcframework not found at ${XCFW} — skipping PrivacyInfo injection" |
| 150 | exit 0 |
| 151 | fi |
| 152 | for SLICE in "${XCFW}"/*/; do |
| 153 | DEST="${SLICE}PrivacyInfo.xcprivacy" |
| 154 | if [ ! -f "${DEST}" ]; then |
| 155 | cp "${PRIVACY_SRC}" "${DEST}" |
| 156 | echo "Injected PrivacyInfo.xcprivacy into ${SLICE}" |
| 157 | fi |
| 158 | done |
| 159 | postBuildScripts: |
| 160 | - name: Update CFBundleVersion |
| 161 | shell: /bin/sh |
| 162 | basedOnDependencyAnalysis: false |
| 163 | showEnvVars: false |
| 164 | script: | |
| 165 | set -eu |
| 166 | |
| 167 | SHARED_BUNDLE_VERSION_FILE="${BUILD_DIR}/klepon-cfbundleversion.txt" |
| 168 | if [ -f "${SHARED_BUNDLE_VERSION_FILE}" ]; then |
| 169 | BUNDLE_VERSION="$(cat "${SHARED_BUNDLE_VERSION_FILE}")" |
| 170 | else |
| 171 | BUNDLE_VERSION="$(date -u +"%Y%m%d.%H%M")" |
| 172 | printf '%s' "${BUNDLE_VERSION}" > "${SHARED_BUNDLE_VERSION_FILE}" |
| 173 | fi |
| 174 | |
| 175 | INFO_PLIST="${TARGET_BUILD_DIR}/${INFOPLIST_PATH}" |
| 176 | |
| 177 | if [ ! -f "${INFO_PLIST}" ]; then |
| 178 | echo "error: Info.plist not found at ${INFO_PLIST}" |
| 179 | exit 1 |
| 180 | fi |
| 181 | |
| 182 | if ! /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${BUNDLE_VERSION}" "${INFO_PLIST}" >/dev/null 2>&1; then |
| 183 | /usr/libexec/PlistBuddy -c "Add :CFBundleVersion string ${BUNDLE_VERSION}" "${INFO_PLIST}" |
| 184 | fi |
| 185 | |
| 186 | echo "Updated CFBundleVersion to ${BUNDLE_VERSION}" |
| 187 | settings: |
| 188 | base: |
| 189 | PRODUCT_BUNDLE_IDENTIFIER: ai.splitfire.klepon |
| 190 | # Keep the module name stable across configurations so the tests can |
| 191 | # `@testable import Klepon` even though the Debug product is "Klepon Debug". |
| 192 | PRODUCT_MODULE_NAME: Klepon |
| 193 | MARKETING_VERSION: "1.0.0" |
| 194 | CURRENT_PROJECT_VERSION: 1 |
| 195 | ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon |
| 196 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor |
| 197 | DEAD_CODE_STRIPPING: YES |
| 198 | ENABLE_USER_SCRIPT_SANDBOXING: NO |
| 199 | TARGETED_DEVICE_FAMILY: "1,2" |
| 200 | "EXCLUDED_ARCHS[sdk=iphonesimulator*]": x86_64 |
| 201 | configs: |
| 202 | Debug: |
| 203 | PRODUCT_BUNDLE_IDENTIFIER: ai.splitfire.klepon-Debug |
| 204 | PRODUCT_NAME: Klepon Debug |
| 205 | SWIFT_OPTIMIZATION_LEVEL: -Onone |
| 206 | Release: |
| 207 | SWIFT_OPTIMIZATION_LEVEL: -O |
| 208 | |
| 209 | KleponSnapshotTests: |
| 210 | type: bundle.unit-test |
| 211 | platform: iOS |
| 212 | sources: |
| 213 | - path: KleponSnapshotTests |
| 214 | configFiles: |
| 215 | Debug: Configs/Signing.xcconfig |
| 216 | Release: Configs/Signing.xcconfig |
| 217 | dependencies: |
| 218 | - target: Klepon |
| 219 | - package: SnapshotTesting |
| 220 | product: SnapshotTesting |
| 221 | settings: |
| 222 | base: |
| 223 | PRODUCT_BUNDLE_IDENTIFIER: ai.splitfire.klepon.snapshot-tests |
| 224 | GENERATE_INFOPLIST_FILE: YES |
| 225 | ENABLE_USER_SCRIPT_SANDBOXING: NO |
| 226 | configs: |
| 227 | Debug: |
| 228 | SWIFT_OPTIMIZATION_LEVEL: -Onone |
| 229 | # The Debug host app is named "Klepon Debug", not the target name |
| 230 | # XcodeGen assumes when it derives TEST_HOST. |
| 231 | TEST_HOST: "$(BUILT_PRODUCTS_DIR)/Klepon Debug.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Klepon Debug" |
| 232 | Release: |
| 233 | SWIFT_OPTIMIZATION_LEVEL: -O |
| 234 | |
| 235 | KleponMac: |
| 236 | name: Klepon Mac |
| 237 | type: application |
| 238 | platform: macOS |
| 239 | sources: |
| 240 | - path: Klepon |
| 241 | excludes: |
| 242 | - Info.plist |
| 243 | - Klepon.entitlements |
| 244 | info: |
| 245 | path: KleponMac/Info.plist |
| 246 | properties: |
| 247 | CFBundleShortVersionString: $(MARKETING_VERSION) |
| 248 | CFBundleVersion: $(CURRENT_PROJECT_VERSION) |
| 249 | ITSAppUsesNonExemptEncryption: false |
| 250 | LSApplicationCategoryType: public.app-category.food-and-drink |
| 251 | OndeAppId: $(ONDE_APP_ID) |
| 252 | OndeAppSecret: $(ONDE_APP_SECRET) |
| 253 | entitlements: |
| 254 | path: KleponMac/KleponMac.entitlements |
| 255 | properties: |
| 256 | com.apple.security.app-sandbox: true |
| 257 | com.apple.security.network.client: true |
| 258 | com.apple.security.application-groups: |
| 259 | - group.com.ondeinference.apps |
| 260 | com.apple.developer.kernel.increased-memory-limit: true |
| 261 | configFiles: |
| 262 | Debug: Configs/Signing.xcconfig |
| 263 | Release: Configs/Signing.xcconfig |
| 264 | dependencies: |
| 265 | - package: Ed |
| 266 | product: Ed |
| 267 | # SystemConfiguration is a genuine transitive dependency of the Onde Rust |
| 268 | # static library (reqwest → native-tls → SCDynamicStore / SCNetworkInterface). |
| 269 | # It is required by the macOS linker to resolve symbols in libonde-macos.a |
| 270 | # and is NOT present in the iOS/tvOS/watchOS slices. |
| 271 | - sdk: SystemConfiguration.framework |
| 272 | preBuildScripts: |
| 273 | - name: Inject PrivacyInfo into EdFramework |
| 274 | shell: /bin/sh |
| 275 | basedOnDependencyAnalysis: false |
| 276 | showEnvVars: false |
| 277 | script: | |
| 278 | set -eu |
| 279 | XCFW="${BUILD_DIR}/../../SourcePackages/artifacts/ed-swift/EdFramework/EdFramework.xcframework" |
| 280 | PRIVACY_SRC="${SRCROOT}/Scripts/OndePrivacyInfo.xcprivacy" |
| 281 | if [ ! -d "${XCFW}" ]; then |
| 282 | echo "warning: EdFramework.xcframework not found at ${XCFW} — skipping PrivacyInfo injection" |
| 283 | exit 0 |
| 284 | fi |
| 285 | for SLICE in "${XCFW}"/*/; do |
| 286 | DEST="${SLICE}PrivacyInfo.xcprivacy" |
| 287 | if [ ! -f "${DEST}" ]; then |
| 288 | cp "${PRIVACY_SRC}" "${DEST}" |
| 289 | echo "Injected PrivacyInfo.xcprivacy into ${SLICE}" |
| 290 | fi |
| 291 | done |
| 292 | postBuildScripts: |
| 293 | - name: Update CFBundleVersion |
| 294 | shell: /bin/sh |
| 295 | basedOnDependencyAnalysis: false |
| 296 | showEnvVars: false |
| 297 | script: | |
| 298 | set -eu |
| 299 | |
| 300 | SHARED_BUNDLE_VERSION_FILE="${BUILD_DIR}/klepon-cfbundleversion.txt" |
| 301 | if [ -f "${SHARED_BUNDLE_VERSION_FILE}" ]; then |
| 302 | BUNDLE_VERSION="$(cat "${SHARED_BUNDLE_VERSION_FILE}")" |
| 303 | else |
| 304 | BUNDLE_VERSION="$(date -u +"%Y%m%d.%H%M")" |
| 305 | printf '%s' "${BUNDLE_VERSION}" > "${SHARED_BUNDLE_VERSION_FILE}" |
| 306 | fi |
| 307 | |
| 308 | INFO_PLIST="${TARGET_BUILD_DIR}/${INFOPLIST_PATH}" |
| 309 | |
| 310 | if [ ! -f "${INFO_PLIST}" ]; then |
| 311 | echo "error: Info.plist not found at ${INFO_PLIST}" |
| 312 | exit 1 |
| 313 | fi |
| 314 | |
| 315 | if ! /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${BUNDLE_VERSION}" "${INFO_PLIST}" >/dev/null 2>&1; then |
| 316 | /usr/libexec/PlistBuddy -c "Add :CFBundleVersion string ${BUNDLE_VERSION}" "${INFO_PLIST}" |
| 317 | fi |
| 318 | |
| 319 | echo "Updated CFBundleVersion to ${BUNDLE_VERSION}" |
| 320 | settings: |
| 321 | base: |
| 322 | PRODUCT_BUNDLE_IDENTIFIER: ai.splitfire.klepon |
| 323 | PRODUCT_NAME: Klepon |
| 324 | MARKETING_VERSION: "1.0.0" |
| 325 | CURRENT_PROJECT_VERSION: 1 |
| 326 | DEAD_CODE_STRIPPING: YES |
| 327 | ENABLE_USER_SCRIPT_SANDBOXING: NO |
| 328 | ASSETCATALOG_COMPILER_APPICON_NAME: AppIconMac |
| 329 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor |
| 330 | INFOPLIST_KEY_NSHumanReadableCopyright: "Copyright © 2026 Splitfire AB (Onde Inference)" |
| 331 | "EXCLUDED_ARCHS[sdk=macosx*]": x86_64 |
| 332 | configs: |
| 333 | Debug: |
| 334 | PRODUCT_BUNDLE_IDENTIFIER: ai.splitfire.klepon-Debug |
| 335 | PRODUCT_NAME: Klepon Debug |
| 336 | SWIFT_OPTIMIZATION_LEVEL: -Onone |
| 337 | Release: |
| 338 | SWIFT_OPTIMIZATION_LEVEL: -O |
| 339 | |
| 340 | KleponTV: |
| 341 | name: Klepon TV |
| 342 | type: application |
| 343 | platform: tvOS |
| 344 | sources: |
| 345 | - path: Klepon |
| 346 | excludes: |
| 347 | - Info.plist |
| 348 | - Klepon.entitlements |
| 349 | - App/KleponApp.swift |
| 350 | - App/AppRootView.swift |
| 351 | - path: KleponTV/App |
| 352 | info: |
| 353 | path: KleponTV/Info.plist |
| 354 | properties: |
| 355 | CFBundleShortVersionString: $(MARKETING_VERSION) |
| 356 | CFBundleVersion: $(CURRENT_PROJECT_VERSION) |
| 357 | ITSAppUsesNonExemptEncryption: false |
| 358 | UILaunchScreen: {} |
| 359 | OndeAppId: $(ONDE_APP_ID) |
| 360 | OndeAppSecret: $(ONDE_APP_SECRET) |
| 361 | CFBundleURLTypes: |
| 362 | - CFBundleURLName: ai.splitfire.klepon.tvos |
| 363 | CFBundleURLSchemes: |
| 364 | - klepon |
| 365 | UIApplicationSceneManifest: |
| 366 | UIApplicationSupportsMultipleScenes: false |
| 367 | UISceneConfigurations: |
| 368 | UIWindowSceneSessionRoleApplication: |
| 369 | - UISceneConfigurationName: Default Configuration |
| 370 | UISceneDelegateClassName: $(PRODUCT_MODULE_NAME).SceneDelegate |
| 371 | entitlements: |
| 372 | path: KleponTV/KleponTV.entitlements |
| 373 | properties: |
| 374 | com.apple.developer.kernel.increased-memory-limit: true |
| 375 | com.apple.security.application-groups: |
| 376 | - group.com.ondeinference.apps |
| 377 | configFiles: |
| 378 | Debug: Configs/Signing.xcconfig |
| 379 | Release: Configs/Signing.xcconfig |
| 380 | dependencies: |
| 381 | - package: Ed |
| 382 | product: Ed |
| 383 | - target: Klepon TV Top Shelf |
| 384 | embed: true |
| 385 | postBuildScripts: |
| 386 | - name: Update CFBundleVersion |
| 387 | shell: /bin/sh |
| 388 | basedOnDependencyAnalysis: false |
| 389 | showEnvVars: false |
| 390 | script: | |
| 391 | set -eu |
| 392 | |
| 393 | SHARED_BUNDLE_VERSION_FILE="${BUILD_DIR}/klepon-cfbundleversion.txt" |
| 394 | if [ -f "${SHARED_BUNDLE_VERSION_FILE}" ]; then |
| 395 | BUNDLE_VERSION="$(cat "${SHARED_BUNDLE_VERSION_FILE}")" |
| 396 | else |
| 397 | BUNDLE_VERSION="$(date -u +"%Y%m%d.%H%M")" |
| 398 | printf '%s' "${BUNDLE_VERSION}" > "${SHARED_BUNDLE_VERSION_FILE}" |
| 399 | fi |
| 400 | |
| 401 | INFO_PLIST="${TARGET_BUILD_DIR}/${INFOPLIST_PATH}" |
| 402 | |
| 403 | if [ ! -f "${INFO_PLIST}" ]; then |
| 404 | echo "error: Info.plist not found at ${INFO_PLIST}" |
| 405 | exit 1 |
| 406 | fi |
| 407 | |
| 408 | if ! /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${BUNDLE_VERSION}" "${INFO_PLIST}" >/dev/null 2>&1; then |
| 409 | /usr/libexec/PlistBuddy -c "Add :CFBundleVersion string ${BUNDLE_VERSION}" "${INFO_PLIST}" |
| 410 | fi |
| 411 | |
| 412 | echo "Updated CFBundleVersion to ${BUNDLE_VERSION}" |
| 413 | settings: |
| 414 | base: |
| 415 | PRODUCT_BUNDLE_IDENTIFIER: ai.splitfire.klepon |
| 416 | PRODUCT_NAME: Klepon |
| 417 | MARKETING_VERSION: "1.0.0" |
| 418 | CURRENT_PROJECT_VERSION: 1 |
| 419 | ASSETCATALOG_COMPILER_APPICON_NAME: AppIconTV |
| 420 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor |
| 421 | ENABLE_USER_SCRIPT_SANDBOXING: NO |
| 422 | TARGETED_DEVICE_FAMILY: 3 |
| 423 | "EXCLUDED_ARCHS[sdk=appletvsimulator*]": x86_64 |
| 424 | configs: |
| 425 | Debug: |
| 426 | PRODUCT_BUNDLE_IDENTIFIER: ai.splitfire.klepon-Debug |
| 427 | PRODUCT_NAME: Klepon Debug |
| 428 | SWIFT_OPTIMIZATION_LEVEL: -Onone |
| 429 | Release: |
| 430 | SWIFT_OPTIMIZATION_LEVEL: -O |
| 431 | |
| 432 | KleponTVTopShelfExtension: |
| 433 | name: Klepon TV Top Shelf |
| 434 | type: app-extension |
| 435 | platform: tvOS |
| 436 | sources: |
| 437 | - path: KleponTVTopShelfExtension |
| 438 | excludes: |
| 439 | - Info.plist |
| 440 | info: |
| 441 | path: KleponTVTopShelfExtension/Info.plist |
| 442 | properties: |
| 443 | CFBundleShortVersionString: $(MARKETING_VERSION) |
| 444 | CFBundleVersion: $(CURRENT_PROJECT_VERSION) |
| 445 | CFBundleDisplayName: Klepon TV Top Shelf |
| 446 | UIRequiredDeviceCapabilities: |
| 447 | - arm64 |
| 448 | NSExtension: |
| 449 | NSExtensionPointIdentifier: com.apple.tv-top-shelf |
| 450 | NSExtensionPrincipalClass: $(PRODUCT_MODULE_NAME).ContentProvider |
| 451 | configFiles: |
| 452 | Debug: Configs/Signing.xcconfig |
| 453 | Release: Configs/Signing.xcconfig |
| 454 | postBuildScripts: |
| 455 | - name: Update CFBundleVersion |
| 456 | shell: /bin/sh |
| 457 | basedOnDependencyAnalysis: false |
| 458 | showEnvVars: false |
| 459 | script: | |
| 460 | set -eu |
| 461 | |
| 462 | SHARED_BUNDLE_VERSION_FILE="${BUILD_DIR}/klepon-cfbundleversion.txt" |
| 463 | if [ -f "${SHARED_BUNDLE_VERSION_FILE}" ]; then |
| 464 | BUNDLE_VERSION="$(cat "${SHARED_BUNDLE_VERSION_FILE}")" |
| 465 | else |
| 466 | BUNDLE_VERSION="$(date -u +"%Y%m%d.%H%M")" |
| 467 | printf '%s' "${BUNDLE_VERSION}" > "${SHARED_BUNDLE_VERSION_FILE}" |
| 468 | fi |
| 469 | |
| 470 | INFO_PLIST="${TARGET_BUILD_DIR}/${INFOPLIST_PATH}" |
| 471 | |
| 472 | if [ ! -f "${INFO_PLIST}" ]; then |
| 473 | echo "error: Info.plist not found at ${INFO_PLIST}" |
| 474 | exit 1 |
| 475 | fi |
| 476 | |
| 477 | if ! /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${BUNDLE_VERSION}" "${INFO_PLIST}" >/dev/null 2>&1; then |
| 478 | /usr/libexec/PlistBuddy -c "Add :CFBundleVersion string ${BUNDLE_VERSION}" "${INFO_PLIST}" |
| 479 | fi |
| 480 | |
| 481 | echo "Updated CFBundleVersion to ${BUNDLE_VERSION}" |
| 482 | settings: |
| 483 | base: |
| 484 | APPLICATION_EXTENSION_API_ONLY: YES |
| 485 | PRODUCT_BUNDLE_IDENTIFIER: ai.splitfire.klepon.topshelf |
| 486 | PRODUCT_NAME: Klepon TV Top Shelf |
| 487 | MARKETING_VERSION: "1.0.0" |
| 488 | CURRENT_PROJECT_VERSION: 1 |
| 489 | ENABLE_USER_SCRIPT_SANDBOXING: NO |
| 490 | TARGETED_DEVICE_FAMILY: 3 |
| 491 | configs: |
| 492 | Debug: |
| 493 | PRODUCT_BUNDLE_IDENTIFIER: ai.splitfire.klepon-Debug.topshelf |
| 494 | SWIFT_OPTIMIZATION_LEVEL: -Onone |
| 495 | Release: |
| 496 | SWIFT_OPTIMIZATION_LEVEL: -O |
| 497 | |
| 498 | KleponVision: |
| 499 | name: Klepon Vision |
| 500 | type: application |
| 501 | platform: visionOS |
| 502 | sources: |
| 503 | - path: Klepon |
| 504 | excludes: |
| 505 | - Info.plist |
| 506 | - Klepon.entitlements |
| 507 | info: |
| 508 | path: KleponVision/Info.plist |
| 509 | properties: |
| 510 | CFBundleShortVersionString: $(MARKETING_VERSION) |
| 511 | CFBundleVersion: $(CURRENT_PROJECT_VERSION) |
| 512 | ITSAppUsesNonExemptEncryption: false |
| 513 | UILaunchScreen: {} |
| 514 | OndeAppId: $(ONDE_APP_ID) |
| 515 | OndeAppSecret: $(ONDE_APP_SECRET) |
| 516 | entitlements: |
| 517 | path: KleponVision/KleponVision.entitlements |
| 518 | properties: |
| 519 | com.apple.security.application-groups: |
| 520 | - group.com.ondeinference.apps |
| 521 | configFiles: |
| 522 | Debug: Configs/Signing.xcconfig |
| 523 | Release: Configs/Signing.xcconfig |
| 524 | dependencies: |
| 525 | - package: Ed |
| 526 | product: Ed |
| 527 | postBuildScripts: |
| 528 | - name: Update CFBundleVersion |
| 529 | shell: /bin/sh |
| 530 | basedOnDependencyAnalysis: false |
| 531 | showEnvVars: false |
| 532 | script: | |
| 533 | set -eu |
| 534 | |
| 535 | SHARED_BUNDLE_VERSION_FILE="${BUILD_DIR}/klepon-cfbundleversion.txt" |
| 536 | if [ -f "${SHARED_BUNDLE_VERSION_FILE}" ]; then |
| 537 | BUNDLE_VERSION="$(cat "${SHARED_BUNDLE_VERSION_FILE}")" |
| 538 | else |
| 539 | BUNDLE_VERSION="$(date -u +"%Y%m%d.%H%M")" |
| 540 | printf '%s' "${BUNDLE_VERSION}" > "${SHARED_BUNDLE_VERSION_FILE}" |
| 541 | fi |
| 542 | |
| 543 | INFO_PLIST="${TARGET_BUILD_DIR}/${INFOPLIST_PATH}" |
| 544 | |
| 545 | if [ ! -f "${INFO_PLIST}" ]; then |
| 546 | echo "error: Info.plist not found at ${INFO_PLIST}" |
| 547 | exit 1 |
| 548 | fi |
| 549 | |
| 550 | if ! /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${BUNDLE_VERSION}" "${INFO_PLIST}" >/dev/null 2>&1; then |
| 551 | /usr/libexec/PlistBuddy -c "Add :CFBundleVersion string ${BUNDLE_VERSION}" "${INFO_PLIST}" |
| 552 | fi |
| 553 | |
| 554 | echo "Updated CFBundleVersion to ${BUNDLE_VERSION}" |
| 555 | settings: |
| 556 | base: |
| 557 | PRODUCT_BUNDLE_IDENTIFIER: ai.splitfire.klepon |
| 558 | PRODUCT_NAME: Klepon |
| 559 | MARKETING_VERSION: "1.0.0" |
| 560 | CURRENT_PROJECT_VERSION: 1 |
| 561 | TARGETED_DEVICE_FAMILY: 7 |
| 562 | ASSETCATALOG_COMPILER_APPICON_NAME: AppIconVision |
| 563 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor |
| 564 | ENABLE_USER_SCRIPT_SANDBOXING: NO |
| 565 | "EXCLUDED_ARCHS[sdk=xrsimulator*]": x86_64 |
| 566 | configs: |
| 567 | Debug: |
| 568 | PRODUCT_BUNDLE_IDENTIFIER: ai.splitfire.klepon-Debug |
| 569 | PRODUCT_NAME: Klepon Debug |
| 570 | SWIFT_OPTIMIZATION_LEVEL: -Onone |
| 571 | Release: |
| 572 | SWIFT_OPTIMIZATION_LEVEL: -O |
| 573 | |
| 574 | KleponWatch: |
| 575 | name: Klepon Watch |
| 576 | type: application |
| 577 | platform: watchOS |
| 578 | sources: |
| 579 | - path: KleponWatch |
| 580 | - path: Klepon/Domain/GuideEntry.swift |
| 581 | - path: Klepon/DesignSystem/KleponColor.swift |
| 582 | - path: Klepon/Resources/Content |
| 583 | buildPhase: resources |
| 584 | configFiles: |
| 585 | Debug: Configs/Signing.xcconfig |
| 586 | Release: Configs/Signing.xcconfig |
| 587 | postBuildScripts: |
| 588 | - name: Update CFBundleVersion |
| 589 | shell: /bin/sh |
| 590 | basedOnDependencyAnalysis: false |
| 591 | showEnvVars: false |
| 592 | script: | |
| 593 | set -eu |
| 594 | |
| 595 | SHARED_BUNDLE_VERSION_FILE="${BUILD_DIR}/klepon-cfbundleversion.txt" |
| 596 | if [ -f "${SHARED_BUNDLE_VERSION_FILE}" ]; then |
| 597 | BUNDLE_VERSION="$(cat "${SHARED_BUNDLE_VERSION_FILE}")" |
| 598 | else |
| 599 | BUNDLE_VERSION="$(date -u +"%Y%m%d.%H%M")" |
| 600 | printf '%s' "${BUNDLE_VERSION}" > "${SHARED_BUNDLE_VERSION_FILE}" |
| 601 | fi |
| 602 | |
| 603 | INFO_PLIST="${TARGET_BUILD_DIR}/${INFOPLIST_PATH}" |
| 604 | |
| 605 | if [ ! -f "${INFO_PLIST}" ]; then |
| 606 | echo "error: Info.plist not found at ${INFO_PLIST}" |
| 607 | exit 1 |
| 608 | fi |
| 609 | |
| 610 | if ! /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${BUNDLE_VERSION}" "${INFO_PLIST}" >/dev/null 2>&1; then |
| 611 | /usr/libexec/PlistBuddy -c "Add :CFBundleVersion string ${BUNDLE_VERSION}" "${INFO_PLIST}" |
| 612 | fi |
| 613 | |
| 614 | echo "Updated CFBundleVersion to ${BUNDLE_VERSION}" |
| 615 | settings: |
| 616 | base: |
| 617 | PRODUCT_BUNDLE_IDENTIFIER: ai.splitfire.klepon.watchkitapp |
| 618 | KLEPON_COMPANION_BUNDLE_ID: ai.splitfire.klepon |
| 619 | PRODUCT_NAME: Klepon Watch |
| 620 | MARKETING_VERSION: "1.0.0" |
| 621 | CURRENT_PROJECT_VERSION: 1 |
| 622 | GENERATE_INFOPLIST_FILE: NO |
| 623 | INFOPLIST_FILE: KleponWatch/Info.plist |
| 624 | ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon |
| 625 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor |
| 626 | ENABLE_USER_SCRIPT_SANDBOXING: NO |
| 627 | SDKROOT: watchos |
| 628 | TARGETED_DEVICE_FAMILY: 4 |
| 629 | SKIP_INSTALL: YES |
| 630 | LD_RUNPATH_SEARCH_PATHS: |
| 631 | - "$(inherited)" |
| 632 | - "@executable_path/Frameworks" |
| 633 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES: YES |
| 634 | "EXCLUDED_ARCHS[sdk=watchsimulator*]": x86_64 |
| 635 | configs: |
| 636 | Debug: |
| 637 | PRODUCT_BUNDLE_IDENTIFIER: ai.splitfire.klepon-Debug.watchkitapp |
| 638 | KLEPON_COMPANION_BUNDLE_ID: ai.splitfire.klepon-Debug |
| 639 | SWIFT_OPTIMIZATION_LEVEL: -Onone |
| 640 | Release: |
| 641 | SWIFT_OPTIMIZATION_LEVEL: -O |