WIP adding watchOS support
Seto Elkahfi committed
May 14, 2026 at 15:51 UTC
3aca70251d98258b67d9ee6dfd6d8b3d810d06e6
24 files changed
+864
-147
Klepon.xcodeproj/project.pbxproj
+463
-134
@@ -7,141 +7,456 @@
7
objects = {
8
9
/* Begin PBXBuildFile section */
10
- 8AA60E2D2F56094200531855 /* Onde in Frameworks */ = {isa = PBXBuildFile; productRef = 8AA60E2C2F56094200531855 /* Onde */; };
10
+ 019B658F26ABE2706231EC9E /* GuideEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A0935AE4B398B281758834 /* GuideEntry.swift */; };
11
+ 05BF0404B7030EDCD3D8C357 /* GuideArtworkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F2850226B4B05FF758C1F93 /* GuideArtworkView.swift */; };
12
+ 0977CD6BFFDBDBE3B7795924 /* collections.json in Resources */ = {isa = PBXBuildFile; fileRef = 1FDDB0F88FF430ABD679AD89 /* collections.json */; };
13
+ 0D685E35EE50C926DC6FBE4C /* KleponChip.swift in Sources */ = {isa = PBXBuildFile; fileRef = B83C4F3C8688072191AA16C6 /* KleponChip.swift */; };
14
+ 0E69E79C5FADF1633FE3D63F /* KleponColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C675ABBBA25BBA25A8DE29BE /* KleponColor.swift */; };
15
+ 14B7CE6E6A0EB12B709F7B55 /* KleponTypography.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD520C870387E82E9A1533C2 /* KleponTypography.swift */; };
16
+ 1704DDB60B1E23057C0E1094 /* GuideAnswerService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3719031080B59898133810F7 /* GuideAnswerService.swift */; };
17
+ 19E282A6347C588E17778195 /* DiscoverView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4545DC84863788D55B94D31A /* DiscoverView.swift */; };
18
+ 1F95A454A641C829BD304A89 /* GuideCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = F17C0DB3BD620AD9F55B7631 /* GuideCollection.swift */; };
19
+ 1FF490E985C31BB08DA29AFF /* guide_entries.json in Resources */ = {isa = PBXBuildFile; fileRef = 248F359109A08A60F792C42D /* guide_entries.json */; };
20
+ 200AE94E7E7E73B5C83869DD /* FavoritesStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BC0C4C22A5134DB058E41F4 /* FavoritesStore.swift */; };
21
+ 23E22EC56BE48A20BD1229F7 /* AnswerCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = B02B0EA4B8BA09604D62A62B /* AnswerCard.swift */; };
22
+ 2AB57009245E1BABD1156AFA /* GuideDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7541983FF7CE190C0663294D /* GuideDetailView.swift */; };
23
+ 3349FB46691C944112401D6E /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42E152344B39D1D77F1B3943 /* SettingsView.swift */; };
24
+ 41F8E173B82809AF87E1B297 /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13418896CA28250CEEE7592E /* OnboardingView.swift */; };
25
+ 4609C70D9FB74C55B9DBE832 /* KleponActionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52DD909BB2EF68103CB46EDA /* KleponActionButton.swift */; };
26
+ 478FFEBDAA7729189B429A6D /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7E886BAB66E828950DBED52 /* SearchView.swift */; };
27
+ 4D63E231AC9630B2C225DF22 /* WatchHomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDBB4F5D4C98D036AC52E193 /* WatchHomeView.swift */; };
28
+ 67368394088AA3045EBA14A5 /* OndeEnvironmentBootstrap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B499D3BF7AC80D31907D87F /* OndeEnvironmentBootstrap.swift */; };
29
+ 7F1E744AAE60BF1FB132D66C /* KleponCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 868C58098969278A542893F3 /* KleponCard.swift */; };
30
+ 8401F9C0FA140DC2CF8BA248 /* AppState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AF291E9C2E66209377138E6 /* AppState.swift */; };
31
+ 8804CFBAD707E1FED63BF214 /* SearchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6235AD6792F25476E2A508F0 /* SearchService.swift */; };
32
+ 910A84B3F28B3F79871FF60E /* SectionHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC438ECC335175B18778C682 /* SectionHeader.swift */; };
33
+ 926AB007EBCD5315EE77E2A6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AF79D8DD27B9CA485140C934 /* Assets.xcassets */; };
34
+ 99071E0CB9F44857C0BFC8C9 /* SavedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98AA2E425D5454602F78D628 /* SavedView.swift */; };
35
+ 9ECA989E9DCDF08A2D7C29A3 /* AppRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C82874C90A5FAA32D1B52EB7 /* AppRootView.swift */; };
36
+ A54D028D8F35FE002B0ACA90 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 054656155630B064F785B0D7 /* Assets.xcassets */; };
37
+ A7001D58E0F2B1BD5F52FF8A /* Onde in Frameworks */ = {isa = PBXBuildFile; productRef = 855EE8DF62A7820E77C05D1A /* Onde */; };
38
+ B1F1D1A453150D3BBB0146EF /* RecentlyViewedStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = E45070309D2C7058BAA44CD2 /* RecentlyViewedStore.swift */; };
39
+ B34377720179454F9B9184C5 /* OndeGuideEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF0D53A5F9D5897E15506C20 /* OndeGuideEngine.swift */; };
40
+ C709C82E7F0BCF398BCD9C2F /* ContentRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2891A1AFBB59928FC5B1E66 /* ContentRepository.swift */; };
41
+ D99AAE1CDE51139840A52607 /* KleponMetadataRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E1C50BFBE2EF5F37941590 /* KleponMetadataRow.swift */; };
42
+ DA915BA8B2F732E7D62CF936 /* EmptyStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85E7B5E3D9A1906C2FED3032 /* EmptyStateView.swift */; };
43
+ F1431179B54CEB23FFFCB2AE /* KleponApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEDE2A1E73EB15970A17A894 /* KleponApp.swift */; };
44
+ FA423A76BE098A9911044246 /* AskSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEC6E7DC56DD8E1459EFC892 /* AskSheetView.swift */; };
45
+ FD0E1BA888E3CE73875D58FF /* RecentSearchStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 643D52BCEDF66CC8FE8A1234 /* RecentSearchStore.swift */; };
46
/* End PBXBuildFile section */
47
48
/* Begin PBXFileReference section */
14
- 8AA60E1D2F56093100531855 /* Klepon.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Klepon.app; sourceTree = BUILT_PRODUCTS_DIR; };
49
+ 054656155630B064F785B0D7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
50
+ 0BC0C4C22A5134DB058E41F4 /* FavoritesStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FavoritesStore.swift; sourceTree = "<group>"; };
51
+ 13418896CA28250CEEE7592E /* OnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingView.swift; sourceTree = "<group>"; };
52
+ 1FDDB0F88FF430ABD679AD89 /* collections.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = collections.json; sourceTree = "<group>"; };
53
+ 248F359109A08A60F792C42D /* guide_entries.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = guide_entries.json; sourceTree = "<group>"; };
54
+ 2B499D3BF7AC80D31907D87F /* OndeEnvironmentBootstrap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OndeEnvironmentBootstrap.swift; sourceTree = "<group>"; };
55
+ 3719031080B59898133810F7 /* GuideAnswerService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideAnswerService.swift; sourceTree = "<group>"; };
56
+ 42E152344B39D1D77F1B3943 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
57
+ 4545DC84863788D55B94D31A /* DiscoverView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoverView.swift; sourceTree = "<group>"; };
58
+ 52DD909BB2EF68103CB46EDA /* KleponActionButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KleponActionButton.swift; sourceTree = "<group>"; };
59
+ 5AF291E9C2E66209377138E6 /* AppState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppState.swift; sourceTree = "<group>"; };
60
+ 5DE91827A635C0B0B72690EC /* Klepon.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = Klepon.app; sourceTree = BUILT_PRODUCTS_DIR; };
61
+ 6235AD6792F25476E2A508F0 /* SearchService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchService.swift; sourceTree = "<group>"; };
62
+ 643D52BCEDF66CC8FE8A1234 /* RecentSearchStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentSearchStore.swift; sourceTree = "<group>"; };
63
+ 7541983FF7CE190C0663294D /* GuideDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideDetailView.swift; sourceTree = "<group>"; };
64
+ 7F2850226B4B05FF758C1F93 /* GuideArtworkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideArtworkView.swift; sourceTree = "<group>"; };
65
+ 85E7B5E3D9A1906C2FED3032 /* EmptyStateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyStateView.swift; sourceTree = "<group>"; };
66
+ 868C58098969278A542893F3 /* KleponCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KleponCard.swift; sourceTree = "<group>"; };
67
+ 98AA2E425D5454602F78D628 /* SavedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SavedView.swift; sourceTree = "<group>"; };
68
+ 9E76510CC840CE068B0FC381 /* Klepon Watch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Klepon Watch.app"; sourceTree = BUILT_PRODUCTS_DIR; };
69
+ A4400AB0AB8D245325A00BA3 /* Klepon.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Klepon.entitlements; sourceTree = "<group>"; };
70
+ A7E1C50BFBE2EF5F37941590 /* KleponMetadataRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KleponMetadataRow.swift; sourceTree = "<group>"; };
71
+ AF79D8DD27B9CA485140C934 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
72
+ B02B0EA4B8BA09604D62A62B /* AnswerCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnswerCard.swift; sourceTree = "<group>"; };
73
+ B83C4F3C8688072191AA16C6 /* KleponChip.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KleponChip.swift; sourceTree = "<group>"; };
74
+ BF0D53A5F9D5897E15506C20 /* OndeGuideEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OndeGuideEngine.swift; sourceTree = "<group>"; };
75
+ C0A0935AE4B398B281758834 /* GuideEntry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideEntry.swift; sourceTree = "<group>"; };
76
+ C675ABBBA25BBA25A8DE29BE /* KleponColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KleponColor.swift; sourceTree = "<group>"; };
77
+ C82874C90A5FAA32D1B52EB7 /* AppRootView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppRootView.swift; sourceTree = "<group>"; };
78
+ CD520C870387E82E9A1533C2 /* KleponTypography.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KleponTypography.swift; sourceTree = "<group>"; };
79
+ DEDE2A1E73EB15970A17A894 /* KleponApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KleponApp.swift; sourceTree = "<group>"; };
80
+ E45070309D2C7058BAA44CD2 /* RecentlyViewedStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentlyViewedStore.swift; sourceTree = "<group>"; };
81
+ E7E886BAB66E828950DBED52 /* SearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = "<group>"; };
82
+ EDBB4F5D4C98D036AC52E193 /* WatchHomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchHomeView.swift; sourceTree = "<group>"; };
83
+ EEC6E7DC56DD8E1459EFC892 /* AskSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AskSheetView.swift; sourceTree = "<group>"; };
84
+ F17C0DB3BD620AD9F55B7631 /* GuideCollection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideCollection.swift; sourceTree = "<group>"; };
85
+ F2891A1AFBB59928FC5B1E66 /* ContentRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentRepository.swift; sourceTree = "<group>"; };
86
+ FC438ECC335175B18778C682 /* SectionHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SectionHeader.swift; sourceTree = "<group>"; };
87
/* End PBXFileReference section */
88
17
-/* Begin PBXFileSystemSynchronizedRootGroup section */
18
- 8AA60E1F2F56093100531855 /* Klepon */ = {
19
- isa = PBXFileSystemSynchronizedRootGroup;
20
- path = Klepon;
21
- sourceTree = "<group>";
22
- };
23
-/* End PBXFileSystemSynchronizedRootGroup section */
24
-
89
/* Begin PBXFrameworksBuildPhase section */
26
- 8AA60E1A2F56093100531855 /* Frameworks */ = {
90
+ F72797E506E8FA89264A5C68 /* Frameworks */ = {
91
isa = PBXFrameworksBuildPhase;
92
buildActionMask = 2147483647;
93
files = (
30
- 8AA60E2D2F56094200531855 /* Onde in Frameworks */,
94
+ A7001D58E0F2B1BD5F52FF8A /* Onde in Frameworks */,
95
);
96
runOnlyForDeploymentPostprocessing = 0;
97
};
98
/* End PBXFrameworksBuildPhase section */
99
100
/* Begin PBXGroup section */
37
- 8AA60E142F56093100531855 = {
101
+ 1F8B5D6327376068DBCA9694 /* Settings */ = {
102
isa = PBXGroup;
103
children = (
40
- 8AA60E1F2F56093100531855 /* Klepon */,
41
- 8AA60E1E2F56093100531855 /* Products */,
104
+ 42E152344B39D1D77F1B3943 /* SettingsView.swift */,
105
);
106
+ path = Settings;
107
sourceTree = "<group>";
108
};
45
- 8AA60E1E2F56093100531855 /* Products */ = {
109
+ 3F9369D339C14126AB44D720 /* Products */ = {
110
isa = PBXGroup;
111
children = (
48
- 8AA60E1D2F56093100531855 /* Klepon.app */,
112
+ 9E76510CC840CE068B0FC381 /* Klepon Watch.app */,
113
+ 5DE91827A635C0B0B72690EC /* Klepon.app */,
114
);
115
name = Products;
116
sourceTree = "<group>";
117
};
118
+ 42AB6F4BEF2FBE4B2DD5DF8A /* Onboarding */ = {
119
+ isa = PBXGroup;
120
+ children = (
121
+ 13418896CA28250CEEE7592E /* OnboardingView.swift */,
122
+ );
123
+ path = Onboarding;
124
+ sourceTree = "<group>";
125
+ };
126
+ 472BF5D47BEE4AF1EC80B645 /* KleponWatch */ = {
127
+ isa = PBXGroup;
128
+ children = (
129
+ 054656155630B064F785B0D7 /* Assets.xcassets */,
130
+ EDBB4F5D4C98D036AC52E193 /* WatchHomeView.swift */,
131
+ );
132
+ path = KleponWatch;
133
+ sourceTree = "<group>";
134
+ };
135
+ 584B54256B10CB0A08CF9EBB /* Features */ = {
136
+ isa = PBXGroup;
137
+ children = (
138
+ 697B7AA523BEA3B29E95A3B5 /* Ask */,
139
+ AEF2506044225CA328483416 /* Detail */,
140
+ 83D0CE66190EBD7B3F116869 /* Discover */,
141
+ 42AB6F4BEF2FBE4B2DD5DF8A /* Onboarding */,
142
+ 71FB816EF387AA327D83405E /* Saved */,
143
+ 6706F0AAED7087EF21DB1448 /* Search */,
144
+ 1F8B5D6327376068DBCA9694 /* Settings */,
145
+ );
146
+ path = Features;
147
+ sourceTree = "<group>";
148
+ };
149
+ 6706F0AAED7087EF21DB1448 /* Search */ = {
150
+ isa = PBXGroup;
151
+ children = (
152
+ E7E886BAB66E828950DBED52 /* SearchView.swift */,
153
+ );
154
+ path = Search;
155
+ sourceTree = "<group>";
156
+ };
157
+ 697B7AA523BEA3B29E95A3B5 /* Ask */ = {
158
+ isa = PBXGroup;
159
+ children = (
160
+ EEC6E7DC56DD8E1459EFC892 /* AskSheetView.swift */,
161
+ );
162
+ path = Ask;
163
+ sourceTree = "<group>";
164
+ };
165
+ 71FB816EF387AA327D83405E /* Saved */ = {
166
+ isa = PBXGroup;
167
+ children = (
168
+ 98AA2E425D5454602F78D628 /* SavedView.swift */,
169
+ );
170
+ path = Saved;
171
+ sourceTree = "<group>";
172
+ };
173
+ 7FFF66D137216AB43C7376AF /* App */ = {
174
+ isa = PBXGroup;
175
+ children = (
176
+ C82874C90A5FAA32D1B52EB7 /* AppRootView.swift */,
177
+ 5AF291E9C2E66209377138E6 /* AppState.swift */,
178
+ DEDE2A1E73EB15970A17A894 /* KleponApp.swift */,
179
+ );
180
+ path = App;
181
+ sourceTree = "<group>";
182
+ };
183
+ 82A3750644C21DE5F301405D /* AI */ = {
184
+ isa = PBXGroup;
185
+ children = (
186
+ 3719031080B59898133810F7 /* GuideAnswerService.swift */,
187
+ 2B499D3BF7AC80D31907D87F /* OndeEnvironmentBootstrap.swift */,
188
+ BF0D53A5F9D5897E15506C20 /* OndeGuideEngine.swift */,
189
+ );
190
+ path = AI;
191
+ sourceTree = "<group>";
192
+ };
193
+ 83D0CE66190EBD7B3F116869 /* Discover */ = {
194
+ isa = PBXGroup;
195
+ children = (
196
+ 4545DC84863788D55B94D31A /* DiscoverView.swift */,
197
+ );
198
+ path = Discover;
199
+ sourceTree = "<group>";
200
+ };
201
+ 843428B433FCDB8678AFEF36 /* Domain */ = {
202
+ isa = PBXGroup;
203
+ children = (
204
+ B02B0EA4B8BA09604D62A62B /* AnswerCard.swift */,
205
+ F17C0DB3BD620AD9F55B7631 /* GuideCollection.swift */,
206
+ C0A0935AE4B398B281758834 /* GuideEntry.swift */,
207
+ );
208
+ path = Domain;
209
+ sourceTree = "<group>";
210
+ };
211
+ 8FCB4D289A8BA31F1213435D /* Resources */ = {
212
+ isa = PBXGroup;
213
+ children = (
214
+ D31457265A488544F9D32DE0 /* Content */,
215
+ );
216
+ path = Resources;
217
+ sourceTree = "<group>";
218
+ };
219
+ AEF2506044225CA328483416 /* Detail */ = {
220
+ isa = PBXGroup;
221
+ children = (
222
+ 7541983FF7CE190C0663294D /* GuideDetailView.swift */,
223
+ );
224
+ path = Detail;
225
+ sourceTree = "<group>";
226
+ };
227
+ BB2EA22C8AF6FE8BA4B968E0 /* DesignSystem */ = {
228
+ isa = PBXGroup;
229
+ children = (
230
+ 85E7B5E3D9A1906C2FED3032 /* EmptyStateView.swift */,
231
+ 7F2850226B4B05FF758C1F93 /* GuideArtworkView.swift */,
232
+ 52DD909BB2EF68103CB46EDA /* KleponActionButton.swift */,
233
+ 868C58098969278A542893F3 /* KleponCard.swift */,
234
+ B83C4F3C8688072191AA16C6 /* KleponChip.swift */,
235
+ C675ABBBA25BBA25A8DE29BE /* KleponColor.swift */,
236
+ A7E1C50BFBE2EF5F37941590 /* KleponMetadataRow.swift */,
237
+ CD520C870387E82E9A1533C2 /* KleponTypography.swift */,
238
+ FC438ECC335175B18778C682 /* SectionHeader.swift */,
239
+ );
240
+ path = DesignSystem;
241
+ sourceTree = "<group>";
242
+ };
243
+ D1EEA7DEE6B09AE3C4230ACE /* Data */ = {
244
+ isa = PBXGroup;
245
+ children = (
246
+ F2891A1AFBB59928FC5B1E66 /* ContentRepository.swift */,
247
+ 0BC0C4C22A5134DB058E41F4 /* FavoritesStore.swift */,
248
+ E45070309D2C7058BAA44CD2 /* RecentlyViewedStore.swift */,
249
+ 643D52BCEDF66CC8FE8A1234 /* RecentSearchStore.swift */,
250
+ 6235AD6792F25476E2A508F0 /* SearchService.swift */,
251
+ );
252
+ path = Data;
253
+ sourceTree = "<group>";
254
+ };
255
+ D31457265A488544F9D32DE0 /* Content */ = {
256
+ isa = PBXGroup;
257
+ children = (
258
+ 1FDDB0F88FF430ABD679AD89 /* collections.json */,
259
+ 248F359109A08A60F792C42D /* guide_entries.json */,
260
+ );
261
+ path = Content;
262
+ sourceTree = "<group>";
263
+ };
264
+ D9EBF621A6F1A1729FE26516 = {
265
+ isa = PBXGroup;
266
+ children = (
267
+ EA4DFA44FE8BB01979ADB187 /* Klepon */,
268
+ 472BF5D47BEE4AF1EC80B645 /* KleponWatch */,
269
+ 3F9369D339C14126AB44D720 /* Products */,
270
+ );
271
+ sourceTree = "<group>";
272
+ };
273
+ EA4DFA44FE8BB01979ADB187 /* Klepon */ = {
274
+ isa = PBXGroup;
275
+ children = (
276
+ AF79D8DD27B9CA485140C934 /* Assets.xcassets */,
277
+ A4400AB0AB8D245325A00BA3 /* Klepon.entitlements */,
278
+ 82A3750644C21DE5F301405D /* AI */,
279
+ 7FFF66D137216AB43C7376AF /* App */,
280
+ D1EEA7DEE6B09AE3C4230ACE /* Data */,
281
+ BB2EA22C8AF6FE8BA4B968E0 /* DesignSystem */,
282
+ 843428B433FCDB8678AFEF36 /* Domain */,
283
+ 584B54256B10CB0A08CF9EBB /* Features */,
284
+ 8FCB4D289A8BA31F1213435D /* Resources */,
285
+ );
286
+ path = Klepon;
287
+ sourceTree = "<group>";
288
+ };
289
/* End PBXGroup section */
290
291
/* Begin PBXNativeTarget section */
56
- 8AA60E1C2F56093100531855 /* Klepon */ = {
292
+ 2ADB11F6C1D51B9F9A9DB15F /* Klepon */ = {
293
isa = PBXNativeTarget;
58
- buildConfigurationList = 8AA60E282F56093200531855 /* Build configuration list for PBXNativeTarget "Klepon" */;
294
+ buildConfigurationList = E1E5A3DF58C9552EE814CC23 /* Build configuration list for PBXNativeTarget "Klepon" */;
295
buildPhases = (
60
- 8AA60E192F56093100531855 /* Sources */,
61
- 8AA60E1A2F56093100531855 /* Frameworks */,
62
- 8AA60E1B2F56093100531855 /* Resources */,
296
+ 142193A63A26ACC180E1EB37 /* Sources */,
297
+ BC5A6BBAFB4A1B61000065D1 /* Resources */,
298
+ F72797E506E8FA89264A5C68 /* Frameworks */,
299
);
300
buildRules = (
301
);
302
dependencies = (
303
);
68
- fileSystemSynchronizedGroups = (
69
- 8AA60E1F2F56093100531855 /* Klepon */,
70
- );
304
name = Klepon;
305
packageProductDependencies = (
73
- 8AA60E2C2F56094200531855 /* Onde */,
306
+ 855EE8DF62A7820E77C05D1A /* Onde */,
307
);
308
productName = Klepon;
76
- productReference = 8AA60E1D2F56093100531855 /* Klepon.app */;
309
+ productReference = 5DE91827A635C0B0B72690EC /* Klepon.app */;
310
+ productType = "com.apple.product-type.application";
311
+ };
312
+ E8CEBF52617721AEE450A7CF /* Klepon Watch */ = {
313
+ isa = PBXNativeTarget;
314
+ buildConfigurationList = 07A758477E97CF9254DDBA82 /* Build configuration list for PBXNativeTarget "Klepon Watch" */;
315
+ buildPhases = (
316
+ 57F190B6EB353A926A214B19 /* Sources */,
317
+ 0DEE2337CA5E6D48C9C110A2 /* Resources */,
318
+ );
319
+ buildRules = (
320
+ );
321
+ dependencies = (
322
+ );
323
+ name = "Klepon Watch";
324
+ packageProductDependencies = (
325
+ );
326
+ productName = "Klepon Watch";
327
+ productReference = 9E76510CC840CE068B0FC381 /* Klepon Watch.app */;
328
productType = "com.apple.product-type.application";
329
};
330
/* End PBXNativeTarget section */
331
332
/* Begin PBXProject section */
82
- 8AA60E152F56093100531855 /* Project object */ = {
333
+ 05A5707BDA883282DEB132FF /* Project object */ = {
334
isa = PBXProject;
335
attributes = {
85
- BuildIndependentTargetsInParallel = 1;
86
- LastSwiftUpdateCheck = 2620;
87
- LastUpgradeCheck = 2620;
88
- TargetAttributes = {
89
- 8AA60E1C2F56093100531855 = {
90
- CreatedOnToolsVersion = 26.2;
91
- };
92
- };
336
+ BuildIndependentTargetsInParallel = YES;
337
+ LastUpgradeCheck = 2600;
338
};
94
- buildConfigurationList = 8AA60E182F56093100531855 /* Build configuration list for PBXProject "Klepon" */;
339
+ buildConfigurationList = 8911E6C6F25C3A4F99870749 /* Build configuration list for PBXProject "Klepon" */;
340
developmentRegion = en;
341
hasScannedForEncodings = 0;
342
knownRegions = (
98
- en,
343
Base,
344
+ en,
345
);
101
- mainGroup = 8AA60E142F56093100531855;
346
+ mainGroup = D9EBF621A6F1A1729FE26516;
347
minimizedProjectReferenceProxies = 1;
348
packageReferences = (
104
- 8AB50B362F82BD7700CE1848 /* XCRemoteSwiftPackageReference "onde-swift" */,
349
+ AD8C734FB461604D5793769C /* XCRemoteSwiftPackageReference "onde-swift" */,
350
);
351
preferredProjectObjectVersion = 77;
107
- productRefGroup = 8AA60E1E2F56093100531855 /* Products */;
352
+ productRefGroup = 3F9369D339C14126AB44D720 /* Products */;
353
projectDirPath = "";
354
projectRoot = "";
355
targets = (
111
- 8AA60E1C2F56093100531855 /* Klepon */,
356
+ 2ADB11F6C1D51B9F9A9DB15F /* Klepon */,
357
+ E8CEBF52617721AEE450A7CF /* Klepon Watch */,
358
);
359
};
360
/* End PBXProject section */
361
362
/* Begin PBXResourcesBuildPhase section */
117
- 8AA60E1B2F56093100531855 /* Resources */ = {
363
+ 0DEE2337CA5E6D48C9C110A2 /* Resources */ = {
364
+ isa = PBXResourcesBuildPhase;
365
+ buildActionMask = 2147483647;
366
+ files = (
367
+ A54D028D8F35FE002B0ACA90 /* Assets.xcassets in Resources */,
368
+ );
369
+ runOnlyForDeploymentPostprocessing = 0;
370
+ };
371
+ BC5A6BBAFB4A1B61000065D1 /* Resources */ = {
372
isa = PBXResourcesBuildPhase;
373
buildActionMask = 2147483647;
374
files = (
375
+ 926AB007EBCD5315EE77E2A6 /* Assets.xcassets in Resources */,
376
+ 0977CD6BFFDBDBE3B7795924 /* collections.json in Resources */,
377
+ 1FF490E985C31BB08DA29AFF /* guide_entries.json in Resources */,
378
);
379
runOnlyForDeploymentPostprocessing = 0;
380
};
381
/* End PBXResourcesBuildPhase section */
382
383
/* Begin PBXSourcesBuildPhase section */
127
- 8AA60E192F56093100531855 /* Sources */ = {
384
+ 142193A63A26ACC180E1EB37 /* Sources */ = {
385
isa = PBXSourcesBuildPhase;
386
buildActionMask = 2147483647;
387
files = (
388
+ 23E22EC56BE48A20BD1229F7 /* AnswerCard.swift in Sources */,
389
+ 9ECA989E9DCDF08A2D7C29A3 /* AppRootView.swift in Sources */,
390
+ 8401F9C0FA140DC2CF8BA248 /* AppState.swift in Sources */,
391
+ FA423A76BE098A9911044246 /* AskSheetView.swift in Sources */,
392
+ C709C82E7F0BCF398BCD9C2F /* ContentRepository.swift in Sources */,
393
+ 19E282A6347C588E17778195 /* DiscoverView.swift in Sources */,
394
+ DA915BA8B2F732E7D62CF936 /* EmptyStateView.swift in Sources */,
395
+ 200AE94E7E7E73B5C83869DD /* FavoritesStore.swift in Sources */,
396
+ 1704DDB60B1E23057C0E1094 /* GuideAnswerService.swift in Sources */,
397
+ 05BF0404B7030EDCD3D8C357 /* GuideArtworkView.swift in Sources */,
398
+ 1F95A454A641C829BD304A89 /* GuideCollection.swift in Sources */,
399
+ 2AB57009245E1BABD1156AFA /* GuideDetailView.swift in Sources */,
400
+ 019B658F26ABE2706231EC9E /* GuideEntry.swift in Sources */,
401
+ 4609C70D9FB74C55B9DBE832 /* KleponActionButton.swift in Sources */,
402
+ F1431179B54CEB23FFFCB2AE /* KleponApp.swift in Sources */,
403
+ 7F1E744AAE60BF1FB132D66C /* KleponCard.swift in Sources */,
404
+ 0D685E35EE50C926DC6FBE4C /* KleponChip.swift in Sources */,
405
+ 0E69E79C5FADF1633FE3D63F /* KleponColor.swift in Sources */,
406
+ D99AAE1CDE51139840A52607 /* KleponMetadataRow.swift in Sources */,
407
+ 14B7CE6E6A0EB12B709F7B55 /* KleponTypography.swift in Sources */,
408
+ 41F8E173B82809AF87E1B297 /* OnboardingView.swift in Sources */,
409
+ 67368394088AA3045EBA14A5 /* OndeEnvironmentBootstrap.swift in Sources */,
410
+ B34377720179454F9B9184C5 /* OndeGuideEngine.swift in Sources */,
411
+ FD0E1BA888E3CE73875D58FF /* RecentSearchStore.swift in Sources */,
412
+ B1F1D1A453150D3BBB0146EF /* RecentlyViewedStore.swift in Sources */,
413
+ 99071E0CB9F44857C0BFC8C9 /* SavedView.swift in Sources */,
414
+ 8804CFBAD707E1FED63BF214 /* SearchService.swift in Sources */,
415
+ 478FFEBDAA7729189B429A6D /* SearchView.swift in Sources */,
416
+ 910A84B3F28B3F79871FF60E /* SectionHeader.swift in Sources */,
417
+ 3349FB46691C944112401D6E /* SettingsView.swift in Sources */,
418
+ );
419
+ runOnlyForDeploymentPostprocessing = 0;
420
+ };
421
+ 57F190B6EB353A926A214B19 /* Sources */ = {
422
+ isa = PBXSourcesBuildPhase;
423
+ buildActionMask = 2147483647;
424
+ files = (
425
+ 4D63E231AC9630B2C225DF22 /* WatchHomeView.swift in Sources */,
426
);
427
runOnlyForDeploymentPostprocessing = 0;
428
};
429
/* End PBXSourcesBuildPhase section */
430
431
/* Begin XCBuildConfiguration section */
137
- 8AA60E262F56093200531855 /* Debug */ = {
432
+ 57B34C7365523CA3F80ED770 /* Debug */ = {
433
+ isa = XCBuildConfiguration;
434
+ buildSettings = {
435
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
436
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
437
+ CURRENT_PROJECT_VERSION = 1;
438
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
439
+ "EXCLUDED_ARCHS[sdk=watchsimulator*]" = x86_64;
440
+ GENERATE_INFOPLIST_FILE = YES;
441
+ INFOPLIST_KEY_WKWatchOnly = YES;
442
+ MARKETING_VERSION = 1.0;
443
+ PRODUCT_BUNDLE_IDENTIFIER = ai.splitfire.klepon.watchkitapp;
444
+ PRODUCT_NAME = "Klepon Watch";
445
+ SDKROOT = watchos;
446
+ SKIP_INSTALL = YES;
447
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
448
+ TARGETED_DEVICE_FAMILY = 4;
449
+ };
450
+ name = Debug;
451
+ };
452
+ 850753164F664131E0E37EAE /* Release */ = {
453
isa = XCBuildConfiguration;
454
buildSettings = {
455
ALWAYS_SEARCH_USER_PATHS = NO;
141
- ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
456
CLANG_ANALYZER_NONNULL = YES;
457
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
144
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
458
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
459
+ CLANG_CXX_LIBRARY = "libc++";
460
CLANG_ENABLE_MODULES = YES;
461
CLANG_ENABLE_OBJC_ARC = YES;
462
CLANG_ENABLE_OBJC_WEAK = YES;
@@ -168,19 +483,11 @@
483
CLANG_WARN_UNREACHABLE_CODE = YES;
484
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
485
COPY_PHASE_STRIP = NO;
171
- DEBUG_INFORMATION_FORMAT = dwarf;
172
- DEVELOPMENT_TEAM = "";
486
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
487
+ ENABLE_NS_ASSERTIONS = NO;
488
ENABLE_STRICT_OBJC_MSGSEND = YES;
174
- ENABLE_TESTABILITY = YES;
175
- ENABLE_USER_SCRIPT_SANDBOXING = YES;
176
- GCC_C_LANGUAGE_STANDARD = gnu17;
177
- GCC_DYNAMIC_NO_PIC = NO;
489
+ GCC_C_LANGUAGE_STANDARD = gnu11;
490
GCC_NO_COMMON_BLOCKS = YES;
179
- GCC_OPTIMIZATION_LEVEL = 0;
180
- GCC_PREPROCESSOR_DEFINITIONS = (
181
- "DEBUG=1",
182
- "$(inherited)",
183
- );
491
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
492
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
493
GCC_WARN_UNDECLARED_SELECTOR = YES;
@@ -188,24 +495,69 @@
495
GCC_WARN_UNUSED_FUNCTION = YES;
496
GCC_WARN_UNUSED_VARIABLE = YES;
497
IPHONEOS_DEPLOYMENT_TARGET = 18.5;
191
- LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
192
- MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
498
+ MTL_ENABLE_DEBUG_INFO = NO;
499
MTL_FAST_MATH = YES;
194
- ONLY_ACTIVE_ARCH = YES;
500
+ PRODUCT_NAME = "$(TARGET_NAME)";
501
+ SWIFT_COMPILATION_MODE = wholemodule;
502
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
503
+ SWIFT_VERSION = 5.0;
504
+ WATCHOS_DEPLOYMENT_TARGET = 9.0;
505
+ };
506
+ name = Release;
507
+ };
508
+ 97B8585F2E74C6C870509FE9 /* Release */ = {
509
+ isa = XCBuildConfiguration;
510
+ buildSettings = {
511
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
512
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
513
+ CODE_SIGN_ENTITLEMENTS = Klepon/Klepon.entitlements;
514
+ CODE_SIGN_IDENTITY = "iPhone Developer";
515
+ CURRENT_PROJECT_VERSION = 1;
516
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
517
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = x86_64;
518
+ GENERATE_INFOPLIST_FILE = YES;
519
+ INFOPLIST_KEY_UILaunchScreen_Generation = YES;
520
+ INFOPLIST_KEY_UIUserInterfaceStyle = Light;
521
+ LD_RUNPATH_SEARCH_PATHS = (
522
+ "$(inherited)",
523
+ "@executable_path/Frameworks",
524
+ );
525
+ MARKETING_VERSION = 1.0;
526
+ PRODUCT_BUNDLE_IDENTIFIER = ai.splitfire.klepon;
527
SDKROOT = iphoneos;
196
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
197
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
528
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
529
+ TARGETED_DEVICE_FAMILY = "1,2";
530
};
199
- name = Debug;
531
+ name = Release;
532
};
201
- 8AA60E272F56093200531855 /* Release */ = {
533
+ A3B469B57456DA7C46537A7E /* Release */ = {
534
+ isa = XCBuildConfiguration;
535
+ buildSettings = {
536
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
537
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
538
+ CURRENT_PROJECT_VERSION = 1;
539
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
540
+ "EXCLUDED_ARCHS[sdk=watchsimulator*]" = x86_64;
541
+ GENERATE_INFOPLIST_FILE = YES;
542
+ INFOPLIST_KEY_WKWatchOnly = YES;
543
+ MARKETING_VERSION = 1.0;
544
+ PRODUCT_BUNDLE_IDENTIFIER = ai.splitfire.klepon.watchkitapp;
545
+ PRODUCT_NAME = "Klepon Watch";
546
+ SDKROOT = watchos;
547
+ SKIP_INSTALL = YES;
548
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
549
+ TARGETED_DEVICE_FAMILY = 4;
550
+ };
551
+ name = Release;
552
+ };
553
+ B7F0F5DCFEE8809BB1921A4A /* Debug */ = {
554
isa = XCBuildConfiguration;
555
buildSettings = {
556
ALWAYS_SEARCH_USER_PATHS = NO;
205
- ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
557
CLANG_ANALYZER_NONNULL = YES;
558
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
208
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
559
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
560
+ CLANG_CXX_LIBRARY = "libc++";
561
CLANG_ENABLE_MODULES = YES;
562
CLANG_ENABLE_OBJC_ARC = YES;
563
CLANG_ENABLE_OBJC_WEAK = YES;
@@ -232,13 +584,17 @@
584
CLANG_WARN_UNREACHABLE_CODE = YES;
585
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
586
COPY_PHASE_STRIP = NO;
235
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
236
- DEVELOPMENT_TEAM = "";
237
- ENABLE_NS_ASSERTIONS = NO;
587
+ DEBUG_INFORMATION_FORMAT = dwarf;
588
ENABLE_STRICT_OBJC_MSGSEND = YES;
239
- ENABLE_USER_SCRIPT_SANDBOXING = YES;
240
- GCC_C_LANGUAGE_STANDARD = gnu17;
589
+ ENABLE_TESTABILITY = YES;
590
+ GCC_C_LANGUAGE_STANDARD = gnu11;
591
+ GCC_DYNAMIC_NO_PIC = NO;
592
GCC_NO_COMMON_BLOCKS = YES;
593
+ GCC_OPTIMIZATION_LEVEL = 0;
594
+ GCC_PREPROCESSOR_DEFINITIONS = (
595
+ "$(inherited)",
596
+ "DEBUG=1",
597
+ );
598
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
599
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
600
GCC_WARN_UNDECLARED_SELECTOR = YES;
@@ -246,119 +602,92 @@
602
GCC_WARN_UNUSED_FUNCTION = YES;
603
GCC_WARN_UNUSED_VARIABLE = YES;
604
IPHONEOS_DEPLOYMENT_TARGET = 18.5;
249
- LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
250
- MTL_ENABLE_DEBUG_INFO = NO;
605
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
606
MTL_FAST_MATH = YES;
252
- SDKROOT = iphoneos;
253
- SWIFT_COMPILATION_MODE = wholemodule;
254
- VALIDATE_PRODUCT = YES;
255
- };
256
- name = Release;
257
- };
258
- 8AA60E292F56093200531855 /* Debug */ = {
259
- isa = XCBuildConfiguration;
260
- buildSettings = {
261
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
262
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
263
- CODE_SIGN_ENTITLEMENTS = Klepon/Klepon.entitlements;
264
- CODE_SIGN_STYLE = Automatic;
265
- CURRENT_PROJECT_VERSION = 1;
266
- DEVELOPMENT_TEAM = "";
267
- ENABLE_PREVIEWS = YES;
268
- "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = x86_64;
269
- GENERATE_INFOPLIST_FILE = YES;
270
- INFOPLIST_KEY_UILaunchScreen_Generation = YES;
271
- INFOPLIST_KEY_UIUserInterfaceStyle = Light;
272
- IPHONEOS_DEPLOYMENT_TARGET = 18.5;
273
- LD_RUNPATH_SEARCH_PATHS = (
274
- "$(inherited)",
275
- "@executable_path/Frameworks",
276
- );
277
- MARKETING_VERSION = 1.0;
278
- PRODUCT_BUNDLE_IDENTIFIER = ai.splitfire.klepon;
279
- PRODUCT_NAME = Klepon;
280
- STRING_CATALOG_GENERATE_SYMBOLS = YES;
281
- SWIFT_APPROACHABLE_CONCURRENCY = YES;
282
- SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor;
283
- SWIFT_EMIT_LOC_STRINGS = YES;
284
- SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
607
+ ONLY_ACTIVE_ARCH = YES;
608
+ PRODUCT_NAME = "$(TARGET_NAME)";
609
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
610
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
611
SWIFT_VERSION = 5.0;
286
- TARGETED_DEVICE_FAMILY = 1;
612
+ WATCHOS_DEPLOYMENT_TARGET = 9.0;
613
};
614
name = Debug;
615
};
290
- 8AA60E2A2F56093200531855 /* Release */ = {
616
+ D2D1439E7A622A6F8019887F /* Debug */ = {
617
isa = XCBuildConfiguration;
618
buildSettings = {
619
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
620
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
621
CODE_SIGN_ENTITLEMENTS = Klepon/Klepon.entitlements;
296
- CODE_SIGN_STYLE = Automatic;
622
+ CODE_SIGN_IDENTITY = "iPhone Developer";
623
CURRENT_PROJECT_VERSION = 1;
298
- DEVELOPMENT_TEAM = "";
299
- ENABLE_PREVIEWS = YES;
624
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
625
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = x86_64;
626
GENERATE_INFOPLIST_FILE = YES;
627
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
628
INFOPLIST_KEY_UIUserInterfaceStyle = Light;
304
- IPHONEOS_DEPLOYMENT_TARGET = 18.5;
629
LD_RUNPATH_SEARCH_PATHS = (
630
"$(inherited)",
631
"@executable_path/Frameworks",
632
);
633
MARKETING_VERSION = 1.0;
634
PRODUCT_BUNDLE_IDENTIFIER = ai.splitfire.klepon;
311
- PRODUCT_NAME = Klepon;
312
- STRING_CATALOG_GENERATE_SYMBOLS = YES;
313
- SWIFT_APPROACHABLE_CONCURRENCY = YES;
314
- SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor;
315
- SWIFT_EMIT_LOC_STRINGS = YES;
316
- SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
317
- SWIFT_VERSION = 5.0;
318
- TARGETED_DEVICE_FAMILY = 1;
635
+ SDKROOT = iphoneos;
636
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
637
+ TARGETED_DEVICE_FAMILY = "1,2";
638
};
320
- name = Release;
639
+ name = Debug;
640
};
641
/* End XCBuildConfiguration section */
642
643
/* Begin XCConfigurationList section */
325
- 8AA60E182F56093100531855 /* Build configuration list for PBXProject "Klepon" */ = {
644
+ 07A758477E97CF9254DDBA82 /* Build configuration list for PBXNativeTarget "Klepon Watch" */ = {
645
+ isa = XCConfigurationList;
646
+ buildConfigurations = (
647
+ 57B34C7365523CA3F80ED770 /* Debug */,
648
+ A3B469B57456DA7C46537A7E /* Release */,
649
+ );
650
+ defaultConfigurationIsVisible = 0;
651
+ defaultConfigurationName = Debug;
652
+ };
653
+ 8911E6C6F25C3A4F99870749 /* Build configuration list for PBXProject "Klepon" */ = {
654
isa = XCConfigurationList;
655
buildConfigurations = (
328
- 8AA60E262F56093200531855 /* Debug */,
329
- 8AA60E272F56093200531855 /* Release */,
656
+ B7F0F5DCFEE8809BB1921A4A /* Debug */,
657
+ 850753164F664131E0E37EAE /* Release */,
658
);
659
defaultConfigurationIsVisible = 0;
332
- defaultConfigurationName = Release;
660
+ defaultConfigurationName = Debug;
661
};
334
- 8AA60E282F56093200531855 /* Build configuration list for PBXNativeTarget "Klepon" */ = {
662
+ E1E5A3DF58C9552EE814CC23 /* Build configuration list for PBXNativeTarget "Klepon" */ = {
663
isa = XCConfigurationList;
664
buildConfigurations = (
337
- 8AA60E292F56093200531855 /* Debug */,
338
- 8AA60E2A2F56093200531855 /* Release */,
665
+ D2D1439E7A622A6F8019887F /* Debug */,
666
+ 97B8585F2E74C6C870509FE9 /* Release */,
667
);
668
defaultConfigurationIsVisible = 0;
341
- defaultConfigurationName = Release;
669
+ defaultConfigurationName = Debug;
670
};
671
/* End XCConfigurationList section */
672
673
/* Begin XCRemoteSwiftPackageReference section */
346
- 8AB50B362F82BD7700CE1848 /* XCRemoteSwiftPackageReference "onde-swift" */ = {
674
+ AD8C734FB461604D5793769C /* XCRemoteSwiftPackageReference "onde-swift" */ = {
675
isa = XCRemoteSwiftPackageReference;
676
repositoryURL = "https://github.com/ondeinference/onde-swift";
677
requirement = {
678
kind = exactVersion;
351
- version = 0.1.0;
679
+ version = 1.0.0;
680
};
681
};
682
/* End XCRemoteSwiftPackageReference section */
683
684
/* Begin XCSwiftPackageProductDependency section */
357
- 8AA60E2C2F56094200531855 /* Onde */ = {
685
+ 855EE8DF62A7820E77C05D1A /* Onde */ = {
686
isa = XCSwiftPackageProductDependency;
687
+ package = AD8C734FB461604D5793769C /* XCRemoteSwiftPackageReference "onde-swift" */;
688
productName = Onde;
689
};
690
/* End XCSwiftPackageProductDependency section */
691
};
363
- rootObject = 8AA60E152F56093100531855 /* Project object */;
692
+ rootObject = 05A5707BDA883282DEB132FF /* Project object */;
693
}
Klepon.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
+2
-2
@@ -6,8 +6,8 @@
6
"kind" : "remoteSourceControl",
7
"location" : "https://github.com/ondeinference/onde-swift",
8
"state" : {
9
- "revision" : "c3114996521c9aee2aa0bc71b7324a8713376103",
10
- "version" : "0.1.0"
9
+ "revision" : "83bfe89489d3eee34a960dd7a3db31dc26735a09",
10
+ "version" : "1.0.0"
11
}
12
}
13
],
Klepon.xcodeproj/xcshareddata/xcschemes/Klepon Watch.xcscheme
new
+87
@@ -0,0 +1,87 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<Scheme
3
+ LastUpgradeVersion = "2600"
4
+ version = "1.3">
5
+ <BuildAction
6
+ parallelizeBuildables = "YES"
7
+ buildImplicitDependencies = "YES">
8
+ <BuildActionEntries>
9
+ <BuildActionEntry
10
+ buildForTesting = "YES"
11
+ buildForRunning = "YES"
12
+ buildForProfiling = "YES"
13
+ buildForArchiving = "YES"
14
+ buildForAnalyzing = "YES">
15
+ <BuildableReference
16
+ BuildableIdentifier = "primary"
17
+ BlueprintIdentifier = "E8CEBF52617721AEE450A7CF"
18
+ BuildableName = "Klepon Watch.app"
19
+ BlueprintName = "Klepon Watch"
20
+ ReferencedContainer = "container:Klepon.xcodeproj">
21
+ </BuildableReference>
22
+ </BuildActionEntry>
23
+ </BuildActionEntries>
24
+ </BuildAction>
25
+ <TestAction
26
+ buildConfiguration = "Debug"
27
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29
+ shouldUseLaunchSchemeArgsEnv = "YES">
30
+ <MacroExpansion>
31
+ <BuildableReference
32
+ BuildableIdentifier = "primary"
33
+ BlueprintIdentifier = "E8CEBF52617721AEE450A7CF"
34
+ BuildableName = "Klepon Watch.app"
35
+ BlueprintName = "Klepon Watch"
36
+ ReferencedContainer = "container:Klepon.xcodeproj">
37
+ </BuildableReference>
38
+ </MacroExpansion>
39
+ <Testables>
40
+ </Testables>
41
+ </TestAction>
42
+ <LaunchAction
43
+ buildConfiguration = "Debug"
44
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
45
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
46
+ launchStyle = "0"
47
+ useCustomWorkingDirectory = "NO"
48
+ ignoresPersistentStateOnLaunch = "NO"
49
+ debugDocumentVersioning = "YES"
50
+ debugServiceExtension = "internal"
51
+ allowLocationSimulation = "YES">
52
+ <BuildableProductRunnable
53
+ runnableDebuggingMode = "0">
54
+ <BuildableReference
55
+ BuildableIdentifier = "primary"
56
+ BlueprintIdentifier = "E8CEBF52617721AEE450A7CF"
57
+ BuildableName = "Klepon Watch.app"
58
+ BlueprintName = "Klepon Watch"
59
+ ReferencedContainer = "container:Klepon.xcodeproj">
60
+ </BuildableReference>
61
+ </BuildableProductRunnable>
62
+ </LaunchAction>
63
+ <ProfileAction
64
+ buildConfiguration = "Release"
65
+ shouldUseLaunchSchemeArgsEnv = "YES"
66
+ savedToolIdentifier = ""
67
+ useCustomWorkingDirectory = "NO"
68
+ debugDocumentVersioning = "YES">
69
+ <BuildableProductRunnable
70
+ runnableDebuggingMode = "0">
71
+ <BuildableReference
72
+ BuildableIdentifier = "primary"
73
+ BlueprintIdentifier = "E8CEBF52617721AEE450A7CF"
74
+ BuildableName = "Klepon Watch.app"
75
+ BlueprintName = "Klepon Watch"
76
+ ReferencedContainer = "container:Klepon.xcodeproj">
77
+ </BuildableReference>
78
+ </BuildableProductRunnable>
79
+ </ProfileAction>
80
+ <AnalyzeAction
81
+ buildConfiguration = "Debug">
82
+ </AnalyzeAction>
83
+ <ArchiveAction
84
+ buildConfiguration = "Release"
85
+ revealArchiveInOrganizer = "YES">
86
+ </ArchiveAction>
87
+</Scheme>
Klepon.xcodeproj/xcshareddata/xcschemes/Klepon.xcscheme
new
+93
@@ -0,0 +1,93 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<Scheme
3
+ LastUpgradeVersion = "2600"
4
+ version = "1.7">
5
+ <BuildAction
6
+ parallelizeBuildables = "YES"
7
+ buildImplicitDependencies = "YES"
8
+ runPostActionsOnFailure = "NO">
9
+ <BuildActionEntries>
10
+ <BuildActionEntry
11
+ buildForTesting = "YES"
12
+ buildForRunning = "YES"
13
+ buildForProfiling = "YES"
14
+ buildForArchiving = "YES"
15
+ buildForAnalyzing = "YES">
16
+ <BuildableReference
17
+ BuildableIdentifier = "primary"
18
+ BlueprintIdentifier = "2ADB11F6C1D51B9F9A9DB15F"
19
+ BuildableName = "Klepon.app"
20
+ BlueprintName = "Klepon"
21
+ ReferencedContainer = "container:Klepon.xcodeproj">
22
+ </BuildableReference>
23
+ </BuildActionEntry>
24
+ </BuildActionEntries>
25
+ </BuildAction>
26
+ <TestAction
27
+ buildConfiguration = "Debug"
28
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
29
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
30
+ shouldUseLaunchSchemeArgsEnv = "YES"
31
+ onlyGenerateCoverageForSpecifiedTargets = "NO">
32
+ <MacroExpansion>
33
+ <BuildableReference
34
+ BuildableIdentifier = "primary"
35
+ BlueprintIdentifier = "2ADB11F6C1D51B9F9A9DB15F"
36
+ BuildableName = "Klepon.app"
37
+ BlueprintName = "Klepon"
38
+ ReferencedContainer = "container:Klepon.xcodeproj">
39
+ </BuildableReference>
40
+ </MacroExpansion>
41
+ <Testables>
42
+ </Testables>
43
+ </TestAction>
44
+ <LaunchAction
45
+ buildConfiguration = "Debug"
46
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
47
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
48
+ launchStyle = "0"
49
+ useCustomWorkingDirectory = "NO"
50
+ ignoresPersistentStateOnLaunch = "NO"
51
+ debugDocumentVersioning = "YES"
52
+ debugServiceExtension = "internal"
53
+ allowLocationSimulation = "YES">
54
+ <BuildableProductRunnable
55
+ runnableDebuggingMode = "0">
56
+ <BuildableReference
57
+ BuildableIdentifier = "primary"
58
+ BlueprintIdentifier = "2ADB11F6C1D51B9F9A9DB15F"
59
+ BuildableName = "Klepon.app"
60
+ BlueprintName = "Klepon"
61
+ ReferencedContainer = "container:Klepon.xcodeproj">
62
+ </BuildableReference>
63
+ </BuildableProductRunnable>
64
+ <CommandLineArguments>
65
+ </CommandLineArguments>
66
+ </LaunchAction>
67
+ <ProfileAction
68
+ buildConfiguration = "Release"
69
+ shouldUseLaunchSchemeArgsEnv = "YES"
70
+ savedToolIdentifier = ""
71
+ useCustomWorkingDirectory = "NO"
72
+ debugDocumentVersioning = "YES">
73
+ <BuildableProductRunnable
74
+ runnableDebuggingMode = "0">
75
+ <BuildableReference
76
+ BuildableIdentifier = "primary"
77
+ BlueprintIdentifier = "2ADB11F6C1D51B9F9A9DB15F"
78
+ BuildableName = "Klepon.app"
79
+ BlueprintName = "Klepon"
80
+ ReferencedContainer = "container:Klepon.xcodeproj">
81
+ </BuildableReference>
82
+ </BuildableProductRunnable>
83
+ <CommandLineArguments>
84
+ </CommandLineArguments>
85
+ </ProfileAction>
86
+ <AnalyzeAction
87
+ buildConfiguration = "Debug">
88
+ </AnalyzeAction>
89
+ <ArchiveAction
90
+ buildConfiguration = "Release"
91
+ revealArchiveInOrganizer = "YES">
92
+ </ArchiveAction>
93
+</Scheme>
Klepon/Klepon.entitlements
+3
-11
@@ -1,13 +1,5 @@
1
-<?xml version="1.0" encoding="UTF-8" ?>
2
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
3
- "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
<plist version="1.0">
5
-<dict>
6
- <key>com.apple.developer.kernel.increased-memory-limit</key>
7
- <true />
8
- <key>com.apple.security.application-groups</key>
9
- <array>
10
- <string>group.com.ondeinference.apps</string>
11
- </array>
12
-</dict>
4
+<dict/>
5
</plist>
KleponWatch/Assets.xcassets/AccentColor.colorset/Contents.json
new
+11
@@ -0,0 +1,11 @@
1
+{
2
+ "colors" : [
3
+ {
4
+ "idiom" : "universal"
5
+ }
6
+ ],
7
+ "info" : {
8
+ "author" : "xcode",
9
+ "version" : 1
10
+ }
11
+}
KleponWatch/Assets.xcassets/AppIcon.appiconset/Contents.json
new
+22
@@ -0,0 +1,22 @@
1
+{
2
+ "images" : [
3
+ { "filename" : "watch-notification-38mm@2x.png", "idiom" : "watch", "role" : "notificationCenter", "scale" : "2x", "size" : "24x24", "subtype" : "38mm" },
4
+ { "filename" : "watch-notification-42mm@2x.png", "idiom" : "watch", "role" : "notificationCenter", "scale" : "2x", "size" : "27.5x27.5", "subtype" : "42mm" },
5
+ { "filename" : "watch-settings@2x.png", "idiom" : "watch", "role" : "companionSettings", "scale" : "2x", "size" : "29x29" },
6
+ { "filename" : "watch-settings@3x.png", "idiom" : "watch", "role" : "companionSettings", "scale" : "3x", "size" : "29x29" },
7
+ { "filename" : "watch-app-38mm@2x.png", "idiom" : "watch", "role" : "appLauncher", "scale" : "2x", "size" : "40x40", "subtype" : "38mm" },
8
+ { "filename" : "watch-app-40mm@2x.png", "idiom" : "watch", "role" : "appLauncher", "scale" : "2x", "size" : "44x44", "subtype" : "40mm" },
9
+ { "filename" : "watch-app-41mm@2x.png", "idiom" : "watch", "role" : "appLauncher", "scale" : "2x", "size" : "46x46", "subtype" : "41mm" },
10
+ { "filename" : "watch-app-44mm@2x.png", "idiom" : "watch", "role" : "appLauncher", "scale" : "2x", "size" : "50x50", "subtype" : "44mm" },
11
+ { "filename" : "watch-app-45mm@2x.png", "idiom" : "watch", "role" : "appLauncher", "scale" : "2x", "size" : "51x51", "subtype" : "45mm" },
12
+ { "filename" : "watch-app-49mm@2x.png", "idiom" : "watch", "role" : "appLauncher", "scale" : "2x", "size" : "54x54", "subtype" : "49mm" },
13
+ { "filename" : "watch-quicklook-38mm@2x.png", "idiom" : "watch", "role" : "quickLook", "scale" : "2x", "size" : "86x86", "subtype" : "38mm" },
14
+ { "filename" : "watch-quicklook-42mm@2x.png", "idiom" : "watch", "role" : "quickLook", "scale" : "2x", "size" : "98x98", "subtype" : "42mm" },
15
+ { "filename" : "watch-quicklook-44mm@2x.png", "idiom" : "watch", "role" : "quickLook", "scale" : "2x", "size" : "108x108", "subtype" : "44mm" },
16
+ { "filename" : "watch-marketing.png", "idiom" : "watch-marketing", "scale" : "1x", "size" : "1024x1024" }
17
+ ],
18
+ "info" : {
19
+ "author" : "xcode",
20
+ "version" : 1
21
+ }
22
+}
KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-app-38mm@2x.png
Binary files /dev/null and b/KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-app-38mm@2x.png differ
KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-app-40mm@2x.png
Binary files /dev/null and b/KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-app-40mm@2x.png differ
KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-app-41mm@2x.png
Binary files /dev/null and b/KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-app-41mm@2x.png differ
KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-app-44mm@2x.png
Binary files /dev/null and b/KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-app-44mm@2x.png differ
KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-app-45mm@2x.png
Binary files /dev/null and b/KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-app-45mm@2x.png differ
KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-app-49mm@2x.png
Binary files /dev/null and b/KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-app-49mm@2x.png differ
KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-marketing.png
Binary files /dev/null and b/KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-marketing.png differ
KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-notification-38mm@2x.png
Binary files /dev/null and b/KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-notification-38mm@2x.png differ
KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-notification-42mm@2x.png
Binary files /dev/null and b/KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-notification-42mm@2x.png differ
KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-quicklook-38mm@2x.png
Binary files /dev/null and b/KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-quicklook-38mm@2x.png differ
KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-quicklook-42mm@2x.png
Binary files /dev/null and b/KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-quicklook-42mm@2x.png differ
KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-quicklook-44mm@2x.png
Binary files /dev/null and b/KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-quicklook-44mm@2x.png differ
KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-settings@2x.png
Binary files /dev/null and b/KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-settings@2x.png differ
KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-settings@3x.png
Binary files /dev/null and b/KleponWatch/Assets.xcassets/AppIcon.appiconset/watch-settings@3x.png differ
KleponWatch/Assets.xcassets/Contents.json
new
+6
@@ -0,0 +1,6 @@
1
+{
2
+ "info" : {
3
+ "author" : "xcode",
4
+ "version" : 1
5
+ }
6
+}
KleponWatch/WatchHomeView.swift
new
+78
@@ -0,0 +1,78 @@
1
+import SwiftUI
2
+
3
+private struct WatchGuideEntry: Identifiable {
4
+ let id: String
5
+ let title: String
6
+ let subtitle: String
7
+ let notes: [String]
8
+}
9
+
10
+private let watchEntries: [WatchGuideEntry] = [
11
+ .init(
12
+ id: "klepon",
13
+ title: "Klepon",
14
+ subtitle: "Sweet rice cake with palm sugar",
15
+ notes: ["Chewy", "Coconut", "Palm sugar"]
16
+ ),
17
+ .init(
18
+ id: "rendang",
19
+ title: "Rendang",
20
+ subtitle: "Slow-cooked beef with deep spice",
21
+ notes: ["Rich", "Savory", "West Sumatra"]
22
+ ),
23
+ .init(
24
+ id: "nasi-goreng",
25
+ title: "Nasi goreng",
26
+ subtitle: "Indonesia’s beloved fried rice",
27
+ notes: ["Smoky", "Comforting", "Kecap manis"]
28
+ ),
29
+ .init(
30
+ id: "sate",
31
+ title: "Sate",
32
+ subtitle: "Skewered grilled meat with sauce",
33
+ notes: ["Grilled", "Street food", "Peanut sauce"]
34
+ ),
35
+]
36
+
37
+struct WatchHomeView: View {
38
+ var body: some View {
39
+ NavigationStack {
40
+ List(watchEntries) { entry in
41
+ NavigationLink(entry.title) {
42
+ WatchEntryDetailView(entry: entry)
43
+ }
44
+ }
45
+ .navigationTitle("Klepon")
46
+ }
47
+ }
48
+}
49
+
50
+private struct WatchEntryDetailView: View {
51
+ let entry: WatchGuideEntry
52
+
53
+ var body: some View {
54
+ ScrollView {
55
+ VStack(alignment: .leading, spacing: 12) {
56
+ Text(entry.title)
57
+ .font(.headline)
58
+
59
+ Text(entry.subtitle)
60
+ .font(.subheadline)
61
+ .foregroundStyle(.secondary)
62
+
63
+ ForEach(entry.notes, id: \.self) { note in
64
+ Text("• \(note)")
65
+ .font(.footnote)
66
+ }
67
+
68
+ Text("Watch support is browse-first for now.")
69
+ .font(.footnote)
70
+ .foregroundStyle(.secondary)
71
+ .padding(.top, 6)
72
+ }
73
+ .frame(maxWidth: .infinity, alignment: .leading)
74
+ .padding()
75
+ }
76
+ .navigationTitle(entry.title)
77
+ }
78
+}
project.yml
new
+99
@@ -0,0 +1,99 @@
1
+name: Klepon
2
+options:
3
+ deploymentTarget:
4
+ iOS: "18.5"
5
+ watchOS: "9.0"
6
+ xcodeVersion: "26.0"
7
+ generateEmptyDirectories: false
8
+ createIntermediateGroups: false
9
+
10
+packages:
11
+ Onde:
12
+ url: https://github.com/ondeinference/onde-swift
13
+ exactVersion: 1.0.0
14
+
15
+schemes:
16
+ Klepon:
17
+ build:
18
+ targets:
19
+ Klepon: all
20
+ run:
21
+ config: Debug
22
+ analyze:
23
+ config: Debug
24
+ archive:
25
+ config: Release
26
+ profile:
27
+ config: Release
28
+ Klepon Watch:
29
+ build:
30
+ targets:
31
+ Klepon Watch: all
32
+ run:
33
+ config: Debug
34
+ analyze:
35
+ config: Debug
36
+ archive:
37
+ config: Release
38
+ profile:
39
+ config: Release
40
+
41
+targets:
42
+ Klepon:
43
+ type: application
44
+ platform: iOS
45
+ sources:
46
+ - path: Klepon
47
+ entitlements:
48
+ path: Klepon/Klepon.entitlements
49
+ dependencies:
50
+ - package: Onde
51
+ product: Onde
52
+ settings:
53
+ base:
54
+ PRODUCT_BUNDLE_IDENTIFIER: ai.splitfire.klepon
55
+ MARKETING_VERSION: "1.0"
56
+ CURRENT_PROJECT_VERSION: 1
57
+ ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
58
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor
59
+ GENERATE_INFOPLIST_FILE: YES
60
+ INFOPLIST_KEY_UILaunchScreen_Generation: YES
61
+ INFOPLIST_KEY_UIUserInterfaceStyle: Light
62
+ ENABLE_USER_SCRIPT_SANDBOXING: YES
63
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]": x86_64
64
+ configs:
65
+ Debug:
66
+ SWIFT_OPTIMIZATION_LEVEL: -Onone
67
+ Release:
68
+ SWIFT_OPTIMIZATION_LEVEL: -O
69
+
70
+ KleponWatch:
71
+ name: Klepon Watch
72
+ type: application
73
+ platform: watchOS
74
+ sources:
75
+ - path: KleponWatch
76
+ settings:
77
+ base:
78
+ PRODUCT_BUNDLE_IDENTIFIER: ai.splitfire.klepon.watchkitapp
79
+ PRODUCT_NAME: Klepon Watch
80
+ MARKETING_VERSION: "1.0"
81
+ CURRENT_PROJECT_VERSION: 1
82
+ GENERATE_INFOPLIST_FILE: YES
83
+ ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
84
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor
85
+ ENABLE_USER_SCRIPT_SANDBOXING: YES
86
+ INFOPLIST_KEY_WKCompanionAppBundleIdentifier: ""
87
+ SDKROOT: watchos
88
+ TARGETED_DEVICE_FAMILY: 4
89
+ SKIP_INSTALL: YES
90
+ LD_RUNPATH_SEARCH_PATHS:
91
+ - "$(inherited)"
92
+ - "@executable_path/Frameworks"
93
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES: YES
94
+ "EXCLUDED_ARCHS[sdk=watchsimulator*]": x86_64
95
+ configs:
96
+ Debug:
97
+ SWIFT_OPTIMIZATION_LEVEL: -Onone
98
+ Release:
99
+ SWIFT_OPTIMIZATION_LEVEL: -O