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