From 52ddb09c7032bdc69708c8784f47ded63232b5ab Mon Sep 17 00:00:00 2001 From: Frank Schmitt Date: Tue, 11 May 2021 16:12:08 -0700 Subject: [PATCH] Apptentive IOS SDK 5.3.2 --- .../Apptentive.xcodeproj/project.pbxproj | 10 ++-- Apptentive/Apptentive/Apptentive.m | 5 +- Apptentive/Apptentive/ApptentiveMain.h | 8 ++- .../Engagement/Model/ApptentiveDevice.h | 15 ----- .../Engagement/Model/ApptentiveDevice.m | 55 ------------------- Apptentive/Apptentive/Info.plist | 2 +- .../Model/ApptentiveAppConfiguration.h | 5 -- .../Model/ApptentiveAppConfiguration.m | 4 -- .../ApptentiveLegacyConversationRequest.m | 2 +- .../Persistence/ApptentiveBackend.m | 17 +----- Apptentive/ApptentiveTests/Info.plist | 2 +- CHANGELOG.md | 10 ++++ Example/Podfile.lock | 6 +- apptentive-ios.podspec | 2 +- 14 files changed, 35 insertions(+), 108 deletions(-) diff --git a/Apptentive/Apptentive.xcodeproj/project.pbxproj b/Apptentive/Apptentive.xcodeproj/project.pbxproj index 718b24c4a..8d7256c67 100644 --- a/Apptentive/Apptentive.xcodeproj/project.pbxproj +++ b/Apptentive/Apptentive.xcodeproj/project.pbxproj @@ -526,6 +526,7 @@ 01798C001EAF94FD00633164 /* ApptentivePayloadSender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApptentivePayloadSender.h; sourceTree = ""; }; 01798C011EAF94FD00633164 /* ApptentivePayloadSender.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ApptentivePayloadSender.m; sourceTree = ""; }; 017E54EC1F3B860E00EA9F81 /* ApptentiveJSONSerializationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ApptentiveJSONSerializationTests.m; sourceTree = ""; }; + 01870CF72649E29E00DC8796 /* Apptentive Debug Logging.mobileconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "Apptentive Debug Logging.mobileconfig"; sourceTree = ""; }; 018E1CDF21936B1300E58F33 /* ApptentiveEngagementTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApptentiveEngagementTests.swift; sourceTree = ""; }; 018E1CE121936B6600E58F33 /* conversation-4.archive */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; path = "conversation-4.archive"; sourceTree = ""; }; 018E1CE221936B6600E58F33 /* conversation-5.archive */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; path = "conversation-5.archive"; sourceTree = ""; }; @@ -1021,6 +1022,7 @@ 01A2CF931E49062700C2103A /* Apptentive */ = { isa = PBXGroup; children = ( + 01870CF72649E29E00DC8796 /* Apptentive Debug Logging.mobileconfig */, 0168B1AC24AAAFD1006EEF65 /* DebugLogging.cer */, EF3FE88720A226EE00A3C9C5 /* Apptimize */, 01A2CFB01E490A9700C2103A /* Custom Views */, @@ -2417,7 +2419,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 46; + CURRENT_PROJECT_VERSION = 47; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -2475,7 +2477,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 46; + CURRENT_PROJECT_VERSION = 47; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -2507,7 +2509,7 @@ DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 86WML2UN43; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 46; + DYLIB_CURRENT_VERSION = 47; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_PREFIX_HEADER = "Apptentive/Misc/ApptentiveConnect-Prefix.pch"; GCC_PREPROCESSOR_DEFINITIONS = "APPTENTIVE_DEBUG=1"; @@ -2528,7 +2530,7 @@ DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 86WML2UN43; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 46; + DYLIB_CURRENT_VERSION = 47; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_PREFIX_HEADER = "Apptentive/Misc/ApptentiveConnect-Prefix.pch"; INFOPLIST_FILE = Apptentive/Info.plist; diff --git a/Apptentive/Apptentive/Apptentive.m b/Apptentive/Apptentive/Apptentive.m index 1fb43045d..5c5f192e6 100644 --- a/Apptentive/Apptentive/Apptentive.m +++ b/Apptentive/Apptentive/Apptentive.m @@ -103,6 +103,7 @@ - (nullable instancetype)initWithApptentiveKey:(NSString *)apptentiveKey apptent _logLevel = ApptentiveLogLevelInfo; _shouldSanitizeLogMessages = YES; _showInfoButton = YES; + _enableDebugLogFile = YES; } return self; } @@ -155,7 +156,9 @@ - (id)initWithConfiguration:(ApptentiveConfiguration *)configuration { _operationQueue = [ApptentiveDispatchQueue createQueueWithName:@"Apptentive Main Queue" concurrencyType:ApptentiveDispatchQueueConcurrencyTypeSerial qualityOfService:NSQualityOfServiceUserInitiated]; // start log writer - ApptentiveStartLogMonitor([ApptentiveUtilities cacheDirectoryPath:@"com.apptentive.logs"]); + if (configuration.enableDebugLogFile) { + ApptentiveStartLogMonitor([ApptentiveUtilities cacheDirectoryPath:@"com.apptentive.logs"]); + } // start log monitor [ApptentiveLogMonitor startSessionWithBaseURL:configuration.baseURL appKey:configuration.apptentiveKey signature:configuration.apptentiveSignature queue:_operationQueue]; diff --git a/Apptentive/Apptentive/ApptentiveMain.h b/Apptentive/Apptentive/ApptentiveMain.h index dc1a6e280..992c84513 100644 --- a/Apptentive/Apptentive/ApptentiveMain.h +++ b/Apptentive/Apptentive/ApptentiveMain.h @@ -20,7 +20,7 @@ FOUNDATION_EXPORT double ApptentiveVersionNumber; FOUNDATION_EXPORT const unsigned char ApptentiveVersionString[]; /** The version number of the Apptentive SDK. */ -#define kApptentiveVersionString @"5.3.1" +#define kApptentiveVersionString @"5.3.2" /** The version number of the Apptentive API platform. */ #define kApptentiveAPIVersionString @"9" @@ -162,6 +162,12 @@ typedef NS_ENUM(NSUInteger, ApptentiveLogLevel) { /** If set, redacts potentially-sensitive information such as user data and credentials from logging. */ @property (assign, nonatomic) BOOL shouldSanitizeLogMessages; +/** If set, writes SDK-related log messages to a file in the app's cache directory (defaults to YES). + + This is allows the Apptentive Debug Logging feature to capture and send logs for debugging + purposes (with explicit user opt-in). Setting this to NO will disable the debug logging feature. */ +@property (assign, nonatomic) BOOL enableDebugLogFile; + /** The server URL to use for API calls. Should only be used for testing. */ @property (copy, nonatomic) NSURL *baseURL; diff --git a/Apptentive/Apptentive/Engagement/Model/ApptentiveDevice.h b/Apptentive/Apptentive/Engagement/Model/ApptentiveDevice.h index d9fd25820..326781587 100644 --- a/Apptentive/Apptentive/Engagement/Model/ApptentiveDevice.h +++ b/Apptentive/Apptentive/Engagement/Model/ApptentiveDevice.h @@ -90,11 +90,6 @@ extern NSString *const ATDeviceLastUpdateValuePreferenceKey; */ @property (copy, nonatomic) NSDictionary *integrationConfiguration; -/** - The advertising identifier, if the AdSupport framework is linked, and the user has enabled it - */ -@property (readonly, nullable, strong, nonatomic) NSUUID *advertisingIdentifier; - /** Initializes a device object with values obtained from the current device. @@ -112,11 +107,6 @@ extern NSString *const ATDeviceLastUpdateValuePreferenceKey; */ + (void)getPermanentDeviceValues; -/** - Sets static variable for advertising identifier. - */ -+ (void)getAdvertisingIdentifier; - /** The push integration to be set globally for all devices */ @@ -134,11 +124,6 @@ extern NSString *const ATDeviceLastUpdateValuePreferenceKey; */ @property (class, strong, nonatomic) UIContentSizeCategory contentSizeCategory; -/** - Exposes the static variable _currentAdvertisingIdentifier for reading when debugging. - */ -@property (class, readonly, strong, nonatomic) NSUUID *advertisingIdentifier; - @end NS_ASSUME_NONNULL_END diff --git a/Apptentive/Apptentive/Engagement/Model/ApptentiveDevice.m b/Apptentive/Apptentive/Engagement/Model/ApptentiveDevice.m index 29845d4e5..e39606995 100644 --- a/Apptentive/Apptentive/Engagement/Model/ApptentiveDevice.m +++ b/Apptentive/Apptentive/Engagement/Model/ApptentiveDevice.m @@ -30,7 +30,6 @@ static NSString *const LocaleLanguageCodeKey = @"localeLanguageCode"; static NSString *const UTCOffsetKey = @"UTCOffset"; static NSString *const IntegrationConfigurationKey = @"integrationConfiguration"; -static NSString *const AdvertisingIdentifierKey = @"advertisingIdentifier"; // Legacy keys NSString *const ATDeviceLastUpdateValuePreferenceKey = @"ATDeviceLastUpdateValuePreferenceKey"; @@ -46,7 +45,6 @@ static NSDictionary *_currentIntegrationConfiguration; static NSString *_currentCarrierName; static UIContentSizeCategory _currentContentSizeCategory; -static NSUUID * _Nullable _currentAdvertisingIdentifier; @implementation ApptentiveDevice @@ -79,50 +77,6 @@ + (UIContentSizeCategory)contentSizeCategory { return _currentContentSizeCategory; } -+ (void)getAdvertisingIdentifier { - NSUUID *oldAdvertisingIdentifier = _currentAdvertisingIdentifier; - _currentAdvertisingIdentifier = nil; - @try { - Class IdentifierManager = NSClassFromString(@"ASIdentifierManager"); - if (IdentifierManager) { - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Warc-performSelector-leaks" - id sharedManager = [IdentifierManager performSelector:NSSelectorFromString(@"sharedManager")]; - SEL advertisingIdentifierSelector = NSSelectorFromString(@"advertisingIdentifier"); - SEL advertisingTrackingEnabledSelector = NSSelectorFromString(@"isAdvertisingTrackingEnabled"); - - if (![sharedManager respondsToSelector:advertisingIdentifierSelector] || - ![sharedManager respondsToSelector:advertisingTrackingEnabledSelector]) { - ApptentiveLogDebug(ApptentiveLogTagConversation, @"Unable to get advertising id: required method on ASIdentifierManager not found"); - return; - } - - if (![sharedManager performSelector:advertisingTrackingEnabledSelector]) { - ApptentiveLogDebug(ApptentiveLogTagConversation, @"Unable to get advertising id: advertising tracking disabled"); - return; - } - - NSUUID *advertisingIdentifier = [sharedManager performSelector:advertisingIdentifierSelector]; - if ([advertisingIdentifier.UUIDString isEqualToString:@"00000000-0000-0000-0000-000000000000"]) { - ApptentiveLogDebug(ApptentiveLogTagConversation, @"Unable to get advertising id: invalid value"); - return; - } - - if (![advertisingIdentifier isEqual:oldAdvertisingIdentifier]) { - ApptentiveLogVerbose(ApptentiveLogTagConversation, @"Updated advertising id: %@", advertisingIdentifier); - } - _currentAdvertisingIdentifier = advertisingIdentifier; - #pragma clang diagnostic pop - } - } @catch (NSException *e) { - ApptentiveLogError(ApptentiveLogTagConversation, @"Exception while trying to resolve advertising id.\n%@", e); - } -} - -+ (NSUUID *)advertisingIdentifier { - return _currentAdvertisingIdentifier; -} - + (void)getPermanentDeviceValues { _currentUUID = [UIDevice currentDevice].identifierForVendor; _currentOSName = [UIDevice currentDevice].systemName; @@ -181,7 +135,6 @@ - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder { NSSet *allowedClasses = [NSSet setWithArray:@[[NSDictionary class], [NSString class]]]; _integrationConfiguration = [aDecoder decodeObjectOfClasses:allowedClasses forKey:IntegrationConfigurationKey]; - _advertisingIdentifier = [aDecoder decodeObjectOfClass:[NSUUID class] forKey:AdvertisingIdentifierKey]; } return self; @@ -202,7 +155,6 @@ - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:self.localeLanguageCode forKey:LocaleLanguageCodeKey]; [aCoder encodeInteger:self.UTCOffset forKey:UTCOffsetKey]; [aCoder encodeObject:self.integrationConfiguration forKey:IntegrationConfigurationKey]; - [aCoder encodeObject:self.advertisingIdentifier forKey:AdvertisingIdentifierKey]; } - (instancetype)initAndMigrate { @@ -252,8 +204,6 @@ - (void)updateWithCurrentDeviceValues { _UTCOffset = [NSTimeZone systemTimeZone].secondsFromGMT; _integrationConfiguration = ApptentiveDevice.integrationConfiguration; - - _advertisingIdentifier = _currentAdvertisingIdentifier; } @end @@ -273,10 +223,6 @@ - (NSString *)OSVersionString { return self.OSVersion.versionString; } -- (NSString *)advertisingIdentifierString { - return self.advertisingIdentifier.UUIDString; -} - + (NSDictionary *)JSONKeyPathMapping { return @{ @"custom_data": NSStringFromSelector(@selector(customData)), @@ -292,7 +238,6 @@ + (NSDictionary *)JSONKeyPathMapping { @"locale_language_code": NSStringFromSelector(@selector(localeLanguageCode)), @"utc_offset": NSStringFromSelector(@selector(boxedUTCOffset)), @"integration_config": NSStringFromSelector(@selector(integrationConfiguration)), - @"advertiser_id": NSStringFromSelector(@selector(advertisingIdentifierString)) }; } diff --git a/Apptentive/Apptentive/Info.plist b/Apptentive/Apptentive/Info.plist index 009e2f9ae..e438bb468 100644 --- a/Apptentive/Apptentive/Info.plist +++ b/Apptentive/Apptentive/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 5.3.1 + 5.3.2 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass diff --git a/Apptentive/Apptentive/Model/ApptentiveAppConfiguration.h b/Apptentive/Apptentive/Model/ApptentiveAppConfiguration.h index f7041a101..86f6f4775 100644 --- a/Apptentive/Apptentive/Model/ApptentiveAppConfiguration.h +++ b/Apptentive/Apptentive/Model/ApptentiveAppConfiguration.h @@ -113,11 +113,6 @@ NS_ASSUME_NONNULL_BEGIN */ @property (readonly, assign, nonatomic) BOOL metricsEnabled; -/** - Whether to collect the advertisingIdentifier from the AdSupport framework. - */ -@property (readonly, assign, nonatomic) BOOL collectAdvertisingIdentifier; - /** The configuration for Message Center (see `ApptentiveMessageCenterConfiguration`). diff --git a/Apptentive/Apptentive/Model/ApptentiveAppConfiguration.m b/Apptentive/Apptentive/Model/ApptentiveAppConfiguration.m index 63a38dde8..54bdf64da 100644 --- a/Apptentive/Apptentive/Model/ApptentiveAppConfiguration.m +++ b/Apptentive/Apptentive/Model/ApptentiveAppConfiguration.m @@ -17,7 +17,6 @@ static NSString *const HideBrandingKey = @"hideBranding"; static NSString *const MessageCenterEnabledKey = @"messageCenterEnabled"; static NSString *const MetricsEnabledKey = @"metricsEnabled"; -static NSString *const CollectAdvertisingIdentifierKey = @"collectAdvertisingIdentifier"; static NSString *const MessageCenterKey = @"messageCenter"; static NSString *const ExpiryKey = @"expiry"; @@ -73,7 +72,6 @@ - (instancetype)initWithJSONDictionary:(NSDictionary *)JSONDictionary cacheLifet _hideBranding = [JSONDictionary[@"hide_branding"] boolValue]; _messageCenterEnabled = [JSONDictionary[@"message_center_enabled"] boolValue]; _metricsEnabled = [JSONDictionary[@"metrics_enabled"] boolValue]; - _collectAdvertisingIdentifier = [JSONDictionary[@"collect_ad_id"] boolValue]; _collectApptimizeData = [JSONDictionary[@"apptimize_integration"] boolValue]; _messageCenter = [[ApptentiveMessageCenterConfiguration alloc] initWithJSONDictionary:JSONDictionary[@"message_center"]]; @@ -119,7 +117,6 @@ - (nullable instancetype)initWithCoder:(NSCoder *)coder { _hideBranding = [coder decodeBoolForKey:HideBrandingKey]; _messageCenterEnabled = [coder decodeBoolForKey:MessageCenterEnabledKey]; _metricsEnabled = [coder decodeBoolForKey:MetricsEnabledKey]; - _collectAdvertisingIdentifier = [coder decodeBoolForKey:CollectAdvertisingIdentifierKey]; _collectApptimizeData = [coder decodeBoolForKey:CollectApptimizeDataKey]; _messageCenter = [coder decodeObjectOfClass:[ApptentiveMessageCenterConfiguration class] forKey:MessageCenterKey]; _expiry = [coder decodeObjectOfClass:[NSDate class] forKey:ExpiryKey]; @@ -135,7 +132,6 @@ - (void)encodeWithCoder:(NSCoder *)coder { [coder encodeBool:self.hideBranding forKey:HideBrandingKey]; [coder encodeBool:self.messageCenterEnabled forKey:MessageCenterEnabledKey]; [coder encodeBool:self.metricsEnabled forKey:MetricsEnabledKey]; - [coder encodeBool:self.collectAdvertisingIdentifier forKey:CollectAdvertisingIdentifierKey]; [coder encodeBool:self.collectApptimizeData forKey:CollectApptimizeDataKey]; [coder encodeObject:self.messageCenter forKey:MessageCenterKey]; [coder encodeObject:self.expiry forKey:ExpiryKey]; diff --git a/Apptentive/Apptentive/Networking/Requests & Payloads/ApptentiveLegacyConversationRequest.m b/Apptentive/Apptentive/Networking/Requests & Payloads/ApptentiveLegacyConversationRequest.m index ebf745d06..8a992fc89 100644 --- a/Apptentive/Apptentive/Networking/Requests & Payloads/ApptentiveLegacyConversationRequest.m +++ b/Apptentive/Apptentive/Networking/Requests & Payloads/ApptentiveLegacyConversationRequest.m @@ -35,7 +35,7 @@ - (NSString *)path { } - (NSDictionary *)JSONDictionary { - return @{}; // TODO: pass params? + return nil; } - (NSString *)conversationIdentifier { diff --git a/Apptentive/Apptentive/Persistence/ApptentiveBackend.m b/Apptentive/Apptentive/Persistence/ApptentiveBackend.m index 426e6c131..0893bd45b 100644 --- a/Apptentive/Apptentive/Persistence/ApptentiveBackend.m +++ b/Apptentive/Apptentive/Persistence/ApptentiveBackend.m @@ -122,7 +122,6 @@ - (instancetype)initWithApptentiveKey:(NSString *)apptentiveKey signature:(NSStr [self loadConfiguration]; - [self maybeGetAdvertisingIdentifier]; [self tryInitializeApptimizeSDK]; [self startUp]; @@ -235,7 +234,6 @@ - (void)applicationWillEnterForegroundNotification:(NSNotification *)notificatio [self resume]; [self.conversationManager.activeConversation startSession]; [self addLaunchMetric]; - [self maybeGetAdvertisingIdentifier]; }]; } @@ -453,7 +451,6 @@ - (void)processConfigurationResponse:(NSDictionary *)configurationResponse cache [self saveConfiguration]; - [self maybeGetAdvertisingIdentifier]; [self tryUpdateApptimizeData]; } @@ -795,18 +792,6 @@ - (ApptentiveMessageManager *)messageManager { return self.conversationManager.messageManager; } -#pragma mark - -#pragma mark Advertising Identifier - -- (void)maybeGetAdvertisingIdentifier { - ApptentiveAssertOperationQueue(self.operationQueue); - - if (self.configuration.collectAdvertisingIdentifier) { - [ApptentiveDevice getAdvertisingIdentifier]; - [self scheduleDeviceUpdate]; - } -} - #pragma mark - #pragma mark Apptimize SDK @@ -819,7 +804,7 @@ - (void)tryInitializeApptimizeSDK { } if (![ApptentiveApptimize isApptimizeSDKAvailable]) { - ApptentiveLogWarning(ApptentiveLogTagApptimize, @"Unable to initialize Apptimize SDK support: SDK integration not found"); + ApptentiveLogInfo(ApptentiveLogTagApptimize, @"Unable to initialize Apptimize SDK support: SDK integration not found"); return; } diff --git a/Apptentive/ApptentiveTests/Info.plist b/Apptentive/ApptentiveTests/Info.plist index 3e5c1decc..0fbdf7a7a 100644 --- a/Apptentive/ApptentiveTests/Info.plist +++ b/Apptentive/ApptentiveTests/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 5.3.1 + 5.3.2 CFBundleVersion 1 diff --git a/CHANGELOG.md b/CHANGELOG.md index b97fe7680..4b18dec32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +# 2021-05-11 - v5.3.2 + +#### Improvements + +* Add property on configuration to disable writing debug logs to disk + +#### Bugs Fixed + +* Don't send a body with GET request to upgrade auth token to JWT + # 2020-09-16 - v5.3.1 #### Improvements diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 50dc279dc..998083468 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - apptentive-ios (5.3.1) + - apptentive-ios (5.3.2) DEPENDENCIES: - apptentive-ios (from `..`) @@ -9,8 +9,8 @@ EXTERNAL SOURCES: :path: ".." SPEC CHECKSUMS: - apptentive-ios: 94a2e90b4759051a3b73e6e2ae85f16361e20b9c + apptentive-ios: 8254c0c93038b951a196b7912b5e9760ecb4b080 PODFILE CHECKSUM: 785a9d76c0ca2535819b754c6fe8c5c6413dbc30 -COCOAPODS: 1.10.0.beta.2 +COCOAPODS: 1.10.1 diff --git a/apptentive-ios.podspec b/apptentive-ios.podspec index fbd3aa384..439223be5 100644 --- a/apptentive-ios.podspec +++ b/apptentive-ios.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = 'apptentive-ios' s.module_name = 'Apptentive' - s.version = '5.3.1' + s.version = '5.3.2' s.license = 'BSD' s.summary = 'Apptentive Customer Communications SDK.' s.homepage = 'https://www.apptentive.com/'