@ondeinference / klepon / commits / 53a4d69

Replace the Onde Swift SDK with Ed

Klepon now depends on ed-swift 1.0.2 instead of onde-swift 1.1.2. OndeGuideEngine holds an EdAgent and uses its plain chat turn (send), so answers behave the same as before. No tools are registered yet. Ed's loadAssignedModel takes an environment, which is hardcoded to .production. The PrivacyInfo injection scripts point at EdFramework.xcframework. The Xcode project is regenerated with xcodegen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Seto Elkahfi committed Oct 4, 2026 at 23:15 UTC 53a4d69f3c67bf3118fd2a94d866e25856351da1
10 files changed +104 -136
CLAUDE.md
+2 -2
@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
4
5 ## Project
6
7 -Klepon is a SwiftUI guide to Indonesian dishes, ingredients, and food traditions. It supports iOS, macOS, tvOS, visionOS, and watchOS and uses the [Onde Swift SDK](https://github.com/ondeinference/onde-swift) for private on-device AI answers.
7 +Klepon is a SwiftUI guide to Indonesian dishes, ingredients, and food traditions. It supports iOS, macOS, tvOS, visionOS, and watchOS and uses the [Ed Swift SDK](https://github.com/ondeinference/ed-swift) (the Onde-powered on-device agent) for private on-device AI answers.
8
9 ## Project structure
10
@@ -83,7 +83,7 @@ AppState
83
84 ### On-device AI
85
86 -`OndeGuideEngine` conforms to `GuideAnswering` and lazily initializes `OndeChatEngine` (from the Onde Swift package) only when inference is actually requested. `GuideAnswerService` depends on the `GuideAnswering` protocol, not the concrete engine, so tests can inject `StubGuideEngine` without touching the Rust/UniFFI runtime.
86 +`OndeGuideEngine` conforms to `GuideAnswering` and lazily initializes `EdAgent` (from the Ed Swift package) only when inference is actually requested. `GuideAnswerService` depends on the `GuideAnswering` protocol, not the concrete engine, so tests can inject `StubGuideEngine` without touching the Rust/UniFFI runtime.
87
88 tvOS inference is gated on hardware: Apple TV 4K 3rd generation (AppleTV14,1, A15) or newer — checked via `sysctlbyname("hw.machine", ...)` in `OndeGuideEngine.swift`.
89
Klepon.xcodeproj/project.pbxproj
+65 -97
@@ -61,7 +61,7 @@
61 4609C70D9FB74C55B9DBE832 /* KleponActionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52DD909BB2EF68103CB46EDA /* KleponActionButton.swift */; };
62 46D9C39408990F1C332EA957 /* AccountStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AFCDF98AD60ED73A388B23D /* AccountStore.swift */; };
63 478FFEBDAA7729189B429A6D /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7E886BAB66E828950DBED52 /* SearchView.swift */; };
64 - 47B632AF6BF3E25AF628CC01 /* Onde in Frameworks */ = {isa = PBXBuildFile; productRef = 35BDA28E3F43D5441C5FE932 /* Onde */; };
64 + 47B632AF6BF3E25AF628CC01 /* Ed in Frameworks */ = {isa = PBXBuildFile; productRef = ED0553BE20DAEAC1196315EC /* Ed */; };
65 4B6E0CF8EAB6FF1D0160E3E6 /* KleponColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C675ABBBA25BBA25A8DE29BE /* KleponColor.swift */; };
66 4D63E231AC9630B2C225DF22 /* WatchHomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDBB4F5D4C98D036AC52E193 /* WatchHomeView.swift */; };
67 53D759A429886E0FD8E5E9BF /* KleponTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0AF6507157DAF401A9BC40 /* KleponTabBarController.swift */; };
@@ -69,7 +69,7 @@
69 5808C4539EBB98D822BDE99F /* KleponActionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52DD909BB2EF68103CB46EDA /* KleponActionButton.swift */; };
70 587F0BB61966B2BB048013DE /* KleponChip.swift in Sources */ = {isa = PBXBuildFile; fileRef = B83C4F3C8688072191AA16C6 /* KleponChip.swift */; };
71 5C3590F8B1A8255C5E175A03 /* PlatformViewSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = F51D6F97615398D511673B98 /* PlatformViewSupport.swift */; };
72 - 5D3BDDCB5CA8A8DC32E8ABEA /* Onde in Frameworks */ = {isa = PBXBuildFile; productRef = CECDF5959E6652B49DCF1E18 /* Onde */; };
72 + 5D3BDDCB5CA8A8DC32E8ABEA /* Ed in Frameworks */ = {isa = PBXBuildFile; productRef = C60C4F34CE2B62D63F20DCBC /* Ed */; };
73 609532817F88D0D6F1E3CB16 /* AccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FFFECF1D8C873FA535DE2FD /* AccountView.swift */; };
74 6117CD728CC7FF8D6EB0A8C8 /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13418896CA28250CEEE7592E /* OnboardingView.swift */; };
75 67368394088AA3045EBA14A5 /* OndeEnvironmentBootstrap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B499D3BF7AC80D31907D87F /* OndeEnvironmentBootstrap.swift */; };
@@ -82,6 +82,7 @@
82 76EE3B0D899987557B6741DF /* collections.json in Resources */ = {isa = PBXBuildFile; fileRef = 1FDDB0F88FF430ABD679AD89 /* collections.json */; };
83 78142FDCFE7EF00A3D81A067 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42E152344B39D1D77F1B3943 /* SettingsView.swift */; };
84 7A9B7E0858E7095E18EC7AC6 /* KleponApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEDE2A1E73EB15970A17A894 /* KleponApp.swift */; };
85 + 7BF234E67821CDDA64D3D351 /* KleponLogicTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF5256899EAD305440C80AD4 /* KleponLogicTests.swift */; };
86 7C90532B70C1C4840E49A92B /* GuideDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7541983FF7CE190C0663294D /* GuideDetailView.swift */; };
87 7E6755E542F15B6921C21604 /* AccountStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AFCDF98AD60ED73A388B23D /* AccountStore.swift */; };
88 7F1E744AAE60BF1FB132D66C /* KleponCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 868C58098969278A542893F3 /* KleponCard.swift */; };
@@ -98,7 +99,6 @@
99 889CBF2AF84AABF8012EE737 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AF79D8DD27B9CA485140C934 /* Assets.xcassets */; };
100 895B5369E9CF1E1B26CDF40E /* KleponTypography.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD520C870387E82E9A1533C2 /* KleponTypography.swift */; };
101 89F1A80A8FDB8E8705878210 /* Klepon TV Top Shelf.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = ED4132D117B29BD22A1FB6C2 /* Klepon TV Top Shelf.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
101 - 8A9ED3672FD88009004180F8 /* KleponLogicTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A9ED3662FD88009004180F8 /* KleponLogicTests.swift */; };
102 8C6D6EC32870A45E021BF3EB /* KleponMetadataRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E1C50BFBE2EF5F37941590 /* KleponMetadataRow.swift */; };
103 8EBCC9FA074785FDD82B02E5 /* KleponApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEDE2A1E73EB15970A17A894 /* KleponApp.swift */; };
104 906E12C00728B15B676A23DB /* AppState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AF291E9C2E66209377138E6 /* AppState.swift */; };
@@ -126,7 +126,7 @@
126 A571A7E1FA449D257951367C /* guide_entries.json in Resources */ = {isa = PBXBuildFile; fileRef = 248F359109A08A60F792C42D /* guide_entries.json */; };
127 A5E339F380247E90AEF56DC6 /* GuideCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = F17C0DB3BD620AD9F55B7631 /* GuideCollection.swift */; };
128 A69F302A8F11969D9CD197EE /* guide_entries.json in Resources */ = {isa = PBXBuildFile; fileRef = 248F359109A08A60F792C42D /* guide_entries.json */; };
129 - A7001D58E0F2B1BD5F52FF8A /* Onde in Frameworks */ = {isa = PBXBuildFile; productRef = 855EE8DF62A7820E77C05D1A /* Onde */; };
129 + A7001D58E0F2B1BD5F52FF8A /* Ed in Frameworks */ = {isa = PBXBuildFile; productRef = D6FB43CACF14096F074C5D06 /* Ed */; };
130 A76C56EF8CFB6D723B55EE74 /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7E886BAB66E828950DBED52 /* SearchView.swift */; };
131 A81DB2CF33EF6E8730010E87 /* topshelf-klepon.png in Resources */ = {isa = PBXBuildFile; fileRef = 8C4826639AED1295CAA284B0 /* topshelf-klepon.png */; };
132 B1F1D1A453150D3BBB0146EF /* RecentlyViewedStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = E45070309D2C7058BAA44CD2 /* RecentlyViewedStore.swift */; };
@@ -145,7 +145,7 @@
145 C1DF8DB1F063D1C5258602D6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AF79D8DD27B9CA485140C934 /* Assets.xcassets */; };
146 C2A06A0802694BD0C1F39B85 /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7E886BAB66E828950DBED52 /* SearchView.swift */; };
147 C2EA2682A6545802C06E00CC /* WatchBrandSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 217E7D4050D471955FF3AB13 /* WatchBrandSystem.swift */; };
148 - C62C1ECC5068A50E5C09CEC5 /* Onde in Frameworks */ = {isa = PBXBuildFile; productRef = D977F065ACEF38E106A8FB5C /* Onde */; };
148 + C62C1ECC5068A50E5C09CEC5 /* Ed in Frameworks */ = {isa = PBXBuildFile; productRef = 4C444F7050676B8B888FFA6E /* Ed */; };
149 C6532365C518962FC265ABCD /* GuideCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = F17C0DB3BD620AD9F55B7631 /* GuideCollection.swift */; };
150 C709C82E7F0BCF398BCD9C2F /* ContentRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2891A1AFBB59928FC5B1E66 /* ContentRepository.swift */; };
151 C88013421E507AEDCB41BE96 /* OndeGuideEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF0D53A5F9D5897E15506C20 /* OndeGuideEngine.swift */; };
@@ -255,14 +255,14 @@
255 539B3F0A03FFFDCF3DB41241 /* topshelf-street-food.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "topshelf-street-food.png"; sourceTree = "<group>"; };
256 5AF291E9C2E66209377138E6 /* AppState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppState.swift; sourceTree = "<group>"; };
257 5AFCDF98AD60ED73A388B23D /* AccountStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountStore.swift; sourceTree = "<group>"; };
258 - 5DE91827A635C0B0B72690EC /* Klepon Debug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Klepon Debug.app"; sourceTree = BUILT_PRODUCTS_DIR; };
258 + 5DE91827A635C0B0B72690EC /* Klepon.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = Klepon.app; sourceTree = BUILT_PRODUCTS_DIR; };
259 6235AD6792F25476E2A508F0 /* SearchService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchService.swift; sourceTree = "<group>"; };
260 643D52BCEDF66CC8FE8A1234 /* RecentSearchStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentSearchStore.swift; sourceTree = "<group>"; };
261 67FAA69C42F1845ECB79AC16 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
262 6B67BCC5A459288FB240C6E7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
263 6EFBF98118F066D3C7FA14B2 /* KleponWatchApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KleponWatchApp.swift; sourceTree = "<group>"; };
264 7541983FF7CE190C0663294D /* GuideDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideDetailView.swift; sourceTree = "<group>"; };
265 - 754A7FAB8C92112B8B6228B7 /* Klepon Debug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Klepon Debug.app"; sourceTree = BUILT_PRODUCTS_DIR; };
265 + 754A7FAB8C92112B8B6228B7 /* Klepon TV.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "Klepon TV.app"; sourceTree = BUILT_PRODUCTS_DIR; };
266 759E92BBAF958F5882F17C37 /* KleponSnapshotTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KleponSnapshotTests.swift; sourceTree = "<group>"; };
267 7C62410511A5229D61B0A8E1 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
268 7F2850226B4B05FF758C1F93 /* GuideArtworkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideArtworkView.swift; sourceTree = "<group>"; };
@@ -270,7 +270,6 @@
270 85E7B5E3D9A1906C2FED3032 /* EmptyStateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyStateView.swift; sourceTree = "<group>"; };
271 868C58098969278A542893F3 /* KleponCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KleponCard.swift; sourceTree = "<group>"; };
272 8870F09A11EA6D3F0108DA4D /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
273 - 8A9ED3662FD88009004180F8 /* KleponLogicTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KleponLogicTests.swift; sourceTree = "<group>"; };
273 8C4826639AED1295CAA284B0 /* topshelf-klepon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "topshelf-klepon.png"; sourceTree = "<group>"; };
274 943670F01925DE3065B92636 /* testEmptyStateView.saved-empty-state.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "testEmptyStateView.saved-empty-state.png"; sourceTree = "<group>"; };
275 95321199A19014C816398CAC /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
@@ -278,7 +277,7 @@
277 9D6EFA021D4524508DA8E78C /* testGuideArtworkView.guide-artwork.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "testGuideArtworkView.guide-artwork.png"; sourceTree = "<group>"; };
278 9E76510CC840CE068B0FC381 /* Klepon Watch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Klepon Watch.app"; sourceTree = BUILT_PRODUCTS_DIR; };
279 A4400AB0AB8D245325A00BA3 /* Klepon.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Klepon.entitlements; sourceTree = "<group>"; };
281 - A48AC0E39277DEFCE5D103CC /* KleponSnapshotTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KleponSnapshotTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
280 + A48AC0E39277DEFCE5D103CC /* KleponSnapshotTests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = KleponSnapshotTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
281 A7E1C50BFBE2EF5F37941590 /* KleponMetadataRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KleponMetadataRow.swift; sourceTree = "<group>"; };
282 A998AA7A251DE3AD07A88B1E /* ContentProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentProvider.swift; sourceTree = "<group>"; };
283 AF79D8DD27B9CA485140C934 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
@@ -291,12 +290,12 @@
290 C82874C90A5FAA32D1B52EB7 /* AppRootView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppRootView.swift; sourceTree = "<group>"; };
291 CB3E2497612D02F0279A791F /* DebugMenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebugMenuView.swift; sourceTree = "<group>"; };
292 CD520C870387E82E9A1533C2 /* KleponTypography.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KleponTypography.swift; sourceTree = "<group>"; };
294 - D53EA049112C7D59177F9878 /* Klepon Debug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Klepon Debug.app"; sourceTree = BUILT_PRODUCTS_DIR; };
293 + D53EA049112C7D59177F9878 /* Klepon Mac.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Klepon Mac.app"; sourceTree = BUILT_PRODUCTS_DIR; };
294 DEDE2A1E73EB15970A17A894 /* KleponApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KleponApp.swift; sourceTree = "<group>"; };
296 - E041DB1D0DAA58746AE6F9EA /* Klepon Debug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Klepon Debug.app"; sourceTree = BUILT_PRODUCTS_DIR; };
295 + E041DB1D0DAA58746AE6F9EA /* Klepon Vision.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "Klepon Vision.app"; sourceTree = BUILT_PRODUCTS_DIR; };
296 E45070309D2C7058BAA44CD2 /* RecentlyViewedStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentlyViewedStore.swift; sourceTree = "<group>"; };
297 E7E886BAB66E828950DBED52 /* SearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = "<group>"; };
299 - ED4132D117B29BD22A1FB6C2 /* Klepon TV Top Shelf.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Klepon TV Top Shelf.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
298 + ED4132D117B29BD22A1FB6C2 /* Klepon TV Top Shelf.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = "Klepon TV Top Shelf.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
299 EDBB4F5D4C98D036AC52E193 /* WatchHomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchHomeView.swift; sourceTree = "<group>"; };
300 EEC6E7DC56DD8E1459EFC892 /* AskSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AskSheetView.swift; sourceTree = "<group>"; };
301 F17C0DB3BD620AD9F55B7631 /* GuideCollection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideCollection.swift; sourceTree = "<group>"; };
@@ -304,6 +303,7 @@
303 F51D6F97615398D511673B98 /* PlatformViewSupport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlatformViewSupport.swift; sourceTree = "<group>"; };
304 F8458C69807F335C0F7E97EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
305 FC438ECC335175B18778C682 /* SectionHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SectionHeader.swift; sourceTree = "<group>"; };
306 + FF5256899EAD305440C80AD4 /* KleponLogicTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KleponLogicTests.swift; sourceTree = "<group>"; };
307 /* End PBXFileReference section */
308
309 /* Begin PBXFrameworksBuildPhase section */
@@ -311,7 +311,7 @@
311 isa = PBXFrameworksBuildPhase;
312 buildActionMask = 2147483647;
313 files = (
314 - 5D3BDDCB5CA8A8DC32E8ABEA /* Onde in Frameworks */,
314 + 5D3BDDCB5CA8A8DC32E8ABEA /* Ed in Frameworks */,
315 );
316 runOnlyForDeploymentPostprocessing = 0;
317 };
@@ -319,7 +319,7 @@
319 isa = PBXFrameworksBuildPhase;
320 buildActionMask = 2147483647;
321 files = (
322 - C62C1ECC5068A50E5C09CEC5 /* Onde in Frameworks */,
322 + C62C1ECC5068A50E5C09CEC5 /* Ed in Frameworks */,
323 );
324 runOnlyForDeploymentPostprocessing = 0;
325 };
@@ -327,7 +327,7 @@
327 isa = PBXFrameworksBuildPhase;
328 buildActionMask = 2147483647;
329 files = (
330 - 47B632AF6BF3E25AF628CC01 /* Onde in Frameworks */,
330 + 47B632AF6BF3E25AF628CC01 /* Ed in Frameworks */,
331 215C4D8A2B2ABF2C3C11C163 /* SystemConfiguration.framework in Frameworks */,
332 );
333 runOnlyForDeploymentPostprocessing = 0;
@@ -344,7 +344,7 @@
344 isa = PBXFrameworksBuildPhase;
345 buildActionMask = 2147483647;
346 files = (
347 - A7001D58E0F2B1BD5F52FF8A /* Onde in Frameworks */,
347 + A7001D58E0F2B1BD5F52FF8A /* Ed in Frameworks */,
348 );
349 runOnlyForDeploymentPostprocessing = 0;
350 };
@@ -380,12 +380,12 @@
380 3F9369D339C14126AB44D720 /* Products */ = {
381 isa = PBXGroup;
382 children = (
383 - D53EA049112C7D59177F9878 /* Klepon Debug.app */,
383 + D53EA049112C7D59177F9878 /* Klepon Mac.app */,
384 ED4132D117B29BD22A1FB6C2 /* Klepon TV Top Shelf.appex */,
385 - 754A7FAB8C92112B8B6228B7 /* Klepon Debug.app */,
386 - E041DB1D0DAA58746AE6F9EA /* Klepon Debug.app */,
385 + 754A7FAB8C92112B8B6228B7 /* Klepon TV.app */,
386 + E041DB1D0DAA58746AE6F9EA /* Klepon Vision.app */,
387 9E76510CC840CE068B0FC381 /* Klepon Watch.app */,
388 - 5DE91827A635C0B0B72690EC /* Klepon Debug.app */,
388 + 5DE91827A635C0B0B72690EC /* Klepon.app */,
389 A48AC0E39277DEFCE5D103CC /* KleponSnapshotTests.xctest */,
390 );
391 name = Products;
@@ -464,9 +464,9 @@
464 825A58FCE091C3FE902D3131 /* KleponSnapshotTests */ = {
465 isa = PBXGroup;
466 children = (
467 + FF5256899EAD305440C80AD4 /* KleponLogicTests.swift */,
468 759E92BBAF958F5882F17C37 /* KleponSnapshotTests.swift */,
469 2D223E83C424037A62CA358F /* __Snapshots__ */,
469 - 8A9ED3662FD88009004180F8 /* KleponLogicTests.swift */,
470 );
471 path = KleponSnapshotTests;
472 sourceTree = "<group>";
@@ -661,17 +661,17 @@
661 );
662 name = "Klepon Vision";
663 packageProductDependencies = (
664 - CECDF5959E6652B49DCF1E18 /* Onde */,
664 + C60C4F34CE2B62D63F20DCBC /* Ed */,
665 );
666 productName = "Klepon Vision";
667 - productReference = E041DB1D0DAA58746AE6F9EA /* Klepon Debug.app */;
667 + productReference = E041DB1D0DAA58746AE6F9EA /* Klepon Vision.app */;
668 productType = "com.apple.product-type.application";
669 };
670 2ADB11F6C1D51B9F9A9DB15F /* Klepon */ = {
671 isa = PBXNativeTarget;
672 buildConfigurationList = E1E5A3DF58C9552EE814CC23 /* Build configuration list for PBXNativeTarget "Klepon" */;
673 buildPhases = (
674 - 923C71812D16201CD8F465F5 /* Inject PrivacyInfo into OndeFramework */,
674 + 769E8E263D58CBDD86DF4C29 /* Inject PrivacyInfo into EdFramework */,
675 142193A63A26ACC180E1EB37 /* Sources */,
676 BC5A6BBAFB4A1B61000065D1 /* Resources */,
677 F72797E506E8FA89264A5C68 /* Frameworks */,
@@ -685,10 +685,10 @@
685 );
686 name = Klepon;
687 packageProductDependencies = (
688 - 855EE8DF62A7820E77C05D1A /* Onde */,
688 + D6FB43CACF14096F074C5D06 /* Ed */,
689 );
690 productName = Klepon;
691 - productReference = 5DE91827A635C0B0B72690EC /* Klepon Debug.app */;
691 + productReference = 5DE91827A635C0B0B72690EC /* Klepon.app */;
692 productType = "com.apple.product-type.application";
693 };
694 62904071A31F700A13D6F432 /* Klepon TV Top Shelf */ = {
@@ -714,7 +714,7 @@
714 isa = PBXNativeTarget;
715 buildConfigurationList = 78899F7C62A9675700D42C5A /* Build configuration list for PBXNativeTarget "Klepon Mac" */;
716 buildPhases = (
717 - D33E59FA248341330B8D1DBC /* Inject PrivacyInfo into OndeFramework */,
717 + DAFDBFBC180515F126F30051 /* Inject PrivacyInfo into EdFramework */,
718 625CD4834F7E62F4BCE58404 /* Sources */,
719 667705EEBEDEBBCA43E94EAC /* Resources */,
720 B0052635A882F0E996B81154 /* Frameworks */,
@@ -726,10 +726,10 @@
726 );
727 name = "Klepon Mac";
728 packageProductDependencies = (
729 - 35BDA28E3F43D5441C5FE932 /* Onde */,
729 + ED0553BE20DAEAC1196315EC /* Ed */,
730 );
731 productName = "Klepon Mac";
732 - productReference = D53EA049112C7D59177F9878 /* Klepon Debug.app */;
732 + productReference = D53EA049112C7D59177F9878 /* Klepon Mac.app */;
733 productType = "com.apple.product-type.application";
734 };
735 E153DCB2727ADB891CF09A25 /* Klepon TV */ = {
@@ -749,10 +749,10 @@
749 );
750 name = "Klepon TV";
751 packageProductDependencies = (
752 - D977F065ACEF38E106A8FB5C /* Onde */,
752 + 4C444F7050676B8B888FFA6E /* Ed */,
753 );
754 productName = "Klepon TV";
755 - productReference = 754A7FAB8C92112B8B6228B7 /* Klepon Debug.app */;
755 + productReference = 754A7FAB8C92112B8B6228B7 /* Klepon TV.app */;
756 productType = "com.apple.product-type.application";
757 };
758 E8CEBF52617721AEE450A7CF /* Klepon Watch */ = {
@@ -802,7 +802,7 @@
802 isa = PBXProject;
803 attributes = {
804 BuildIndependentTargetsInParallel = YES;
805 - LastUpgradeCheck = 2700;
805 + LastUpgradeCheck = 2600;
806 TargetAttributes = {
807 0322696BE3965C4C0F0E5322 = {
808 ProvisioningStyle = Automatic;
@@ -837,7 +837,7 @@
837 mainGroup = D9EBF621A6F1A1729FE26516;
838 minimizedProjectReferenceProxies = 1;
839 packageReferences = (
840 - AD8C734FB461604D5793769C /* XCRemoteSwiftPackageReference "onde-swift" */,
840 + 113C98387653665692A4F210 /* XCRemoteSwiftPackageReference "ed-swift" */,
841 85B622113A5DC5A1BD2D123B /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */,
842 );
843 preferredProjectObjectVersion = 77;
@@ -846,12 +846,12 @@
846 projectRoot = "";
847 targets = (
848 2ADB11F6C1D51B9F9A9DB15F /* Klepon */,
849 + F10E9562BA0BE60A7E000DB0 /* KleponSnapshotTests */,
850 676CA86C78E7DB801DEEAF12 /* Klepon Mac */,
851 E153DCB2727ADB891CF09A25 /* Klepon TV */,
852 62904071A31F700A13D6F432 /* Klepon TV Top Shelf */,
853 0322696BE3965C4C0F0E5322 /* Klepon Vision */,
854 E8CEBF52617721AEE450A7CF /* Klepon Watch */,
854 - F10E9562BA0BE60A7E000DB0 /* KleponSnapshotTests */,
855 );
856 };
857 /* End PBXProject section */
@@ -1051,7 +1051,7 @@
1051 shellScript = "set -eu\n\nSHARED_BUNDLE_VERSION_FILE=\"${BUILD_DIR}/klepon-cfbundleversion.txt\"\nif [ -f \"${SHARED_BUNDLE_VERSION_FILE}\" ]; then\n BUNDLE_VERSION=\"$(cat \"${SHARED_BUNDLE_VERSION_FILE}\")\"\nelse\n BUNDLE_VERSION=\"$(date -u +\"%Y%m%d.%H%M\")\"\n printf '%s' \"${BUNDLE_VERSION}\" > \"${SHARED_BUNDLE_VERSION_FILE}\"\nfi\n\nINFO_PLIST=\"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\"\n\nif [ ! -f \"${INFO_PLIST}\" ]; then\n echo \"error: Info.plist not found at ${INFO_PLIST}\"\n exit 1\nfi\n\nif ! /usr/libexec/PlistBuddy -c \"Set :CFBundleVersion ${BUNDLE_VERSION}\" \"${INFO_PLIST}\" >/dev/null 2>&1; then\n /usr/libexec/PlistBuddy -c \"Add :CFBundleVersion string ${BUNDLE_VERSION}\" \"${INFO_PLIST}\"\nfi\n\necho \"Updated CFBundleVersion to ${BUNDLE_VERSION}\"\n";
1052 showEnvVarsInLog = 0;
1053 };
1054 - 923C71812D16201CD8F465F5 /* Inject PrivacyInfo into OndeFramework */ = {
1054 + 769E8E263D58CBDD86DF4C29 /* Inject PrivacyInfo into EdFramework */ = {
1055 isa = PBXShellScriptBuildPhase;
1056 alwaysOutOfDate = 1;
1057 buildActionMask = 2147483647;
@@ -1061,17 +1061,17 @@
1061 );
1062 inputPaths = (
1063 );
1064 - name = "Inject PrivacyInfo into OndeFramework";
1064 + name = "Inject PrivacyInfo into EdFramework";
1065 outputFileListPaths = (
1066 );
1067 outputPaths = (
1068 );
1069 runOnlyForDeploymentPostprocessing = 0;
1070 shellPath = /bin/sh;
1071 - shellScript = "set -eu\n# PrivacyInfo.xcprivacy is required inside every XCFramework slice.\n# Apple's scanner does not accept the app-level manifest as a substitute\n# for manifests inside nested third-party framework bundles.\n# BUILD_DIR is .../DerivedData/<name>/Build/Intermediates.noindex\n# SourcePackages is always two levels up from BUILD_DIR.\nXCFW=\"${BUILD_DIR}/../../SourcePackages/artifacts/onde-swift/OndeFramework/OndeFramework.xcframework\"\nPRIVACY_SRC=\"${SRCROOT}/Scripts/OndePrivacyInfo.xcprivacy\"\nif [ ! -d \"${XCFW}\" ]; then\n echo \"warning: OndeFramework.xcframework not found at ${XCFW} — skipping PrivacyInfo injection\"\n exit 0\nfi\nfor SLICE in \"${XCFW}\"/*/; do\n DEST=\"${SLICE}PrivacyInfo.xcprivacy\"\n if [ ! -f \"${DEST}\" ]; then\n cp \"${PRIVACY_SRC}\" \"${DEST}\"\n echo \"Injected PrivacyInfo.xcprivacy into ${SLICE}\"\n fi\ndone\n";
1071 + shellScript = "set -eu\n# PrivacyInfo.xcprivacy is required inside every XCFramework slice.\n# Apple's scanner does not accept the app-level manifest as a substitute\n# for manifests inside nested third-party framework bundles.\n# BUILD_DIR is .../DerivedData/<name>/Build/Intermediates.noindex\n# SourcePackages is always two levels up from BUILD_DIR.\nXCFW=\"${BUILD_DIR}/../../SourcePackages/artifacts/ed-swift/EdFramework/EdFramework.xcframework\"\nPRIVACY_SRC=\"${SRCROOT}/Scripts/OndePrivacyInfo.xcprivacy\"\nif [ ! -d \"${XCFW}\" ]; then\n echo \"warning: EdFramework.xcframework not found at ${XCFW} — skipping PrivacyInfo injection\"\n exit 0\nfi\nfor SLICE in \"${XCFW}\"/*/; do\n DEST=\"${SLICE}PrivacyInfo.xcprivacy\"\n if [ ! -f \"${DEST}\" ]; then\n cp \"${PRIVACY_SRC}\" \"${DEST}\"\n echo \"Injected PrivacyInfo.xcprivacy into ${SLICE}\"\n fi\ndone\n";
1072 showEnvVarsInLog = 0;
1073 };
1074 - D33E59FA248341330B8D1DBC /* Inject PrivacyInfo into OndeFramework */ = {
1074 + DAFDBFBC180515F126F30051 /* Inject PrivacyInfo into EdFramework */ = {
1075 isa = PBXShellScriptBuildPhase;
1076 alwaysOutOfDate = 1;
1077 buildActionMask = 2147483647;
@@ -1081,14 +1081,14 @@
1081 );
1082 inputPaths = (
1083 );
1084 - name = "Inject PrivacyInfo into OndeFramework";
1084 + name = "Inject PrivacyInfo into EdFramework";
1085 outputFileListPaths = (
1086 );
1087 outputPaths = (
1088 );
1089 runOnlyForDeploymentPostprocessing = 0;
1090 shellPath = /bin/sh;
1091 - shellScript = "set -eu\nXCFW=\"${BUILD_DIR}/../../SourcePackages/artifacts/onde-swift/OndeFramework/OndeFramework.xcframework\"\nPRIVACY_SRC=\"${SRCROOT}/Scripts/OndePrivacyInfo.xcprivacy\"\nif [ ! -d \"${XCFW}\" ]; then\n echo \"warning: OndeFramework.xcframework not found at ${XCFW} — skipping PrivacyInfo injection\"\n exit 0\nfi\nfor SLICE in \"${XCFW}\"/*/; do\n DEST=\"${SLICE}PrivacyInfo.xcprivacy\"\n if [ ! -f \"${DEST}\" ]; then\n cp \"${PRIVACY_SRC}\" \"${DEST}\"\n echo \"Injected PrivacyInfo.xcprivacy into ${SLICE}\"\n fi\ndone\n";
1091 + shellScript = "set -eu\nXCFW=\"${BUILD_DIR}/../../SourcePackages/artifacts/ed-swift/EdFramework/EdFramework.xcframework\"\nPRIVACY_SRC=\"${SRCROOT}/Scripts/OndePrivacyInfo.xcprivacy\"\nif [ ! -d \"${XCFW}\" ]; then\n echo \"warning: EdFramework.xcframework not found at ${XCFW} — skipping PrivacyInfo injection\"\n exit 0\nfi\nfor SLICE in \"${XCFW}\"/*/; do\n DEST=\"${SLICE}PrivacyInfo.xcprivacy\"\n if [ ! -f \"${DEST}\" ]; then\n cp \"${PRIVACY_SRC}\" \"${DEST}\"\n echo \"Injected PrivacyInfo.xcprivacy into ${SLICE}\"\n fi\ndone\n";
1092 showEnvVarsInLog = 0;
1093 };
1094 /* End PBXShellScriptBuildPhase section */
@@ -1284,8 +1284,8 @@
1284 isa = PBXSourcesBuildPhase;
1285 buildActionMask = 2147483647;
1286 files = (
1287 + 7BF234E67821CDDA64D3D351 /* KleponLogicTests.swift in Sources */,
1288 E599CCDB1FE5331C4A1EB6C6 /* KleponSnapshotTests.swift in Sources */,
1288 - 8A9ED3672FD88009004180F8 /* KleponLogicTests.swift in Sources */,
1289 );
1290 runOnlyForDeploymentPostprocessing = 0;
1291 };
@@ -1327,8 +1327,6 @@
1327 SWIFT_OPTIMIZATION_LEVEL = "-O";
1328 TARGETED_DEVICE_FAMILY = "1,2";
1329 TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Klepon.app/Klepon";
1330 - WATCHOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_WATCHOS_DEPLOYMENT_TARGET)";
1331 - XROS_DEPLOYMENT_TARGET = "$(RECOMMENDED_XROS_DEPLOYMENT_TARGET)";
1330 };
1331 name = Release;
1332 };
@@ -1349,8 +1347,6 @@
1347 SWIFT_OPTIMIZATION_LEVEL = "-Onone";
1348 TARGETED_DEVICE_FAMILY = "1,2";
1349 TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Klepon.app/Klepon";
1352 - WATCHOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_WATCHOS_DEPLOYMENT_TARGET)";
1353 - XROS_DEPLOYMENT_TARGET = "$(RECOMMENDED_XROS_DEPLOYMENT_TARGET)";
1350 };
1351 name = Debug;
1352 };
@@ -1358,6 +1354,7 @@
1354 isa = XCBuildConfiguration;
1355 baseConfigurationReference = 13B09D700AA047E07E91F6A2 /* Signing.xcconfig */;
1356 buildSettings = {
1357 + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
1358 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
1359 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
1360 CURRENT_PROJECT_VERSION = 1;
@@ -1377,8 +1374,6 @@
1374 SKIP_INSTALL = YES;
1375 SWIFT_OPTIMIZATION_LEVEL = "-Onone";
1376 TARGETED_DEVICE_FAMILY = 4;
1380 - WATCHOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_WATCHOS_DEPLOYMENT_TARGET)";
1381 - XROS_DEPLOYMENT_TARGET = "$(RECOMMENDED_XROS_DEPLOYMENT_TARGET)";
1377 };
1378 name = Debug;
1379 };
@@ -1401,8 +1396,6 @@
1396 SDKROOT = appletvos;
1397 SWIFT_OPTIMIZATION_LEVEL = "-O";
1398 TARGETED_DEVICE_FAMILY = 3;
1404 - WATCHOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_WATCHOS_DEPLOYMENT_TARGET)";
1405 - XROS_DEPLOYMENT_TARGET = "$(RECOMMENDED_XROS_DEPLOYMENT_TARGET)";
1399 };
1400 name = Release;
1401 };
@@ -1427,11 +1420,8 @@
1420 MARKETING_VERSION = 1.0.0;
1421 PRODUCT_BUNDLE_IDENTIFIER = "ai.splitfire.klepon-Debug";
1422 PRODUCT_NAME = "Klepon Debug";
1430 - REGISTER_APP_GROUPS = YES;
1423 SDKROOT = macosx;
1424 SWIFT_OPTIMIZATION_LEVEL = "-Onone";
1433 - WATCHOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_WATCHOS_DEPLOYMENT_TARGET)";
1434 - XROS_DEPLOYMENT_TARGET = "$(RECOMMENDED_XROS_DEPLOYMENT_TARGET)";
1425 };
1426 name = Debug;
1427 };
@@ -1456,11 +1446,8 @@
1446 MARKETING_VERSION = 1.0.0;
1447 PRODUCT_BUNDLE_IDENTIFIER = ai.splitfire.klepon;
1448 PRODUCT_NAME = Klepon;
1459 - REGISTER_APP_GROUPS = YES;
1449 SDKROOT = macosx;
1450 SWIFT_OPTIMIZATION_LEVEL = "-O";
1462 - WATCHOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_WATCHOS_DEPLOYMENT_TARGET)";
1463 - XROS_DEPLOYMENT_TARGET = "$(RECOMMENDED_XROS_DEPLOYMENT_TARGET)";
1451 };
1452 name = Release;
1453 };
@@ -1498,7 +1485,6 @@
1485 CLANG_WARN_UNREACHABLE_CODE = YES;
1486 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
1487 COPY_PHASE_STRIP = NO;
1501 - DEAD_CODE_STRIPPING = YES;
1488 DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
1489 ENABLE_NS_ASSERTIONS = NO;
1490 ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -1515,7 +1501,6 @@
1501 MTL_ENABLE_DEBUG_INFO = NO;
1502 MTL_FAST_MATH = YES;
1503 PRODUCT_NAME = "$(TARGET_NAME)";
1518 - STRING_CATALOG_GENERATE_SYMBOLS = YES;
1504 SWIFT_COMPILATION_MODE = wholemodule;
1505 SWIFT_OPTIMIZATION_LEVEL = "-O";
1506 SWIFT_VERSION = 5.0;
@@ -1541,14 +1526,12 @@
1526 "$(inherited)",
1527 "@executable_path/Frameworks",
1528 );
1544 - MARKETING_VERSION = 1.0.1;
1529 + MARKETING_VERSION = 1.0.0;
1530 PRODUCT_BUNDLE_IDENTIFIER = "ai.splitfire.klepon-Debug";
1531 PRODUCT_NAME = "Klepon Debug";
1532 SDKROOT = appletvos;
1533 SWIFT_OPTIMIZATION_LEVEL = "-Onone";
1534 TARGETED_DEVICE_FAMILY = 3;
1550 - WATCHOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_WATCHOS_DEPLOYMENT_TARGET)";
1551 - XROS_DEPLOYMENT_TARGET = "$(RECOMMENDED_XROS_DEPLOYMENT_TARGET)";
1535 };
1536 name = Debug;
1537 };
@@ -1574,8 +1557,6 @@
1557 SDKROOT = iphoneos;
1558 SWIFT_OPTIMIZATION_LEVEL = "-O";
1559 TARGETED_DEVICE_FAMILY = "1,2";
1577 - WATCHOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_WATCHOS_DEPLOYMENT_TARGET)";
1578 - XROS_DEPLOYMENT_TARGET = "$(RECOMMENDED_XROS_DEPLOYMENT_TARGET)";
1560 };
1561 name = Release;
1562 };
@@ -1600,8 +1581,6 @@
1581 SDKROOT = xros;
1582 SWIFT_OPTIMIZATION_LEVEL = "-O";
1583 TARGETED_DEVICE_FAMILY = 7;
1603 - WATCHOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_WATCHOS_DEPLOYMENT_TARGET)";
1604 - XROS_DEPLOYMENT_TARGET = "$(RECOMMENDED_XROS_DEPLOYMENT_TARGET)";
1584 };
1585 name = Release;
1586 };
@@ -1624,8 +1603,6 @@
1603 SDKROOT = appletvos;
1604 SWIFT_OPTIMIZATION_LEVEL = "-Onone";
1605 TARGETED_DEVICE_FAMILY = 3;
1627 - WATCHOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_WATCHOS_DEPLOYMENT_TARGET)";
1628 - XROS_DEPLOYMENT_TARGET = "$(RECOMMENDED_XROS_DEPLOYMENT_TARGET)";
1606 };
1607 name = Debug;
1608 };
@@ -1633,6 +1610,7 @@
1610 isa = XCBuildConfiguration;
1611 baseConfigurationReference = 13B09D700AA047E07E91F6A2 /* Signing.xcconfig */;
1612 buildSettings = {
1613 + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
1614 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
1615 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
1616 CURRENT_PROJECT_VERSION = 1;
@@ -1652,8 +1630,6 @@
1630 SKIP_INSTALL = YES;
1631 SWIFT_OPTIMIZATION_LEVEL = "-O";
1632 TARGETED_DEVICE_FAMILY = 4;
1655 - WATCHOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_WATCHOS_DEPLOYMENT_TARGET)";
1656 - XROS_DEPLOYMENT_TARGET = "$(RECOMMENDED_XROS_DEPLOYMENT_TARGET)";
1633 };
1634 name = Release;
1635 };
@@ -1691,7 +1667,6 @@
1667 CLANG_WARN_UNREACHABLE_CODE = YES;
1668 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
1669 COPY_PHASE_STRIP = NO;
1694 - DEAD_CODE_STRIPPING = YES;
1670 DEBUG_INFORMATION_FORMAT = dwarf;
1671 ENABLE_STRICT_OBJC_MSGSEND = YES;
1672 ENABLE_TESTABILITY = YES;
@@ -1715,7 +1690,6 @@
1690 MTL_FAST_MATH = YES;
1691 ONLY_ACTIVE_ARCH = YES;
1692 PRODUCT_NAME = "$(TARGET_NAME)";
1718 - STRING_CATALOG_GENERATE_SYMBOLS = YES;
1693 SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
1694 SWIFT_OPTIMIZATION_LEVEL = "-Onone";
1695 SWIFT_VERSION = 5.0;
@@ -1741,14 +1715,12 @@
1715 "$(inherited)",
1716 "@executable_path/Frameworks",
1717 );
1744 - MARKETING_VERSION = 1.0.1;
1718 + MARKETING_VERSION = 1.0.0;
1719 PRODUCT_BUNDLE_IDENTIFIER = ai.splitfire.klepon;
1720 PRODUCT_NAME = Klepon;
1721 SDKROOT = appletvos;
1722 SWIFT_OPTIMIZATION_LEVEL = "-O";
1723 TARGETED_DEVICE_FAMILY = 3;
1750 - WATCHOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_WATCHOS_DEPLOYMENT_TARGET)";
1751 - XROS_DEPLOYMENT_TARGET = "$(RECOMMENDED_XROS_DEPLOYMENT_TARGET)";
1724 };
1725 name = Release;
1726 };
@@ -1775,8 +1747,6 @@
1747 SDKROOT = iphoneos;
1748 SWIFT_OPTIMIZATION_LEVEL = "-Onone";
1749 TARGETED_DEVICE_FAMILY = "1,2";
1778 - WATCHOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_WATCHOS_DEPLOYMENT_TARGET)";
1779 - XROS_DEPLOYMENT_TARGET = "$(RECOMMENDED_XROS_DEPLOYMENT_TARGET)";
1750 };
1751 name = Debug;
1752 };
@@ -1801,8 +1771,6 @@
1771 SDKROOT = xros;
1772 SWIFT_OPTIMIZATION_LEVEL = "-Onone";
1773 TARGETED_DEVICE_FAMILY = 7;
1804 - WATCHOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_WATCHOS_DEPLOYMENT_TARGET)";
1805 - XROS_DEPLOYMENT_TARGET = "$(RECOMMENDED_XROS_DEPLOYMENT_TARGET)";
1774 };
1775 name = Debug;
1776 };
@@ -1884,20 +1852,20 @@
1852 /* End XCConfigurationList section */
1853
1854 /* Begin XCRemoteSwiftPackageReference section */
1887 - 85B622113A5DC5A1BD2D123B /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */ = {
1855 + 113C98387653665692A4F210 /* XCRemoteSwiftPackageReference "ed-swift" */ = {
1856 isa = XCRemoteSwiftPackageReference;
1889 - repositoryURL = "https://github.com/pointfreeco/swift-snapshot-testing";
1857 + repositoryURL = "https://github.com/ondeinference/ed-swift";
1858 requirement = {
1891 - kind = upToNextMajorVersion;
1892 - minimumVersion = 1.19.2;
1859 + kind = exactVersion;
1860 + version = 1.0.2;
1861 };
1862 };
1895 - AD8C734FB461604D5793769C /* XCRemoteSwiftPackageReference "onde-swift" */ = {
1863 + 85B622113A5DC5A1BD2D123B /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */ = {
1864 isa = XCRemoteSwiftPackageReference;
1897 - repositoryURL = "https://github.com/ondeinference/onde-swift";
1865 + repositoryURL = "https://github.com/pointfreeco/swift-snapshot-testing";
1866 requirement = {
1899 - kind = exactVersion;
1900 - version = 1.1.2;
1867 + kind = upToNextMajorVersion;
1868 + minimumVersion = 1.19.2;
1869 };
1870 };
1871 /* End XCRemoteSwiftPackageReference section */
@@ -1908,25 +1876,25 @@
1876 package = 85B622113A5DC5A1BD2D123B /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */;
1877 productName = SnapshotTesting;
1878 };
1911 - 35BDA28E3F43D5441C5FE932 /* Onde */ = {
1879 + 4C444F7050676B8B888FFA6E /* Ed */ = {
1880 isa = XCSwiftPackageProductDependency;
1913 - package = AD8C734FB461604D5793769C /* XCRemoteSwiftPackageReference "onde-swift" */;
1914 - productName = Onde;
1881 + package = 113C98387653665692A4F210 /* XCRemoteSwiftPackageReference "ed-swift" */;
1882 + productName = Ed;
1883 };
1916 - 855EE8DF62A7820E77C05D1A /* Onde */ = {
1884 + C60C4F34CE2B62D63F20DCBC /* Ed */ = {
1885 isa = XCSwiftPackageProductDependency;
1918 - package = AD8C734FB461604D5793769C /* XCRemoteSwiftPackageReference "onde-swift" */;
1919 - productName = Onde;
1886 + package = 113C98387653665692A4F210 /* XCRemoteSwiftPackageReference "ed-swift" */;
1887 + productName = Ed;
1888 };
1921 - CECDF5959E6652B49DCF1E18 /* Onde */ = {
1889 + D6FB43CACF14096F074C5D06 /* Ed */ = {
1890 isa = XCSwiftPackageProductDependency;
1923 - package = AD8C734FB461604D5793769C /* XCRemoteSwiftPackageReference "onde-swift" */;
1924 - productName = Onde;
1891 + package = 113C98387653665692A4F210 /* XCRemoteSwiftPackageReference "ed-swift" */;
1892 + productName = Ed;
1893 };
1926 - D977F065ACEF38E106A8FB5C /* Onde */ = {
1894 + ED0553BE20DAEAC1196315EC /* Ed */ = {
1895 isa = XCSwiftPackageProductDependency;
1928 - package = AD8C734FB461604D5793769C /* XCRemoteSwiftPackageReference "onde-swift" */;
1929 - productName = Onde;
1896 + package = 113C98387653665692A4F210 /* XCRemoteSwiftPackageReference "ed-swift" */;
1897 + productName = Ed;
1898 };
1899 /* End XCSwiftPackageProductDependency section */
1900 };
Klepon.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
+5 -5
@@ -1,13 +1,13 @@
1 {
2 - "originHash" : "d0bdf11c61d97536644353dced450ae7c6ccf1ed85d3c28d0c13998925fa188d",
2 + "originHash" : "2a323800d95df61fe62b61c6037aa04c842115a00e78573e2802ba9dd26c95c3",
3 "pins" : [
4 {
5 - "identity" : "onde-swift",
5 + "identity" : "ed-swift",
6 "kind" : "remoteSourceControl",
7 - "location" : "https://github.com/ondeinference/onde-swift",
7 + "location" : "https://github.com/ondeinference/ed-swift",
8 "state" : {
9 - "revision" : "534c412ee719e1a4c7c5f1f8b24c1c4bf5188878",
10 - "version" : "1.1.2"
9 + "revision" : "62a5426fc3b0a689ee51f8622085b082059cb1bd",
10 + "version" : "1.0.2"
11 }
12 },
13 {
Klepon.xcodeproj/xcshareddata/xcschemes/Klepon Mac.xcscheme
+1 -1
@@ -1,6 +1,6 @@
1 <?xml version="1.0" encoding="UTF-8"?>
2 <Scheme
3 - LastUpgradeVersion = "2700"
3 + LastUpgradeVersion = "2600"
4 version = "1.3">
5 <BuildAction
6 parallelizeBuildables = "YES"
Klepon.xcodeproj/xcshareddata/xcschemes/Klepon TV.xcscheme
+1 -1
@@ -1,6 +1,6 @@
1 <?xml version="1.0" encoding="UTF-8"?>
2 <Scheme
3 - LastUpgradeVersion = "2700"
3 + LastUpgradeVersion = "2600"
4 version = "1.3">
5 <BuildAction
6 parallelizeBuildables = "YES"
Klepon.xcodeproj/xcshareddata/xcschemes/Klepon Vision.xcscheme
+1 -1
@@ -1,6 +1,6 @@
1 <?xml version="1.0" encoding="UTF-8"?>
2 <Scheme
3 - LastUpgradeVersion = "2700"
3 + LastUpgradeVersion = "2600"
4 version = "1.3">
5 <BuildAction
6 parallelizeBuildables = "YES"
Klepon.xcodeproj/xcshareddata/xcschemes/Klepon Watch.xcscheme
+1 -1
@@ -1,6 +1,6 @@
1 <?xml version="1.0" encoding="UTF-8"?>
2 <Scheme
3 - LastUpgradeVersion = "2700"
3 + LastUpgradeVersion = "2600"
4 version = "1.3">
5 <BuildAction
6 parallelizeBuildables = "YES"
Klepon.xcodeproj/xcshareddata/xcschemes/Klepon.xcscheme
+1 -1
@@ -1,6 +1,6 @@
1 <?xml version="1.0" encoding="UTF-8"?>
2 <Scheme
3 - LastUpgradeVersion = "2700"
3 + LastUpgradeVersion = "2600"
4 version = "1.3">
5 <BuildAction
6 parallelizeBuildables = "YES"
Klepon/AI/OndeGuideEngine.swift
+10 -10
@@ -1,6 +1,6 @@
1 import Combine
2 +import Ed
3 import Foundation
3 -import Onde
4
5 #if os(tvOS)
6 import Darwin
@@ -145,25 +145,25 @@ final class OndeGuideEngine: ObservableObject, GuideAnswering {
145
146 // Lazy so the Rust/UniFFI runtime is not initialized during app-state
147 // construction before the app actually needs the private guide engine.
148 - private var engine: OndeChatEngine?
148 + private var engine: EdAgent?
149
150 var estimatedDownloadDescription: String {
151 OndeEnvironmentBootstrap.estimatedDownloadDescription
152 }
153
154 - private func getOrCreateEngine() -> OndeChatEngine {
154 + private func getOrCreateEngine() -> EdAgent {
155 if let engine {
156 return engine
157 }
158
159 - let newEngine = OndeChatEngine()
159 + let newEngine = EdAgent()
160 engine = newEngine
161 return newEngine
162 }
163
164 func prepareIfNeeded(forceReload: Bool = false) async {
165 if forceReload {
166 - _ = await engine?.unloadModel()
166 + _ = await engine?.unload()
167 availability = .notInstalled
168 }
169
@@ -203,11 +203,11 @@ final class OndeGuideEngine: ObservableObject, GuideAnswering {
203 }
204
205 _ = try await engine.loadAssignedModel(
206 - appId: appId,
206 + environment: .production,
207 + appID: appId,
208 appSecret: appSecret,
209 systemPrompt:
209 - "You are Klepon, a warm and careful guide to Indonesian food. Stay grounded in the notes you are given, keep answers short, and say clearly when the guide does not have enough detail.",
210 - sampling: nil
210 + "You are Klepon, a warm and careful guide to Indonesian food. Stay grounded in the notes you are given, keep answers short, and say clearly when the guide does not have enough detail."
211 )
212 availability = .ready
213 refreshStorageUsage()
@@ -230,7 +230,7 @@ final class OndeGuideEngine: ObservableObject, GuideAnswering {
230 _ = await engine.clearHistory()
231
232 do {
233 - let result = try await engine.sendMessage(message: prompt)
233 + let result = try await engine.send(prompt)
234 availability = .ready
235 refreshStorageUsage()
236 return result.text.trimmingCharacters(in: .whitespacesAndNewlines)
@@ -241,7 +241,7 @@ final class OndeGuideEngine: ObservableObject, GuideAnswering {
241 }
242
243 func removePrivateGuide() async {
244 - _ = await engine?.unloadModel()
244 + _ = await engine?.unload()
245 engine = nil
246 OndeEnvironmentBootstrap.clearPrivateGuideFiles()
247 availability = .notInstalled
project.yml
+17 -17
@@ -11,9 +11,9 @@ options:
11 createIntermediateGroups: false
12
13 packages:
14 - Onde:
15 - url: https://github.com/ondeinference/onde-swift
16 - exactVersion: 1.1.2
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
@@ -128,11 +128,11 @@ targets:
128 Debug: Configs/Debug.xcconfig
129 Release: Configs/Release.xcconfig
130 dependencies:
131 - - package: Onde
132 - product: Onde
131 + - package: Ed
132 + product: Ed
133 - target: Klepon Watch
134 preBuildScripts:
135 - - name: Inject PrivacyInfo into OndeFramework
135 + - name: Inject PrivacyInfo into EdFramework
136 shell: /bin/sh
137 basedOnDependencyAnalysis: false
138 showEnvVars: false
@@ -143,10 +143,10 @@ targets:
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/onde-swift/OndeFramework/OndeFramework.xcframework"
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: OndeFramework.xcframework not found at ${XCFW} — skipping PrivacyInfo injection"
149 + echo "warning: EdFramework.xcframework not found at ${XCFW} — skipping PrivacyInfo injection"
150 exit 0
151 fi
152 for SLICE in "${XCFW}"/*/; do
@@ -262,24 +262,24 @@ targets:
262 Debug: Configs/Signing.xcconfig
263 Release: Configs/Signing.xcconfig
264 dependencies:
265 - - package: Onde
266 - product: Onde
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 OndeFramework
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/onde-swift/OndeFramework/OndeFramework.xcframework"
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: OndeFramework.xcframework not found at ${XCFW} — skipping PrivacyInfo injection"
282 + echo "warning: EdFramework.xcframework not found at ${XCFW} — skipping PrivacyInfo injection"
283 exit 0
284 fi
285 for SLICE in "${XCFW}"/*/; do
@@ -378,8 +378,8 @@ targets:
378 Debug: Configs/Signing.xcconfig
379 Release: Configs/Signing.xcconfig
380 dependencies:
381 - - package: Onde
382 - product: Onde
381 + - package: Ed
382 + product: Ed
383 - target: Klepon TV Top Shelf
384 embed: true
385 postBuildScripts:
@@ -522,8 +522,8 @@ targets:
522 Debug: Configs/Signing.xcconfig
523 Release: Configs/Signing.xcconfig
524 dependencies:
525 - - package: Onde
526 - product: Onde
525 + - package: Ed
526 + product: Ed
527 postBuildScripts:
528 - name: Update CFBundleVersion
529 shell: /bin/sh