diff --git a/CronicaWidget/Views/ItemContentList.swift b/CronicaWidget/Views/ItemContentList.swift
index f13912e2..680ccd99 100644
--- a/CronicaWidget/Views/ItemContentList.swift
+++ b/CronicaWidget/Views/ItemContentList.swift
@@ -65,10 +65,13 @@ private struct PosterImage: View {
.resizable()
.aspectRatio(contentMode: .fill)
#elseif os(macOS)
- Image(nsImage: (NSImage(data: image) ?? NSImage(systemSymbolName: "popcorn.fill", accessibilityDescription: "")) ?? "")
- .resizable()
- .aspectRatio(contentMode: .fill)
-
+ if let nsImage = NSImage(data: image) {
+ Image(nsImage: nsImage)
+ .resizable()
+ .aspectRatio(contentMode: .fill)
+ } else {
+ Image(systemName: "popcorn.fill")
+ }
#endif
} else {
PlaceholderImage()
diff --git a/README.md b/README.md
index 085d36ae..b77c1652 100644
--- a/README.md
+++ b/README.md
@@ -107,7 +107,7 @@ You can also download the latest beta from contact@alexandremadeira.dev, I'll try to answer as quick as I can.
-I'm also availabe at iMessage, you can send a message at the same email address above.
-Follow me on Twitter: [_alexMadeira](https://twitter.com/_alexMadeira).
+- If you any question, you can send me an email at contact@alexandremadeira.dev, I'll try to answer as quick as I can.
+- I'm also availabe at iMessage, you can send a message at the **same email address above**.
+- Follow Cronica on Twitter: [CronicaApp](https://twitter.com/CronicaApp).
diff --git a/Shared/Manager/CronicaTelemetry.swift b/Shared/Manager/CronicaTelemetry.swift
index 1f192219..4e6b633b 100644
--- a/Shared/Manager/CronicaTelemetry.swift
+++ b/Shared/Manager/CronicaTelemetry.swift
@@ -7,9 +7,10 @@
import Foundation
import os
-import TelemetryClient
-#if os(macOS) || os(tvOS)
+#if !os(iOS)
import Aptabase
+#else
+import TelemetryClient
#endif
struct CronicaTelemetry {
@@ -23,23 +24,26 @@ struct CronicaTelemetry {
func setup() {
#if !targetEnvironment(simulator) || !DEBUG
- guard let key = Key.telemetryClientKey else { return }
- let configuration = TelemetryManagerConfiguration(appID: key)
- TelemetryManager.initialize(with: configuration)
+#if !os(iOS)
guard let aptabaseKey = Key.aptabaseClientKey else { return }
Aptabase.shared.initialize(appKey: aptabaseKey)
Aptabase.shared.trackEvent("app_started")
+#else
+ guard let key = Key.telemetryClientKey else { return }
+ let configuration = TelemetryManagerConfiguration(appID: key)
+ TelemetryManager.initialize(with: configuration)
+#endif
#endif
}
- /// Send a signal using TelemetryDeck service.
+ /// Send a signal using TelemetryDeck service (on iOS/iPadOS) or in Aptabase (macOS, watchOS, tvOS).
///
/// If it is running in Simulator or Debug, it will send a warning on logger.
func handleMessage(_ message: String, for id: String) {
#if targetEnvironment(simulator) || DEBUG
logger.warning("\(message), for: \(id)")
#else
-#if os(tvOS) || os(macOS)
+#if !os(iOS)
Aptabase.shared.trackEvent(id, with: ["Message": message])
#else
if TelemetryManager.isInitialized {
@@ -49,7 +53,9 @@ struct CronicaTelemetry {
#endif
}
+#if os(iOS)
var isTelemetryDeckInitialized: String {
return TelemetryManager.isInitialized.description
}
+#endif
}
diff --git a/Shared/Store/SettingsStore.swift b/Shared/Store/SettingsStore.swift
index d6590e1c..7c41c240 100644
--- a/Shared/Store/SettingsStore.swift
+++ b/Shared/Store/SettingsStore.swift
@@ -31,9 +31,15 @@ class SettingsStore: ObservableObject {
@AppStorage("primaryRightSwipe") var primaryRightSwipe: SwipeGestureOptions = .delete
@AppStorage("secondaryRightSwipe") var secondaryRightSwipe: SwipeGestureOptions = .markArchive
@AppStorage("allowFullSwipe") var allowFullSwipe = false
+#if os(macOS)
+ @AppStorage("allowNotifications") var allowNotifications = false
+ @AppStorage("notifyMovies") var notifyMovieRelease = false
+ @AppStorage("notifyTVShows") var notifyNewEpisodes = false
+#else
@AppStorage("allowNotifications") var allowNotifications = true
@AppStorage("notifyMovies") var notifyMovieRelease = true
@AppStorage("notifyTVShows") var notifyNewEpisodes = true
+#endif
@AppStorage("userHasPurchasedTipJar") var hasPurchasedTipJar = false
#if os(tvOS)
@AppStorage("itemContentListDisplayType") var listsDisplayType: ItemContentListPreferredDisplayType = .card
@@ -76,7 +82,7 @@ class SettingsStore: ObservableObject {
@AppStorage("preferCoverOnUpNext") var preferCoverOnUpNext = false
@AppStorage("markUpNextWatchedOnTap") var markWatchedOnTapUpNext = false
@AppStorage("confirmationForMarkOnTapUpNext") var askForConfirmationUpNext = true
- #if os(macOS)
+#if os(macOS)
@AppStorage("showMenuBarApp") var showMenuBarApp = true
- #endif
+#endif
}
diff --git a/Shared/View/Settings/DeveloperView.swift b/Shared/View/Settings/DeveloperView.swift
index 84cfdd5d..0388a3ff 100644
--- a/Shared/View/Settings/DeveloperView.swift
+++ b/Shared/View/Settings/DeveloperView.swift
@@ -10,172 +10,174 @@ import CoreData
/// This view provides quick information and utilities to the developer.
struct DeveloperView: View {
- @State private var item: ItemContent?
- @State private var person: Person?
- @State private var itemIdField = ""
- @State private var itemMediaType: MediaType = .movie
- @State private var isFetching = false
- @State private var isFetchingAll = false
- @State private var userAccessId = String()
- @State private var userAccessToken = String()
- @State private var v3SessionID = String()
- private let persistence = PersistenceController.shared
- private let service = NetworkService.shared
- @State private var showOnboarding = false
- @AppStorage("launchCount") var launchCount: Int = 0
- @AppStorage("askedForReview") var askedForReview = false
- @State private var isUserSignedInWithTMDB = false
- var body: some View {
- Form {
- Section("Network") {
- TextField("ID", text: $itemIdField)
+ @State private var item: ItemContent?
+ @State private var person: Person?
+ @State private var itemIdField = ""
+ @State private var itemMediaType: MediaType = .movie
+ @State private var isFetching = false
+ @State private var isFetchingAll = false
+ @State private var userAccessId = String()
+ @State private var userAccessToken = String()
+ @State private var v3SessionID = String()
+ private let persistence = PersistenceController.shared
+ private let service = NetworkService.shared
+ @State private var showOnboarding = false
+ @AppStorage("launchCount") var launchCount: Int = 0
+ @AppStorage("askedForReview") var askedForReview = false
+ @State private var isUserSignedInWithTMDB = false
+ var body: some View {
+ Form {
+ Section("Network") {
+ TextField("ID", text: $itemIdField)
#if os(iOS)
- .keyboardType(.numberPad)
+ .keyboardType(.numberPad)
#endif
- Picker("Media Type", selection: $itemMediaType) {
- ForEach(MediaType.allCases) { media in
- Text(media.title).tag(media)
- }
- }
- Button {
- Task {
- if !itemIdField.isEmpty {
- await MainActor.run {
- withAnimation { isFetching = false }
- }
- if itemMediaType != .person {
- let item = try? await service.fetchItem(id: Int(itemIdField)!, type: itemMediaType)
- if let item {
- self.item = item
- }
- } else {
- let person = try? await service.fetchPerson(id: Int(itemIdField)!)
- guard let person else { return }
- self.person = person
- }
- }
- await MainActor.run {
- withAnimation { isFetching = false }
- }
- }
- } label: {
- if isFetching {
- CenterHorizontalView {
- ProgressView()
- }
- } else {
- Text("Fetch")
- }
- }
+ Picker("Media Type", selection: $itemMediaType) {
+ ForEach(MediaType.allCases) { media in
+ Text(media.title).tag(media)
+ }
+ }
+ Button {
+ Task {
+ if !itemIdField.isEmpty {
+ await MainActor.run {
+ withAnimation { isFetching = false }
+ }
+ if itemMediaType != .person {
+ let item = try? await service.fetchItem(id: Int(itemIdField)!, type: itemMediaType)
+ if let item {
+ self.item = item
+ }
+ } else {
+ let person = try? await service.fetchPerson(id: Int(itemIdField)!)
+ guard let person else { return }
+ self.person = person
+ }
+ }
+ await MainActor.run {
+ withAnimation { isFetching = false }
+ }
+ }
+ } label: {
+ if isFetching {
+ CenterHorizontalView {
+ ProgressView()
+ }
+ } else {
+ Text("Fetch")
+ }
+ }
#if os(macOS)
.buttonStyle(.link)
#endif
- }
-
- Section("Presentation") {
- Button("Show Onboarding") {
- showOnboarding.toggle()
- }
- .sheet(isPresented: $showOnboarding) {
- NavigationStack {
- WelcomeView()
- .interactiveDismissDisabled(false)
- }
+ }
+
+ Section("Presentation") {
+ Button("Show Onboarding") {
+ showOnboarding.toggle()
+ }
+ .sheet(isPresented: $showOnboarding) {
+ NavigationStack {
+ WelcomeView()
+ .interactiveDismissDisabled(false)
+ }
#if os(macOS)
- .frame(width: 500, height: 700, alignment: .center)
+ .frame(width: 500, height: 700, alignment: .center)
#endif
- }
+ }
#if os(macOS)
.buttonStyle(.link)
#endif
- }
-
- Section {
- Text("User Region: \(Locale.userRegion)")
- Text("User Lang: \(Locale.userLang)")
- Text("Is TelemetryDeck Initialized: \(CronicaTelemetry.shared.isTelemetryDeckInitialized)")
- Text("Last maintenance: \(BackgroundManager.shared.lastMaintenance?.convertDateToString() ?? "Nil")")
- Text("Last watching refresh: \(BackgroundManager.shared.lastWatchingRefresh?.convertDateToString() ?? "Nil")")
- Text("Last upcoming refresh: \(BackgroundManager.shared.lastUpcomingRefresh?.convertDateToString() ?? "Nil")")
- Text("Asked for review: \(askedForReview.description)")
- Text("Is User Signed In With TMDB: \(isUserSignedInWithTMDB.description)")
- Button("Reset asked for review") { askedForReview = false }
+ }
+
+ Section {
+ Text("User Region: \(Locale.userRegion)")
+ Text("User Lang: \(Locale.userLang)")
+#if os(iOS)
+ Text("Is TelemetryDeck Initialized: \(CronicaTelemetry.shared.isTelemetryDeckInitialized)")
+#endif
+ Text("Last maintenance: \(BackgroundManager.shared.lastMaintenance?.convertDateToString() ?? "Nil")")
+ Text("Last watching refresh: \(BackgroundManager.shared.lastWatchingRefresh?.convertDateToString() ?? "Nil")")
+ Text("Last upcoming refresh: \(BackgroundManager.shared.lastUpcomingRefresh?.convertDateToString() ?? "Nil")")
+ Text("Asked for review: \(askedForReview.description)")
+ Text("Is User Signed In With TMDB: \(isUserSignedInWithTMDB.description)")
+ Button("Reset asked for review") { askedForReview = false }
Button("Force SignOut") {
Task { await AccountManager.shared.logOut() }
}
- }
- .onAppear {
- let data = KeychainHelper.standard.read(service: "access-token", account: "cronicaTMDB-Sync")
- let IdData = KeychainHelper.standard.read(service: "access-id", account: "cronicaTMDB-Sync")
- let sessionID = KeychainHelper.standard.read(service: "session-id", account: "cronicaTMDB-Sync")
- if data != nil && IdData != nil && sessionID != nil {
- isUserSignedInWithTMDB = true
- }
- }
-
- }
- .navigationTitle("Developer Options")
- .sheet(item: $item) { item in
- NavigationStack {
- ItemContentDetails(title: item.itemTitle, id: item.id, type: item.itemContentMedia, handleToolbar: true)
- .toolbar {
+ }
+ .onAppear {
+ let data = KeychainHelper.standard.read(service: "access-token", account: "cronicaTMDB-Sync")
+ let IdData = KeychainHelper.standard.read(service: "access-id", account: "cronicaTMDB-Sync")
+ let sessionID = KeychainHelper.standard.read(service: "session-id", account: "cronicaTMDB-Sync")
+ if data != nil && IdData != nil && sessionID != nil {
+ isUserSignedInWithTMDB = true
+ }
+ }
+
+ }
+ .navigationTitle("Developer Options")
+ .sheet(item: $item) { item in
+ NavigationStack {
+ ItemContentDetails(title: item.itemTitle, id: item.id, type: item.itemContentMedia, handleToolbar: true)
+ .toolbar {
#if os(iOS)
- ToolbarItem(placement: .navigationBarLeading) {
- HStack {
- Button("Done") {
- self.item = nil
- }
- Menu {
- Button {
- let watchlist = PersistenceController.shared.fetch(for: item.itemContentID)
- if let watchlist {
- CronicaTelemetry.shared.handleMessage("WatchlistItem: \(watchlist as Any)",
- for: "DeveloperView.printObject")
- }
- CronicaTelemetry.shared.handleMessage("ItemContent: \(item as Any)",
- for: "DeveloperView.printObject")
- } label: {
- Label("Send Object to Developer", systemImage: "hammer.circle.fill")
- }
- } label: {
- Image(systemName: "hammer")
- }
- }
- }
+ ToolbarItem(placement: .navigationBarLeading) {
+ HStack {
+ Button("Done") {
+ self.item = nil
+ }
+ Menu {
+ Button {
+ let watchlist = PersistenceController.shared.fetch(for: item.itemContentID)
+ if let watchlist {
+ CronicaTelemetry.shared.handleMessage("WatchlistItem: \(watchlist as Any)",
+ for: "DeveloperView.printObject")
+ }
+ CronicaTelemetry.shared.handleMessage("ItemContent: \(item as Any)",
+ for: "DeveloperView.printObject")
+ } label: {
+ Label("Send Object to Developer", systemImage: "hammer.circle.fill")
+ }
+ } label: {
+ Image(systemName: "hammer")
+ }
+ }
+ }
#else
- Button("Done") { self.item = nil }
+ Button("Done") { self.item = nil }
#endif
- }
- .navigationDestination(for: ItemContent.self) { item in
- ItemContentDetails(title: item.itemTitle, id: item.id, type: item.itemContentMedia)
- }
- .navigationDestination(for: Person.self) { item in
+ }
+ .navigationDestination(for: ItemContent.self) { item in
+ ItemContentDetails(title: item.itemTitle, id: item.id, type: item.itemContentMedia)
+ }
+ .navigationDestination(for: Person.self) { item in
PersonDetailsView(name: item.name, id: item.id)
- }
- }
- }
- .sheet(item: $person) { item in
- NavigationStack {
+ }
+ }
+ }
+ .sheet(item: $person) { item in
+ NavigationStack {
PersonDetailsView(name: item.name, id: item.id)
- .toolbar {
- ToolbarItem {
- Button("Done") {
- self.person = nil
- }
- }
- }
- .navigationDestination(for: ItemContent.self) { item in
- ItemContentDetails(title: item.itemTitle, id: item.id, type: item.itemContentMedia)
- }
- .navigationDestination(for: Person.self) { item in
+ .toolbar {
+ ToolbarItem {
+ Button("Done") {
+ self.person = nil
+ }
+ }
+ }
+ .navigationDestination(for: ItemContent.self) { item in
+ ItemContentDetails(title: item.itemTitle, id: item.id, type: item.itemContentMedia)
+ }
+ .navigationDestination(for: Person.self) { item in
PersonDetailsView(name: item.name, id: item.id)
- }
- }
- }
+ }
+ }
+ }
#if os(macOS)
- .formStyle(.grouped)
+ .formStyle(.grouped)
#endif
- }
+ }
}
#Preview {
diff --git a/Shared/View/Settings/NotificationsSettingsView.swift b/Shared/View/Settings/NotificationsSettingsView.swift
index 916facd5..ee34af81 100644
--- a/Shared/View/Settings/NotificationsSettingsView.swift
+++ b/Shared/View/Settings/NotificationsSettingsView.swift
@@ -15,13 +15,13 @@ struct NotificationsSettingsView: View {
Section {
Toggle("allowNotification", isOn: $settings.allowNotifications)
Toggle(isOn: $settings.notifyMovieRelease) {
- Text("movieNotificationTitle")
- Text("movieNotificationSubtitle")
+ Text("movieNotificationTitle")
+ Text("movieNotificationSubtitle")
}
.disabled(!settings.allowNotifications)
Toggle(isOn: $settings.notifyNewEpisodes) {
- Text("episodeNotificationTitle")
- Text("episodeNotificationSubtitle")
+ Text("episodeNotificationTitle")
+ Text("episodeNotificationSubtitle")
}
.disabled(!settings.allowNotifications)
@@ -32,18 +32,17 @@ struct NotificationsSettingsView: View {
settings.notifyNewEpisodes = false
}
}
-
+#if os(iOS)
Button("openNotificationInSettings") {
Task {
-#if os(iOS)
// Create the URL that deep links to your app's notification settings.
if let url = URL(string: UIApplication.openNotificationSettingsURLString) {
// Ask the system to open that URL.
await UIApplication.shared.open(url)
}
-#endif
}
}
+#endif
}
.navigationTitle(NSLocalizedString(navigationTitle, comment: ""))
#if os(macOS)
diff --git a/Shared/View/Settings/SettingsView.swift b/Shared/View/Settings/SettingsView.swift
index 8f03ee31..580a9c2b 100644
--- a/Shared/View/Settings/SettingsView.swift
+++ b/Shared/View/Settings/SettingsView.swift
@@ -104,6 +104,9 @@ struct SettingsView: View {
SyncSetting()
.tabItem { Label("settingsSyncTitle", systemImage: "arrow.triangle.2.circlepath") }
+ NotificationsSettingsView()
+ .tabItem { Label("settingsNotificationTitle", systemImage: "bell") }
+
RegionContentSettings()
.tabItem { Label("settingsRegionContentTitle", systemImage: "globe") }
diff --git a/Story.xcodeproj/project.pbxproj b/Story.xcodeproj/project.pbxproj
index 453852cb..8a928ed8 100644
--- a/Story.xcodeproj/project.pbxproj
+++ b/Story.xcodeproj/project.pbxproj
@@ -204,7 +204,7 @@
B87D1B252A65D78900EB6D14 /* UpNextViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B87D1B232A65CF6000EB6D14 /* UpNextViewModel.swift */; };
B87D1B272A65E63700EB6D14 /* UpNextListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B87D1B262A65E63700EB6D14 /* UpNextListView.swift */; };
B87D1B292A66128000EB6D14 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B87D1B282A66128000EB6D14 /* SettingsView.swift */; };
- B87F745E280605CE00E94126 /* TelemetryClient in Frameworks */ = {isa = PBXBuildFile; productRef = B87F745D280605CE00E94126 /* TelemetryClient */; };
+ B87F745E280605CE00E94126 /* TelemetryClient in Frameworks */ = {isa = PBXBuildFile; platformFilter = ios; productRef = B87F745D280605CE00E94126 /* TelemetryClient */; };
B87F746328064D3800E94126 /* BackgroundManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B87F746228064D3800E94126 /* BackgroundManager.swift */; };
B87F74642806592E00E94126 /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B8B271A327A59EF400F6463F /* CloudKit.framework */; };
B883A1DE2AEEA49E00793EE2 /* EditCustomListItemSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = B883A1DD2AEEA49E00793EE2 /* EditCustomListItemSelector.swift */; };
@@ -313,7 +313,7 @@
B8D7AEA928B95F5E0053CE5A /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B8AD4431284AD42300778275 /* SwiftUI.framework */; };
B8D7AEAC28B95F5E0053CE5A /* CronicaWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D7AEAB28B95F5E0053CE5A /* CronicaWidget.swift */; };
B8D7AEAE28B95F5F0053CE5A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B8D7AEAD28B95F5F0053CE5A /* Assets.xcassets */; };
- B8D7AEB228B95F5F0053CE5A /* CronicaWidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = B8D7AEA728B95F5D0053CE5A /* CronicaWidgetExtension.appex */; platformFilter = ios; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ B8D7AEB228B95F5F0053CE5A /* CronicaWidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = B8D7AEA728B95F5D0053CE5A /* CronicaWidgetExtension.appex */; platformFilters = (ios, macos, ); settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
B8D7AEBA28B95FB20053CE5A /* Key.swift in Sources */ = {isa = PBXBuildFile; fileRef = B86E587827A48E5A005DBF38 /* Key.swift */; };
B8D7AEBB28B95FC60053CE5A /* ItemContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D7AEB828B95F840053CE5A /* ItemContent.swift */; };
B8D7AEBC28B960420053CE5A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B8CC954D27D1310B00B6757C /* Localizable.strings */; };
@@ -327,12 +327,14 @@
B8D7AEC928B961AD0053CE5A /* ReleaseDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D7AEC728B961A20053CE5A /* ReleaseDate.swift */; };
B8D7AECA28B961AE0053CE5A /* ReleaseDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D7AEC728B961A20053CE5A /* ReleaseDate.swift */; };
B8D7AECF28B962660053CE5A /* Person.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D7AECD28B962490053CE5A /* Person.swift */; };
- B8D7AEDC28B967180053CE5A /* TelemetryClient in Frameworks */ = {isa = PBXBuildFile; productRef = B8D7AEDB28B967180053CE5A /* TelemetryClient */; };
+ B8D7AEDC28B967180053CE5A /* TelemetryClient in Frameworks */ = {isa = PBXBuildFile; platformFilter = ios; productRef = B8D7AEDB28B967180053CE5A /* TelemetryClient */; };
B8D7AEE328BA64DF0053CE5A /* DataPlaceholder.json in Resources */ = {isa = PBXBuildFile; fileRef = B8D7AEE228BA64DF0053CE5A /* DataPlaceholder.json */; };
B8D7AEE428BA64F40053CE5A /* Bundle-Decodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B82C268E279644E000259D98 /* Bundle-Decodable.swift */; };
B8D8AF8F27D4D0550042AEB6 /* AttributionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D8AF8E27D4D0550042AEB6 /* AttributionView.swift */; };
B8D8AF9227D4DB720042AEB6 /* SearchViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D8AF9127D4DB720042AEB6 /* SearchViewModel.swift */; };
B8DA5CC62B0E432200678592 /* UpNextMenuBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8DA5CC52B0E432200678592 /* UpNextMenuBar.swift */; };
+ B8DA5CC82B0E496600678592 /* Aptabase in Frameworks */ = {isa = PBXBuildFile; productRef = B8DA5CC72B0E496600678592 /* Aptabase */; };
+ B8DA5CCA2B0E5DC800678592 /* Aptabase in Frameworks */ = {isa = PBXBuildFile; platformFilters = (macos, ); productRef = B8DA5CC92B0E5DC800678592 /* Aptabase */; };
B8DD56A1290DE2FD002CAAFD /* CenterHorizontalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8DD569F290DE2D7002CAAFD /* CenterHorizontalView.swift */; };
B8DD56A2290DE2FE002CAAFD /* CenterHorizontalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8DD569F290DE2D7002CAAFD /* CenterHorizontalView.swift */; };
B8E3ABF62955361C00CA0945 /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B8E3ABF52955361C00CA0945 /* CloudKit.framework */; };
@@ -713,6 +715,7 @@
buildActionMask = 2147483647;
files = (
B8E3ABF62955361C00CA0945 /* CloudKit.framework in Frameworks */,
+ B8DA5CC82B0E496600678592 /* Aptabase in Frameworks */,
B84043DD289B360B00D5CEBF /* SDWebImageSwiftUI in Frameworks */,
B8C0C67F28A92FF0009F4593 /* TelemetryClient in Frameworks */,
);
@@ -735,6 +738,7 @@
buildActionMask = 2147483647;
files = (
B8D7AEDC28B967180053CE5A /* TelemetryClient in Frameworks */,
+ B8DA5CCA2B0E5DC800678592 /* Aptabase in Frameworks */,
B8D7AEA928B95F5E0053CE5A /* SwiftUI.framework in Frameworks */,
B8D7AEA828B95F5E0053CE5A /* WidgetKit.framework in Frameworks */,
);
@@ -1491,6 +1495,7 @@
packageProductDependencies = (
B84043DC289B360B00D5CEBF /* SDWebImageSwiftUI */,
B8C0C67E28A92FF0009F4593 /* TelemetryClient */,
+ B8DA5CC72B0E496600678592 /* Aptabase */,
);
productName = "CronicaWatch Watch App";
productReference = B806C4DE2899BE2800A5330E /* Cronica.app */;
@@ -1538,6 +1543,7 @@
name = CronicaWidgetExtension;
packageProductDependencies = (
B8D7AEDB28B967180053CE5A /* TelemetryClient */,
+ B8DA5CC92B0E5DC800678592 /* Aptabase */,
);
productName = CronicaWidgetExtension;
productReference = B8D7AEA728B95F5D0053CE5A /* CronicaWidgetExtension.appex */;
@@ -2049,7 +2055,10 @@
};
B8D7AEB128B95F5F0053CE5A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- platformFilter = ios;
+ platformFilters = (
+ ios,
+ macos,
+ );
target = B8D7AEA628B95F5D0053CE5A /* CronicaWidgetExtension */;
targetProxy = B8D7AEB028B95F5F0053CE5A /* PBXContainerItemProxy */;
};
@@ -2447,7 +2456,7 @@
CODE_SIGN_ENTITLEMENTS = CronicaWidget/Configuration/CronicaWidgetExtension.entitlements;
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
+ CURRENT_PROJECT_VERSION = 260;
DEVELOPMENT_TEAM = 2NF329R2JB;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = CronicaWidget/Configuration/Info.plist;
@@ -2482,7 +2491,7 @@
CODE_SIGN_ENTITLEMENTS = CronicaWidget/Configuration/CronicaWidgetExtension.entitlements;
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
+ CURRENT_PROJECT_VERSION = 260;
DEVELOPMENT_TEAM = 2NF329R2JB;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = CronicaWidget/Configuration/Info.plist;
@@ -2671,6 +2680,16 @@
package = B87F745C280605CE00E94126 /* XCRemoteSwiftPackageReference "SwiftClient" */;
productName = TelemetryClient;
};
+ B8DA5CC72B0E496600678592 /* Aptabase */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = B8F367622AF5CA900027CAF9 /* XCRemoteSwiftPackageReference "aptabase-swift" */;
+ productName = Aptabase;
+ };
+ B8DA5CC92B0E5DC800678592 /* Aptabase */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = B8F367622AF5CA900027CAF9 /* XCRemoteSwiftPackageReference "aptabase-swift" */;
+ productName = Aptabase;
+ };
B8F367632AF5CAAA0027CAF9 /* Aptabase */ = {
isa = XCSwiftPackageProductDependency;
package = B8F367622AF5CA900027CAF9 /* XCRemoteSwiftPackageReference "aptabase-swift" */;