diff --git a/Package.swift b/Package.swift index 430645419b..4343807cc8 100644 --- a/Package.swift +++ b/Package.swift @@ -10,6 +10,7 @@ func resolveTargets() -> [Target] { "Purchases/Caching", "Purchases/FoundationExtensions", "Purchases/Misc", + "Purchases/Logging", "Purchases/Networking", "Purchases/Public", "Purchases/Purchasing", diff --git a/Purchases.xcodeproj/project.pbxproj b/Purchases.xcodeproj/project.pbxproj index 20e754a10a..6ea2ecfa0a 100644 --- a/Purchases.xcodeproj/project.pbxproj +++ b/Purchases.xcodeproj/project.pbxproj @@ -12,6 +12,7 @@ 2D22679125F2D9AD00E6950C /* PurchasesTests-Bridging-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = 35262A291F7D783F00C04F2C /* PurchasesTests-Bridging-Header.h */; }; 2D390255259CF46000DB19C0 /* MockPaymentDiscount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D390254259CF46000DB19C0 /* MockPaymentDiscount.swift */; }; 2D3E29CE25E8009000456FA8 /* MockAttributionTypeFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37E35DA3E083FE37DAF15954 /* MockAttributionTypeFactory.swift */; }; + 2D4C02E426697E490038F877 /* RCLogLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D4C02E326697E490038F877 /* RCLogLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2D4C18A924F47E5000F268CD /* Purchases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D4C18A824F47E4400F268CD /* Purchases.swift */; }; 2D4D6AF124F6FEE000B656BE /* MockIntroEligibilityCalculator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA0068E24E2E515002C59D3 /* MockIntroEligibilityCalculator.swift */; }; 2D4D6AF324F7172900B656BE /* MockProductsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D4D6AF224F7172900B656BE /* MockProductsRequest.swift */; }; @@ -29,8 +30,8 @@ 2D8E9D482523747D00AFEE11 /* NSDictionaryExtensionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DD269162522A20A006AC4BC /* NSDictionaryExtensionsTests.swift */; }; 2D8E9D54252374A600AFEE11 /* NSDictionary+RCExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D8E9D52252374A600AFEE11 /* NSDictionary+RCExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2D8E9D55252374A600AFEE11 /* NSDictionary+RCExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D8E9D53252374A600AFEE11 /* NSDictionary+RCExtensions.m */; }; - 2DA600382666D8DB00B9E79E /* RCLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DA600362666D8DB00B9E79E /* RCLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2DA600392666D8DB00B9E79E /* RCLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DA600372666D8DB00B9E79E /* RCLogger.m */; }; + 2DA600382666D8DB00B9E79E /* RCLoggerBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DA600362666D8DB00B9E79E /* RCLoggerBridge.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2DA600392666D8DB00B9E79E /* RCLoggerBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DA600372666D8DB00B9E79E /* RCLoggerBridge.m */; }; 2DAF814E25B24243002C621E /* RCIdentityManager+Protected.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DAF814D25B24243002C621E /* RCIdentityManager+Protected.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2DC19195255F36D10039389A /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DC19194255F36D10039389A /* Logger.swift */; }; 2DC5621F24EC63430031F69B /* PurchasesCoreSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2DC5621624EC63420031F69B /* PurchasesCoreSwift.framework */; }; @@ -139,7 +140,6 @@ 37E3524628A1D7568679FEE2 /* SusbcriberAttributesManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37E3567E972B9B04FE079ABA /* SusbcriberAttributesManagerTests.swift */; }; 37E3524CB70618E6C5F3DB49 /* MockPurchasesDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37E35838A7FD36982EE14100 /* MockPurchasesDelegate.swift */; }; 37E352897F7CB3A122F9739F /* PurchasesSubscriberAttributesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37E3508E52201122137D4B4A /* PurchasesSubscriberAttributesTests.swift */; }; - 37E352BAA55C31B1E278CA8A /* RCLogUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 37E352229DFDDA008BB029C2 /* RCLogUtils.m */; }; 37E352E86A182E92130B823C /* RCIntroEligibility+Protected.h in Headers */ = {isa = PBXBuildFile; fileRef = 37E359D128E667D950598853 /* RCIntroEligibility+Protected.h */; settings = {ATTRIBUTES = (Private, ); }; }; 37E352E9231D083B78E2E345 /* RCBackend.m in Sources */ = {isa = PBXBuildFile; fileRef = 37E35E282619939718FC7DBE /* RCBackend.m */; }; 37E352F190E0E957E8D932F8 /* RCDeviceCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 37E3524E3032ABC72467AA43 /* RCDeviceCache.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -303,6 +303,7 @@ 2D11F5E0250FF886005A70E8 /* AttributionStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttributionStrings.swift; sourceTree = ""; }; 2D1FFAD425B8707400367C63 /* RCPurchaserInfoManager+Protected.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RCPurchaserInfoManager+Protected.h"; sourceTree = ""; }; 2D390254259CF46000DB19C0 /* MockPaymentDiscount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockPaymentDiscount.swift; sourceTree = ""; }; + 2D4C02E326697E490038F877 /* RCLogLevel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCLogLevel.h; sourceTree = ""; }; 2D4C18A824F47E4400F268CD /* Purchases.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Purchases.swift; sourceTree = ""; }; 2D4D6AF224F7172900B656BE /* MockProductsRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockProductsRequest.swift; sourceTree = ""; }; 2D5033212406E4E8009CAE61 /* RCSubscriberAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCSubscriberAttribute.h; path = Purchases/SubscriberAttributes/RCSubscriberAttribute.h; sourceTree = SOURCE_ROOT; }; @@ -319,8 +320,8 @@ 2D8F622224D30F9D00F993AA /* ReceiptParsingError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiptParsingError.swift; sourceTree = ""; }; 2D97458E24BDFCEF006245E9 /* IntroEligibilityCalculator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroEligibilityCalculator.swift; sourceTree = ""; }; 2DA0068E24E2E515002C59D3 /* MockIntroEligibilityCalculator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockIntroEligibilityCalculator.swift; sourceTree = ""; }; - 2DA600362666D8DB00B9E79E /* RCLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCLogger.h; sourceTree = ""; }; - 2DA600372666D8DB00B9E79E /* RCLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCLogger.m; sourceTree = ""; }; + 2DA600362666D8DB00B9E79E /* RCLoggerBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCLoggerBridge.h; sourceTree = ""; }; + 2DA600372666D8DB00B9E79E /* RCLoggerBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCLoggerBridge.m; sourceTree = ""; }; 2DAF814D25B24243002C621E /* RCIdentityManager+Protected.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RCIdentityManager+Protected.h"; sourceTree = ""; }; 2DC19194255F36D10039389A /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = ""; }; 2DC5621624EC63420031F69B /* PurchasesCoreSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PurchasesCoreSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -427,7 +428,6 @@ 37E351EB3689AF304E5B1031 /* MockASN1ContainerBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockASN1ContainerBuilder.swift; sourceTree = ""; }; 37E351F0E21361EAEC078A0D /* ProductsManagerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProductsManagerTests.swift; sourceTree = ""; }; 37E3521D9235DD78BFEE8AC4 /* NSDate+RCExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDate+RCExtensions.m"; sourceTree = ""; }; - 37E352229DFDDA008BB029C2 /* RCLogUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCLogUtils.m; sourceTree = ""; }; 37E3524E3032ABC72467AA43 /* RCDeviceCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCDeviceCache.h; sourceTree = ""; }; 37E3528315F4F007250F62B2 /* NSLocale+RCExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLocale+RCExtensions.h"; sourceTree = ""; }; 37E35292137BBF2810CE4F4B /* MockHTTPClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockHTTPClient.swift; sourceTree = ""; }; @@ -656,6 +656,16 @@ path = LocalReceiptParsing; sourceTree = ""; }; + 2D4C02E52669801D0038F877 /* Logging */ = { + isa = PBXGroup; + children = ( + 2DA600362666D8DB00B9E79E /* RCLoggerBridge.h */, + 2DA600372666D8DB00B9E79E /* RCLoggerBridge.m */, + 37E35EB9B60477A7AD2C2EB5 /* RCLogUtils.h */, + ); + path = Logging; + sourceTree = ""; + }; 2D5033202406E4C7009CAE61 /* SubscriberAttributes */ = { isa = PBXGroup; children = ( @@ -832,8 +842,6 @@ 350FBDE61F7EEEDF0065833D /* Public */ = { isa = PBXGroup; children = ( - 2DA600362666D8DB00B9E79E /* RCLogger.h */, - 2DA600372666D8DB00B9E79E /* RCLogger.m */, 353AB5E5222F633D003754E6 /* RCPurchasesErrorUtils.h */, 352E88422229B1A60046A10A /* RCPurchasesErrorUtils.m */, 353AB5E3222F624E003754E6 /* RCPurchasesErrors.h */, @@ -857,6 +865,7 @@ 2D604CA224E5BF37004821DC /* RCTransaction.h */, 37E357903E469CF42667760C /* RCAttributionNetwork.h */, 2D540CD62601509000A7475D /* RCPurchaseOwnershipType.h */, + 2D4C02E326697E490038F877 /* RCLogLevel.h */, ); path = Public; sourceTree = ""; @@ -894,6 +903,7 @@ 35262A001F7C4B9100C04F2C /* Purchases */ = { isa = PBXGroup; children = ( + 2D4C02E52669801D0038F877 /* Logging */, 35262A021F7C4B9100C04F2C /* Info.plist */, 37E359927177DF24576FF361 /* Caching */, 37E35EF24BD787B115DEAB51 /* FoundationExtensions */, @@ -1198,12 +1208,10 @@ 37E35F096CF853E5C61F978A /* Misc */ = { isa = PBXGroup; children = ( - 37E35EB9B60477A7AD2C2EB5 /* RCLogUtils.h */, 37E353471F474D9092560033 /* RCSystemInfo.h */, 37E35A7A70B77C0526EA3A28 /* RCSystemInfo.m */, 37E35F1729999CFCA36E877D /* RCDateProvider.m */, 37E352FDEEAD2E4EA0D2C16B /* RCDateProvider.h */, - 37E352229DFDDA008BB029C2 /* RCLogUtils.m */, 37E35DE721FC2A73255D505E /* RCCrossPlatformSupport.h */, 2DEB9766247DB46900A92099 /* RCISOPeriodFormatter.h */, 37E35CC6289D46E544F5F006 /* RCISOPeriodFormatter.m */, @@ -1308,7 +1316,7 @@ 37E3585A687FF4D7B69C554C /* RCDateProvider.h in Headers */, 37E354159288DE3D23212382 /* RCCrossPlatformSupport.h in Headers */, 37E35E9CEC36E93AF682D012 /* RCPromotionalOffer+Protected.h in Headers */, - 2DA600382666D8DB00B9E79E /* RCLogger.h in Headers */, + 2DA600382666D8DB00B9E79E /* RCLoggerBridge.h in Headers */, 37E352E86A182E92130B823C /* RCIntroEligibility+Protected.h in Headers */, 37E35C5A53AC7CF63B240FEC /* RCEntitlementInfos+Protected.h in Headers */, 37E3575B0FFDD90D01861D81 /* RCPurchasesErrorUtils+Protected.h in Headers */, @@ -1340,6 +1348,7 @@ 37E35CB9C20AFAFBC98ADA27 /* RCAttributionFetcher.h in Headers */, 37E35C5E805407840AC79468 /* RCReceiptRefreshPolicy.h in Headers */, 37E35054EF6315E99DC20AEC /* RCAttributionTypeFactory.h in Headers */, + 2D4C02E426697E490038F877 /* RCLogLevel.h in Headers */, 37E357712F2A42935CD05062 /* RCAttributionData.h in Headers */, 37E35D01E3A0F5FC8E0B16F7 /* RCIdentityManager.h in Headers */, ); @@ -1700,12 +1709,11 @@ 37E35D561B3F5AC49FD6C2CF /* RCHTTPClient.m in Sources */, 37E35EB1B9FE3F739B8C0D71 /* RCDateProvider.m in Sources */, 37E35DC1B42094073EB105AC /* RCSystemInfo.m in Sources */, - 37E352BAA55C31B1E278CA8A /* RCLogUtils.m in Sources */, 2D4C18A924F47E5000F268CD /* Purchases.swift in Sources */, 37E358DB4F4016AC297D6B00 /* RCOfferingsFactory.m in Sources */, 37E35DD8BE40E352311AC2C1 /* RCPromotionalOffer.m in Sources */, 37E358250B07BF2DA06EA27B /* RCReceiptFetcher.m in Sources */, - 2DA600392666D8DB00B9E79E /* RCLogger.m in Sources */, + 2DA600392666D8DB00B9E79E /* RCLoggerBridge.m in Sources */, 37E35BDDC331C3A5FF72CFFF /* RCStoreKitRequestFetcher.m in Sources */, 37E35A299524507A480956D5 /* RCStoreKitWrapper.m in Sources */, 37E35A7ED3312F10B80FFE2B /* RCDeviceCache.m in Sources */, diff --git a/Purchases/Misc/RCLogUtils.h b/Purchases/Logging/RCLogUtils.h similarity index 94% rename from Purchases/Misc/RCLogUtils.h rename to Purchases/Logging/RCLogUtils.h index 9b644483cc..82c0d37efe 100644 --- a/Purchases/Misc/RCLogUtils.h +++ b/Purchases/Logging/RCLogUtils.h @@ -10,9 +10,6 @@ NS_ASSUME_NONNULL_BEGIN -void RCSetShowDebugLogs(BOOL showDebugLogs); -BOOL RCShowDebugLogs(void); - #define RCDebugLog(args, ...) \ [RCLog debug: [NSString stringWithFormat: args, ##__VA_ARGS__]] diff --git a/Purchases/Public/RCLogger.h b/Purchases/Logging/RCLoggerBridge.h similarity index 63% rename from Purchases/Public/RCLogger.h rename to Purchases/Logging/RCLoggerBridge.h index d6e80b5664..60d56ca218 100644 --- a/Purchases/Public/RCLogger.h +++ b/Purchases/Logging/RCLoggerBridge.h @@ -7,18 +7,12 @@ // #import +#import "RCLogLevel.h" NS_ASSUME_NONNULL_BEGIN -typedef NS_ENUM(NSInteger, RCLogLevel) { - RCLogLevelDebug, - RCLogLevelInfo, - RCLogLevelWarn, - RCLogLevelError, -} NS_SWIFT_NAME(Purchases.LogLevel); - NS_SWIFT_NAME(Purchases.Logger) -@interface RCLogger : NSObject +@interface RCLoggerBridge : NSObject /** Set a custom log handler for redirecting logs to your own logging system. @@ -28,9 +22,9 @@ NS_SWIFT_NAME(Purchases.Logger) + (void)setLogHandler:(void(^)(RCLogLevel, NSString * _Nonnull))logHandler; /** - Enable debug logging. Useful for debugging issues with the lovely team @RevenueCat + Used to set the log level. Useful for debugging issues with the lovely team @RevenueCat */ -@property (class, nonatomic) BOOL debugLogsEnabled; +@property (class, nonatomic) RCLogLevel logLevel; - (instancetype)init NS_UNAVAILABLE; diff --git a/Purchases/Logging/RCLoggerBridge.m b/Purchases/Logging/RCLoggerBridge.m new file mode 100644 index 0000000000..ac55836754 --- /dev/null +++ b/Purchases/Logging/RCLoggerBridge.m @@ -0,0 +1,51 @@ +// +// RCLogger.m +// Purchases +// +// Created by RevenueCat. +// Copyright © 2021 RevenueCat. All rights reserved. +// + +#import "RCLoggerBridge.h" +#import "RCLogUtils.h" + +@import PurchasesCoreSwift; + +@implementation RCLoggerBridge + ++ (void)setLogLevel:(RCLogLevel)logLevel { + switch (logLevel) { + case RCLogLevelDebug: + RCLog.logLevel = RCInternalLogLevelDebug; + break; + case RCLogLevelInfo: + RCLog.logLevel = RCInternalLogLevelInfo; + break; + case RCLogLevelWarn: + RCLog.logLevel = RCInternalLogLevelWarn; + break; + case RCLogLevelError: + RCLog.logLevel = RCInternalLogLevelError; + break; + } +} + ++ (RCLogLevel)logLevel { + switch (RCLog.logLevel) { + case RCInternalLogLevelDebug: + return RCLogLevelDebug; + case RCInternalLogLevelInfo: + return RCLogLevelInfo; + case RCInternalLogLevelWarn: + return RCLogLevelWarn; + case RCInternalLogLevelError: + return RCLogLevelError; + } +} ++ (void)setLogHandler:(void(^)(RCLogLevel, NSString * _Nonnull))handler { + RCLog.logHandler = ^(NSInteger level, NSString *message) { + handler((RCLogLevel)level, message); + }; +} + +@end diff --git a/Purchases/Misc/RCLogUtils.m b/Purchases/Misc/RCLogUtils.m deleted file mode 100644 index 15e042039b..0000000000 --- a/Purchases/Misc/RCLogUtils.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// RCLogUtils.m -// Purchases -// -// Created by RevenueCat. -// Copyright © 2019 RevenueCat. All rights reserved. -// - -#import "RCLogUtils.h" -@import PurchasesCoreSwift; - -void RCSetShowDebugLogs(BOOL showDebugLogs) { - RCLog.shouldShowDebugLogs = showDebugLogs; -} - -BOOL RCShowDebugLogs() { - return RCLog.shouldShowDebugLogs; -} diff --git a/Purchases/Public/Purchases.h b/Purchases/Public/Purchases.h index f3c9263c6e..eb39bba549 100644 --- a/Purchases/Public/Purchases.h +++ b/Purchases/Public/Purchases.h @@ -28,4 +28,4 @@ FOUNDATION_EXPORT const unsigned char PurchasesVersionString[]; #import "RCEntitlementInfo.h" #import "RCEntitlementInfos.h" #import "RCTransaction.h" -#import "RCLogger.h" +#import "RCLogLevel.h" diff --git a/Purchases/Public/RCLogLevel.h b/Purchases/Public/RCLogLevel.h new file mode 100644 index 0000000000..1900cdf1f9 --- /dev/null +++ b/Purchases/Public/RCLogLevel.h @@ -0,0 +1,21 @@ +// +// RCLogLevel.h +// Purchases +// +// Created by Andrés Boedo on 6/3/21. +// Copyright © 2021 Purchases. All rights reserved. +// +#import + +NS_ASSUME_NONNULL_BEGIN + +// These must match the values in LogLevel.swift exactly +typedef NS_ENUM(NSInteger, RCLogLevel) { + RCLogLevelDebug = 0, + RCLogLevelInfo = 1, + RCLogLevelWarn = 2, + RCLogLevelError = 3, +} NS_SWIFT_NAME(Purchases.LogLevel); + + +NS_ASSUME_NONNULL_END diff --git a/Purchases/Public/RCLogger.m b/Purchases/Public/RCLogger.m deleted file mode 100644 index dac803b3bd..0000000000 --- a/Purchases/Public/RCLogger.m +++ /dev/null @@ -1,30 +0,0 @@ -// -// RCLogger.m -// Purchases -// -// Created by RevenueCat. -// Copyright © 2021 RevenueCat. All rights reserved. -// - -#import "RCLogger.h" -#import "RCLogUtils.h" - -@import PurchasesCoreSwift; - -@implementation RCLogger - -+ (void)setDebugLogsEnabled:(BOOL)enabled { - RCSetShowDebugLogs(enabled); -} - -+ (BOOL)debugLogsEnabled { - return RCShowDebugLogs(); -} - -+ (void)setLogHandler:(void(^)(RCLogLevel, NSString * _Nonnull))handler { - RCLog.logHandler = ^(NSInteger level, NSString *message) { - handler((RCLogLevel)level, message); - }; -} - -@end diff --git a/Purchases/Public/RCPurchases.h b/Purchases/Public/RCPurchases.h index 03ffa01ff3..2f8e81b5cb 100644 --- a/Purchases/Public/RCPurchases.h +++ b/Purchases/Public/RCPurchases.h @@ -9,6 +9,7 @@ #import #import "RCAttributionNetwork.h" +#import "RCLogLevel.h" @class SKProduct, SKPayment, SKPaymentTransaction, SKPaymentDiscount, SKProductDiscount, RCPurchaserInfo, RCIntroEligibility, RCOfferings, RCOffering, RCPackage; @protocol RCPurchasesDelegate; @@ -67,7 +68,19 @@ NS_SWIFT_NAME(Purchases) /** Enable debug logging. Useful for debugging issues with the lovely team @RevenueCat */ -@property (class, nonatomic, assign) BOOL debugLogsEnabled DEPRECATED_MSG_ATTRIBUTE("use RCLogger.debugLogsEnabled"); +@property (class, nonatomic, assign) BOOL debugLogsEnabled DEPRECATED_MSG_ATTRIBUTE("use logLevel instead"); + +/** + Set a custom log handler for redirecting logs to your own logging system. + + By default, this sends Info, Warn, and Error messages. If you wish to receive Debug level messages, you must enable debug logs. + */ ++ (void)setLogHandler:(void(^)(RCLogLevel, NSString * _Nonnull))logHandler; + +/** + Used to set the log level. Useful for debugging issues with the lovely team @RevenueCat +*/ +@property (class, nonatomic) RCLogLevel logLevel; /** Set this property to your proxy URL before configuring Purchases *only* if you've received a proxy key value from your RevenueCat contact. diff --git a/Purchases/Public/RCPurchases.m b/Purchases/Public/RCPurchases.m index 284b14df3b..a007ed62be 100644 --- a/Purchases/Public/RCPurchases.m +++ b/Purchases/Public/RCPurchases.m @@ -31,6 +31,7 @@ #import "RCIntroEligibility+Protected.h" #import "RCReceiptRefreshPolicy.h" #import "RCPurchaserInfoManager.h" +#import "RCLoggerBridge.h" @import PurchasesCoreSwift; @@ -95,11 +96,23 @@ + (BOOL)automaticAppleSearchAdsAttributionCollection { } + (void)setDebugLogsEnabled:(BOOL)enabled { - RCSetShowDebugLogs(enabled); + [self setLogLevel:RCLogLevelDebug]; } + (BOOL)debugLogsEnabled { - return RCShowDebugLogs(); + return self.logLevel <= RCLogLevelDebug; +} + ++ (void)setLogHandler:(void(^)(RCLogLevel, NSString * _Nonnull))logHandler { + [RCLoggerBridge setLogHandler:logHandler]; +} + ++ (RCLogLevel)logLevel { + return RCLoggerBridge.logLevel; +} + ++ (void)setLogLevel:(RCLogLevel)logLevel { + RCLoggerBridge.logLevel = logLevel; } + (NSURL *)proxyURL { diff --git a/PurchasesCoreSwift/Logging/Logger.swift b/PurchasesCoreSwift/Logging/Logger.swift index b31d093f90..ce39cc49a6 100644 --- a/PurchasesCoreSwift/Logging/Logger.swift +++ b/PurchasesCoreSwift/Logging/Logger.swift @@ -23,7 +23,7 @@ import Foundation } @objc(RCLog) public class Logger: NSObject { - @objc public static var shouldShowDebugLogs = false + @objc public static var logLevel: LogLevel = .info @objc public static var logHandler: (LogLevel, String) -> Void = { level, message in NSLog("[\(frameworkDescription)] - \(level.description()): \(message)") } @@ -31,7 +31,7 @@ import Foundation private static let frameworkDescription = "Purchases" @objc public static func log(level: LogLevel, message: String) { - guard level != .debug || shouldShowDebugLogs else { return } + guard self.logLevel.rawValue <= level.rawValue else { return } logHandler(level, message) }