Skip to content

Commit a9297c0

Browse files
authored
Merge pull request #17 from lcandy2/feat/store
feat: Feat/store
1 parent ed6688e commit a9297c0

File tree

25 files changed

+2738
-492
lines changed

25 files changed

+2738
-492
lines changed

NeoDB/NeoDB.xcodeproj/project.pbxproj

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
24BABF5F2D40B0E900785306 /* WhatsNewKit in Frameworks */ = {isa = PBXBuildFile; productRef = 24BABF5E2D40B0E900785306 /* WhatsNewKit */; };
2222
24D1BE412D2A9F340063B530 /* Inject in Frameworks */ = {isa = PBXBuildFile; productRef = 24D1BE402D2A9F340063B530 /* Inject */; };
2323
24ECD3B72D46432A00E24D7D /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 24ECD3B62D46432A00E24D7D /* StoreKit.framework */; };
24-
24F75A2E2D451D4D00DB8774 /* SwiftUIIntrospect in Frameworks */ = {isa = PBXBuildFile; productRef = 24F75A2D2D451D4D00DB8774 /* SwiftUIIntrospect */; };
25-
24F75A312D45566300DB8774 /* Parchment in Frameworks */ = {isa = PBXBuildFile; productRef = 24F75A302D45566300DB8774 /* Parchment */; };
24+
24ECD3C42D464AC100E24D7D /* RevenueCat in Frameworks */ = {isa = PBXBuildFile; productRef = 24ECD3C32D464AC100E24D7D /* RevenueCat */; };
25+
24ECD3C62D464AC100E24D7D /* RevenueCatUI in Frameworks */ = {isa = PBXBuildFile; productRef = 24ECD3C52D464AC100E24D7D /* RevenueCatUI */; };
2626
/* End PBXBuildFile section */
2727

2828
/* Begin PBXContainerItemProxy section */
@@ -96,12 +96,12 @@
9696
2405C5E32D42757100457DF5 /* WebView in Frameworks */,
9797
24BABF592D40309800785306 /* WishKit in Frameworks */,
9898
242688402D2A9E0D00DFAAC1 /* InjectionNext in Frameworks */,
99-
24F75A312D45566300DB8774 /* Parchment in Frameworks */,
10099
24D1BE412D2A9F340063B530 /* Inject in Frameworks */,
101100
243C38EB2D3D999B00EB356A /* ExpandableText in Frameworks */,
101+
24ECD3C42D464AC100E24D7D /* RevenueCat in Frameworks */,
102102
24ECD3B72D46432A00E24D7D /* StoreKit.framework in Frameworks */,
103+
24ECD3C62D464AC100E24D7D /* RevenueCatUI in Frameworks */,
103104
2446C0C92D41712F00504129 /* SwiftSoup in Frameworks */,
104-
24F75A2E2D451D4D00DB8774 /* SwiftUIIntrospect in Frameworks */,
105105
);
106106
runOnlyForDeploymentPostprocessing = 0;
107107
};
@@ -185,8 +185,8 @@
185185
2446C0C82D41712F00504129 /* SwiftSoup */,
186186
2405C5DC2D42717400457DF5 /* BetterSafariView */,
187187
2405C5E22D42757100457DF5 /* WebView */,
188-
24F75A2D2D451D4D00DB8774 /* SwiftUIIntrospect */,
189-
24F75A302D45566300DB8774 /* Parchment */,
188+
24ECD3C32D464AC100E24D7D /* RevenueCat */,
189+
24ECD3C52D464AC100E24D7D /* RevenueCatUI */,
190190
);
191191
productName = NeoDB;
192192
productReference = 24CEACEF2D0DA6200083D4BA /* NeoDB.app */;
@@ -283,8 +283,7 @@
283283
2446C0C72D41712F00504129 /* XCRemoteSwiftPackageReference "SwiftSoup" */,
284284
2405C5DB2D42717400457DF5 /* XCRemoteSwiftPackageReference "BetterSafariView" */,
285285
2405C5E12D42757100457DF5 /* XCRemoteSwiftPackageReference "SwiftUI-WebView" */,
286-
24F75A2C2D451D4D00DB8774 /* XCRemoteSwiftPackageReference "swiftui-introspect" */,
287-
24F75A2F2D45566300DB8774 /* XCRemoteSwiftPackageReference "Parchment" */,
286+
24ECD3C22D464AC100E24D7D /* XCRemoteSwiftPackageReference "purchases-ios-spm" */,
288287
);
289288
preferredProjectObjectVersion = 77;
290289
productRefGroup = 24CEACF02D0DA6200083D4BA /* Products */;
@@ -489,7 +488,7 @@
489488
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
490489
CODE_SIGN_ENTITLEMENTS = NeoDB/NeoDB.entitlements;
491490
CODE_SIGN_STYLE = Automatic;
492-
CURRENT_PROJECT_VERSION = 386;
491+
CURRENT_PROJECT_VERSION = 411;
493492
DEAD_CODE_STRIPPING = YES;
494493
DEVELOPMENT_ASSET_PATHS = "\"NeoDB/Preview Content\"";
495494
DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)";
@@ -512,7 +511,7 @@
512511
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
513512
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
514513
MACOSX_DEPLOYMENT_TARGET = 13;
515-
MARKETING_VERSION = 0.12;
514+
MARKETING_VERSION = 1.0;
516515
OTHER_LDFLAGS = (
517516
"-Xlinker",
518517
"-interposable",
@@ -537,7 +536,7 @@
537536
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
538537
CODE_SIGN_ENTITLEMENTS = NeoDB/NeoDB.entitlements;
539538
CODE_SIGN_STYLE = Automatic;
540-
CURRENT_PROJECT_VERSION = 386;
539+
CURRENT_PROJECT_VERSION = 411;
541540
DEAD_CODE_STRIPPING = YES;
542541
DEVELOPMENT_ASSET_PATHS = "\"NeoDB/Preview Content\"";
543542
DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)";
@@ -560,7 +559,7 @@
560559
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
561560
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
562561
MACOSX_DEPLOYMENT_TARGET = 13;
563-
MARKETING_VERSION = 0.12;
562+
MARKETING_VERSION = 1.0;
564563
PRODUCT_BUNDLE_IDENTIFIER = app.neodb;
565564
PRODUCT_NAME = "$(TARGET_NAME)";
566565
SDKROOT = auto;
@@ -797,20 +796,12 @@
797796
minimumVersion = 2.2.1;
798797
};
799798
};
800-
24F75A2C2D451D4D00DB8774 /* XCRemoteSwiftPackageReference "swiftui-introspect" */ = {
799+
24ECD3C22D464AC100E24D7D /* XCRemoteSwiftPackageReference "purchases-ios-spm" */ = {
801800
isa = XCRemoteSwiftPackageReference;
802-
repositoryURL = "https://github.com/siteline/swiftui-introspect";
801+
repositoryURL = "https://github.com/RevenueCat/purchases-ios-spm.git";
803802
requirement = {
804803
kind = upToNextMajorVersion;
805-
minimumVersion = 1.3.0;
806-
};
807-
};
808-
24F75A2F2D45566300DB8774 /* XCRemoteSwiftPackageReference "Parchment" */ = {
809-
isa = XCRemoteSwiftPackageReference;
810-
repositoryURL = "https://github.com/rechsteiner/Parchment";
811-
requirement = {
812-
branch = main;
813-
kind = branch;
804+
minimumVersion = 5.15.0;
814805
};
815806
};
816807
/* End XCRemoteSwiftPackageReference section */
@@ -875,15 +866,15 @@
875866
package = 24AFFC8E2D2A9F040085A6D0 /* XCRemoteSwiftPackageReference "Inject" */;
876867
productName = Inject;
877868
};
878-
24F75A2D2D451D4D00DB8774 /* SwiftUIIntrospect */ = {
869+
24ECD3C32D464AC100E24D7D /* RevenueCat */ = {
879870
isa = XCSwiftPackageProductDependency;
880-
package = 24F75A2C2D451D4D00DB8774 /* XCRemoteSwiftPackageReference "swiftui-introspect" */;
881-
productName = SwiftUIIntrospect;
871+
package = 24ECD3C22D464AC100E24D7D /* XCRemoteSwiftPackageReference "purchases-ios-spm" */;
872+
productName = RevenueCat;
882873
};
883-
24F75A302D45566300DB8774 /* Parchment */ = {
874+
24ECD3C52D464AC100E24D7D /* RevenueCatUI */ = {
884875
isa = XCSwiftPackageProductDependency;
885-
package = 24F75A2F2D45566300DB8774 /* XCRemoteSwiftPackageReference "Parchment" */;
886-
productName = Parchment;
876+
package = 24ECD3C22D464AC100E24D7D /* XCRemoteSwiftPackageReference "purchases-ios-spm" */;
877+
productName = RevenueCatUI;
887878
};
888879
/* End XCSwiftPackageProductDependency section */
889880
};

NeoDB/NeoDB.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 4 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

NeoDB/NeoDB.xcodeproj/xcshareddata/xcschemes/NeoDB.xcscheme

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@
7474
ReferencedContainer = "container:NeoDB.xcodeproj">
7575
</BuildableReference>
7676
</BuildableProductRunnable>
77+
<StoreKitConfigurationFileReference
78+
identifier = "../../NeoDB/Services/Config/NeoDB.storekit">
79+
</StoreKitConfigurationFileReference>
7780
</LaunchAction>
7881
<ProfileAction
7982
buildConfiguration = "Release"

NeoDB/NeoDB/ContentView.swift

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
//
77

88
import SwiftUI
9+
import OSLog
910

1011
struct ContentView: View {
1112
@EnvironmentObject var accountsManager: AppAccountsManager
1213
@StateObject private var router = Router()
1314
@State private var isSearchActive = false
15+
private let logger = Logger.views.contentView
1416

1517
var body: some View {
1618
TabView(selection: $router.selectedTab.onUpdate { oldTab, newTab in
@@ -73,24 +75,38 @@ struct ContentView: View {
7375
}
7476
.tint(.accentColor)
7577
.environmentObject(router)
76-
.sheet(item: $router.presentedSheet) { sheet in
77-
switch sheet {
78-
case .newStatus:
79-
Text("New Status") // TODO: Implement StatusEditorView
80-
case .editStatus(let status):
81-
Text("Edit Status: \(status.id)") // TODO: Implement StatusEditorView
82-
case .replyToStatus(let status):
83-
StatusReplyView(status: status)
84-
case .addToShelf(let item, let shelfType, let detentLevel):
85-
MarkView(item: item, shelfType: shelfType, detentLevel: detentLevel)
86-
.environmentObject(accountsManager)
87-
case .editShelfItem(let mark, let shelfType, let detentLevel):
88-
MarkView(item: mark.item, mark: mark, shelfType: shelfType, detentLevel: detentLevel)
89-
.environmentObject(accountsManager)
90-
case .itemDetails(let item):
91-
ItemDetailsSheet(item: item)
78+
.onChange(of: accountsManager.shouldShowPurchase) { shouldShow in
79+
logger.debug("shouldShowPurchase changed to \(shouldShow)")
80+
if shouldShow {
81+
router.presentSheet(.purchase)
9282
}
9383
}
84+
.sheet(item: Binding(
85+
get: { router.sheetStack.last },
86+
set: { _, _ in router.dismissSheet() }
87+
)) { sheet in
88+
Group {
89+
switch sheet {
90+
case .newStatus:
91+
Text("New Status") // TODO: Implement StatusEditorView
92+
case .editStatus(let status):
93+
Text("Edit Status: \(status.id)") // TODO: Implement StatusEditorView
94+
case .replyToStatus(let status):
95+
StatusReplyView(status: status)
96+
case .addToShelf(let item, let shelfType, let detentLevel):
97+
MarkView(item: item, shelfType: shelfType, detentLevel: detentLevel)
98+
.environmentObject(accountsManager)
99+
case .editShelfItem(let mark, let shelfType, let detentLevel):
100+
MarkView(item: mark.item, mark: mark, shelfType: shelfType, detentLevel: detentLevel)
101+
.environmentObject(accountsManager)
102+
case .itemDetails(let item):
103+
ItemDetailsSheet(item: item)
104+
case .purchase:
105+
PurchaseView(type: .sheet)
106+
}
107+
}
108+
.environmentObject(router)
109+
}
94110
.whatsNewSheet()
95111
.enableInjection()
96112
}
@@ -134,6 +150,8 @@ struct ContentView: View {
134150
Text("Followers: \(id)") // TODO: Implement FollowersView
135151
case .following(let id):
136152
Text("Following: \(id)") // TODO: Implement FollowingView
153+
case .purchase:
154+
PurchaseView()
137155
}
138156
}
139157
}

NeoDB/NeoDB/NeoDBApp.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@ import WhatsNewKit
1111
@main
1212
struct NeoDBApp: App {
1313
@StateObject private var accountsManager = AppAccountsManager()
14+
@StateObject private var storeManager = StoreManager()
1415
@StateObject private var router = Router()
1516

1617
var body: some Scene {
1718
WindowGroup {
1819
Group {
1920
if accountsManager.isAuthenticated {
2021
ContentView()
21-
.environmentObject(router)
22+
.environmentObject(self.router)
2223
.environment(
2324
\.whatsNew,
2425
WhatsNewEnvironment(
@@ -30,7 +31,8 @@ struct NeoDBApp: App {
3031
LoginView()
3132
}
3233
}
33-
.environmentObject(accountsManager)
34+
.environmentObject(self.accountsManager)
35+
.environmentObject(self.storeManager)
3436
.onOpenURL { url in
3537
// First try to handle OAuth callback
3638
if url.scheme == "neodb" && url.host == "oauth" {

NeoDB/NeoDB/Resources/Localization/Item.xcstrings

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -199,29 +199,6 @@
199199
}
200200
}
201201
},
202-
"item_add_to_shelf" : {
203-
"extractionState" : "stale",
204-
"localizations" : {
205-
"en" : {
206-
"stringUnit" : {
207-
"state" : "translated",
208-
"value" : "Add to Shelf"
209-
}
210-
},
211-
"pt-BR" : {
212-
"stringUnit" : {
213-
"state" : "translated",
214-
"value" : "Adicionar a estante"
215-
}
216-
},
217-
"zh-Hans" : {
218-
"stringUnit" : {
219-
"state" : "translated",
220-
"value" : "添加到书架"
221-
}
222-
}
223-
}
224-
},
225202
"item_description" : {
226203
"localizations" : {
227204
"en" : {

0 commit comments

Comments
 (0)