Commit 3e305001 by Demid Merzlyakov

[WIP] IOS-155: FeatureAvailability: replace standalone Premium and…

[WIP] IOS-155: FeatureAvailability: replace standalone Premium and ProSubscription checkers with a universal Closure checker. Add StoreManager initial implementation (WIP)
parent baa6d846
...@@ -220,7 +220,6 @@ ...@@ -220,7 +220,6 @@
CE13B81B262480B3007CBD4D /* AdView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B802262480B3007CBD4D /* AdView.swift */; }; CE13B81B262480B3007CBD4D /* AdView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B802262480B3007CBD4D /* AdView.swift */; };
CE13B81C262480B3007CBD4D /* Interstitial.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B803262480B3007CBD4D /* Interstitial.swift */; }; CE13B81C262480B3007CBD4D /* Interstitial.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B803262480B3007CBD4D /* Interstitial.swift */; };
CE13B81D262480B3007CBD4D /* BRMoPubAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = CE13B804262480B3007CBD4D /* BRMoPubAdView.m */; }; CE13B81D262480B3007CBD4D /* BRMoPubAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = CE13B804262480B3007CBD4D /* BRMoPubAdView.m */; };
CE13B81E262480B3007CBD4D /* AdCacheManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B805262480B3007CBD4D /* AdCacheManager.swift */; };
CE13B821262480B3007CBD4D /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B809262480B3007CBD4D /* Scheduler.swift */; }; CE13B821262480B3007CBD4D /* Scheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE13B809262480B3007CBD4D /* Scheduler.swift */; };
CE13B88E26248A77007CBD4D /* GoogleService-Info-Production.plist in Resources */ = {isa = PBXBuildFile; fileRef = CE13B88C26248A77007CBD4D /* GoogleService-Info-Production.plist */; }; CE13B88E26248A77007CBD4D /* GoogleService-Info-Production.plist in Resources */ = {isa = PBXBuildFile; fileRef = CE13B88C26248A77007CBD4D /* GoogleService-Info-Production.plist */; };
CE13B88F26248A77007CBD4D /* GoogleService-Info-Staging.plist in Resources */ = {isa = PBXBuildFile; fileRef = CE13B88D26248A77007CBD4D /* GoogleService-Info-Staging.plist */; }; CE13B88F26248A77007CBD4D /* GoogleService-Info-Staging.plist in Resources */ = {isa = PBXBuildFile; fileRef = CE13B88D26248A77007CBD4D /* GoogleService-Info-Staging.plist */; };
...@@ -230,6 +229,7 @@ ...@@ -230,6 +229,7 @@
CE30E37F2668FBE3006DF5CD /* OneWeatherAnalytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE30E37E2668FBE3006DF5CD /* OneWeatherAnalytics.framework */; }; CE30E37F2668FBE3006DF5CD /* OneWeatherAnalytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE30E37E2668FBE3006DF5CD /* OneWeatherAnalytics.framework */; };
CE30E3802668FBE3006DF5CD /* OneWeatherAnalytics.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CE30E37E2668FBE3006DF5CD /* OneWeatherAnalytics.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; CE30E3802668FBE3006DF5CD /* OneWeatherAnalytics.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CE30E37E2668FBE3006DF5CD /* OneWeatherAnalytics.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
CE376C98261EE484000B1159 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CE376C97261EE484000B1159 /* LaunchScreen.storyboard */; }; CE376C98261EE484000B1159 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CE376C97261EE484000B1159 /* LaunchScreen.storyboard */; };
CE3A9CE326E64F2800E2CB4B /* StoreManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE3A9CE226E64F2800E2CB4B /* StoreManager.swift */; };
CE578FE525FB415F00E8B85D /* CityCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FE225FB415F00E8B85D /* CityCell.swift */; }; CE578FE525FB415F00E8B85D /* CityCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FE225FB415F00E8B85D /* CityCell.swift */; };
CE578FE625FB415F00E8B85D /* LocationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FE325FB415F00E8B85D /* LocationViewController.swift */; }; CE578FE625FB415F00E8B85D /* LocationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FE325FB415F00E8B85D /* LocationViewController.swift */; };
CE578FE725FB415F00E8B85D /* LocationsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FE425FB415F00E8B85D /* LocationsViewModel.swift */; }; CE578FE725FB415F00E8B85D /* LocationsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE578FE425FB415F00E8B85D /* LocationsViewModel.swift */; };
...@@ -522,7 +522,6 @@ ...@@ -522,7 +522,6 @@
CE13B802262480B3007CBD4D /* AdView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdView.swift; sourceTree = "<group>"; }; CE13B802262480B3007CBD4D /* AdView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdView.swift; sourceTree = "<group>"; };
CE13B803262480B3007CBD4D /* Interstitial.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Interstitial.swift; sourceTree = "<group>"; }; CE13B803262480B3007CBD4D /* Interstitial.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Interstitial.swift; sourceTree = "<group>"; };
CE13B804262480B3007CBD4D /* BRMoPubAdView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BRMoPubAdView.m; sourceTree = "<group>"; }; CE13B804262480B3007CBD4D /* BRMoPubAdView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BRMoPubAdView.m; sourceTree = "<group>"; };
CE13B805262480B3007CBD4D /* AdCacheManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdCacheManager.swift; sourceTree = "<group>"; };
CE13B809262480B3007CBD4D /* Scheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scheduler.swift; sourceTree = "<group>"; }; CE13B809262480B3007CBD4D /* Scheduler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scheduler.swift; sourceTree = "<group>"; };
CE13B88C26248A77007CBD4D /* GoogleService-Info-Production.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info-Production.plist"; sourceTree = "<group>"; }; CE13B88C26248A77007CBD4D /* GoogleService-Info-Production.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info-Production.plist"; sourceTree = "<group>"; };
CE13B88D26248A77007CBD4D /* GoogleService-Info-Staging.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info-Staging.plist"; sourceTree = "<group>"; }; CE13B88D26248A77007CBD4D /* GoogleService-Info-Staging.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info-Staging.plist"; sourceTree = "<group>"; };
...@@ -531,6 +530,7 @@ ...@@ -531,6 +530,7 @@
CE30E37E2668FBE3006DF5CD /* OneWeatherAnalytics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = OneWeatherAnalytics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; CE30E37E2668FBE3006DF5CD /* OneWeatherAnalytics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = OneWeatherAnalytics.framework; sourceTree = BUILT_PRODUCTS_DIR; };
CE35F60E2681FA27008D507E /* OneWeatherWidgetExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = OneWeatherWidgetExtension.entitlements; sourceTree = "<group>"; }; CE35F60E2681FA27008D507E /* OneWeatherWidgetExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = OneWeatherWidgetExtension.entitlements; sourceTree = "<group>"; };
CE376C97261EE484000B1159 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; }; CE376C97261EE484000B1159 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
CE3A9CE226E64F2800E2CB4B /* StoreManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreManager.swift; sourceTree = "<group>"; };
CE578FE225FB415F00E8B85D /* CityCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CityCell.swift; sourceTree = "<group>"; }; CE578FE225FB415F00E8B85D /* CityCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CityCell.swift; sourceTree = "<group>"; };
CE578FE325FB415F00E8B85D /* LocationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocationViewController.swift; sourceTree = "<group>"; }; CE578FE325FB415F00E8B85D /* LocationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocationViewController.swift; sourceTree = "<group>"; };
CE578FE425FB415F00E8B85D /* LocationsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocationsViewModel.swift; sourceTree = "<group>"; }; CE578FE425FB415F00E8B85D /* LocationsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocationsViewModel.swift; sourceTree = "<group>"; };
...@@ -1320,7 +1320,6 @@ ...@@ -1320,7 +1320,6 @@
CE13B802262480B3007CBD4D /* AdView.swift */, CE13B802262480B3007CBD4D /* AdView.swift */,
CE13B803262480B3007CBD4D /* Interstitial.swift */, CE13B803262480B3007CBD4D /* Interstitial.swift */,
CE13B804262480B3007CBD4D /* BRMoPubAdView.m */, CE13B804262480B3007CBD4D /* BRMoPubAdView.m */,
CE13B805262480B3007CBD4D /* AdCacheManager.swift */,
CE13B806262480B3007CBD4D /* Helpers */, CE13B806262480B3007CBD4D /* Helpers */,
); );
path = Ads; path = Ads;
...@@ -1457,6 +1456,7 @@ ...@@ -1457,6 +1456,7 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
CEC7D8ED2639FE2700B8836D /* OLInAppStoreManager.swift */, CEC7D8ED2639FE2700B8836D /* OLInAppStoreManager.swift */,
CE3A9CE226E64F2800E2CB4B /* StoreManager.swift */,
); );
path = InApps; path = InApps;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -1952,6 +1952,7 @@ ...@@ -1952,6 +1952,7 @@
CD85796D2671FCF700CC4CDA /* ShortsItemCell.swift in Sources */, CD85796D2671FCF700CC4CDA /* ShortsItemCell.swift in Sources */,
CE578FE725FB415F00E8B85D /* LocationsViewModel.swift in Sources */, CE578FE725FB415F00E8B85D /* LocationsViewModel.swift in Sources */,
CD82300A25D6B2AF00A05501 /* AppTabBarController.swift in Sources */, CD82300A25D6B2AF00A05501 /* AppTabBarController.swift in Sources */,
CE3A9CE326E64F2800E2CB4B /* StoreManager.swift in Sources */,
CD85797126721D9800CC4CDA /* UIViewController+Alert.swift in Sources */, CD85797126721D9800CC4CDA /* UIViewController+Alert.swift in Sources */,
CDC6126225E8DAB800188DA7 /* MoonPhaseCell.swift in Sources */, CDC6126225E8DAB800188DA7 /* MoonPhaseCell.swift in Sources */,
CD37D3D6260C93B3002669D6 /* MenuCellFactory.swift in Sources */, CD37D3D6260C93B3002669D6 /* MenuCellFactory.swift in Sources */,
...@@ -2013,7 +2014,6 @@ ...@@ -2013,7 +2014,6 @@
CE578FE625FB415F00E8B85D /* LocationViewController.swift in Sources */, CE578FE625FB415F00E8B85D /* LocationViewController.swift in Sources */,
CD86246525E66E8A0097F3FB /* PrecipitationCell.swift in Sources */, CD86246525E66E8A0097F3FB /* PrecipitationCell.swift in Sources */,
CE13B821262480B3007CBD4D /* Scheduler.swift in Sources */, CE13B821262480B3007CBD4D /* Scheduler.swift in Sources */,
CE13B81E262480B3007CBD4D /* AdCacheManager.swift in Sources */,
CEBAC1C82638240800A89681 /* DeeplinksRouter.swift in Sources */, CEBAC1C82638240800A89681 /* DeeplinksRouter.swift in Sources */,
CD3F6E6925FA59D4002DB99B /* ForecastDetailPeriodButton.swift in Sources */, CD3F6E6925FA59D4002DB99B /* ForecastDetailPeriodButton.swift in Sources */,
CD37D405260DFFDD002669D6 /* CellFactory.swift in Sources */, CD37D405260DFFDD002669D6 /* CellFactory.swift in Sources */,
......
...@@ -33,6 +33,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { ...@@ -33,6 +33,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
private let appsFlyerLog = Logger(componentName: "AppsFlyer") private let appsFlyerLog = Logger(componentName: "AppsFlyer")
private let log = Logger(componentName: "AppDelegate") private let log = Logger(componentName: "AppDelegate")
private let settings = Settings.shared private let settings = Settings.shared
private let storeManager = StoreManager.shared
private enum FirstOpenSource: String { private enum FirstOpenSource: String {
case icon = "Icon" case icon = "Icon"
...@@ -45,6 +46,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { ...@@ -45,6 +46,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
settings.delegate.add(delegate: self) settings.delegate.add(delegate: self)
ThemeManager.refreshAppearance() ThemeManager.refreshAppearance()
UserDefaults.migrateUserDefaultsToAppGroupsIfNeeded() UserDefaults.migrateUserDefaultsToAppGroupsIfNeeded()
storeManager.completeTransactions()
if let launchOptions = launchOptions { if let launchOptions = launchOptions {
log.debug("Launch options: \(launchOptions)") log.debug("Launch options: \(launchOptions)")
...@@ -196,8 +199,18 @@ class AppDelegate: UIResponder, UIApplicationDelegate { ...@@ -196,8 +199,18 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
let usOnly = USOnlyFeatureAvailabilityChecker { [weak locationManager] in let usOnly = USOnlyFeatureAvailabilityChecker { [weak locationManager] in
return locationManager?.selectedLocation return locationManager?.selectedLocation
} }
let premium = PremiumInAppFeatureAvailabilityChecker() let premium = ClosureFeatureAvailabilityChecker { [weak self] in
let proSubscription = ProSubscriptionAvailabilityChecker() guard let storeManager = self?.storeManager else {
return false
}
return storeManager.removeAdsPurchased
}
let proSubscription = ClosureFeatureAvailabilityChecker { [weak self] in
guard let storeManager = self?.storeManager else {
return false
}
return storeManager.hasSubscription
}
let isPhone = DeviceTypeFeatureAvailabilityChecker(deviceType: .phone) let isPhone = DeviceTypeFeatureAvailabilityChecker(deviceType: .phone)
var availabilityCheckers = [AppFeature: FeatureAvailabilityChecker]() var availabilityCheckers = [AppFeature: FeatureAvailabilityChecker]()
......
//
// StoreManager.swift
// 1Weather
//
// Created by Demid Merzlyakov on 06.09.2021.
//
import Foundation
import OneWeatherCore
import SwiftyStoreKit
public protocol StoreManagerSubscriber {
func storeManagerUpdatedStatus(_ storeManager: StoreManager)
}
public class StoreManager {
private let subscribers = MulticastDelegate<StoreManagerSubscriber>()
public static let shared = StoreManager()
// MARK: - Get known status
@UserDefaultsValue("com.inmobi.oneweather.WeatherKey", defaultValue: false, userDefaults: UserDefaults.appDefaults)
public var removeAdsPurchased: Bool
public var hasSubscription: Bool {
#warning("Not implemented!")
//TODO: Implement!
#if DEBUG
//TODO: REMOVE THIS'
return false
#warning("THIS IS A DEBUG-ONLY PIECE OF CODE! Not even temporary! Remove before making a production build.")
#else
#error("THIS IS A DEBUG-ONLY PIECE OF CODE! Not even temporary! Remove before making a production build.")
#endif
}
// MARK: - Actions
public func completeTransactions() {
// This SHOULD ONLY BE CALLED ONCE, in the AppDelegate
SwiftyStoreKit.completeTransactions(atomically: true) { purchases in
for purchase in purchases {
switch purchase.transaction.transactionState {
case .purchased, .restored:
if purchase.needsFinishTransaction {
// Deliver content from server, then:
SwiftyStoreKit.finishTransaction(purchase.transaction)
}
// Unlock content
case .failed, .purchasing, .deferred:
break // do nothing
@unknown default:
break
}
}
}
}
public func purchase(subscription: SubscriptionConfig) {
}
public func updatePurchaseState() {
}
//MARK: - Subscribers management
public func add(subscriber: StoreManagerSubscriber) {
subscribers.add(delegate: subscriber)
}
public func remove(subscriber: StoreManagerSubscriber) {
subscribers.remove(delegate: subscriber)
}
}
...@@ -88,9 +88,8 @@ ...@@ -88,9 +88,8 @@
CE72A76626D6299300F13CF7 /* AdPlacement.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE72A76526D6299300F13CF7 /* AdPlacement.swift */; }; CE72A76626D6299300F13CF7 /* AdPlacement.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE72A76526D6299300F13CF7 /* AdPlacement.swift */; };
CE72A76826D6728800F13CF7 /* FeatureAvailabilityCheckerHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE72A76726D6728800F13CF7 /* FeatureAvailabilityCheckerHelpers.swift */; }; CE72A76826D6728800F13CF7 /* FeatureAvailabilityCheckerHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE72A76726D6728800F13CF7 /* FeatureAvailabilityCheckerHelpers.swift */; };
CE72A76A26D676A000F13CF7 /* USOnlyFeatureAvailabilityChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE72A76926D676A000F13CF7 /* USOnlyFeatureAvailabilityChecker.swift */; }; CE72A76A26D676A000F13CF7 /* USOnlyFeatureAvailabilityChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE72A76926D676A000F13CF7 /* USOnlyFeatureAvailabilityChecker.swift */; };
CE72A76C26D6782F00F13CF7 /* PremiumInAppFeatureAvailabilityChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE72A76B26D6782F00F13CF7 /* PremiumInAppFeatureAvailabilityChecker.swift */; };
CE72A76E26D680DF00F13CF7 /* ProSubscriptionAvailabilityChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE72A76D26D680DF00F13CF7 /* ProSubscriptionAvailabilityChecker.swift */; };
CE72A77026D6917300F13CF7 /* DeviceTypeFeatureAvailabilityChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE72A76F26D6917300F13CF7 /* DeviceTypeFeatureAvailabilityChecker.swift */; }; CE72A77026D6917300F13CF7 /* DeviceTypeFeatureAvailabilityChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE72A76F26D6917300F13CF7 /* DeviceTypeFeatureAvailabilityChecker.swift */; };
CEC363AD26E93EE1009F2607 /* ClosureFeatureAvailabilityChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC363AC26E93EE1009F2607 /* ClosureFeatureAvailabilityChecker.swift */; };
CEFE851826948C15003C67D3 /* SmartTextProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE851726948C15003C67D3 /* SmartTextProvider.swift */; }; CEFE851826948C15003C67D3 /* SmartTextProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE851726948C15003C67D3 /* SmartTextProvider.swift */; };
CEFE851C2694986D003C67D3 /* SmartText.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE851B2694986D003C67D3 /* SmartText.swift */; }; CEFE851C2694986D003C67D3 /* SmartText.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE851B2694986D003C67D3 /* SmartText.swift */; };
CEFE85202694C4BC003C67D3 /* DefaultSmartText.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE851F2694C4BC003C67D3 /* DefaultSmartText.swift */; }; CEFE85202694C4BC003C67D3 /* DefaultSmartText.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE851F2694C4BC003C67D3 /* DefaultSmartText.swift */; };
...@@ -201,9 +200,8 @@ ...@@ -201,9 +200,8 @@
CE72A76526D6299300F13CF7 /* AdPlacement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdPlacement.swift; sourceTree = "<group>"; }; CE72A76526D6299300F13CF7 /* AdPlacement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdPlacement.swift; sourceTree = "<group>"; };
CE72A76726D6728800F13CF7 /* FeatureAvailabilityCheckerHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureAvailabilityCheckerHelpers.swift; sourceTree = "<group>"; }; CE72A76726D6728800F13CF7 /* FeatureAvailabilityCheckerHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureAvailabilityCheckerHelpers.swift; sourceTree = "<group>"; };
CE72A76926D676A000F13CF7 /* USOnlyFeatureAvailabilityChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = USOnlyFeatureAvailabilityChecker.swift; sourceTree = "<group>"; }; CE72A76926D676A000F13CF7 /* USOnlyFeatureAvailabilityChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = USOnlyFeatureAvailabilityChecker.swift; sourceTree = "<group>"; };
CE72A76B26D6782F00F13CF7 /* PremiumInAppFeatureAvailabilityChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PremiumInAppFeatureAvailabilityChecker.swift; sourceTree = "<group>"; };
CE72A76D26D680DF00F13CF7 /* ProSubscriptionAvailabilityChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProSubscriptionAvailabilityChecker.swift; sourceTree = "<group>"; };
CE72A76F26D6917300F13CF7 /* DeviceTypeFeatureAvailabilityChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceTypeFeatureAvailabilityChecker.swift; sourceTree = "<group>"; }; CE72A76F26D6917300F13CF7 /* DeviceTypeFeatureAvailabilityChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceTypeFeatureAvailabilityChecker.swift; sourceTree = "<group>"; };
CEC363AC26E93EE1009F2607 /* ClosureFeatureAvailabilityChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClosureFeatureAvailabilityChecker.swift; sourceTree = "<group>"; };
CEFE851726948C15003C67D3 /* SmartTextProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmartTextProvider.swift; sourceTree = "<group>"; }; CEFE851726948C15003C67D3 /* SmartTextProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmartTextProvider.swift; sourceTree = "<group>"; };
CEFE851B2694986D003C67D3 /* SmartText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmartText.swift; sourceTree = "<group>"; }; CEFE851B2694986D003C67D3 /* SmartText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmartText.swift; sourceTree = "<group>"; };
CEFE851D2694C477003C67D3 /* SmartTextMacro.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmartTextMacro.swift; sourceTree = "<group>"; }; CEFE851D2694C477003C67D3 /* SmartTextMacro.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmartTextMacro.swift; sourceTree = "<group>"; };
...@@ -513,9 +511,8 @@ ...@@ -513,9 +511,8 @@
CE72A75826D516BF00F13CF7 /* FeatureAvailabilityChecker.swift */, CE72A75826D516BF00F13CF7 /* FeatureAvailabilityChecker.swift */,
CE72A76726D6728800F13CF7 /* FeatureAvailabilityCheckerHelpers.swift */, CE72A76726D6728800F13CF7 /* FeatureAvailabilityCheckerHelpers.swift */,
CE72A76926D676A000F13CF7 /* USOnlyFeatureAvailabilityChecker.swift */, CE72A76926D676A000F13CF7 /* USOnlyFeatureAvailabilityChecker.swift */,
CE72A76B26D6782F00F13CF7 /* PremiumInAppFeatureAvailabilityChecker.swift */,
CE72A76D26D680DF00F13CF7 /* ProSubscriptionAvailabilityChecker.swift */,
CE72A76F26D6917300F13CF7 /* DeviceTypeFeatureAvailabilityChecker.swift */, CE72A76F26D6917300F13CF7 /* DeviceTypeFeatureAvailabilityChecker.swift */,
CEC363AC26E93EE1009F2607 /* ClosureFeatureAvailabilityChecker.swift */,
); );
path = FeatureAvailabilityCheckers; path = FeatureAvailabilityCheckers;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -741,7 +738,6 @@ ...@@ -741,7 +738,6 @@
CD91685A26552FD000EC04EF /* DefaultSettingsImperial.swift in Sources */, CD91685A26552FD000EC04EF /* DefaultSettingsImperial.swift in Sources */,
CE72A75F26D627E300F13CF7 /* AppConfig.swift in Sources */, CE72A75F26D627E300F13CF7 /* AppConfig.swift in Sources */,
CE72A76A26D676A000F13CF7 /* USOnlyFeatureAvailabilityChecker.swift in Sources */, CE72A76A26D676A000F13CF7 /* USOnlyFeatureAvailabilityChecker.swift in Sources */,
CE72A76E26D680DF00F13CF7 /* ProSubscriptionAvailabilityChecker.swift in Sources */,
CD91685B26552FD000EC04EF /* DefaultSettingsMetric.swift in Sources */, CD91685B26552FD000EC04EF /* DefaultSettingsMetric.swift in Sources */,
CEFE85282694C5F7003C67D3 /* HumiditySmartText.swift in Sources */, CEFE85282694C5F7003C67D3 /* HumiditySmartText.swift in Sources */,
CD615FB82655295C00B717DB /* UIColor+Hex.swift in Sources */, CD615FB82655295C00B717DB /* UIColor+Hex.swift in Sources */,
...@@ -787,7 +783,7 @@ ...@@ -787,7 +783,7 @@
CD615F9D265526E700B717DB /* DayTimeWeather.swift in Sources */, CD615F9D265526E700B717DB /* DayTimeWeather.swift in Sources */,
CD615F9E265526E700B717DB /* Health.swift in Sources */, CD615F9E265526E700B717DB /* Health.swift in Sources */,
CD2D55DE2655377F007B70F4 /* NWSSeverityLevel.swift in Sources */, CD2D55DE2655377F007B70F4 /* NWSSeverityLevel.swift in Sources */,
CE72A76C26D6782F00F13CF7 /* PremiumInAppFeatureAvailabilityChecker.swift in Sources */, CEC363AD26E93EE1009F2607 /* ClosureFeatureAvailabilityChecker.swift in Sources */,
CD615F9F265526E700B717DB /* AirQuality.swift in Sources */, CD615F9F265526E700B717DB /* AirQuality.swift in Sources */,
CDD2F8EF2665102B00B48322 /* LocationManager.swift in Sources */, CDD2F8EF2665102B00B48322 /* LocationManager.swift in Sources */,
CD615FA0265526E700B717DB /* HealthStatus.swift in Sources */, CD615FA0265526E700B717DB /* HealthStatus.swift in Sources */,
......
// //
// PremiumInAppFeatureAvailabilityChecker.swift // ClosureFeatureAvailabilityChecker.swift
// OneWeatherCore // OneWeatherCore
// //
// Created by Demid Merzlyakov on 25.08.2021. // Created by Demid Merzlyakov on 08.09.2021.
// //
import Foundation import Foundation
public struct PremiumInAppFeatureAvailabilityChecker: FeatureAvailabilityChecker { public struct ClosureFeatureAvailabilityChecker: FeatureAvailabilityChecker {
public init() {} private let checker: () -> Bool
public init(isAvailableChecker: @escaping () -> Bool) {
self.checker = isAvailableChecker
}
public var isAvailable: Bool { public var isAvailable: Bool {
isAppPro() checker()
} }
} }
//
// ProSubscriptionAvailabilityChecker.swift
// OneWeatherCore
//
// Created by Demid Merzlyakov on 25.08.2021.
//
import Foundation
public struct ProSubscriptionAvailabilityChecker: FeatureAvailabilityChecker {
public init() {}
public var isAvailable: Bool {
#warning("Not implemented!")
//TODO: Implement!
// IOS-155
#if DEBUG
return true
#else
return false
#endif
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment