From 392efabe6283a79176b3798332f1a6ba2b22dc07 Mon Sep 17 00:00:00 2001 From: serj Date: Fri, 22 Jun 2018 15:50:23 +0200 Subject: [PATCH 01/67] ability to turn of iAd click package sending --- Adjust/ADJActivityHandler.m | 4 ++++ Adjust/ADJAdjustFactory.h | 2 ++ Adjust/ADJAdjustFactory.m | 10 ++++++++++ Adjust/Adjust.h | 1 + Adjust/Adjust.m | 2 ++ .../AdjustTestApp/ATAAdjustCommandExecutor.m | 7 +++++++ 6 files changed, 26 insertions(+) diff --git a/Adjust/ADJActivityHandler.m b/Adjust/ADJActivityHandler.m index a43974dd1..0c3876004 100644 --- a/Adjust/ADJActivityHandler.m +++ b/Adjust/ADJActivityHandler.m @@ -452,6 +452,10 @@ - (void)sendIad3ClickPackage:(ADJActivityHandler *)selfI if (![selfI isEnabledI:selfI]) { return; } + + if (ADJAdjustFactory.iAdFrameworkEnabled) { + return; + } double now = [NSDate.date timeIntervalSince1970]; if (selfI.activityState != nil) { diff --git a/Adjust/ADJAdjustFactory.h b/Adjust/ADJAdjustFactory.h index e8d73160d..9628018b3 100644 --- a/Adjust/ADJAdjustFactory.h +++ b/Adjust/ADJAdjustFactory.h @@ -42,6 +42,7 @@ + (NSTimeInterval)maxDelayStart; + (NSString *)baseUrl; + (NSString *)gdprUrl; ++ (BOOL)iAdFrameworkEnabled; + (void)setPackageHandler:(id)packageHandler; + (void)setRequestHandler:(id)requestHandler; @@ -56,6 +57,7 @@ + (void)setPackageHandlerBackoffStrategy:(ADJBackoffStrategy *)backoffStrategy; + (void)setSdkClickHandlerBackoffStrategy:(ADJBackoffStrategy *)backoffStrategy; + (void)setTesting:(BOOL)testing; ++ (void)setiAdFrameworkEnabled:(BOOL)iAdFrameworkEnabled; + (void)setMaxDelayStart:(NSTimeInterval)maxDelayStart; + (void)setBaseUrl:(NSString *)baseUrl; + (void)setGdprUrl:(NSString *)gdprUrl; diff --git a/Adjust/ADJAdjustFactory.m b/Adjust/ADJAdjustFactory.m index 5f515eecf..d85a2ae70 100644 --- a/Adjust/ADJAdjustFactory.m +++ b/Adjust/ADJAdjustFactory.m @@ -23,6 +23,7 @@ static ADJBackoffStrategy * sdkClickHandlerBackoffStrategy = nil; static BOOL internalTesting = NO; static NSTimeInterval internalMaxDelayStart = -1; +static BOOL internaliAdFrameworkEnabled = YES; static NSString * const kBaseUrl = @"https://app.adjust.com"; static NSString * internalBaseUrl = @"https://app.adjust.com"; @@ -141,6 +142,10 @@ + (BOOL)testing { return internalTesting; } ++ (BOOL)iAdFrameworkEnabled { + return internaliAdFrameworkEnabled; +} + + (NSTimeInterval)maxDelayStart { if (internalMaxDelayStart < 0) { return 10.0; // 10 seconds @@ -208,6 +213,10 @@ + (void)setTesting:(BOOL)testing { internalTesting = testing; } ++ (void)setiAdFrameworkEnabled:(BOOL)iAdFrameworkEnabled { + internaliAdFrameworkEnabled = iAdFrameworkEnabled; +} + + (void)setMaxDelayStart:(NSTimeInterval)maxDelayStart { internalMaxDelayStart = maxDelayStart; } @@ -242,5 +251,6 @@ + (void)teardown:(BOOL)deleteState { internalMaxDelayStart = -1; internalBaseUrl = kBaseUrl; internalGdprUrl = kGdprUrl; + internaliAdFrameworkEnabled = YES; } @end diff --git a/Adjust/Adjust.h b/Adjust/Adjust.h index a6fc0c5eb..e9c0ef7cc 100644 --- a/Adjust/Adjust.h +++ b/Adjust/Adjust.h @@ -24,6 +24,7 @@ @property (nonatomic, assign) BOOL teardown; @property (nonatomic, assign) BOOL deleteState; @property (nonatomic, assign) BOOL noBackoffWait; +@property (nonatomic, assign) BOOL iAdFrameworkEnabled; @end diff --git a/Adjust/Adjust.m b/Adjust/Adjust.m index 860a775ae..a1869bfa9 100644 --- a/Adjust/Adjust.m +++ b/Adjust/Adjust.m @@ -441,6 +441,8 @@ - (void)setTestOptions:(AdjustTestOptions *)testOptions { [ADJAdjustFactory setSdkClickHandlerBackoffStrategy:[ADJBackoffStrategy backoffStrategyWithType:ADJNoWait]]; [ADJAdjustFactory setPackageHandlerBackoffStrategy:[ADJBackoffStrategy backoffStrategyWithType:ADJNoWait]]; } + + [ADJAdjustFactory setiAdFrameworkEnabled:testOptions.iAdFrameworkEnabled]; } #pragma mark - Private & helper methods diff --git a/AdjustTests/AdjustTestApp/AdjustTestApp/ATAAdjustCommandExecutor.m b/AdjustTests/AdjustTestApp/AdjustTestApp/ATAAdjustCommandExecutor.m index 99456fb25..161fbf955 100644 --- a/AdjustTests/AdjustTestApp/AdjustTestApp/ATAAdjustCommandExecutor.m +++ b/AdjustTests/AdjustTestApp/AdjustTestApp/ATAAdjustCommandExecutor.m @@ -123,6 +123,13 @@ - (void)testOptions:(NSDictionary *)parameters { testOptions.noBackoffWait = YES; } } + testOptions.iAdFrameworkEnabled = NO; // default value -> NO - iAd will not be used in test app by default + if ([parameters objectForKey:@"iAdFrameworkEnabled"]) { + NSString *iAdFrameworkEnabledStr = [parameters objectForKey:@"iAdFrameworkEnabled"][0]; + if ([iAdFrameworkEnabledStr isEqualToString:@"true"]) { + testOptions.iAdFrameworkEnabled = YES; + } + } if ([parameters objectForKey:@"teardown"]) { NSArray *teardownOptions = [parameters objectForKey:@"teardown"]; for (int i = 0; i < teardownOptions.count; i = i + 1) { From f98dfc49e4d8c5bd082448f65f224311e7437033 Mon Sep 17 00:00:00 2001 From: serj Date: Fri, 22 Jun 2018 17:54:15 +0200 Subject: [PATCH 02/67] added small verbose log line when iAd framework is disabled --- Adjust/ADJActivityHandler.m | 1 + 1 file changed, 1 insertion(+) diff --git a/Adjust/ADJActivityHandler.m b/Adjust/ADJActivityHandler.m index 0c3876004..e67cc3834 100644 --- a/Adjust/ADJActivityHandler.m +++ b/Adjust/ADJActivityHandler.m @@ -454,6 +454,7 @@ - (void)sendIad3ClickPackage:(ADJActivityHandler *)selfI } if (ADJAdjustFactory.iAdFrameworkEnabled) { + [self.logger verbose:@"Sending iAd details to server suppressed."]; return; } From 2a5569cab6d7baca392d2d168a75001dfc99e4c0 Mon Sep 17 00:00:00 2001 From: serj Date: Fri, 22 Jun 2018 18:46:58 +0200 Subject: [PATCH 03/67] small iAd fr. suppress fix --- Adjust/ADJActivityHandler.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Adjust/ADJActivityHandler.m b/Adjust/ADJActivityHandler.m index e67cc3834..c54f58dcc 100644 --- a/Adjust/ADJActivityHandler.m +++ b/Adjust/ADJActivityHandler.m @@ -453,7 +453,7 @@ - (void)sendIad3ClickPackage:(ADJActivityHandler *)selfI return; } - if (ADJAdjustFactory.iAdFrameworkEnabled) { + if (ADJAdjustFactory.iAdFrameworkEnabled == NO) { [self.logger verbose:@"Sending iAd details to server suppressed."]; return; } From 5cbb05d30e7301b345d2870b036678d7fda5b694 Mon Sep 17 00:00:00 2001 From: uerceg Date: Wed, 18 Jul 2018 17:44:38 +0200 Subject: [PATCH 04/67] SDK modifications for iMessage apps --- Adjust/ADJUtil.m | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Adjust/ADJUtil.m b/Adjust/ADJUtil.m index 215d16604..2b2243092 100644 --- a/Adjust/ADJUtil.m +++ b/Adjust/ADJUtil.m @@ -1181,7 +1181,12 @@ + (BOOL)isMainThread { } + (BOOL)isInactive { +#if ADJUST_IM + // Assume iMessage extension app can't be started from background. + return NO; +#else return [[UIApplication sharedApplication] applicationState] != UIApplicationStateActive; +#endif } + (void)launchInMainThreadWithInactive:(isInactiveInjected)isInactiveblock { @@ -1298,6 +1303,10 @@ + (BOOL)deleteFileInPath:(NSString *)filePath { } + (void)launchDeepLinkMain:(NSURL *)deepLinkUrl { +#if ADJUST_IM + // No deep linking in iMessage extension apps. + return; +#else UIApplication *sharedUIApplication = [UIApplication sharedApplication]; #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wundeclared-selector" @@ -1340,6 +1349,7 @@ + (void)launchDeepLinkMain:(NSURL *)deepLinkUrl { [ADJAdjustFactory.logger error:@"Unable to open deep link (%@)", deepLinkUrl]; } } +#endif } + (NSString *)convertDeviceToken:(NSData *)deviceToken { From 913c7907d0f21d081295410d9ab98ea3118e7eb5 Mon Sep 17 00:00:00 2001 From: uerceg Date: Wed, 18 Jul 2018 17:44:55 +0200 Subject: [PATCH 05/67] Adding iMessage example app --- Adjust.xcodeproj/project.pbxproj | 43 ++ .../Assets.xcassets/Contents.json | 6 + .../Contents.json | 78 ++ .../Base.lproj/MainInterface.storyboard | 46 ++ .../Info.plist | 31 + .../MessagesViewController.h | 13 + .../MessagesViewController.m | 113 +++ .../project.pbxproj | 675 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../AppIcon.appiconset/Contents.json | 98 +++ .../Assets.xcassets/Contents.json | 6 + .../AdjustExample-iMessage/Info.plist | 43 ++ 13 files changed, 1167 insertions(+) create mode 100644 examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Assets.xcassets/Contents.json create mode 100644 examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Assets.xcassets/iMessage App Icon.stickersiconset/Contents.json create mode 100644 examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Base.lproj/MainInterface.storyboard create mode 100644 examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Info.plist create mode 100644 examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/MessagesViewController.h create mode 100644 examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/MessagesViewController.m create mode 100644 examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.pbxproj create mode 100644 examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/AdjustExample-iMessage/AdjustExample-iMessage/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 examples/AdjustExample-iMessage/AdjustExample-iMessage/Assets.xcassets/Contents.json create mode 100644 examples/AdjustExample-iMessage/AdjustExample-iMessage/Info.plist diff --git a/Adjust.xcodeproj/project.pbxproj b/Adjust.xcodeproj/project.pbxproj index 2e653c740..d7715b533 100644 --- a/Adjust.xcodeproj/project.pbxproj +++ b/Adjust.xcodeproj/project.pbxproj @@ -302,6 +302,20 @@ remoteGlobalIDString = 9679920C18BBAE2800394606; remoteInfo = Adjust; }; + 9D01680320FF88DE0029CFFF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 9D0167FE20FF88DE0029CFFF /* AdjustExample-iMessage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 9D01676520FF81280029CFFF; + remoteInfo = "AdjustExample-iMessage"; + }; + 9D01680520FF88DE0029CFFF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 9D0167FE20FF88DE0029CFFF /* AdjustExample-iMessage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 9D01676F20FF812B0029CFFF; + remoteInfo = "AdjustExample-iMessage MessagesExtension"; + }; 9D449DB11E6ED22900E7E80B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 9D449DAD1E6ED22900E7E80B /* AdjustExample-iOS.xcodeproj */; @@ -527,6 +541,7 @@ 96FCC5371C186426007BBFE1 /* ADJResponseData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJResponseData.m; sourceTree = ""; }; 96FDD75C1C566C38009C402E /* NSURLSession+NSURLDataWithRequestMocking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURLSession+NSURLDataWithRequestMocking.h"; sourceTree = ""; }; 96FDD75D1C566C38009C402E /* NSURLSession+NSURLDataWithRequestMocking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURLSession+NSURLDataWithRequestMocking.m"; sourceTree = ""; }; + 9D0167FE20FF88DE0029CFFF /* AdjustExample-iMessage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "AdjustExample-iMessage.xcodeproj"; path = "examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj"; sourceTree = ""; }; 9D0C7D3D1D79B3FE009DDF4E /* ADJInitState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJInitState.h; sourceTree = ""; }; 9D0C7D3E1D79B3FE009DDF4E /* ADJInitState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJInitState.m; sourceTree = ""; }; 9D449DAD1E6ED22900E7E80B /* AdjustExample-iOS.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "AdjustExample-iOS.xcodeproj"; path = "examples/AdjustExample-iOS/AdjustExample-iOS.xcodeproj"; sourceTree = ""; }; @@ -974,6 +989,15 @@ path = AdjustTests; sourceTree = ""; }; + 9D0167FF20FF88DE0029CFFF /* Products */ = { + isa = PBXGroup; + children = ( + 9D01680420FF88DE0029CFFF /* AdjustExample-iMessage.app */, + 9D01680620FF88DE0029CFFF /* AdjustExample-iMessage MessagesExtension.appex */, + ); + name = Products; + sourceTree = ""; + }; 9D449DAC1E6ED20400E7E80B /* Example Apps */ = { isa = PBXGroup; children = ( @@ -982,6 +1006,7 @@ 9D449DCB1E6ED24400E7E80B /* AdjustExample-WebView.xcodeproj */, 9D449DC51E6ED24000E7E80B /* AdjustExample-tvOS.xcodeproj */, 9D449DB31E6ED23400E7E80B /* AdjustExample-iWatch.xcodeproj */, + 9D0167FE20FF88DE0029CFFF /* AdjustExample-iMessage.xcodeproj */, ); name = "Example Apps"; sourceTree = ""; @@ -1513,6 +1538,10 @@ productRefGroup = 9679920E18BBAE2800394606 /* Products */; projectDirPath = ""; projectReferences = ( + { + ProductGroup = 9D0167FF20FF88DE0029CFFF /* Products */; + ProjectRef = 9D0167FE20FF88DE0029CFFF /* AdjustExample-iMessage.xcodeproj */; + }, { ProductGroup = 9D449DAE1E6ED22900E7E80B /* Products */; ProjectRef = 9D449DAD1E6ED22900E7E80B /* AdjustExample-iOS.xcodeproj */; @@ -1570,6 +1599,20 @@ remoteRef = 6F084244200776A100568A31 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D01680420FF88DE0029CFFF /* AdjustExample-iMessage.app */ = { + isa = PBXReferenceProxy; + fileType = wrapper.application; + path = "AdjustExample-iMessage.app"; + remoteRef = 9D01680320FF88DE0029CFFF /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 9D01680620FF88DE0029CFFF /* AdjustExample-iMessage MessagesExtension.appex */ = { + isa = PBXReferenceProxy; + fileType = "wrapper.app-extension"; + path = "AdjustExample-iMessage MessagesExtension.appex"; + remoteRef = 9D01680520FF88DE0029CFFF /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; 9D449DB21E6ED22900E7E80B /* AdjustExample-iOS.app */ = { isa = PBXReferenceProxy; fileType = wrapper.application; diff --git a/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Assets.xcassets/Contents.json b/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Assets.xcassets/Contents.json new file mode 100644 index 000000000..da4a164c9 --- /dev/null +++ b/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Assets.xcassets/iMessage App Icon.stickersiconset/Contents.json b/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Assets.xcassets/iMessage App Icon.stickersiconset/Contents.json new file mode 100644 index 000000000..28c5ac36e --- /dev/null +++ b/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Assets.xcassets/iMessage App Icon.stickersiconset/Contents.json @@ -0,0 +1,78 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x45", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x45", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "67x50", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "74x55", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + }, + { + "size" : "27x20", + "idiom" : "universal", + "scale" : "2x", + "platform" : "ios" + }, + { + "size" : "27x20", + "idiom" : "universal", + "scale" : "3x", + "platform" : "ios" + }, + { + "size" : "32x24", + "idiom" : "universal", + "scale" : "2x", + "platform" : "ios" + }, + { + "size" : "32x24", + "idiom" : "universal", + "scale" : "3x", + "platform" : "ios" + }, + { + "size" : "1024x768", + "idiom" : "ios-marketing", + "scale" : "1x", + "platform" : "ios" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Base.lproj/MainInterface.storyboard b/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Base.lproj/MainInterface.storyboard new file mode 100644 index 000000000..80861b244 --- /dev/null +++ b/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Base.lproj/MainInterface.storyboard @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Info.plist b/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Info.plist new file mode 100644 index 000000000..32a93a148 --- /dev/null +++ b/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/Info.plist @@ -0,0 +1,31 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + AdjustExample-iMessage + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + XPC! + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSExtension + + NSExtensionMainStoryboard + MainInterface + NSExtensionPointIdentifier + com.apple.message-payload-provider + + + diff --git a/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/MessagesViewController.h b/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/MessagesViewController.h new file mode 100644 index 000000000..a01f5d735 --- /dev/null +++ b/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/MessagesViewController.h @@ -0,0 +1,13 @@ +// +// MessagesViewController.h +// AdjustExample-iMessage MessagesExtension +// +// Created by Uglješa Erceg (@uerceg) on 18th of July 2018. +// Copyright © 2018 Adjust GmbH. All rights reserved. +// + +#import + +@interface MessagesViewController : MSMessagesAppViewController + +@end diff --git a/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/MessagesViewController.m b/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/MessagesViewController.m new file mode 100644 index 000000000..8bf506c13 --- /dev/null +++ b/examples/AdjustExample-iMessage/AdjustExample-iMessage MessagesExtension/MessagesViewController.m @@ -0,0 +1,113 @@ +// +// MessagesViewController.m +// AdjustExample-iMessage MessagesExtension +// +// Created by Uglješa Erceg (@uerceg) on 18th of July 2018. +// Copyright © 2018 Adjust GmbH. All rights reserved. +// + +#import "Adjust.h" +#import "MessagesViewController.h" + +@interface MessagesViewController () + +@property (weak, nonatomic) IBOutlet UIButton *btnTrackEvent; + +@end + +@implementation MessagesViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + // Configure adjust SDK. + NSString *yourAppToken = @"2fm9gkqubvpc"; + NSString *environment = ADJEnvironmentSandbox; + ADJConfig *adjustConfig = [ADJConfig configWithAppToken:yourAppToken environment:environment]; + + // Change the log level. + [adjustConfig setLogLevel:ADJLogLevelVerbose]; + + // Add session callback parameters. + [Adjust addSessionCallbackParameter:@"sp_foo" value:@"sp_bar"]; + [Adjust addSessionCallbackParameter:@"sp_key" value:@"sp_value"]; + + // Add session partner parameters. + [Adjust addSessionPartnerParameter:@"sp_foo" value:@"sp_bar"]; + [Adjust addSessionPartnerParameter:@"sp_key" value:@"sp_value"]; + + // Remove session callback parameter. + [Adjust removeSessionCallbackParameter:@"sp_key"]; + + // Remove session partner parameter. + [Adjust removeSessionPartnerParameter:@"sp_foo"]; + + // Initialise the SDK. + [Adjust appDidLaunch:adjustConfig]; + }); +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; +} + +#pragma mark - Conversation Handling + +-(void)didBecomeActiveWithConversation:(MSConversation *)conversation { + // Called when the extension is about to move from the inactive to active state. + // This will happen when the extension is about to present UI. + + // Use this method to configure the extension and restore previously stored state. + + [Adjust trackSubsessionStart]; +} + +-(void)willResignActiveWithConversation:(MSConversation *)conversation { + // Called when the extension is about to move from the active to inactive state. + // This will happen when the user dissmises the extension, changes to a different + // conversation or quits Messages. + + // Use this method to release shared resources, save user data, invalidate timers, + // and store enough state information to restore your extension to its current state + // in case it is terminated later. + + [Adjust trackSubsessionEnd]; +} + +-(void)didReceiveMessage:(MSMessage *)message conversation:(MSConversation *)conversation { + // Called when a message arrives that was generated by another instance of this + // extension on a remote device. + + // Use this method to trigger UI updates in response to the message. +} + +-(void)didStartSendingMessage:(MSMessage *)message conversation:(MSConversation *)conversation { + // Called when the user taps the send button. +} + +-(void)didCancelSendingMessage:(MSMessage *)message conversation:(MSConversation *)conversation { + // Called when the user deletes the message without sending it. + + // Use this to clean up state related to the deleted message. +} + +-(void)willTransitionToPresentationStyle:(MSMessagesAppPresentationStyle)presentationStyle { + // Called before the extension transitions to a new presentation style. + + // Use this method to prepare for the change in presentation style. +} + +-(void)didTransitionToPresentationStyle:(MSMessagesAppPresentationStyle)presentationStyle { + // Called after the extension transitions to a new presentation style. + + // Use this method to finalize any behaviors associated with the change in presentation style. +} + +- (IBAction)clickTrackSimpleEvent:(id)sender { + ADJEvent *event = [ADJEvent eventWithEventToken:@"g3mfiw"]; + [Adjust trackEvent:event]; +} + +@end diff --git a/examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.pbxproj b/examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.pbxproj new file mode 100644 index 000000000..ca5171a2f --- /dev/null +++ b/examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.pbxproj @@ -0,0 +1,675 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 9D01676920FF812B0029CFFF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9D01676820FF812B0029CFFF /* Assets.xcassets */; }; + 9D01677020FF812B0029CFFF /* AdjustExample-iMessage MessagesExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 9D01676F20FF812B0029CFFF /* AdjustExample-iMessage MessagesExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 9D01677520FF812B0029CFFF /* Messages.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D01677420FF812B0029CFFF /* Messages.framework */; }; + 9D01677920FF812B0029CFFF /* MessagesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01677820FF812B0029CFFF /* MessagesViewController.m */; }; + 9D01677C20FF812B0029CFFF /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9D01677A20FF812B0029CFFF /* MainInterface.storyboard */; }; + 9D01677E20FF812C0029CFFF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9D01677D20FF812C0029CFFF /* Assets.xcassets */; }; + 9D01685620FF88F60029CFFF /* ADJDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01681320FF88F60029CFFF /* ADJDeviceInfo.m */; }; + 9D01685720FF88F60029CFFF /* ADJTimerOnce.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01681420FF88F60029CFFF /* ADJTimerOnce.m */; }; + 9D01685820FF88F60029CFFF /* ADJAttributionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01681520FF88F60029CFFF /* ADJAttributionHandler.m */; }; + 9D01685920FF88F60029CFFF /* ADJRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01681820FF88F60029CFFF /* ADJRequestHandler.m */; }; + 9D01685A20FF88F60029CFFF /* ADJKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01681B20FF88F60029CFFF /* ADJKeychain.m */; }; + 9D01685B20FF88F60029CFFF /* ADJSdkClickHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01681C20FF88F60029CFFF /* ADJSdkClickHandler.m */; }; + 9D01685C20FF88F60029CFFF /* ADJEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01681E20FF88F60029CFFF /* ADJEvent.m */; }; + 9D01685D20FF88F60029CFFF /* ADJSessionSuccess.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01682220FF88F60029CFFF /* ADJSessionSuccess.m */; }; + 9D01685E20FF88F60029CFFF /* ADJEventFailure.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01682320FF88F60029CFFF /* ADJEventFailure.m */; }; + 9D01685F20FF88F60029CFFF /* ADJEventSuccess.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01682520FF88F60029CFFF /* ADJEventSuccess.m */; }; + 9D01686020FF88F60029CFFF /* ADJActivityState.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01682620FF88F60029CFFF /* ADJActivityState.m */; }; + 9D01686120FF88F60029CFFF /* ADJSessionFailure.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01682720FF88F60029CFFF /* ADJSessionFailure.m */; }; + 9D01686220FF88F60029CFFF /* ADJTimerCycle.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01682B20FF88F60029CFFF /* ADJTimerCycle.m */; }; + 9D01686320FF88F60029CFFF /* ADJSessionParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01682C20FF88F60029CFFF /* ADJSessionParameters.m */; }; + 9D01686420FF88F60029CFFF /* ADJLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01682D20FF88F60029CFFF /* ADJLogger.m */; }; + 9D01686520FF88F60029CFFF /* ADJBackoffStrategy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01682E20FF88F60029CFFF /* ADJBackoffStrategy.m */; }; + 9D01686620FF88F60029CFFF /* Adjust.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01683020FF88F60029CFFF /* Adjust.m */; }; + 9D01686720FF88F60029CFFF /* ADJConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01683420FF88F60029CFFF /* ADJConfig.m */; }; + 9D01686820FF88F60029CFFF /* ADJPackageHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01683520FF88F60029CFFF /* ADJPackageHandler.m */; }; + 9D01686920FF88F60029CFFF /* ADJActivityKind.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01683820FF88F60029CFFF /* ADJActivityKind.m */; }; + 9D01686A20FF88F60029CFFF /* NSString+ADJAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01683B20FF88F60029CFFF /* NSString+ADJAdditions.m */; }; + 9D01686B20FF88F60029CFFF /* NSData+ADJAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01683D20FF88F60029CFFF /* NSData+ADJAdditions.m */; }; + 9D01686C20FF88F60029CFFF /* UIDevice+ADJAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01683F20FF88F60029CFFF /* UIDevice+ADJAdditions.m */; }; + 9D01686D20FF88F60029CFFF /* ADJAttribution.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01684120FF88F60029CFFF /* ADJAttribution.m */; }; + 9D01686E20FF88F60029CFFF /* ADJSystemProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01684220FF88F60029CFFF /* ADJSystemProfile.m */; }; + 9D01686F20FF88F60029CFFF /* ADJActivityPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01684420FF88F60029CFFF /* ADJActivityPackage.m */; }; + 9D01687020FF88F60029CFFF /* ADJUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01684520FF88F60029CFFF /* ADJUtil.m */; }; + 9D01687120FF88F60029CFFF /* ADJAdjustFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01684820FF88F60029CFFF /* ADJAdjustFactory.m */; }; + 9D01687220FF88F60029CFFF /* ADJResponseData.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01684B20FF88F60029CFFF /* ADJResponseData.m */; }; + 9D01687320FF88F60029CFFF /* ADJPackageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01684D20FF88F60029CFFF /* ADJPackageBuilder.m */; }; + 9D01687420FF88F60029CFFF /* ADJUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01684E20FF88F60029CFFF /* ADJUserDefaults.m */; }; + 9D01687520FF88F60029CFFF /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9D01685220FF88F60029CFFF /* Info.plist */; }; + 9D01687620FF88F60029CFFF /* ADJActivityHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01685420FF88F60029CFFF /* ADJActivityHandler.m */; }; + 9D01687720FF88F60029CFFF /* ADJReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01685520FF88F60029CFFF /* ADJReachability.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 9D01677120FF812B0029CFFF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 9D01675F20FF81280029CFFF /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9D01676E20FF812B0029CFFF; + remoteInfo = "AdjustExample-iMessage MessagesExtension"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9D01678520FF812C0029CFFF /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 9D01677020FF812B0029CFFF /* AdjustExample-iMessage MessagesExtension.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 9D01676520FF81280029CFFF /* AdjustExample-iMessage.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "AdjustExample-iMessage.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D01676820FF812B0029CFFF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 9D01676A20FF812B0029CFFF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9D01676F20FF812B0029CFFF /* AdjustExample-iMessage MessagesExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "AdjustExample-iMessage MessagesExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D01677420FF812B0029CFFF /* Messages.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Messages.framework; path = System/Library/Frameworks/Messages.framework; sourceTree = SDKROOT; }; + 9D01677720FF812B0029CFFF /* MessagesViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MessagesViewController.h; sourceTree = ""; }; + 9D01677820FF812B0029CFFF /* MessagesViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessagesViewController.m; sourceTree = ""; }; + 9D01677B20FF812B0029CFFF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; + 9D01677D20FF812C0029CFFF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 9D01677F20FF812C0029CFFF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9D01681220FF88F60029CFFF /* ADJConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJConfig.h; sourceTree = ""; }; + 9D01681320FF88F60029CFFF /* ADJDeviceInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJDeviceInfo.m; sourceTree = ""; }; + 9D01681420FF88F60029CFFF /* ADJTimerOnce.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJTimerOnce.m; sourceTree = ""; }; + 9D01681520FF88F60029CFFF /* ADJAttributionHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJAttributionHandler.m; sourceTree = ""; }; + 9D01681620FF88F60029CFFF /* Adjust.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Adjust.h; sourceTree = ""; }; + 9D01681720FF88F60029CFFF /* ADJActivityPackage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityPackage.h; sourceTree = ""; }; + 9D01681820FF88F60029CFFF /* ADJRequestHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJRequestHandler.m; sourceTree = ""; }; + 9D01681920FF88F60029CFFF /* ADJSystemProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSystemProfile.h; sourceTree = ""; }; + 9D01681A20FF88F60029CFFF /* ADJAttribution.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJAttribution.h; sourceTree = ""; }; + 9D01681B20FF88F60029CFFF /* ADJKeychain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJKeychain.m; sourceTree = ""; }; + 9D01681C20FF88F60029CFFF /* ADJSdkClickHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSdkClickHandler.m; sourceTree = ""; }; + 9D01681D20FF88F60029CFFF /* ADJActivityKind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityKind.h; sourceTree = ""; }; + 9D01681E20FF88F60029CFFF /* ADJEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJEvent.m; sourceTree = ""; }; + 9D01681F20FF88F60029CFFF /* ADJPackageHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJPackageHandler.h; sourceTree = ""; }; + 9D01682020FF88F60029CFFF /* ADJPackageBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJPackageBuilder.h; sourceTree = ""; }; + 9D01682120FF88F60029CFFF /* ADJResponseData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJResponseData.h; sourceTree = ""; }; + 9D01682220FF88F60029CFFF /* ADJSessionSuccess.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSessionSuccess.m; sourceTree = ""; }; + 9D01682320FF88F60029CFFF /* ADJEventFailure.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJEventFailure.m; sourceTree = ""; }; + 9D01682420FF88F60029CFFF /* ADJAdjustFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJAdjustFactory.h; sourceTree = ""; }; + 9D01682520FF88F60029CFFF /* ADJEventSuccess.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJEventSuccess.m; sourceTree = ""; }; + 9D01682620FF88F60029CFFF /* ADJActivityState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityState.m; sourceTree = ""; }; + 9D01682720FF88F60029CFFF /* ADJSessionFailure.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSessionFailure.m; sourceTree = ""; }; + 9D01682820FF88F60029CFFF /* ADJUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUtil.h; sourceTree = ""; }; + 9D01682920FF88F60029CFFF /* ADJReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJReachability.h; sourceTree = ""; }; + 9D01682A20FF88F60029CFFF /* ADJActivityHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityHandler.h; sourceTree = ""; }; + 9D01682B20FF88F60029CFFF /* ADJTimerCycle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJTimerCycle.m; sourceTree = ""; }; + 9D01682C20FF88F60029CFFF /* ADJSessionParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSessionParameters.m; sourceTree = ""; }; + 9D01682D20FF88F60029CFFF /* ADJLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJLogger.m; sourceTree = ""; }; + 9D01682E20FF88F60029CFFF /* ADJBackoffStrategy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJBackoffStrategy.m; sourceTree = ""; }; + 9D01682F20FF88F60029CFFF /* ADJUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUserDefaults.h; sourceTree = ""; }; + 9D01683020FF88F60029CFFF /* Adjust.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Adjust.m; sourceTree = ""; }; + 9D01683120FF88F60029CFFF /* ADJAttributionHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJAttributionHandler.h; sourceTree = ""; }; + 9D01683220FF88F60029CFFF /* ADJTimerOnce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJTimerOnce.h; sourceTree = ""; }; + 9D01683320FF88F60029CFFF /* ADJDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJDeviceInfo.h; sourceTree = ""; }; + 9D01683420FF88F60029CFFF /* ADJConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJConfig.m; sourceTree = ""; }; + 9D01683520FF88F60029CFFF /* ADJPackageHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJPackageHandler.m; sourceTree = ""; }; + 9D01683620FF88F60029CFFF /* ADJEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJEvent.h; sourceTree = ""; }; + 9D01683720FF88F60029CFFF /* ADJSdkClickHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSdkClickHandler.h; sourceTree = ""; }; + 9D01683820FF88F60029CFFF /* ADJActivityKind.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityKind.m; sourceTree = ""; }; + 9D01683920FF88F60029CFFF /* ADJKeychain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJKeychain.h; sourceTree = ""; }; + 9D01683B20FF88F60029CFFF /* NSString+ADJAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+ADJAdditions.m"; sourceTree = ""; }; + 9D01683C20FF88F60029CFFF /* UIDevice+ADJAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIDevice+ADJAdditions.h"; sourceTree = ""; }; + 9D01683D20FF88F60029CFFF /* NSData+ADJAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+ADJAdditions.m"; sourceTree = ""; }; + 9D01683E20FF88F60029CFFF /* NSData+ADJAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+ADJAdditions.h"; sourceTree = ""; }; + 9D01683F20FF88F60029CFFF /* UIDevice+ADJAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIDevice+ADJAdditions.m"; sourceTree = ""; }; + 9D01684020FF88F60029CFFF /* NSString+ADJAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+ADJAdditions.h"; sourceTree = ""; }; + 9D01684120FF88F60029CFFF /* ADJAttribution.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJAttribution.m; sourceTree = ""; }; + 9D01684220FF88F60029CFFF /* ADJSystemProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSystemProfile.m; sourceTree = ""; }; + 9D01684320FF88F60029CFFF /* ADJRequestHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJRequestHandler.h; sourceTree = ""; }; + 9D01684420FF88F60029CFFF /* ADJActivityPackage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityPackage.m; sourceTree = ""; }; + 9D01684520FF88F60029CFFF /* ADJUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUtil.m; sourceTree = ""; }; + 9D01684620FF88F60029CFFF /* ADJSessionFailure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSessionFailure.h; sourceTree = ""; }; + 9D01684720FF88F60029CFFF /* ADJActivityState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityState.h; sourceTree = ""; }; + 9D01684820FF88F60029CFFF /* ADJAdjustFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJAdjustFactory.m; sourceTree = ""; }; + 9D01684920FF88F60029CFFF /* ADJEventSuccess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJEventSuccess.h; sourceTree = ""; }; + 9D01684A20FF88F60029CFFF /* ADJEventFailure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJEventFailure.h; sourceTree = ""; }; + 9D01684B20FF88F60029CFFF /* ADJResponseData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJResponseData.m; sourceTree = ""; }; + 9D01684C20FF88F60029CFFF /* ADJSessionSuccess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSessionSuccess.h; sourceTree = ""; }; + 9D01684D20FF88F60029CFFF /* ADJPackageBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJPackageBuilder.m; sourceTree = ""; }; + 9D01684E20FF88F60029CFFF /* ADJUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUserDefaults.m; sourceTree = ""; }; + 9D01684F20FF88F60029CFFF /* ADJBackoffStrategy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJBackoffStrategy.h; sourceTree = ""; }; + 9D01685020FF88F60029CFFF /* ADJLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJLogger.h; sourceTree = ""; }; + 9D01685120FF88F60029CFFF /* ADJSessionParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSessionParameters.h; sourceTree = ""; }; + 9D01685220FF88F60029CFFF /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9D01685320FF88F60029CFFF /* ADJTimerCycle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJTimerCycle.h; sourceTree = ""; }; + 9D01685420FF88F60029CFFF /* ADJActivityHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityHandler.m; sourceTree = ""; }; + 9D01685520FF88F60029CFFF /* ADJReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJReachability.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 9D01676C20FF812B0029CFFF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9D01677520FF812B0029CFFF /* Messages.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9D01675E20FF81280029CFFF = { + isa = PBXGroup; + children = ( + 9D01676720FF81280029CFFF /* AdjustExample-iMessage */, + 9D01677620FF812B0029CFFF /* AdjustExample-iMessage MessagesExtension */, + 9D01677320FF812B0029CFFF /* Frameworks */, + 9D01676620FF81280029CFFF /* Products */, + ); + sourceTree = ""; + }; + 9D01676620FF81280029CFFF /* Products */ = { + isa = PBXGroup; + children = ( + 9D01676520FF81280029CFFF /* AdjustExample-iMessage.app */, + 9D01676F20FF812B0029CFFF /* AdjustExample-iMessage MessagesExtension.appex */, + ); + name = Products; + sourceTree = ""; + }; + 9D01676720FF81280029CFFF /* AdjustExample-iMessage */ = { + isa = PBXGroup; + children = ( + 9D01676820FF812B0029CFFF /* Assets.xcassets */, + 9D01676A20FF812B0029CFFF /* Info.plist */, + ); + path = "AdjustExample-iMessage"; + sourceTree = ""; + }; + 9D01677320FF812B0029CFFF /* Frameworks */ = { + isa = PBXGroup; + children = ( + 9D01677420FF812B0029CFFF /* Messages.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 9D01677620FF812B0029CFFF /* AdjustExample-iMessage MessagesExtension */ = { + isa = PBXGroup; + children = ( + 9D01681120FF88F60029CFFF /* Adjust */, + 9D01677720FF812B0029CFFF /* MessagesViewController.h */, + 9D01677820FF812B0029CFFF /* MessagesViewController.m */, + 9D01677A20FF812B0029CFFF /* MainInterface.storyboard */, + 9D01677D20FF812C0029CFFF /* Assets.xcassets */, + 9D01677F20FF812C0029CFFF /* Info.plist */, + ); + path = "AdjustExample-iMessage MessagesExtension"; + sourceTree = ""; + }; + 9D01681120FF88F60029CFFF /* Adjust */ = { + isa = PBXGroup; + children = ( + 9D01681220FF88F60029CFFF /* ADJConfig.h */, + 9D01681320FF88F60029CFFF /* ADJDeviceInfo.m */, + 9D01681420FF88F60029CFFF /* ADJTimerOnce.m */, + 9D01681520FF88F60029CFFF /* ADJAttributionHandler.m */, + 9D01681620FF88F60029CFFF /* Adjust.h */, + 9D01681720FF88F60029CFFF /* ADJActivityPackage.h */, + 9D01681820FF88F60029CFFF /* ADJRequestHandler.m */, + 9D01681920FF88F60029CFFF /* ADJSystemProfile.h */, + 9D01681A20FF88F60029CFFF /* ADJAttribution.h */, + 9D01681B20FF88F60029CFFF /* ADJKeychain.m */, + 9D01681C20FF88F60029CFFF /* ADJSdkClickHandler.m */, + 9D01681D20FF88F60029CFFF /* ADJActivityKind.h */, + 9D01681E20FF88F60029CFFF /* ADJEvent.m */, + 9D01681F20FF88F60029CFFF /* ADJPackageHandler.h */, + 9D01682020FF88F60029CFFF /* ADJPackageBuilder.h */, + 9D01682120FF88F60029CFFF /* ADJResponseData.h */, + 9D01682220FF88F60029CFFF /* ADJSessionSuccess.m */, + 9D01682320FF88F60029CFFF /* ADJEventFailure.m */, + 9D01682420FF88F60029CFFF /* ADJAdjustFactory.h */, + 9D01682520FF88F60029CFFF /* ADJEventSuccess.m */, + 9D01682620FF88F60029CFFF /* ADJActivityState.m */, + 9D01682720FF88F60029CFFF /* ADJSessionFailure.m */, + 9D01682820FF88F60029CFFF /* ADJUtil.h */, + 9D01682920FF88F60029CFFF /* ADJReachability.h */, + 9D01682A20FF88F60029CFFF /* ADJActivityHandler.h */, + 9D01682B20FF88F60029CFFF /* ADJTimerCycle.m */, + 9D01682C20FF88F60029CFFF /* ADJSessionParameters.m */, + 9D01682D20FF88F60029CFFF /* ADJLogger.m */, + 9D01682E20FF88F60029CFFF /* ADJBackoffStrategy.m */, + 9D01682F20FF88F60029CFFF /* ADJUserDefaults.h */, + 9D01683020FF88F60029CFFF /* Adjust.m */, + 9D01683120FF88F60029CFFF /* ADJAttributionHandler.h */, + 9D01683220FF88F60029CFFF /* ADJTimerOnce.h */, + 9D01683320FF88F60029CFFF /* ADJDeviceInfo.h */, + 9D01683420FF88F60029CFFF /* ADJConfig.m */, + 9D01683520FF88F60029CFFF /* ADJPackageHandler.m */, + 9D01683620FF88F60029CFFF /* ADJEvent.h */, + 9D01683720FF88F60029CFFF /* ADJSdkClickHandler.h */, + 9D01683820FF88F60029CFFF /* ADJActivityKind.m */, + 9D01683920FF88F60029CFFF /* ADJKeychain.h */, + 9D01683A20FF88F60029CFFF /* ADJAdditions */, + 9D01684120FF88F60029CFFF /* ADJAttribution.m */, + 9D01684220FF88F60029CFFF /* ADJSystemProfile.m */, + 9D01684320FF88F60029CFFF /* ADJRequestHandler.h */, + 9D01684420FF88F60029CFFF /* ADJActivityPackage.m */, + 9D01684520FF88F60029CFFF /* ADJUtil.m */, + 9D01684620FF88F60029CFFF /* ADJSessionFailure.h */, + 9D01684720FF88F60029CFFF /* ADJActivityState.h */, + 9D01684820FF88F60029CFFF /* ADJAdjustFactory.m */, + 9D01684920FF88F60029CFFF /* ADJEventSuccess.h */, + 9D01684A20FF88F60029CFFF /* ADJEventFailure.h */, + 9D01684B20FF88F60029CFFF /* ADJResponseData.m */, + 9D01684C20FF88F60029CFFF /* ADJSessionSuccess.h */, + 9D01684D20FF88F60029CFFF /* ADJPackageBuilder.m */, + 9D01684E20FF88F60029CFFF /* ADJUserDefaults.m */, + 9D01684F20FF88F60029CFFF /* ADJBackoffStrategy.h */, + 9D01685020FF88F60029CFFF /* ADJLogger.h */, + 9D01685120FF88F60029CFFF /* ADJSessionParameters.h */, + 9D01685220FF88F60029CFFF /* Info.plist */, + 9D01685320FF88F60029CFFF /* ADJTimerCycle.h */, + 9D01685420FF88F60029CFFF /* ADJActivityHandler.m */, + 9D01685520FF88F60029CFFF /* ADJReachability.m */, + ); + name = Adjust; + path = ../../../Adjust; + sourceTree = ""; + }; + 9D01683A20FF88F60029CFFF /* ADJAdditions */ = { + isa = PBXGroup; + children = ( + 9D01683B20FF88F60029CFFF /* NSString+ADJAdditions.m */, + 9D01683C20FF88F60029CFFF /* UIDevice+ADJAdditions.h */, + 9D01683D20FF88F60029CFFF /* NSData+ADJAdditions.m */, + 9D01683E20FF88F60029CFFF /* NSData+ADJAdditions.h */, + 9D01683F20FF88F60029CFFF /* UIDevice+ADJAdditions.m */, + 9D01684020FF88F60029CFFF /* NSString+ADJAdditions.h */, + ); + path = ADJAdditions; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 9D01676420FF81280029CFFF /* AdjustExample-iMessage */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9D01678620FF812C0029CFFF /* Build configuration list for PBXNativeTarget "AdjustExample-iMessage" */; + buildPhases = ( + 9D01676320FF81280029CFFF /* Resources */, + 9D01678520FF812C0029CFFF /* Embed App Extensions */, + ); + buildRules = ( + ); + dependencies = ( + 9D01677220FF812B0029CFFF /* PBXTargetDependency */, + ); + name = "AdjustExample-iMessage"; + productName = "AdjustExample-iMessage"; + productReference = 9D01676520FF81280029CFFF /* AdjustExample-iMessage.app */; + productType = "com.apple.product-type.application.messages"; + }; + 9D01676E20FF812B0029CFFF /* AdjustExample-iMessage MessagesExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9D01678220FF812C0029CFFF /* Build configuration list for PBXNativeTarget "AdjustExample-iMessage MessagesExtension" */; + buildPhases = ( + 9D01676B20FF812B0029CFFF /* Sources */, + 9D01676C20FF812B0029CFFF /* Frameworks */, + 9D01676D20FF812B0029CFFF /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "AdjustExample-iMessage MessagesExtension"; + productName = "AdjustExample-iMessage MessagesExtension"; + productReference = 9D01676F20FF812B0029CFFF /* AdjustExample-iMessage MessagesExtension.appex */; + productType = "com.apple.product-type.app-extension.messages"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 9D01675F20FF81280029CFFF /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0940; + ORGANIZATIONNAME = "Adjust GmbH"; + TargetAttributes = { + 9D01676420FF81280029CFFF = { + CreatedOnToolsVersion = 9.4.1; + }; + 9D01676E20FF812B0029CFFF = { + CreatedOnToolsVersion = 9.4.1; + }; + }; + }; + buildConfigurationList = 9D01676220FF81280029CFFF /* Build configuration list for PBXProject "AdjustExample-iMessage" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 9D01675E20FF81280029CFFF; + productRefGroup = 9D01676620FF81280029CFFF /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 9D01676420FF81280029CFFF /* AdjustExample-iMessage */, + 9D01676E20FF812B0029CFFF /* AdjustExample-iMessage MessagesExtension */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 9D01676320FF81280029CFFF /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9D01676920FF812B0029CFFF /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9D01676D20FF812B0029CFFF /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9D01677E20FF812C0029CFFF /* Assets.xcassets in Resources */, + 9D01677C20FF812B0029CFFF /* MainInterface.storyboard in Resources */, + 9D01687520FF88F60029CFFF /* Info.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 9D01676B20FF812B0029CFFF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9D01685820FF88F60029CFFF /* ADJAttributionHandler.m in Sources */, + 9D01686120FF88F60029CFFF /* ADJSessionFailure.m in Sources */, + 9D01686520FF88F60029CFFF /* ADJBackoffStrategy.m in Sources */, + 9D01677920FF812B0029CFFF /* MessagesViewController.m in Sources */, + 9D01686F20FF88F60029CFFF /* ADJActivityPackage.m in Sources */, + 9D01686920FF88F60029CFFF /* ADJActivityKind.m in Sources */, + 9D01685F20FF88F60029CFFF /* ADJEventSuccess.m in Sources */, + 9D01685920FF88F60029CFFF /* ADJRequestHandler.m in Sources */, + 9D01686420FF88F60029CFFF /* ADJLogger.m in Sources */, + 9D01687020FF88F60029CFFF /* ADJUtil.m in Sources */, + 9D01685B20FF88F60029CFFF /* ADJSdkClickHandler.m in Sources */, + 9D01686C20FF88F60029CFFF /* UIDevice+ADJAdditions.m in Sources */, + 9D01687620FF88F60029CFFF /* ADJActivityHandler.m in Sources */, + 9D01686720FF88F60029CFFF /* ADJConfig.m in Sources */, + 9D01687720FF88F60029CFFF /* ADJReachability.m in Sources */, + 9D01685A20FF88F60029CFFF /* ADJKeychain.m in Sources */, + 9D01686A20FF88F60029CFFF /* NSString+ADJAdditions.m in Sources */, + 9D01687120FF88F60029CFFF /* ADJAdjustFactory.m in Sources */, + 9D01687220FF88F60029CFFF /* ADJResponseData.m in Sources */, + 9D01686020FF88F60029CFFF /* ADJActivityState.m in Sources */, + 9D01687420FF88F60029CFFF /* ADJUserDefaults.m in Sources */, + 9D01686820FF88F60029CFFF /* ADJPackageHandler.m in Sources */, + 9D01685E20FF88F60029CFFF /* ADJEventFailure.m in Sources */, + 9D01686E20FF88F60029CFFF /* ADJSystemProfile.m in Sources */, + 9D01685720FF88F60029CFFF /* ADJTimerOnce.m in Sources */, + 9D01686220FF88F60029CFFF /* ADJTimerCycle.m in Sources */, + 9D01686D20FF88F60029CFFF /* ADJAttribution.m in Sources */, + 9D01686320FF88F60029CFFF /* ADJSessionParameters.m in Sources */, + 9D01686B20FF88F60029CFFF /* NSData+ADJAdditions.m in Sources */, + 9D01685C20FF88F60029CFFF /* ADJEvent.m in Sources */, + 9D01687320FF88F60029CFFF /* ADJPackageBuilder.m in Sources */, + 9D01685620FF88F60029CFFF /* ADJDeviceInfo.m in Sources */, + 9D01686620FF88F60029CFFF /* Adjust.m in Sources */, + 9D01685D20FF88F60029CFFF /* ADJSessionSuccess.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 9D01677220FF812B0029CFFF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 9D01676E20FF812B0029CFFF /* AdjustExample-iMessage MessagesExtension */; + targetProxy = 9D01677120FF812B0029CFFF /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 9D01677A20FF812B0029CFFF /* MainInterface.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 9D01677B20FF812B0029CFFF /* Base */, + ); + name = MainInterface.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 9D01678020FF812C0029CFFF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 9D01678120FF812C0029CFFF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 9D01678320FF812C0029CFFF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = QGUGW9AUMK; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + "ADJUST_IM=1", + ); + INFOPLIST_FILE = "AdjustExample-iMessage MessagesExtension/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + OTHER_LDFLAGS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = com.adjust.examples.MessagesExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 9D01678420FF812C0029CFFF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = QGUGW9AUMK; + GCC_PREPROCESSOR_DEFINITIONS = "ADJUST_IM=1"; + INFOPLIST_FILE = "AdjustExample-iMessage MessagesExtension/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + OTHER_LDFLAGS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = com.adjust.examples.MessagesExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 9D01678720FF812C0029CFFF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = QGUGW9AUMK; + INFOPLIST_FILE = "AdjustExample-iMessage/Info.plist"; + OTHER_LDFLAGS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = com.adjust.examples; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 9D01678820FF812C0029CFFF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = QGUGW9AUMK; + INFOPLIST_FILE = "AdjustExample-iMessage/Info.plist"; + OTHER_LDFLAGS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = com.adjust.examples; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 9D01676220FF81280029CFFF /* Build configuration list for PBXProject "AdjustExample-iMessage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9D01678020FF812C0029CFFF /* Debug */, + 9D01678120FF812C0029CFFF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9D01678220FF812C0029CFFF /* Build configuration list for PBXNativeTarget "AdjustExample-iMessage MessagesExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9D01678320FF812C0029CFFF /* Debug */, + 9D01678420FF812C0029CFFF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9D01678620FF812C0029CFFF /* Build configuration list for PBXNativeTarget "AdjustExample-iMessage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9D01678720FF812C0029CFFF /* Debug */, + 9D01678820FF812C0029CFFF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 9D01675F20FF81280029CFFF /* Project object */; +} diff --git a/examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..6de1a42de --- /dev/null +++ b/examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/AdjustExample-iMessage/AdjustExample-iMessage/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/AdjustExample-iMessage/AdjustExample-iMessage/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..d8db8d65f --- /dev/null +++ b/examples/AdjustExample-iMessage/AdjustExample-iMessage/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/examples/AdjustExample-iMessage/AdjustExample-iMessage/Assets.xcassets/Contents.json b/examples/AdjustExample-iMessage/AdjustExample-iMessage/Assets.xcassets/Contents.json new file mode 100644 index 000000000..da4a164c9 --- /dev/null +++ b/examples/AdjustExample-iMessage/AdjustExample-iMessage/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/examples/AdjustExample-iMessage/AdjustExample-iMessage/Info.plist b/examples/AdjustExample-iMessage/AdjustExample-iMessage/Info.plist new file mode 100644 index 000000000..4222ac2dd --- /dev/null +++ b/examples/AdjustExample-iMessage/AdjustExample-iMessage/Info.plist @@ -0,0 +1,43 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + From 3cb8a839a793f81af496185a5d87d81053359d46 Mon Sep 17 00:00:00 2001 From: uerceg Date: Wed, 18 Jul 2018 17:51:42 +0200 Subject: [PATCH 06/67] New version 4.14.2 --- Adjust.podspec | 4 ++-- Adjust/ADJUtil.m | 2 +- Adjust/Adjust.h | 2 +- AdjustTests/AdjustTestApp/AdjustTestApp/ViewController.m | 2 +- AdjustTests/AdjustUnitTests/ADJPackageFields.m | 2 +- README.md | 4 ++-- VERSION | 2 +- doc/english/migrate.md | 2 +- doc/japanese/migrate_ja.md | 2 +- doc/migrate.md | 2 +- 10 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Adjust.podspec b/Adjust.podspec index aeed80e9a..64ce83c6e 100644 --- a/Adjust.podspec +++ b/Adjust.podspec @@ -1,11 +1,11 @@ Pod::Spec.new do |s| s.name = "Adjust" - s.version = "4.14.1" + s.version = "4.14.2" s.summary = "This is the iOS SDK of adjust. You can read more about it at http://adjust.com." s.homepage = "https://github.com/adjust/ios_sdk" s.license = { :type => 'MIT', :file => 'MIT-LICENSE' } s.author = { "Christian Wellenbrock" => "welle@adjust.com" } - s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.14.1" } + s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.14.2" } s.ios.deployment_target = '6.0' s.tvos.deployment_target = '9.0' s.framework = 'SystemConfiguration' diff --git a/Adjust/ADJUtil.m b/Adjust/ADJUtil.m index 2b2243092..c9bec4d62 100644 --- a/Adjust/ADJUtil.m +++ b/Adjust/ADJUtil.m @@ -41,7 +41,7 @@ static NSString *userAgent = nil; -static NSString * const kClientSdk = @"ios4.14.1"; +static NSString * const kClientSdk = @"ios4.14.2"; static NSString * const kDeeplinkParam = @"deep_link="; static NSString * const kSchemeDelimiter = @"://"; static NSString * const kDefaultScheme = @"AdjustUniversalScheme"; diff --git a/Adjust/Adjust.h b/Adjust/Adjust.h index e9c0ef7cc..e87a18ac8 100644 --- a/Adjust/Adjust.h +++ b/Adjust/Adjust.h @@ -2,7 +2,7 @@ // Adjust.h // Adjust // -// V4.14.1 +// V4.14.2 // Created by Christian Wellenbrock (wellle) on 23rd July 2013. // Copyright © 2012-2017 Adjust GmbH. All rights reserved. // diff --git a/AdjustTests/AdjustTestApp/AdjustTestApp/ViewController.m b/AdjustTests/AdjustTestApp/AdjustTestApp/ViewController.m index 25abdc46f..9204be313 100644 --- a/AdjustTests/AdjustTestApp/AdjustTestApp/ViewController.m +++ b/AdjustTests/AdjustTestApp/AdjustTestApp/ViewController.m @@ -36,7 +36,7 @@ - (void)viewDidLoad { } - (void)startTestSession { - [self.testLibrary startTestSession:@"ios4.14.1"]; + [self.testLibrary startTestSession:@"ios4.14.2"]; } - (void)didReceiveMemoryWarning { diff --git a/AdjustTests/AdjustUnitTests/ADJPackageFields.m b/AdjustTests/AdjustUnitTests/ADJPackageFields.m index 47eb1b1e4..f5f212c22 100644 --- a/AdjustTests/AdjustUnitTests/ADJPackageFields.m +++ b/AdjustTests/AdjustUnitTests/ADJPackageFields.m @@ -16,7 +16,7 @@ - (id) init { // default values self.appToken = @"qwerty123456"; - self.clientSdk = @"ios4.14.1"; + self.clientSdk = @"ios4.14.2"; self.suffix = @""; self.environment = @"sandbox"; diff --git a/README.md b/README.md index 97c84a3d0..c85939482 100644 --- a/README.md +++ b/README.md @@ -68,13 +68,13 @@ We will describe the steps to integrate the adjust SDK into your iOS project. We If you're using [CocoaPods][cocoapods], you can add the following line to your `Podfile` and continue from [this step](#sdk-integrate): ```ruby -pod 'Adjust', '~> 4.14.1' +pod 'Adjust', '~> 4.14.2' ``` or: ```ruby -pod 'Adjust', :git => 'https://github.com/adjust/ios_sdk.git', :tag => 'v4.14.1' +pod 'Adjust', :git => 'https://github.com/adjust/ios_sdk.git', :tag => 'v4.14.2' ``` --- diff --git a/VERSION b/VERSION index d2b9909a9..0fb7a35b6 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.14.1 +4.14.2 diff --git a/doc/english/migrate.md b/doc/english/migrate.md index c1a70a26c..09a05c203 100644 --- a/doc/english/migrate.md +++ b/doc/english/migrate.md @@ -1,4 +1,4 @@ -## Migrate your adjust SDK for iOS to v4.14.1 from v3.4.0 +## Migrate your adjust SDK for iOS to v4.14.2 from v3.4.0 ### Initial setup diff --git a/doc/japanese/migrate_ja.md b/doc/japanese/migrate_ja.md index 98de0e3f4..3a6cdc6d7 100644 --- a/doc/japanese/migrate_ja.md +++ b/doc/japanese/migrate_ja.md @@ -1,4 +1,4 @@ -## iOS用adjust SDKのv3.4.0からv4.14.1への移行 +## iOS用adjust SDKのv3.4.0からv4.14.2への移行 ### 初期設定 diff --git a/doc/migrate.md b/doc/migrate.md index c1a70a26c..09a05c203 100644 --- a/doc/migrate.md +++ b/doc/migrate.md @@ -1,4 +1,4 @@ -## Migrate your adjust SDK for iOS to v4.14.1 from v3.4.0 +## Migrate your adjust SDK for iOS to v4.14.2 from v3.4.0 ### Initial setup From 8a7cfc16fafe983a9fb5e6e59186fe60c22fb620 Mon Sep 17 00:00:00 2001 From: uerceg Date: Thu, 19 Jul 2018 09:31:06 +0200 Subject: [PATCH 07/67] Add dynamic iMessage framework target --- Adjust.xcodeproj/project.pbxproj | 441 ++++++++++++++++++++++++++++++- AdjustSdkIm/AdjustSdkIm.h | 27 ++ AdjustSdkIm/Info.plist | 24 ++ 3 files changed, 489 insertions(+), 3 deletions(-) create mode 100644 AdjustSdkIm/AdjustSdkIm.h create mode 100644 AdjustSdkIm/Info.plist diff --git a/Adjust.xcodeproj/project.pbxproj b/Adjust.xcodeproj/project.pbxproj index d7715b533..bb076f0be 100644 --- a/Adjust.xcodeproj/project.pbxproj +++ b/Adjust.xcodeproj/project.pbxproj @@ -155,7 +155,75 @@ 9DDF24431F7BE4BA001C1A70 /* ADJUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DD0E9AC1F44690B00B2A759 /* ADJUserDefaults.h */; }; 9DDF24441F7BE4DF001C1A70 /* ADJUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DD0E9AD1F44690B00B2A759 /* ADJUserDefaults.m */; }; 9DDF24451F7BE4E7001C1A70 /* ADJUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DD0E9AC1F44690B00B2A759 /* ADJUserDefaults.h */; }; + 9DE354D62100726300D211C9 /* AdjustSdkIm.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DE354D42100726300D211C9 /* AdjustSdkIm.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9DE7C8FD1AE688DA001556E5 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DE7C8FC1AE688DA001556E5 /* UIKit.framework */; }; + 9DEAF0F5210072BC005CAEDB /* ADJConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0B1210072BC005CAEDB /* ADJConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DEAF0F6210072BC005CAEDB /* ADJDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0B2210072BC005CAEDB /* ADJDeviceInfo.m */; }; + 9DEAF0F7210072BC005CAEDB /* ADJTimerOnce.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0B3210072BC005CAEDB /* ADJTimerOnce.m */; }; + 9DEAF0F8210072BC005CAEDB /* ADJAttributionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0B4210072BC005CAEDB /* ADJAttributionHandler.m */; }; + 9DEAF0F9210072BC005CAEDB /* Adjust.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0B5210072BC005CAEDB /* Adjust.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DEAF0FA210072BC005CAEDB /* ADJActivityPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0B6210072BC005CAEDB /* ADJActivityPackage.h */; }; + 9DEAF0FB210072BC005CAEDB /* ADJRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0B7210072BC005CAEDB /* ADJRequestHandler.m */; }; + 9DEAF0FC210072BC005CAEDB /* ADJSystemProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0B8210072BC005CAEDB /* ADJSystemProfile.h */; }; + 9DEAF0FD210072BC005CAEDB /* ADJAttribution.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0B9210072BC005CAEDB /* ADJAttribution.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DEAF0FE210072BC005CAEDB /* ADJKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0BA210072BC005CAEDB /* ADJKeychain.m */; }; + 9DEAF0FF210072BC005CAEDB /* ADJSdkClickHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0BB210072BC005CAEDB /* ADJSdkClickHandler.m */; }; + 9DEAF100210072BC005CAEDB /* ADJActivityKind.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0BC210072BC005CAEDB /* ADJActivityKind.h */; }; + 9DEAF101210072BC005CAEDB /* ADJEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0BD210072BC005CAEDB /* ADJEvent.m */; }; + 9DEAF102210072BC005CAEDB /* ADJPackageHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0BE210072BC005CAEDB /* ADJPackageHandler.h */; }; + 9DEAF103210072BC005CAEDB /* ADJPackageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0BF210072BC005CAEDB /* ADJPackageBuilder.h */; }; + 9DEAF104210072BC005CAEDB /* ADJResponseData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0C0210072BC005CAEDB /* ADJResponseData.h */; }; + 9DEAF105210072BC005CAEDB /* ADJSessionSuccess.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0C1210072BC005CAEDB /* ADJSessionSuccess.m */; }; + 9DEAF106210072BC005CAEDB /* ADJEventFailure.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0C2210072BC005CAEDB /* ADJEventFailure.m */; }; + 9DEAF107210072BC005CAEDB /* ADJAdjustFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0C3210072BC005CAEDB /* ADJAdjustFactory.h */; }; + 9DEAF108210072BC005CAEDB /* ADJEventSuccess.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0C4210072BC005CAEDB /* ADJEventSuccess.m */; }; + 9DEAF109210072BC005CAEDB /* ADJActivityState.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0C5210072BC005CAEDB /* ADJActivityState.m */; }; + 9DEAF10A210072BC005CAEDB /* ADJSessionFailure.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0C6210072BC005CAEDB /* ADJSessionFailure.m */; }; + 9DEAF10B210072BC005CAEDB /* ADJUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0C7210072BC005CAEDB /* ADJUtil.h */; }; + 9DEAF10C210072BC005CAEDB /* ADJReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0C8210072BC005CAEDB /* ADJReachability.h */; }; + 9DEAF10D210072BC005CAEDB /* ADJActivityHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0C9210072BC005CAEDB /* ADJActivityHandler.h */; }; + 9DEAF10E210072BC005CAEDB /* ADJTimerCycle.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0CA210072BC005CAEDB /* ADJTimerCycle.m */; }; + 9DEAF10F210072BC005CAEDB /* ADJSessionParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0CB210072BC005CAEDB /* ADJSessionParameters.m */; }; + 9DEAF110210072BC005CAEDB /* ADJLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0CC210072BC005CAEDB /* ADJLogger.m */; }; + 9DEAF111210072BC005CAEDB /* ADJBackoffStrategy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0CD210072BC005CAEDB /* ADJBackoffStrategy.m */; }; + 9DEAF112210072BC005CAEDB /* ADJUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0CE210072BC005CAEDB /* ADJUserDefaults.h */; }; + 9DEAF113210072BC005CAEDB /* Adjust.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0CF210072BC005CAEDB /* Adjust.m */; }; + 9DEAF114210072BC005CAEDB /* ADJAttributionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0D0210072BC005CAEDB /* ADJAttributionHandler.h */; }; + 9DEAF115210072BC005CAEDB /* ADJTimerOnce.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0D1210072BC005CAEDB /* ADJTimerOnce.h */; }; + 9DEAF116210072BC005CAEDB /* ADJDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0D2210072BC005CAEDB /* ADJDeviceInfo.h */; }; + 9DEAF117210072BC005CAEDB /* ADJConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0D3210072BC005CAEDB /* ADJConfig.m */; }; + 9DEAF118210072BC005CAEDB /* ADJPackageHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0D4210072BC005CAEDB /* ADJPackageHandler.m */; }; + 9DEAF119210072BC005CAEDB /* ADJEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0D5210072BC005CAEDB /* ADJEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DEAF11A210072BC005CAEDB /* ADJSdkClickHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0D6210072BC005CAEDB /* ADJSdkClickHandler.h */; }; + 9DEAF11B210072BC005CAEDB /* ADJActivityKind.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0D7210072BC005CAEDB /* ADJActivityKind.m */; }; + 9DEAF11C210072BC005CAEDB /* ADJKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0D8210072BC005CAEDB /* ADJKeychain.h */; }; + 9DEAF11D210072BC005CAEDB /* NSString+ADJAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0DA210072BC005CAEDB /* NSString+ADJAdditions.m */; }; + 9DEAF11E210072BC005CAEDB /* UIDevice+ADJAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0DB210072BC005CAEDB /* UIDevice+ADJAdditions.h */; }; + 9DEAF11F210072BC005CAEDB /* NSData+ADJAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0DC210072BC005CAEDB /* NSData+ADJAdditions.m */; }; + 9DEAF120210072BC005CAEDB /* NSData+ADJAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0DD210072BC005CAEDB /* NSData+ADJAdditions.h */; }; + 9DEAF121210072BC005CAEDB /* UIDevice+ADJAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0DE210072BC005CAEDB /* UIDevice+ADJAdditions.m */; }; + 9DEAF122210072BC005CAEDB /* NSString+ADJAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0DF210072BC005CAEDB /* NSString+ADJAdditions.h */; }; + 9DEAF123210072BC005CAEDB /* ADJAttribution.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0E0210072BC005CAEDB /* ADJAttribution.m */; }; + 9DEAF124210072BC005CAEDB /* ADJSystemProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0E1210072BC005CAEDB /* ADJSystemProfile.m */; }; + 9DEAF125210072BC005CAEDB /* ADJRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0E2210072BC005CAEDB /* ADJRequestHandler.h */; }; + 9DEAF126210072BC005CAEDB /* ADJActivityPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0E3210072BC005CAEDB /* ADJActivityPackage.m */; }; + 9DEAF127210072BC005CAEDB /* ADJUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0E4210072BC005CAEDB /* ADJUtil.m */; }; + 9DEAF128210072BC005CAEDB /* ADJSessionFailure.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0E5210072BC005CAEDB /* ADJSessionFailure.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DEAF129210072BC005CAEDB /* ADJActivityState.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0E6210072BC005CAEDB /* ADJActivityState.h */; }; + 9DEAF12A210072BC005CAEDB /* ADJAdjustFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0E7210072BC005CAEDB /* ADJAdjustFactory.m */; }; + 9DEAF12B210072BC005CAEDB /* ADJEventSuccess.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0E8210072BC005CAEDB /* ADJEventSuccess.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DEAF12C210072BC005CAEDB /* ADJEventFailure.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0E9210072BC005CAEDB /* ADJEventFailure.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DEAF12D210072BC005CAEDB /* ADJResponseData.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0EA210072BC005CAEDB /* ADJResponseData.m */; }; + 9DEAF12E210072BC005CAEDB /* ADJSessionSuccess.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0EB210072BC005CAEDB /* ADJSessionSuccess.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DEAF12F210072BC005CAEDB /* ADJPackageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0EC210072BC005CAEDB /* ADJPackageBuilder.m */; }; + 9DEAF130210072BC005CAEDB /* ADJUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0ED210072BC005CAEDB /* ADJUserDefaults.m */; }; + 9DEAF131210072BC005CAEDB /* ADJBackoffStrategy.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0EE210072BC005CAEDB /* ADJBackoffStrategy.h */; }; + 9DEAF132210072BC005CAEDB /* ADJLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0EF210072BC005CAEDB /* ADJLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DEAF133210072BC005CAEDB /* ADJSessionParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0F0210072BC005CAEDB /* ADJSessionParameters.h */; }; + 9DEAF134210072BC005CAEDB /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9DEAF0F1210072BC005CAEDB /* Info.plist */; }; + 9DEAF135210072BC005CAEDB /* ADJTimerCycle.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0F2210072BC005CAEDB /* ADJTimerCycle.h */; }; + 9DEAF136210072BC005CAEDB /* ADJActivityHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0F3210072BC005CAEDB /* ADJActivityHandler.m */; }; + 9DEAF137210072BC005CAEDB /* ADJReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0F4210072BC005CAEDB /* ADJReachability.m */; }; 9DF9C8B31D6ED228008E362F /* ADJKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DF9C8B11D6ED228008E362F /* ADJKeychain.h */; }; 9DF9C8B41D6ED228008E362F /* ADJKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DF9C8B21D6ED228008E362F /* ADJKeychain.m */; }; 9DF9C9091D6F3CA5008E362F /* ADJActivityHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DF9C8C91D6F3CA5008E362F /* ADJActivityHandler.h */; }; @@ -564,7 +632,77 @@ 9D75F1861D07460600E5D222 /* adjust.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = adjust.js; sourceTree = ""; }; 9DD0E9AC1F44690B00B2A759 /* ADJUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUserDefaults.h; sourceTree = ""; }; 9DD0E9AD1F44690B00B2A759 /* ADJUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUserDefaults.m; sourceTree = ""; }; + 9DE354D22100726300D211C9 /* AdjustSdkIm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AdjustSdkIm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9DE354D42100726300D211C9 /* AdjustSdkIm.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AdjustSdkIm.h; sourceTree = ""; }; + 9DE354D52100726300D211C9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 9DE7C8FC1AE688DA001556E5 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 9DEAF0B1210072BC005CAEDB /* ADJConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJConfig.h; sourceTree = ""; }; + 9DEAF0B2210072BC005CAEDB /* ADJDeviceInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJDeviceInfo.m; sourceTree = ""; }; + 9DEAF0B3210072BC005CAEDB /* ADJTimerOnce.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJTimerOnce.m; sourceTree = ""; }; + 9DEAF0B4210072BC005CAEDB /* ADJAttributionHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJAttributionHandler.m; sourceTree = ""; }; + 9DEAF0B5210072BC005CAEDB /* Adjust.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Adjust.h; sourceTree = ""; }; + 9DEAF0B6210072BC005CAEDB /* ADJActivityPackage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityPackage.h; sourceTree = ""; }; + 9DEAF0B7210072BC005CAEDB /* ADJRequestHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJRequestHandler.m; sourceTree = ""; }; + 9DEAF0B8210072BC005CAEDB /* ADJSystemProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSystemProfile.h; sourceTree = ""; }; + 9DEAF0B9210072BC005CAEDB /* ADJAttribution.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJAttribution.h; sourceTree = ""; }; + 9DEAF0BA210072BC005CAEDB /* ADJKeychain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJKeychain.m; sourceTree = ""; }; + 9DEAF0BB210072BC005CAEDB /* ADJSdkClickHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSdkClickHandler.m; sourceTree = ""; }; + 9DEAF0BC210072BC005CAEDB /* ADJActivityKind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityKind.h; sourceTree = ""; }; + 9DEAF0BD210072BC005CAEDB /* ADJEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJEvent.m; sourceTree = ""; }; + 9DEAF0BE210072BC005CAEDB /* ADJPackageHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJPackageHandler.h; sourceTree = ""; }; + 9DEAF0BF210072BC005CAEDB /* ADJPackageBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJPackageBuilder.h; sourceTree = ""; }; + 9DEAF0C0210072BC005CAEDB /* ADJResponseData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJResponseData.h; sourceTree = ""; }; + 9DEAF0C1210072BC005CAEDB /* ADJSessionSuccess.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSessionSuccess.m; sourceTree = ""; }; + 9DEAF0C2210072BC005CAEDB /* ADJEventFailure.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJEventFailure.m; sourceTree = ""; }; + 9DEAF0C3210072BC005CAEDB /* ADJAdjustFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJAdjustFactory.h; sourceTree = ""; }; + 9DEAF0C4210072BC005CAEDB /* ADJEventSuccess.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJEventSuccess.m; sourceTree = ""; }; + 9DEAF0C5210072BC005CAEDB /* ADJActivityState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityState.m; sourceTree = ""; }; + 9DEAF0C6210072BC005CAEDB /* ADJSessionFailure.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSessionFailure.m; sourceTree = ""; }; + 9DEAF0C7210072BC005CAEDB /* ADJUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUtil.h; sourceTree = ""; }; + 9DEAF0C8210072BC005CAEDB /* ADJReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJReachability.h; sourceTree = ""; }; + 9DEAF0C9210072BC005CAEDB /* ADJActivityHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityHandler.h; sourceTree = ""; }; + 9DEAF0CA210072BC005CAEDB /* ADJTimerCycle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJTimerCycle.m; sourceTree = ""; }; + 9DEAF0CB210072BC005CAEDB /* ADJSessionParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSessionParameters.m; sourceTree = ""; }; + 9DEAF0CC210072BC005CAEDB /* ADJLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJLogger.m; sourceTree = ""; }; + 9DEAF0CD210072BC005CAEDB /* ADJBackoffStrategy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJBackoffStrategy.m; sourceTree = ""; }; + 9DEAF0CE210072BC005CAEDB /* ADJUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUserDefaults.h; sourceTree = ""; }; + 9DEAF0CF210072BC005CAEDB /* Adjust.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Adjust.m; sourceTree = ""; }; + 9DEAF0D0210072BC005CAEDB /* ADJAttributionHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJAttributionHandler.h; sourceTree = ""; }; + 9DEAF0D1210072BC005CAEDB /* ADJTimerOnce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJTimerOnce.h; sourceTree = ""; }; + 9DEAF0D2210072BC005CAEDB /* ADJDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJDeviceInfo.h; sourceTree = ""; }; + 9DEAF0D3210072BC005CAEDB /* ADJConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJConfig.m; sourceTree = ""; }; + 9DEAF0D4210072BC005CAEDB /* ADJPackageHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJPackageHandler.m; sourceTree = ""; }; + 9DEAF0D5210072BC005CAEDB /* ADJEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJEvent.h; sourceTree = ""; }; + 9DEAF0D6210072BC005CAEDB /* ADJSdkClickHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSdkClickHandler.h; sourceTree = ""; }; + 9DEAF0D7210072BC005CAEDB /* ADJActivityKind.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityKind.m; sourceTree = ""; }; + 9DEAF0D8210072BC005CAEDB /* ADJKeychain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJKeychain.h; sourceTree = ""; }; + 9DEAF0DA210072BC005CAEDB /* NSString+ADJAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+ADJAdditions.m"; sourceTree = ""; }; + 9DEAF0DB210072BC005CAEDB /* UIDevice+ADJAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIDevice+ADJAdditions.h"; sourceTree = ""; }; + 9DEAF0DC210072BC005CAEDB /* NSData+ADJAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+ADJAdditions.m"; sourceTree = ""; }; + 9DEAF0DD210072BC005CAEDB /* NSData+ADJAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+ADJAdditions.h"; sourceTree = ""; }; + 9DEAF0DE210072BC005CAEDB /* UIDevice+ADJAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIDevice+ADJAdditions.m"; sourceTree = ""; }; + 9DEAF0DF210072BC005CAEDB /* NSString+ADJAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+ADJAdditions.h"; sourceTree = ""; }; + 9DEAF0E0210072BC005CAEDB /* ADJAttribution.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJAttribution.m; sourceTree = ""; }; + 9DEAF0E1210072BC005CAEDB /* ADJSystemProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSystemProfile.m; sourceTree = ""; }; + 9DEAF0E2210072BC005CAEDB /* ADJRequestHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJRequestHandler.h; sourceTree = ""; }; + 9DEAF0E3210072BC005CAEDB /* ADJActivityPackage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityPackage.m; sourceTree = ""; }; + 9DEAF0E4210072BC005CAEDB /* ADJUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUtil.m; sourceTree = ""; }; + 9DEAF0E5210072BC005CAEDB /* ADJSessionFailure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSessionFailure.h; sourceTree = ""; }; + 9DEAF0E6210072BC005CAEDB /* ADJActivityState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityState.h; sourceTree = ""; }; + 9DEAF0E7210072BC005CAEDB /* ADJAdjustFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJAdjustFactory.m; sourceTree = ""; }; + 9DEAF0E8210072BC005CAEDB /* ADJEventSuccess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJEventSuccess.h; sourceTree = ""; }; + 9DEAF0E9210072BC005CAEDB /* ADJEventFailure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJEventFailure.h; sourceTree = ""; }; + 9DEAF0EA210072BC005CAEDB /* ADJResponseData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJResponseData.m; sourceTree = ""; }; + 9DEAF0EB210072BC005CAEDB /* ADJSessionSuccess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSessionSuccess.h; sourceTree = ""; }; + 9DEAF0EC210072BC005CAEDB /* ADJPackageBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJPackageBuilder.m; sourceTree = ""; }; + 9DEAF0ED210072BC005CAEDB /* ADJUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUserDefaults.m; sourceTree = ""; }; + 9DEAF0EE210072BC005CAEDB /* ADJBackoffStrategy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJBackoffStrategy.h; sourceTree = ""; }; + 9DEAF0EF210072BC005CAEDB /* ADJLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJLogger.h; sourceTree = ""; }; + 9DEAF0F0210072BC005CAEDB /* ADJSessionParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSessionParameters.h; sourceTree = ""; }; + 9DEAF0F1210072BC005CAEDB /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9DEAF0F2210072BC005CAEDB /* ADJTimerCycle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJTimerCycle.h; sourceTree = ""; }; + 9DEAF0F3210072BC005CAEDB /* ADJActivityHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityHandler.m; sourceTree = ""; }; + 9DEAF0F4210072BC005CAEDB /* ADJReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJReachability.m; sourceTree = ""; }; 9DF9C8B11D6ED228008E362F /* ADJKeychain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJKeychain.h; sourceTree = ""; }; 9DF9C8B21D6ED228008E362F /* ADJKeychain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJKeychain.m; sourceTree = ""; }; 9DF9C8C91D6F3CA5008E362F /* ADJActivityHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityHandler.h; sourceTree = ""; }; @@ -740,6 +878,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9DE354CE2100726300D211C9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 9DFA37A91C0F219400782607 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -862,10 +1007,11 @@ children = ( 96E5E34B18BBB48A008E7B30 /* Adjust */, 9DFA37AE1C0F219400782607 /* AdjustSdk */, - 9648C5E41CD1765E00A3B049 /* AdjustBridge */, + 9DE354D32100726300D211C9 /* AdjustSdkIm */, 9DFB06111D747070006D48FC /* AdjustSdkTv */, - 96E5E39A18BBB49E008E7B30 /* AdjustTests */, + 9648C5E41CD1765E00A3B049 /* AdjustBridge */, 9D449DAC1E6ED20400E7E80B /* Example Apps */, + 96E5E39A18BBB49E008E7B30 /* AdjustTests */, 9679920F18BBAE2800394606 /* Frameworks */, 9679920E18BBAE2800394606 /* Products */, ); @@ -880,6 +1026,7 @@ 9615158F1CD2CB2C0022D336 /* libAdjustBridge.a */, 9DFB06101D747070006D48FC /* AdjustSdkTv.framework */, 9D7431E61EB9F9B700969F14 /* AdjustExampleTests.app */, + 9DE354D22100726300D211C9 /* AdjustSdkIm.framework */, ); name = Products; sourceTree = ""; @@ -1077,6 +1224,98 @@ name = "Supporting Files"; sourceTree = ""; }; + 9DE354D32100726300D211C9 /* AdjustSdkIm */ = { + isa = PBXGroup; + children = ( + 9DE354D42100726300D211C9 /* AdjustSdkIm.h */, + 9DEAF0B0210072BC005CAEDB /* Adjust */, + 9DE354D52100726300D211C9 /* Info.plist */, + ); + path = AdjustSdkIm; + sourceTree = ""; + }; + 9DEAF0B0210072BC005CAEDB /* Adjust */ = { + isa = PBXGroup; + children = ( + 9DEAF0B1210072BC005CAEDB /* ADJConfig.h */, + 9DEAF0B2210072BC005CAEDB /* ADJDeviceInfo.m */, + 9DEAF0B3210072BC005CAEDB /* ADJTimerOnce.m */, + 9DEAF0B4210072BC005CAEDB /* ADJAttributionHandler.m */, + 9DEAF0B5210072BC005CAEDB /* Adjust.h */, + 9DEAF0B6210072BC005CAEDB /* ADJActivityPackage.h */, + 9DEAF0B7210072BC005CAEDB /* ADJRequestHandler.m */, + 9DEAF0B8210072BC005CAEDB /* ADJSystemProfile.h */, + 9DEAF0B9210072BC005CAEDB /* ADJAttribution.h */, + 9DEAF0BA210072BC005CAEDB /* ADJKeychain.m */, + 9DEAF0BB210072BC005CAEDB /* ADJSdkClickHandler.m */, + 9DEAF0BC210072BC005CAEDB /* ADJActivityKind.h */, + 9DEAF0BD210072BC005CAEDB /* ADJEvent.m */, + 9DEAF0BE210072BC005CAEDB /* ADJPackageHandler.h */, + 9DEAF0BF210072BC005CAEDB /* ADJPackageBuilder.h */, + 9DEAF0C0210072BC005CAEDB /* ADJResponseData.h */, + 9DEAF0C1210072BC005CAEDB /* ADJSessionSuccess.m */, + 9DEAF0C2210072BC005CAEDB /* ADJEventFailure.m */, + 9DEAF0C3210072BC005CAEDB /* ADJAdjustFactory.h */, + 9DEAF0C4210072BC005CAEDB /* ADJEventSuccess.m */, + 9DEAF0C5210072BC005CAEDB /* ADJActivityState.m */, + 9DEAF0C6210072BC005CAEDB /* ADJSessionFailure.m */, + 9DEAF0C7210072BC005CAEDB /* ADJUtil.h */, + 9DEAF0C8210072BC005CAEDB /* ADJReachability.h */, + 9DEAF0C9210072BC005CAEDB /* ADJActivityHandler.h */, + 9DEAF0CA210072BC005CAEDB /* ADJTimerCycle.m */, + 9DEAF0CB210072BC005CAEDB /* ADJSessionParameters.m */, + 9DEAF0CC210072BC005CAEDB /* ADJLogger.m */, + 9DEAF0CD210072BC005CAEDB /* ADJBackoffStrategy.m */, + 9DEAF0CE210072BC005CAEDB /* ADJUserDefaults.h */, + 9DEAF0CF210072BC005CAEDB /* Adjust.m */, + 9DEAF0D0210072BC005CAEDB /* ADJAttributionHandler.h */, + 9DEAF0D1210072BC005CAEDB /* ADJTimerOnce.h */, + 9DEAF0D2210072BC005CAEDB /* ADJDeviceInfo.h */, + 9DEAF0D3210072BC005CAEDB /* ADJConfig.m */, + 9DEAF0D4210072BC005CAEDB /* ADJPackageHandler.m */, + 9DEAF0D5210072BC005CAEDB /* ADJEvent.h */, + 9DEAF0D6210072BC005CAEDB /* ADJSdkClickHandler.h */, + 9DEAF0D7210072BC005CAEDB /* ADJActivityKind.m */, + 9DEAF0D8210072BC005CAEDB /* ADJKeychain.h */, + 9DEAF0D9210072BC005CAEDB /* ADJAdditions */, + 9DEAF0E0210072BC005CAEDB /* ADJAttribution.m */, + 9DEAF0E1210072BC005CAEDB /* ADJSystemProfile.m */, + 9DEAF0E2210072BC005CAEDB /* ADJRequestHandler.h */, + 9DEAF0E3210072BC005CAEDB /* ADJActivityPackage.m */, + 9DEAF0E4210072BC005CAEDB /* ADJUtil.m */, + 9DEAF0E5210072BC005CAEDB /* ADJSessionFailure.h */, + 9DEAF0E6210072BC005CAEDB /* ADJActivityState.h */, + 9DEAF0E7210072BC005CAEDB /* ADJAdjustFactory.m */, + 9DEAF0E8210072BC005CAEDB /* ADJEventSuccess.h */, + 9DEAF0E9210072BC005CAEDB /* ADJEventFailure.h */, + 9DEAF0EA210072BC005CAEDB /* ADJResponseData.m */, + 9DEAF0EB210072BC005CAEDB /* ADJSessionSuccess.h */, + 9DEAF0EC210072BC005CAEDB /* ADJPackageBuilder.m */, + 9DEAF0ED210072BC005CAEDB /* ADJUserDefaults.m */, + 9DEAF0EE210072BC005CAEDB /* ADJBackoffStrategy.h */, + 9DEAF0EF210072BC005CAEDB /* ADJLogger.h */, + 9DEAF0F0210072BC005CAEDB /* ADJSessionParameters.h */, + 9DEAF0F1210072BC005CAEDB /* Info.plist */, + 9DEAF0F2210072BC005CAEDB /* ADJTimerCycle.h */, + 9DEAF0F3210072BC005CAEDB /* ADJActivityHandler.m */, + 9DEAF0F4210072BC005CAEDB /* ADJReachability.m */, + ); + path = Adjust; + sourceTree = SOURCE_ROOT; + }; + 9DEAF0D9210072BC005CAEDB /* ADJAdditions */ = { + isa = PBXGroup; + children = ( + 9DEAF0DA210072BC005CAEDB /* NSString+ADJAdditions.m */, + 9DEAF0DB210072BC005CAEDB /* UIDevice+ADJAdditions.h */, + 9DEAF0DC210072BC005CAEDB /* NSData+ADJAdditions.m */, + 9DEAF0DD210072BC005CAEDB /* NSData+ADJAdditions.h */, + 9DEAF0DE210072BC005CAEDB /* UIDevice+ADJAdditions.m */, + 9DEAF0DF210072BC005CAEDB /* NSString+ADJAdditions.h */, + ); + path = ADJAdditions; + sourceTree = ""; + }; 9DF9C8C81D6F3CA5008E362F /* Adjust */ = { isa = PBXGroup; children = ( @@ -1300,6 +1539,47 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9DE354CF2100726300D211C9 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 9DE354D62100726300D211C9 /* AdjustSdkIm.h in Headers */, + 9DEAF11C210072BC005CAEDB /* ADJKeychain.h in Headers */, + 9DEAF0F9210072BC005CAEDB /* Adjust.h in Headers */, + 9DEAF0F5210072BC005CAEDB /* ADJConfig.h in Headers */, + 9DEAF119210072BC005CAEDB /* ADJEvent.h in Headers */, + 9DEAF0FD210072BC005CAEDB /* ADJAttribution.h in Headers */, + 9DEAF12E210072BC005CAEDB /* ADJSessionSuccess.h in Headers */, + 9DEAF128210072BC005CAEDB /* ADJSessionFailure.h in Headers */, + 9DEAF12B210072BC005CAEDB /* ADJEventSuccess.h in Headers */, + 9DEAF12C210072BC005CAEDB /* ADJEventFailure.h in Headers */, + 9DEAF132210072BC005CAEDB /* ADJLogger.h in Headers */, + 9DEAF107210072BC005CAEDB /* ADJAdjustFactory.h in Headers */, + 9DEAF100210072BC005CAEDB /* ADJActivityKind.h in Headers */, + 9DEAF112210072BC005CAEDB /* ADJUserDefaults.h in Headers */, + 9DEAF115210072BC005CAEDB /* ADJTimerOnce.h in Headers */, + 9DEAF135210072BC005CAEDB /* ADJTimerCycle.h in Headers */, + 9DEAF104210072BC005CAEDB /* ADJResponseData.h in Headers */, + 9DEAF122210072BC005CAEDB /* NSString+ADJAdditions.h in Headers */, + 9DEAF131210072BC005CAEDB /* ADJBackoffStrategy.h in Headers */, + 9DEAF116210072BC005CAEDB /* ADJDeviceInfo.h in Headers */, + 9DEAF11A210072BC005CAEDB /* ADJSdkClickHandler.h in Headers */, + 9DEAF10B210072BC005CAEDB /* ADJUtil.h in Headers */, + 9DEAF102210072BC005CAEDB /* ADJPackageHandler.h in Headers */, + 9DEAF133210072BC005CAEDB /* ADJSessionParameters.h in Headers */, + 9DEAF125210072BC005CAEDB /* ADJRequestHandler.h in Headers */, + 9DEAF11E210072BC005CAEDB /* UIDevice+ADJAdditions.h in Headers */, + 9DEAF0FC210072BC005CAEDB /* ADJSystemProfile.h in Headers */, + 9DEAF10D210072BC005CAEDB /* ADJActivityHandler.h in Headers */, + 9DEAF103210072BC005CAEDB /* ADJPackageBuilder.h in Headers */, + 9DEAF0FA210072BC005CAEDB /* ADJActivityPackage.h in Headers */, + 9DEAF10C210072BC005CAEDB /* ADJReachability.h in Headers */, + 9DEAF114210072BC005CAEDB /* ADJAttributionHandler.h in Headers */, + 9DEAF120210072BC005CAEDB /* NSData+ADJAdditions.h in Headers */, + 9DEAF129210072BC005CAEDB /* ADJActivityState.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 9DFA37AA1C0F219400782607 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1457,6 +1737,24 @@ productReference = 9D7431E61EB9F9B700969F14 /* AdjustExampleTests.app */; productType = "com.apple.product-type.application"; }; + 9DE354D12100726300D211C9 /* AdjustSdkIm */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9DE354E52100726300D211C9 /* Build configuration list for PBXNativeTarget "AdjustSdkIm" */; + buildPhases = ( + 9DE354CD2100726300D211C9 /* Sources */, + 9DE354CE2100726300D211C9 /* Frameworks */, + 9DE354CF2100726300D211C9 /* Headers */, + 9DE354D02100726300D211C9 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AdjustSdkIm; + productName = AdjustSdkIm; + productReference = 9DE354D22100726300D211C9 /* AdjustSdkIm.framework */; + productType = "com.apple.product-type.framework"; + }; 9DFA37AC1C0F219400782607 /* AdjustSdk */ = { isa = PBXNativeTarget; buildConfigurationList = 9DFA37B21C0F219400782607 /* Build configuration list for PBXNativeTarget "AdjustSdk" */; @@ -1518,6 +1816,11 @@ DevelopmentTeam = QGUGW9AUMK; ProvisioningStyle = Automatic; }; + 9DE354D12100726300D211C9 = { + CreatedOnToolsVersion = 9.4.1; + DevelopmentTeam = QGUGW9AUMK; + ProvisioningStyle = Automatic; + }; 9DFA37AC1C0F219400782607 = { CreatedOnToolsVersion = 7.1.1; }; @@ -1574,9 +1877,10 @@ projectRoot = ""; targets = ( 9679920C18BBAE2800394606 /* Adjust */, + 96BCFBE71AC99FBD005A65C5 /* AdjustStatic */, 9DFA37AC1C0F219400782607 /* AdjustSdk */, + 9DE354D12100726300D211C9 /* AdjustSdkIm */, 9DFB060F1D747070006D48FC /* AdjustSdkTv */, - 96BCFBE71AC99FBD005A65C5 /* AdjustStatic */, 9615158E1CD2CB2C0022D336 /* AdjustBridge */, 9679921C18BBAE2800394606 /* AdjustTests */, 9D7431E51EB9F9B700969F14 /* AdjustExampleTests */, @@ -1683,6 +1987,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9DE354D02100726300D211C9 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9DEAF134210072BC005CAEDB /* Info.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 9DFA37AB1C0F219400782607 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1858,6 +2170,46 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9DE354CD2100726300D211C9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9DEAF11D210072BC005CAEDB /* NSString+ADJAdditions.m in Sources */, + 9DEAF108210072BC005CAEDB /* ADJEventSuccess.m in Sources */, + 9DEAF106210072BC005CAEDB /* ADJEventFailure.m in Sources */, + 9DEAF109210072BC005CAEDB /* ADJActivityState.m in Sources */, + 9DEAF11F210072BC005CAEDB /* NSData+ADJAdditions.m in Sources */, + 9DEAF0FF210072BC005CAEDB /* ADJSdkClickHandler.m in Sources */, + 9DEAF10F210072BC005CAEDB /* ADJSessionParameters.m in Sources */, + 9DEAF127210072BC005CAEDB /* ADJUtil.m in Sources */, + 9DEAF113210072BC005CAEDB /* Adjust.m in Sources */, + 9DEAF136210072BC005CAEDB /* ADJActivityHandler.m in Sources */, + 9DEAF0FE210072BC005CAEDB /* ADJKeychain.m in Sources */, + 9DEAF10A210072BC005CAEDB /* ADJSessionFailure.m in Sources */, + 9DEAF121210072BC005CAEDB /* UIDevice+ADJAdditions.m in Sources */, + 9DEAF105210072BC005CAEDB /* ADJSessionSuccess.m in Sources */, + 9DEAF124210072BC005CAEDB /* ADJSystemProfile.m in Sources */, + 9DEAF0FB210072BC005CAEDB /* ADJRequestHandler.m in Sources */, + 9DEAF11B210072BC005CAEDB /* ADJActivityKind.m in Sources */, + 9DEAF126210072BC005CAEDB /* ADJActivityPackage.m in Sources */, + 9DEAF118210072BC005CAEDB /* ADJPackageHandler.m in Sources */, + 9DEAF110210072BC005CAEDB /* ADJLogger.m in Sources */, + 9DEAF0F7210072BC005CAEDB /* ADJTimerOnce.m in Sources */, + 9DEAF101210072BC005CAEDB /* ADJEvent.m in Sources */, + 9DEAF117210072BC005CAEDB /* ADJConfig.m in Sources */, + 9DEAF0F8210072BC005CAEDB /* ADJAttributionHandler.m in Sources */, + 9DEAF111210072BC005CAEDB /* ADJBackoffStrategy.m in Sources */, + 9DEAF10E210072BC005CAEDB /* ADJTimerCycle.m in Sources */, + 9DEAF0F6210072BC005CAEDB /* ADJDeviceInfo.m in Sources */, + 9DEAF12F210072BC005CAEDB /* ADJPackageBuilder.m in Sources */, + 9DEAF137210072BC005CAEDB /* ADJReachability.m in Sources */, + 9DEAF123210072BC005CAEDB /* ADJAttribution.m in Sources */, + 9DEAF12D210072BC005CAEDB /* ADJResponseData.m in Sources */, + 9DEAF12A210072BC005CAEDB /* ADJAdjustFactory.m in Sources */, + 9DEAF130210072BC005CAEDB /* ADJUserDefaults.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 9DFA37A81C0F219400782607 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -2269,6 +2621,80 @@ }; name = Release; }; + 9DE354D72100726300D211C9 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = QGUGW9AUMK; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "ADJUST_IM=1", + "$(inherited)", + ); + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = AdjustSdkIm/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.adjust.AdjustSdkIm; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 9DE354D82100726300D211C9 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = QGUGW9AUMK; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_PREPROCESSOR_DEFINITIONS = "ADJUST_IM=1"; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = AdjustSdkIm/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.adjust.AdjustSdkIm; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 9DFA37B31C0F219400782607 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2448,6 +2874,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 9DE354E52100726300D211C9 /* Build configuration list for PBXNativeTarget "AdjustSdkIm" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9DE354D72100726300D211C9 /* Debug */, + 9DE354D82100726300D211C9 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 9DFA37B21C0F219400782607 /* Build configuration list for PBXNativeTarget "AdjustSdk" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/AdjustSdkIm/AdjustSdkIm.h b/AdjustSdkIm/AdjustSdkIm.h new file mode 100644 index 000000000..c0d84c2a3 --- /dev/null +++ b/AdjustSdkIm/AdjustSdkIm.h @@ -0,0 +1,27 @@ +// +// AdjustSdkIm.h +// AdjustSdkIm +// +// Created by Uglješa Erceg (@uerceg) on 19th Julu 2018. +// Copyright © 2018 Adjust GmbH. All rights reserved. +// + +#import + +//! Project version number for AdjustSdkIm. +FOUNDATION_EXPORT double AdjustSdkImVersionNumber; + +//! Project version string for AdjustSdkIm. +FOUNDATION_EXPORT const unsigned char AdjustSdkImVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + +#import +#import +#import +#import +#import +#import +#import +#import +#import diff --git a/AdjustSdkIm/Info.plist b/AdjustSdkIm/Info.plist new file mode 100644 index 000000000..1007fd9dd --- /dev/null +++ b/AdjustSdkIm/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + From 2160334402e751d1466252e73753a879a2e06bb3 Mon Sep 17 00:00:00 2001 From: uerceg Date: Thu, 19 Jul 2018 10:08:15 +0200 Subject: [PATCH 08/67] Scripts & project files updates --- Adjust.xcodeproj/project.pbxproj | 23 +++++- .../project.pbxproj | 2 +- Scripts/build.sh | 44 ---------- scripts/build.sh | 80 +++++++++++++++++++ 4 files changed, 100 insertions(+), 49 deletions(-) delete mode 100755 Scripts/build.sh create mode 100755 scripts/build.sh diff --git a/Adjust.xcodeproj/project.pbxproj b/Adjust.xcodeproj/project.pbxproj index bb076f0be..476b53d46 100644 --- a/Adjust.xcodeproj/project.pbxproj +++ b/Adjust.xcodeproj/project.pbxproj @@ -1010,8 +1010,8 @@ 9DE354D32100726300D211C9 /* AdjustSdkIm */, 9DFB06111D747070006D48FC /* AdjustSdkTv */, 9648C5E41CD1765E00A3B049 /* AdjustBridge */, - 9D449DAC1E6ED20400E7E80B /* Example Apps */, 96E5E39A18BBB49E008E7B30 /* AdjustTests */, + 9D449DAC1E6ED20400E7E80B /* Example Apps */, 9679920F18BBAE2800394606 /* Frameworks */, 9679920E18BBAE2800394606 /* Products */, ); @@ -1745,6 +1745,7 @@ 9DE354CE2100726300D211C9 /* Frameworks */, 9DE354CF2100726300D211C9 /* Headers */, 9DE354D02100726300D211C9 /* Resources */, + 9DEAF13821007AA2005CAEDB /* Copy IM Framework */, ); buildRules = ( ); @@ -2026,7 +2027,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}Sdk.framework\"\n\n# Copy the framework to the project directory\n# ditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/Frameworks/Dynamic/${RW_FRAMEWORK_NAME}Sdk.framework\""; + shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}Sdk.framework\"\n\n# Copy the framework to the dynamic framework directory\n# ditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/frameworks/dynamic/${RW_FRAMEWORK_NAME}Sdk.framework\"\n# Copying not done because Carthage dynamic build is used for dynamic framework version"; }; 9DE7C9011AE68F68001556E5 /* Build Framework */ = { isa = PBXShellScriptBuildPhase; @@ -2054,7 +2055,21 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_INPUT_STATIC_LIB=\"lib${PROJECT_NAME}.a\"\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/Static/${RW_FRAMEWORK_NAME}Sdk.framework\"\n\nfunction build_static_library {\n echo \"1\"\n echo \"${BUILD_DIR}\"\n # Will rebuild the static library as specified\n # build_static_library sdk\n xcrun xcodebuild -project \"${PROJECT_FILE_PATH}\" \\\n -target \"${TARGET_NAME}\" \\\n -configuration \"${CONFIGURATION}\" \\\n -sdk \"${1}\" \\\n ONLY_ACTIVE_ARCH=NO \\\n BUILD_DIR=\"${BUILD_DIR}\" \\\n OBJROOT=\"${OBJROOT}\" \\\n BUILD_ROOT=\"${BUILD_ROOT}\" \\\n SYMROOT=\"${SYMROOT}\" $ACTION\n}\n\nfunction make_fat_library {\n # Will smash 2 static libs together\n # make_fat_library in1 in2 out\n xcrun lipo -create \"${1}\" \"${2}\" -output \"${3}\"\n}\n\n# 1 - Extract the platform (iphoneos/iphonesimulator) from the SDK name\nif [[ \"$SDK_NAME\" =~ ([A-Za-z]+) ]]; then\nRW_SDK_PLATFORM=${BASH_REMATCH[1]}\nelse\necho \"Could not find platform name from SDK_NAME: $SDK_NAME\"\nexit 1\nfi\n\n# 2 - Extract the version from the SDK\nif [[ \"$SDK_NAME\" =~ ([0-9]+.*$) ]]; then\nRW_SDK_VERSION=${BASH_REMATCH[1]}\nelse\necho \"Could not find sdk version from SDK_NAME: $SDK_NAME\"\nexit 1\nfi\n\n# 3 - Determine the other platform\nif [ \"$RW_SDK_PLATFORM\" == \"iphoneos\" ]; then\nRW_OTHER_PLATFORM=iphonesimulator\nelse\nRW_OTHER_PLATFORM=iphoneos\nfi\n\n# 4 - Find the build directory\nif [[ \"$BUILT_PRODUCTS_DIR\" =~ (.*)$RW_SDK_PLATFORM$ ]]; then\nRW_OTHER_BUILT_PRODUCTS_DIR=\"${BASH_REMATCH[1]}${RW_OTHER_PLATFORM}\"\nelse\necho \"Could not find other platform build directory.\"\nexit 1\nfi\n\n# Build the other platform.\nbuild_static_library \"${RW_OTHER_PLATFORM}${RW_SDK_VERSION}\"\n\n# If we're currently building for iphonesimulator, then need to rebuild\n# to ensure that we get both i386 and x86_64\nif [ \"$RW_SDK_PLATFORM\" == \"iphonesimulator\" ]; then\nbuild_static_library \"${SDK_NAME}\"\nfi\n\n# Join the 2 static libs into 1 and push into the .framework\nmake_fat_library \"${BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}\" \\\n\"${RW_OTHER_BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}\" \\\n\"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}Sdk\"\n\n# Ensure that the framework is present in both platform's build directories\ncp -a \"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}Sdk\" \\\n\"${RW_OTHER_BUILT_PRODUCTS_DIR}/Static/${RW_FRAMEWORK_NAME}Sdk.framework/Versions/A/${RW_FRAMEWORK_NAME}Sdk\"\n\n# Copy the framework to the project directory\nditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/Frameworks/Static/${RW_FRAMEWORK_NAME}Sdk.framework\""; + shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_INPUT_STATIC_LIB=\"lib${PROJECT_NAME}.a\"\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/static/${RW_FRAMEWORK_NAME}Sdk.framework\"\n\nfunction build_static_library {\n echo \"1\"\n echo \"${BUILD_DIR}\"\n # Will rebuild the static library as specified\n # build_static_library sdk\n xcrun xcodebuild -project \"${PROJECT_FILE_PATH}\" \\\n -target \"${TARGET_NAME}\" \\\n -configuration \"${CONFIGURATION}\" \\\n -sdk \"${1}\" \\\n ONLY_ACTIVE_ARCH=NO \\\n BUILD_DIR=\"${BUILD_DIR}\" \\\n OBJROOT=\"${OBJROOT}\" \\\n BUILD_ROOT=\"${BUILD_ROOT}\" \\\n SYMROOT=\"${SYMROOT}\" $ACTION\n}\n\nfunction make_fat_library {\n # Will smash 2 static libs together\n # make_fat_library in1 in2 out\n xcrun lipo -create \"${1}\" \"${2}\" -output \"${3}\"\n}\n\n# 1 - Extract the platform (iphoneos/iphonesimulator) from the SDK name\nif [[ \"$SDK_NAME\" =~ ([A-Za-z]+) ]]; then\nRW_SDK_PLATFORM=${BASH_REMATCH[1]}\nelse\necho \"Could not find platform name from SDK_NAME: $SDK_NAME\"\nexit 1\nfi\n\n# 2 - Extract the version from the SDK\nif [[ \"$SDK_NAME\" =~ ([0-9]+.*$) ]]; then\nRW_SDK_VERSION=${BASH_REMATCH[1]}\nelse\necho \"Could not find sdk version from SDK_NAME: $SDK_NAME\"\nexit 1\nfi\n\n# 3 - Determine the other platform\nif [ \"$RW_SDK_PLATFORM\" == \"iphoneos\" ]; then\nRW_OTHER_PLATFORM=iphonesimulator\nelse\nRW_OTHER_PLATFORM=iphoneos\nfi\n\n# 4 - Find the build directory\nif [[ \"$BUILT_PRODUCTS_DIR\" =~ (.*)$RW_SDK_PLATFORM$ ]]; then\nRW_OTHER_BUILT_PRODUCTS_DIR=\"${BASH_REMATCH[1]}${RW_OTHER_PLATFORM}\"\nelse\necho \"Could not find other platform build directory.\"\nexit 1\nfi\n\n# Build the other platform.\nbuild_static_library \"${RW_OTHER_PLATFORM}${RW_SDK_VERSION}\"\n\n# If we're currently building for iphonesimulator, then need to rebuild\n# to ensure that we get both i386 and x86_64\nif [ \"$RW_SDK_PLATFORM\" == \"iphonesimulator\" ]; then\nbuild_static_library \"${SDK_NAME}\"\nfi\n\n# Join the 2 static libs into 1 and push into the .framework\nmake_fat_library \"${BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}\" \\\n\"${RW_OTHER_BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}\" \\\n\"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}Sdk\"\n\n# Ensure that the framework is present in both platform's build directories\ncp -a \"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}Sdk\" \\\n\"${RW_OTHER_BUILT_PRODUCTS_DIR}/static/${RW_FRAMEWORK_NAME}Sdk.framework/Versions/A/${RW_FRAMEWORK_NAME}Sdk\"\n\n# Copy the framework to the project directory\nditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/frameworks/static/${RW_FRAMEWORK_NAME}Sdk.framework\""; + }; + 9DEAF13821007AA2005CAEDB /* Copy IM Framework */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy IM Framework"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}SdkIm.framework\"\n\n# Copy the framework to the iMessage framework folder\nditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/frameworks/imessage/${RW_FRAMEWORK_NAME}SdkIm.framework\""; }; 9DFB06991D747BBE006D48FC /* Copy tvOS Framework */ = { isa = PBXShellScriptBuildPhase; @@ -2068,7 +2083,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}SdkTv.framework\"\n\n# Copy the framework to the tvOS framework directory\n# ditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/Frameworks/tvOS/${RW_FRAMEWORK_NAME}SdkTv.framework\""; + shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}SdkTv.framework\"\n\n# Copy the framework to the tvOS framework directory\n# ditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/frameworks/tvos/${RW_FRAMEWORK_NAME}SdkTv.framework\"\n# Copying not done because build script handles this with building target for device + simulator"; }; /* End PBXShellScriptBuildPhase section */ diff --git a/AdjustTests/AdjustTestLibrary/AdjustTestLibrary.xcodeproj/project.pbxproj b/AdjustTests/AdjustTestLibrary/AdjustTestLibrary.xcodeproj/project.pbxproj index 9baba938f..6e2b6200d 100644 --- a/AdjustTests/AdjustTestLibrary/AdjustTestLibrary.xcodeproj/project.pbxproj +++ b/AdjustTests/AdjustTestLibrary/AdjustTestLibrary.xcodeproj/project.pbxproj @@ -212,7 +212,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_INPUT_STATIC_LIB=\"lib${PROJECT_NAME}.a\"\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/Static/${RW_FRAMEWORK_NAME}.framework\"\n\nfunction build_static_library {\n echo \"1\"\n echo \"${BUILD_DIR}\"\n # Will rebuild the static library as specified\n # build_static_library sdk\n xcrun xcodebuild -project \"${PROJECT_FILE_PATH}\" \\\n -target \"${TARGET_NAME}\" \\\n -configuration \"${CONFIGURATION}\" \\\n -sdk \"${1}\" \\\n ONLY_ACTIVE_ARCH=NO \\\n BUILD_DIR=\"${BUILD_DIR}\" \\\n OBJROOT=\"${OBJROOT}\" \\\n BUILD_ROOT=\"${BUILD_ROOT}\" \\\n SYMROOT=\"${SYMROOT}\" $ACTION\n}\n\nfunction make_fat_library {\n # Will smash 2 static libs together\n # make_fat_library in1 in2 out\n xcrun lipo -create \"${1}\" \"${2}\" -output \"${3}\"\n}\n\n# 1 - Extract the platform (iphoneos/iphonesimulator) from the SDK name\nif [[ \"$SDK_NAME\" =~ ([A-Za-z]+) ]]; then\nRW_SDK_PLATFORM=${BASH_REMATCH[1]}\nelse\necho \"Could not find platform name from SDK_NAME: $SDK_NAME\"\nexit 1\nfi\n\n# 2 - Extract the version from the SDK\nif [[ \"$SDK_NAME\" =~ ([0-9]+.*$) ]]; then\nRW_SDK_VERSION=${BASH_REMATCH[1]}\nelse\necho \"Could not find sdk version from SDK_NAME: $SDK_NAME\"\nexit 1\nfi\n\n# 3 - Determine the other platform\nif [ \"$RW_SDK_PLATFORM\" == \"iphoneos\" ]; then\nRW_OTHER_PLATFORM=iphonesimulator\nelse\nRW_OTHER_PLATFORM=iphoneos\nfi\n\n# 4 - Find the build directory\nif [[ \"$BUILT_PRODUCTS_DIR\" =~ (.*)$RW_SDK_PLATFORM$ ]]; then\nRW_OTHER_BUILT_PRODUCTS_DIR=\"${BASH_REMATCH[1]}${RW_OTHER_PLATFORM}\"\nelse\necho \"Could not find other platform build directory.\"\nexit 1\nfi\n\n# Build the other platform.\nbuild_static_library \"${RW_OTHER_PLATFORM}${RW_SDK_VERSION}\"\n\n# If we're currently building for iphonesimulator, then need to rebuild\n# to ensure that we get both i386 and x86_64\nif [ \"$RW_SDK_PLATFORM\" == \"iphonesimulator\" ]; then\nbuild_static_library \"${SDK_NAME}\"\nfi\n\n# Join the 2 static libs into 1 and push into the .framework\nmake_fat_library \"${BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}\" \\\n\"${RW_OTHER_BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}\" \\\n\"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}\"\n\n# Ensure that the framework is present in both platform's build directories\ncp -a \"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}\" \\\n\"${RW_OTHER_BUILT_PRODUCTS_DIR}/Static/${RW_FRAMEWORK_NAME}.framework/Versions/A/${RW_FRAMEWORK_NAME}\"\n\n# Copy the framework to the project directory\nditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/../../Frameworks/Static/${RW_FRAMEWORK_NAME}.framework\""; + shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_INPUT_STATIC_LIB=\"lib${PROJECT_NAME}.a\"\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/static/${RW_FRAMEWORK_NAME}.framework\"\n\nfunction build_static_library {\n echo \"1\"\n echo \"${BUILD_DIR}\"\n # Will rebuild the static library as specified\n # build_static_library sdk\n xcrun xcodebuild -project \"${PROJECT_FILE_PATH}\" \\\n -target \"${TARGET_NAME}\" \\\n -configuration \"${CONFIGURATION}\" \\\n -sdk \"${1}\" \\\n ONLY_ACTIVE_ARCH=NO \\\n BUILD_DIR=\"${BUILD_DIR}\" \\\n OBJROOT=\"${OBJROOT}\" \\\n BUILD_ROOT=\"${BUILD_ROOT}\" \\\n SYMROOT=\"${SYMROOT}\" $ACTION\n}\n\nfunction make_fat_library {\n # Will smash 2 static libs together\n # make_fat_library in1 in2 out\n xcrun lipo -create \"${1}\" \"${2}\" -output \"${3}\"\n}\n\n# 1 - Extract the platform (iphoneos/iphonesimulator) from the SDK name\nif [[ \"$SDK_NAME\" =~ ([A-Za-z]+) ]]; then\nRW_SDK_PLATFORM=${BASH_REMATCH[1]}\nelse\necho \"Could not find platform name from SDK_NAME: $SDK_NAME\"\nexit 1\nfi\n\n# 2 - Extract the version from the SDK\nif [[ \"$SDK_NAME\" =~ ([0-9]+.*$) ]]; then\nRW_SDK_VERSION=${BASH_REMATCH[1]}\nelse\necho \"Could not find sdk version from SDK_NAME: $SDK_NAME\"\nexit 1\nfi\n\n# 3 - Determine the other platform\nif [ \"$RW_SDK_PLATFORM\" == \"iphoneos\" ]; then\nRW_OTHER_PLATFORM=iphonesimulator\nelse\nRW_OTHER_PLATFORM=iphoneos\nfi\n\n# 4 - Find the build directory\nif [[ \"$BUILT_PRODUCTS_DIR\" =~ (.*)$RW_SDK_PLATFORM$ ]]; then\nRW_OTHER_BUILT_PRODUCTS_DIR=\"${BASH_REMATCH[1]}${RW_OTHER_PLATFORM}\"\nelse\necho \"Could not find other platform build directory.\"\nexit 1\nfi\n\n# Build the other platform.\nbuild_static_library \"${RW_OTHER_PLATFORM}${RW_SDK_VERSION}\"\n\n# If we're currently building for iphonesimulator, then need to rebuild\n# to ensure that we get both i386 and x86_64\nif [ \"$RW_SDK_PLATFORM\" == \"iphonesimulator\" ]; then\nbuild_static_library \"${SDK_NAME}\"\nfi\n\n# Join the 2 static libs into 1 and push into the .framework\nmake_fat_library \"${BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}\" \\\n\"${RW_OTHER_BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}\" \\\n\"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}\"\n\n# Ensure that the framework is present in both platform's build directories\ncp -a \"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}\" \\\n\"${RW_OTHER_BUILT_PRODUCTS_DIR}/static/${RW_FRAMEWORK_NAME}.framework/Versions/A/${RW_FRAMEWORK_NAME}\"\n\n# Copy the framework to the project directory\nditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/../../frameworks/static/${RW_FRAMEWORK_NAME}.framework\""; }; 9D8AB2B6203F202B0015DA32 /* Build Framework */ = { isa = PBXShellScriptBuildPhase; diff --git a/Scripts/build.sh b/Scripts/build.sh deleted file mode 100755 index 68e498de6..000000000 --- a/Scripts/build.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash - -# End script if one of the lines fails -set -e - -# Go to root folder -cd .. - -# Clean the folders -rm -rf Frameworks/Static -rm -rf Frameworks/Dynamic -rm -rf Frameworks/tvOS - -# Create needed folders -mkdir -p Frameworks/Static -mkdir -p Frameworks/Dynamic -mkdir -p Frameworks/tvOS - -# Build static AdjustSdk.framework -xcodebuild -target AdjustStatic -configuration Release clean build - -# Build dynamic AdjustSdk.framework -xcodebuild -target AdjustSdk -configuration Release clean build - -# Build tvOS AdjustSdkTV.framework -# Build it for simulator and device -xcodebuild -configuration Release -target AdjustSdkTv -arch x86_64 -sdk appletvsimulator clean build -xcodebuild -configuration Release -target AdjustSdkTv -arch arm64 -sdk appletvos clean build - -# Copy tvOS framework to destination -cp -R build/Release-appletvos/AdjustSdkTv.framework Frameworks/tvOS - -# Create universal tvOS framework -lipo -create -output Frameworks/tvOS/AdjustSdkTv.framework/AdjustSdkTv build/Release-appletvos/AdjustSdkTv.framework/AdjustSdkTv build/Release-appletvsimulator/AdjustSdkTv.framework/AdjustSdkTv - -# Build Carthage AdjustSdk.framework -carthage build --no-skip-current - -# Copy build Carthage framework to Frameworks folder -cp -R Carthage/Build/iOS/* Frameworks/Dynamic/ - -# Build static AdjustTestLibrary.framework -cd AdjustTests/AdjustTestLibrary -xcodebuild -target AdjustTestLibraryStatic -configuration Debug clean build diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 000000000..af059e080 --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash + +set -e + +# ======================================== # + +# Colors for output +NC='\033[0m' +RED='\033[0;31m' +CYAN='\033[1;36m' +GREEN='\033[0;32m' + +# ======================================== # + +# Directories and paths of interest for the script. +SCRIPTS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +ROOT_DIR="$(dirname "$SCRIPTS_DIR")" +cd ${ROOT_DIR} + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Removing framework targets folders ... ${NC}" +rm -rf ${ROOT_DIR}/frameworks/static +rm -rf ${ROOT_DIR}/frameworks/dynamic +rm -rf ${ROOT_DIR}/frameworks/tvos +rm -rf ${ROOT_DIR}/frameworks/imessage +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Creating framework targets folders ... ${NC}" +mkdir -p ${ROOT_DIR}/frameworks/static +mkdir -p ${ROOT_DIR}/frameworks/dynamic +mkdir -p ${ROOT_DIR}/frameworks/tvos +mkdir -p ${ROOT_DIR}/frameworks/imessage +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding static SDK framework and copying it to destination folder ... ${NC}" +xcodebuild -target AdjustStatic -configuration Release clean build +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding dynamic iMessage SDK framework and copying it to destination folder ... ${NC}" +xcodebuild -target AdjustSdkIm -configuration Release clean build +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding universal tvOS SDK framework (device + simulator) and copying it to destination folder ... ${NC}" +xcodebuild -configuration Release -target AdjustSdkTv -arch x86_64 -sdk appletvsimulator clean build +xcodebuild -configuration Release -target AdjustSdkTv -arch arm64 -sdk appletvos clean build +cp -Rv build/Release-appletvos/AdjustSdkTv.framework frameworks/tvos +lipo -create -output frameworks/tvos/AdjustSdkTv.framework/AdjustSdkTv build/Release-appletvos/AdjustSdkTv.framework/AdjustSdkTv build/Release-appletvsimulator/AdjustSdkTv.framework/AdjustSdkTv +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding shared dynamic targets with Carthage ... ${NC}" +carthage build --no-skip-current +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Copying Carthage generated dynamic SDK framework to destination folder ... ${NC}" +cp -Rv Carthage/Build/iOS/* frameworks/dynamic/ +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding static test library framework and copying it to destination folder ... ${NC}" +cd ${ROOT_DIR}/AdjustTests/AdjustTestLibrary +xcodebuild -target AdjustTestLibraryStatic -configuration Debug clean build +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Script completed! ${NC}" From b72efc235cb5282ae8578c21e92ce04a66719cc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uglje=C5=A1a=20Erceg?= Date: Thu, 19 Jul 2018 10:31:30 +0200 Subject: [PATCH 09/67] iMessage README update --- README.md | 164 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 108 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index c85939482..fac4aa849 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ If your app is an app which uses web views you would like to use adjust tracking * [Add iOS frameworks](#sdk-frameworks) * [Integrate the SDK into your app](#sdk-integrate) * [Basic setup](#basic-setup) + * [iMessage specific setup](#basic-setup-imessage) * [Adjust logging](#adjust-logging) * [Build your app](#build-the-app) * [Additional features](#additional-features) @@ -57,11 +58,11 @@ If your app is an app which uses web views you would like to use adjust tracking ## Example apps -There are example apps inside the [`examples` directory][examples] for [`iOS (Objective-C)`][example-ios-objc], [`iOS (Swift)`][example-ios-swift], [`tvOS`][example-tvos] and [`Apple Watch`][example-iwatch]. You can open any of these Xcode projects to see an example of how the adjust SDK can be integrated. +There are example apps inside the [`examples` directory][examples] for [`iOS (Objective-C)`][example-ios-objc], [`iOS (Swift)`][example-ios-swift], [`tvOS`][example-tvos], [`iMessage`][example-imessage] and [`Apple Watch`][example-iwatch]. You can open any of these Xcode projects to see an example of how the Adjust SDK can be integrated. ## Basic integration -We will describe the steps to integrate the adjust SDK into your iOS project. We are going to assume that you are using Xcode for your iOS development. +We will describe the steps to integrate the Adjust SDK into your iOS project. We are going to assume that you are using Xcode for your iOS development. ### Add the SDK to your project @@ -79,8 +80,7 @@ pod 'Adjust', :git => 'https://github.com/adjust/ios_sdk.git', :tag => 'v4.14.2' --- -If you're using [Carthage][carthage], you can add following line to your `Cartfile` and continue from -[this step](#sdk-frameworks): +If you're using [Carthage][carthage], you can add following line to your `Cartfile` and continue from [this step](#sdk-frameworks): ```ruby github "adjust/ios_sdk" @@ -88,15 +88,18 @@ github "adjust/ios_sdk" --- -You can also choose to integrate the adjust SDK by adding it to your project as a framework. On the [releases page][releases] you can find the following archives: +You can also choose to integrate the Adjust SDK by adding it to your project as a framework. On the [releases page][releases] you can find the following archives: * `AdjustSdkStatic.framework.zip` * `AdjustSdkDynamic.framework.zip` * `AdjustSdkTv.framework.zip` +* `AdjustSdkIm.framework.zip` -Since the release of iOS 8, Apple has introduced dynamic frameworks (also known as embedded frameworks). If your app is targeting iOS 8 or higher, you can use the adjust SDK dynamic framework. Choose which framework you want to use – static or dynamic – and add it to your project. +Since the release of iOS 8, Apple has introduced dynamic frameworks (also known as embedded frameworks). If your app is targeting iOS 8 or higher, you can use the Adjust SDK dynamic framework. Choose which framework you want to use – static or dynamic – and add it to your project. -If you are having `tvOS` app, you can use the adjust SDK with it as well with usage of our tvOS framework which you can extract from `AdjustSdkTv.framework.zip` archive. +If you are having `tvOS` app, you can use the Adjust SDK with it as well with usage of our tvOS framework which you can extract from `AdjustSdkTv.framework.zip` archive. + +If you are having `iMessage` app, you can use the Adjust SDK with it as well with usage of our IM framework which you can extract from `AdjustSdkIm.framework.zip` archive. ### Add iOS frameworks @@ -110,7 +113,7 @@ If you are having `tvOS` app, you can use the adjust SDK with it as well with us ### Integrate the SDK into your app -If you added the adjust SDK via a Pod repository, you should use one of the following import statements: +If you added the Adjust SDK via a Pod repository, you should use one of the following import statements: ```objc #import "Adjust.h" @@ -124,7 +127,7 @@ or --- -If you added the adjust SDK as a static/dynamic framework or via Carthage, you should use the following import statement: +If you added the Adjust SDK as a static/dynamic framework or via Carthage, you should use the following import statement: ```objc #import @@ -132,12 +135,20 @@ If you added the adjust SDK as a static/dynamic framework or via Carthage, you s --- -If you are are using the adjust SDK with your tvOS app, you should use the following import statement: +If you are are using the Adjust SDK with your tvOS app, you should use the following import statement: ```objc #import ``` +--- + +If you are are using the Adjust SDK with your iMessage app, you should use the following import statement: + +```objc +#import +``` + Next, we'll set up basic session tracking. ### Basic setup @@ -149,6 +160,7 @@ In the Project Navigator, open the source file of your application delegate. Add // or #import // or #import // or #import +// or #import // ... @@ -162,7 +174,7 @@ ADJConfig *adjustConfig = [ADJConfig configWithAppToken:yourAppToken ![][delegate] -**Note**: Initialising the adjust SDK like this is `very important`. Otherwise, you may encounter different kinds of issues as described in our [troubleshooting section](#ts-delayed-init). +**Note**: Initialising the Adjust SDK like this is `very important`. Otherwise, you may encounter different kinds of issues as described in our [troubleshooting section](#ts-delayed-init). Replace `{YourAppToken}` with your app token. You can find this in your [dashboard]. @@ -177,6 +189,44 @@ NSString *environment = ADJEnvironmentProduction; We use this environment to distinguish between real traffic and test traffic from test devices. It is very important that you keep this value meaningful at all times! This is especially important if you are tracking revenue. +### iMessage specific setup + +**Adding SDK from source:** In case that you have chosen to add Adjust SDK to your iMessage app **from source**, please make sure that you have pre-processor macro **ADJUST_IM=1** set in your iMessage project settings. + +**Adding SDK as framework:** After you have added `AdjustSdkIm.framework` to your iMessage app, please make sure to add `New Copy Files Phase` in your `Build Phases` project settings and select that `AdjustSdkIm.framework` should be copied to `Frameworks` folder. + +**Session tracking:** If you would like to have session tracking properly working in your iMessage app, you will need to do one additional integration step. In standard iOS apps Adjust SDK is automatically subscribed to iOS system notifications which enable us to know when app entered or left foreground. In case of iMessage app, this is not the case, so we need you to add explicit calls to `trackSubsessionStart` and `trackSubsessionEnd` methods inside of your iMessage app view controller to make our SDK aware of the moments when your app is being in foreground or not. + +Add call to `trackSubsessionStart` inside of `didBecomeActiveWithConversation:` method: + +```objc +-(void)didBecomeActiveWithConversation:(MSConversation *)conversation { + // Called when the extension is about to move from the inactive to active state. + // This will happen when the extension is about to present UI. + // Use this method to configure the extension and restore previously stored state. + + [Adjust trackSubsessionStart]; +} +``` + +Add call to `trackSubsessionEnd` inside of `willResignActiveWithConversation:` method: + +```objc +-(void)willResignActiveWithConversation:(MSConversation *)conversation { + // Called when the extension is about to move from the active to inactive state. + // This will happen when the user dissmises the extension, changes to a different + // conversation or quits Messages. + + // Use this method to release shared resources, save user data, invalidate timers, + // and store enough state information to restore your extension to its current state + // in case it is terminated later. + + [Adjust trackSubsessionEnd]; +} +``` + +With this set, Adjust SDK will be able to successfully perform session tracking inside of your iMessage app. + ### Adjust logging You can increase or decrease the amount of logs that you see during testing by calling `setLogLevel:` on your `ADJConfig` instance with one of the following parameters: @@ -191,13 +241,14 @@ You can increase or decrease the amount of logs that you see during testing by c [adjustConfig setLogLevel:ADJLogLevelSuppress]; // disable all logging ``` -If you don't want your app in production to display any logs coming from the adjust SDK, then you should select `ADJLogLevelSuppress` and in addition to that, initialise `ADJConfig` object with another constructor where you should enable suppress log level mode: +If you don't want your app in production to display any logs coming from the Adjust SDK, then you should select `ADJLogLevelSuppress` and in addition to that, initialise `ADJConfig` object with another constructor where you should enable suppress log level mode: ```objc #import "Adjust.h" // or #import // or #import // or #import +// or #import // ... @@ -218,7 +269,7 @@ Build and run your app. If the build succeeds, you should carefully read the SDK ## Additional features -Once you integrate the adjust SDK into your project, you can take advantage of the following features. +Once you integrate the Adjust SDK into your project, you can take advantage of the following features. ### Event tracking @@ -322,13 +373,13 @@ You can read more about special partners and these integrations in our [guide to ### Session parameters -Some parameters are saved to be sent in every event and session of the adjust SDK. Once you have added any of these parameters, you don't need to add them every time, since they will be saved locally. If you add the same parameter twice, there will be no effect. +Some parameters are saved to be sent in every event and session of the Adjust SDK. Once you have added any of these parameters, you don't need to add them every time, since they will be saved locally. If you add the same parameter twice, there will be no effect. -If you want to send session parameters with the initial install event, they must be called before the Adjust SDK launches via `[Adjust appDidLaunch:]`. If you need to send them with an install, but can only obtain the needed values after launch, it's possible to [delay](#delay-start) the first launch of the adjust SDK to allow this behavior. +If you want to send session parameters with the initial install event, they must be called before the Adjust SDK launches via `[Adjust appDidLaunch:]`. If you need to send them with an install, but can only obtain the needed values after launch, it's possible to [delay](#delay-start) the first launch of the Adjust SDK to allow this behavior. ### Session callback parameters -The same callback parameters that are registered for [events](#callback-parameters) can be also saved to be sent in every event or session of the adjust SDK. +The same callback parameters that are registered for [events](#callback-parameters) can be also saved to be sent in every event or session of the Adjust SDK. The session callback parameters have a similar interface of the event callback parameters. Instead of adding the key and it's value to an event, it's added through a call to `Adjust` method `addSessionCallbackParameter:value:`: @@ -352,7 +403,7 @@ If you wish to remove all key and values from the session callback parameters, y ### Session partner parameters -In the same way that there is [session callback parameters](#session-callback-parameters) that are sent every in event or session of the adjust SDK, there is also session partner parameters. +In the same way that there is [session callback parameters](#session-callback-parameters) that are sent every in event or session of the Adjust SDK, there is also session partner parameters. These will be transmitted to network partners, for the integrations that have been activated in your adjust [dashboard]. @@ -378,7 +429,7 @@ If you wish to remove all key and values from the session partner parameters, yo ### Delay start -Delaying the start of the adjust SDK allows your app some time to obtain session parameters, such as unique identifiers, to be send on install. +Delaying the start of the Adjust SDK allows your app some time to obtain session parameters, such as unique identifiers, to be send on install. Set the initial delay time in seconds with the method `setDelayStart` in the `ADJConfig` instance: @@ -386,9 +437,9 @@ Set the initial delay time in seconds with the method `setDelayStart` in the `AD [adjustConfig setDelayStart:5.5]; ``` -In this case this will make the adjust SDK not send the initial install session and any event created for 5.5 seconds. After this time is expired or if you call `[Adjust sendFirstPackages]` in the meanwhile, every session parameter will be added to the delayed install session and events and the adjust SDK will resume as usual. +In this case this will make the Adjust SDK not send the initial install session and any event created for 5.5 seconds. After this time is expired or if you call `[Adjust sendFirstPackages]` in the meanwhile, every session parameter will be added to the delayed install session and events and the Adjust SDK will resume as usual. -**The maximum delay start time of the adjust SDK is 10 seconds**. +**The maximum delay start time of the Adjust SDK is 10 seconds**. ### Attribution callback @@ -481,17 +532,17 @@ And both event and session failed objects also contain: ### Disable tracking -You can disable the adjust SDK from tracking any activities of the current device by calling `setEnabled` with parameter `NO`. **This setting is remembered between sessions**, but it can only be activated after the first session. +You can disable the Adjust SDK from tracking any activities of the current device by calling `setEnabled` with parameter `NO`. **This setting is remembered between sessions**, but it can only be activated after the first session. ```objc [Adjust setEnabled:NO]; ``` -You can check if the adjust SDK is currently enabled by calling the function `isEnabled`. It is always possible to activate the adjust SDK by invoking `setEnabled` with the enabled parameter as `YES`. +You can check if the Adjust SDK is currently enabled by calling the function `isEnabled`. It is always possible to activate the Adjust SDK by invoking `setEnabled` with the enabled parameter as `YES`. ### Offline mode -You can put the adjust SDK in offline mode to suspend transmission to our servers while retaining tracked data to be sent later. While in offline mode, all information is saved in a file, so be careful not to trigger too many events while in offline mode. +You can put the Adjust SDK in offline mode to suspend transmission to our servers while retaining tracked data to be sent later. While in offline mode, all information is saved in a file, so be careful not to trigger too many events while in offline mode. You can activate offline mode by calling `setOfflineMode` with the parameter `YES`. @@ -499,7 +550,7 @@ You can activate offline mode by calling `setOfflineMode` with the parameter `YE [Adjust setOfflineMode:YES]; ``` -Conversely, you can deactivate offline mode by calling `setOfflineMode` with `NO`. When the adjust SDK is put back in online mode, all saved information is sent to our servers with the correct time information. +Conversely, you can deactivate offline mode by calling `setOfflineMode` with `NO`. When the Adjust SDK is put back in online mode, all saved information is sent to our servers with the correct time information. Unlike disabling tracking, this setting is **not remembered** bettween sessions. This means that the SDK is in online mode whenever it is started, even if the app was terminated in offline mode. @@ -537,7 +588,7 @@ An App Secret is set by calling `setAppSecret` on your `AdjustConfig` instance: ### Background tracking -The default behaviour of the adjust SDK is to pause sending HTTP requests while the app is in the background. You can change this in your `AdjustConfig` instance: +The default behaviour of the Adjust SDK is to pause sending HTTP requests while the app is in the background. You can change this in your `AdjustConfig` instance: ```objc [adjustConfig setSendInBackground:YES]; @@ -547,7 +598,7 @@ If nothing is set, sending in background is **disabled by default**. ### Device IDs -The adjust SDK offers you possibility to obtain some of the device identifiers. +The Adjust SDK offers you possibility to obtain some of the device identifiers. ### iOS Advertising Identifier @@ -567,7 +618,7 @@ For each device with your app installed, adjust backend generates unique **adjus NSString *adid = [Adjust adid]; ``` -**Note**: Information about the **adid** is available after the app's installation has been tracked by the adjust backend. From that moment on, the adjust SDK has information about the device **adid** and you can access it with this method. So, **it is not possible** to access the **adid** before the SDK has been initialised and the installation of your app has been tracked successfully. +**Note**: Information about the **adid** is available after the app's installation has been tracked by the adjust backend. From that moment on, the Adjust SDK has information about the device **adid** and you can access it with this method. So, **it is not possible** to access the **adid** before the SDK has been initialised and the installation of your app has been tracked successfully. ### User attribution @@ -577,7 +628,7 @@ The attribution callback will be triggered as described in the [attribution call ADJAttribution *attribution = [Adjust attribution]; ``` -**Note**: Information about current attribution is available after app installation has been tracked by the adjust backend and attribution callback has been initially triggered. From that moment on, adjust SDK has information about your user's attribution and you can access it with this method. So, **it is not possible** to access user's attribution value before the SDK has been initialised and attribution callback has been initially triggered. +**Note**: Information about current attribution is available after app installation has been tracked by the adjust backend and attribution callback has been initially triggered. From that moment on, Adjust SDK has information about your user's attribution and you can access it with this method. So, **it is not possible** to access user's attribution value before the SDK has been initialised and attribution callback has been initially triggered. ### Push token @@ -616,7 +667,7 @@ If you want to use the Adjust SDK to recognize users that found your app pre-ins ### Deep linking -If you are using the adjust tracker URL with an option to deep link into your app from the URL, there is the possibility to get info about the deep link URL and its content. Hitting the URL can happen when the user has your app already installed (standard deep linking scenario) or if they don't have the app on their device (deferred deep linking scenario). Both of these scenarios are supported by the adjust SDK and in both cases the deep link URL will be provided to you after you app has been started after hitting the tracker URL. In order to use this feature in your app, you need to set it up properly. +If you are using the adjust tracker URL with an option to deep link into your app from the URL, there is the possibility to get info about the deep link URL and its content. Hitting the URL can happen when the user has your app already installed (standard deep linking scenario) or if they don't have the app on their device (deferred deep linking scenario). Both of these scenarios are supported by the Adjust SDK and in both cases the deep link URL will be provided to you after you app has been started after hitting the tracker URL. In order to use this feature in your app, you need to set it up properly. ### Standard deep linking scenario @@ -696,7 +747,7 @@ We provide a helper function that allows you to convert a universal link to an o ### Deferred deep linking scenario -You can register a delegate callback to be notified before a deferred deep link is opened and decide if the adjust SDK will try to open it. The same optional protocol `AdjustDelegate` used for the [attribution callback](#attribution-callback) and for [event and session callbacks](#event-session-callbacks) is used. +You can register a delegate callback to be notified before a deferred deep link is opened and decide if the Adjust SDK will try to open it. The same optional protocol `AdjustDelegate` used for the [attribution callback](#attribution-callback) and for [event and session callbacks](#event-session-callbacks) is used. Follow the same steps and implement the following delegate callback function for deferred deep links: @@ -704,7 +755,7 @@ Follow the same steps and implement the following delegate callback function for - (BOOL)adjustDeeplinkResponse:(NSURL *)deeplink { // deeplink object contains information about deferred deep link content - // Apply your logic to determine whether the adjust SDK should try to open the deep link + // Apply your logic to determine whether the Adjust SDK should try to open the deep link return YES; // or // return NO; @@ -713,15 +764,15 @@ Follow the same steps and implement the following delegate callback function for The callback function will be called after the SDK receives a deffered deep link from our server and before opening it. Within the callback function you have access to the deep link. The returned boolean value determines if the SDK will launch the deep link. You could, for example, not allow the SDK to open the deep link at the current moment, save it, and open it yourself later. -If this callback is not implemented, **the adjust SDK will always try to open the deep link by default**. +If this callback is not implemented, **the Adjust SDK will always try to open the deep link by default**. ### Reattribution via deep links Adjust enables you to run re-engagement campaigns with usage of deep links. For more information on how to do that, please check our [official docs][reattribution-with-deeplinks]. -If you are using this feature, in order for your user to be properly reattributed, you need to make one additional call to the adjust SDK in your app. +If you are using this feature, in order for your user to be properly reattributed, you need to make one additional call to the Adjust SDK in your app. -Once you have received deep link content information in your app, add a call to the `appWillOpenUrl` method. By making this call, the adjust SDK will try to find if there is any new attribution info inside of the deep link and if any, it will be sent to the adjust backend. If your user should be reattributed due to a click on the adjust tracker URL with deep link content in it, you will see the [attribution callback](#attribution-callback) in your app being triggered with new attribution info for this user. +Once you have received deep link content information in your app, add a call to the `appWillOpenUrl` method. By making this call, the Adjust SDK will try to find if there is any new attribution info inside of the deep link and if any, it will be sent to the adjust backend. If your user should be reattributed due to a click on the adjust tracker URL with deep link content in it, you will see the [attribution callback](#attribution-callback) in your app being triggered with new attribution info for this user. The call to `appWillOpenUrl` should be done like this to support deep linking reattributions in all iOS versions: @@ -759,9 +810,9 @@ The call to `appWillOpenUrl` should be done like this to support deep linking re ### Issues with delayed SDK initialisation -As described in the [basic setup step](#basic-setup), we strongly advise you to initialise the adjust SDK in the `didFinishLaunching` or `didFinishLaunchingWithOptions` method of your app delegate. It is imperative to initialise the adjust SDK in as soon as possible so that you can use all the features of the SDK. +As described in the [basic setup step](#basic-setup), we strongly advise you to initialise the Adjust SDK in the `didFinishLaunching` or `didFinishLaunchingWithOptions` method of your app delegate. It is imperative to initialise the Adjust SDK in as soon as possible so that you can use all the features of the SDK. -Deciding not to initialise the adjust SDK immediately can have all kinds of impacts on the tracking in your app: **In order to perform any kind of tracking in your app, the adjust SDK *must* be initialised.** +Deciding not to initialise the Adjust SDK immediately can have all kinds of impacts on the tracking in your app: **In order to perform any kind of tracking in your app, the Adjust SDK *must* be initialised.** If you decide to perform any of these actions: @@ -772,13 +823,13 @@ If you decide to perform any of these actions: before initialising the SDK, `they won't be performed`. -If you want any of these actions to be tracked with the adjust SDK before its actual initialisation, you must build a `custom actions queueing mechanism` inside your app. You need to queue all the actions you want our SDK to perform and perform them once the SDK is initialised. +If you want any of these actions to be tracked with the Adjust SDK before its actual initialisation, you must build a `custom actions queueing mechanism` inside your app. You need to queue all the actions you want our SDK to perform and perform them once the SDK is initialised. Offline mode state won't be changed, tracking enabled/disabled state won't be changed, deep link reattributions will not be possible to happen, any of tracked events will be `dropped`. -Another thing which might be affected by delayed SDK initialisation is session tracking. The adjust SDK can't start to collect any session length info before it is actually initialised. This can affect your DAU numbers in the dashboard which might not be tracked properly. +Another thing which might be affected by delayed SDK initialisation is session tracking. The Adjust SDK can't start to collect any session length info before it is actually initialised. This can affect your DAU numbers in the dashboard which might not be tracked properly. -As an example, let's assume this scenario: You are initialising the adjust SDK when some specific view or view controller is loaded and let's say that this is not the splash nor the first screen in your app, but user has to navigate to it from the home screen. If user downloads your app and opens it, the home screen will be displayed. At this moment, this user has made an install which should be tracked. However, the adjust SDK doesn't know anything about this, because the user needs to navigate to the screen mentioned previously where you decided to initialise the adjust SDK. Further, if the user decides that he/she doesn't like the app and uninstalls it right after seeing home screen, all the information mentioned above will never be tracked by our SDK, nor displayed in the dashboard. +As an example, let's assume this scenario: You are initialising the Adjust SDK when some specific view or view controller is loaded and let's say that this is not the splash nor the first screen in your app, but user has to navigate to it from the home screen. If user downloads your app and opens it, the home screen will be displayed. At this moment, this user has made an install which should be tracked. However, the Adjust SDK doesn't know anything about this, because the user needs to navigate to the screen mentioned previously where you decided to initialise the Adjust SDK. Further, if the user decides that he/she doesn't like the app and uninstalls it right after seeing home screen, all the information mentioned above will never be tracked by our SDK, nor displayed in the dashboard. #### Event tracking @@ -798,18 +849,18 @@ As described [above](#deeplinking-reattribution), when handling deep link reattr [Adjust appWillOpenUrl:url] ``` -If you make this call before the SDK has been initialised, information about the attribution information from the deep link URL will be permanetly lost. If you want the adjust SDK to successfully reattribute your user, you would need to queue this `NSURL` object information and trigger `appWillOpenUrl` method once the SDK has been initialised. +If you make this call before the SDK has been initialised, information about the attribution information from the deep link URL will be permanetly lost. If you want the Adjust SDK to successfully reattribute your user, you would need to queue this `NSURL` object information and trigger `appWillOpenUrl` method once the SDK has been initialised. #### Session tracking -Session tracking is something what the adjust SDK performs automatically and is beyond reach of an app developer. For proper session tracking it is crucial to have the adjust SDK initialised as advised in this README. Not doing so can have unpredicted influences on proper session tracking and DAU numbers in the dashboard. +Session tracking is something what the Adjust SDK performs automatically and is beyond reach of an app developer. For proper session tracking it is crucial to have the Adjust SDK initialised as advised in this README. Not doing so can have unpredicted influences on proper session tracking and DAU numbers in the dashboard. For example: * A user opens but then deletes your app before the SDK was even inialised, causing the install and session to have never been tracked, thus never reported in the dashboard. -* If a user downloads and opens your app before midnight, and the adjust SDK gets initialised after midnight, all queued install and session data will be reported on wrong day. +* If a user downloads and opens your app before midnight, and the Adjust SDK gets initialised after midnight, all queued install and session data will be reported on wrong day. * If a user didn't use your app on some day but opens it shortly after midnight and the SDK gets initialised after midnight, causing DAU to be reported on another day from the day of the app opening. -For all these reasons, please follow the instructions in this document and initialise the adjust SDK in the `didFinishLaunching` or `didFinishLaunchingWithOptions` method of your app delegate. +For all these reasons, please follow the instructions in this document and initialise the Adjust SDK in the `didFinishLaunching` or `didFinishLaunchingWithOptions` method of your app delegate. ### I'm seeing "Adjust requires ARC" error @@ -819,7 +870,7 @@ Expand the `Compile Sources` group, select all adjust files and change the `Comp ### I'm seeing "[UIDevice adjTrackingEnabled]: unrecognized selector sent to instance" error -This error can occur when you are adding the adjust SDK framework to your app. The adjust SDK contains `categories` among it's source files and for this reason, if you have chosen this SDK integration approach, you need to add `-ObjC` flags to `Other Linker Flags` in your Xcode project settings. Adding this flag will fix this error. +This error can occur when you are adding the Adjust SDK framework to your app. The Adjust SDK contains `categories` among it's source files and for this reason, if you have chosen this SDK integration approach, you need to add `-ObjC` flags to `Other Linker Flags` in your Xcode project settings. Adding this flag will fix this error. ### I'm seeing the "Session failed (Ignoring too frequent session.)" error @@ -885,7 +936,7 @@ So, this message doesn't indicate any issue with your SDK integration but it's s ### I'm seeing incorrect revenue data in the adjust dashboard -The adjust SDK tracks what you tell it to track. If you are attaching revenue to your event, the number you write as an amount is the only amount which will reach the adjust backend and be displayed in the dashboard. Our SDK does not manipulate your amount value, nor does our backend. So, if you see wrong amount being tracked, it's because our SDK was told to track that amount. +The Adjust SDK tracks what you tell it to track. If you are attaching revenue to your event, the number you write as an amount is the only amount which will reach the adjust backend and be displayed in the dashboard. Our SDK does not manipulate your amount value, nor does our backend. So, if you see wrong amount being tracked, it's because our SDK was told to track that amount. Usually, a user's code for tracking revenue event looks something like this: @@ -933,20 +984,21 @@ If you are seing any value in the dashboard other than what you expected to be t [cocoapods]: http://cocoapods.org [transition]: http://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html -[example-tvos]: http://github.com/adjust/ios_sdk/tree/master/examples/AdjustExample-tvOS +[example-tvos]: examples/AdjustExample-tvOS +[example-iwatch]: examples/AdjustExample-iWatch +[example-imessage]: examples/AdjustExample-iMessage +[example-ios-objc]: examples/AdjustExample-iOS +[example-ios-swift]: examples/AdjustExample-Swift + [AEPriceMatrix]: https://github.com/adjust/AEPriceMatrix [event-tracking]: https://docs.adjust.com/en/event-tracking -[example-iwatch]: http://github.com/adjust/ios_sdk/tree/master/examples/AdjustExample-iWatch [callbacks-guide]: https://docs.adjust.com/en/callbacks [universal-links]: https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html -[special-partners]: https://docs.adjust.com/en/special-partners -[attribution-data]: https://github.com/adjust/sdks/blob/master/doc/attribution-data.md -[example-ios-objc]: http://github.com/adjust/ios_sdk/tree/master/examples/AdjustExample-iOS -[example-ios-swift]: http://github.com/adjust/ios_sdk/tree/master/examples/AdjustExample-Swift -[ios-web-views-guide]: doc/english/web_views.md -[currency-conversion]: https://docs.adjust.com/en/event-tracking/#tracking-purchases-in-different-currencies - +[special-partners]: https://docs.adjust.com/en/special-partners +[attribution-data]: https://github.com/adjust/sdks/blob/master/doc/attribution-data.md +[ios-web-views-guide]: doc/english/web_views.md +[currency-conversion]: https://docs.adjust.com/en/event-tracking/#tracking-purchases-in-different-currencies [universal-links-guide]: https://docs.adjust.com/en/universal-links/ [adjust-universal-links]: https://docs.adjust.com/en/universal-links/#redirecting-to-universal-links-directly [universal-links-testing]: https://docs.adjust.com/en/universal-links/#testing-universal-link-implementations @@ -972,9 +1024,9 @@ If you are seing any value in the dashboard other than what you expected to be t ## License -The adjust SDK is licensed under the MIT License. +The Adjust SDK is licensed under the MIT License. -Copyright (c) 2012-2017 adjust GmbH, +Copyright (c) 2012-2018 adjust GmbH, http://www.adjust.com Permission is hereby granted, free of charge, to any person obtaining a copy of From 550142765f4a3023890afe006995bbc891167bda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uglje=C5=A1a=20Erceg?= Date: Thu, 19 Jul 2018 12:06:35 +0200 Subject: [PATCH 10/67] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index fac4aa849..21c42d27a 100644 --- a/README.md +++ b/README.md @@ -227,6 +227,8 @@ Add call to `trackSubsessionEnd` inside of `willResignActiveWithConversation:` m With this set, Adjust SDK will be able to successfully perform session tracking inside of your iMessage app. +**Note:** You should be aware that your iOS app and iMessage extension you wrote for it are running in different memory spaces and they as well have different bundle identifiers. Initialising Adjust SDK with same app token in both places will result in two independent instances tracking things unaware of each other which might cause data mixture you don't want to see in your dashboard data. General advice would be to create separate app in Adjust dashboard for your iMessage app and initialise SDK inside of it with separate app token. + ### Adjust logging You can increase or decrease the amount of logs that you see during testing by calling `setLogLevel:` on your `ADJConfig` instance with one of the following parameters: From 4d9e9f6585ba9e00f860d60350f3671c3179e8b0 Mon Sep 17 00:00:00 2001 From: uerceg Date: Fri, 20 Jul 2018 16:32:18 +0200 Subject: [PATCH 11/67] Add support for deferred deep linking tests in test app --- .../AdjustTestApp.xcodeproj/project.pbxproj | 6 +++ .../AdjustTestApp/ATAAdjustCommandExecutor.m | 31 ++++--------- .../AdjustTestApp/AdjustTestApp/AppDelegate.m | 6 +++ .../ATAAdjustDelegateDeferredDeeplink.h | 17 +++++++ .../ATAAdjustDelegateDeferredDeeplink.m | 45 +++++++++++++++++++ .../AdjustTestApp/AdjustTestApp/Info.plist | 11 +++++ 6 files changed, 94 insertions(+), 22 deletions(-) create mode 100644 AdjustTests/AdjustTestApp/AdjustTestApp/Delegates/ATAAdjustDelegateDeferredDeeplink.h create mode 100644 AdjustTests/AdjustTestApp/AdjustTestApp/Delegates/ATAAdjustDelegateDeferredDeeplink.m diff --git a/AdjustTests/AdjustTestApp/AdjustTestApp.xcodeproj/project.pbxproj b/AdjustTests/AdjustTestApp/AdjustTestApp.xcodeproj/project.pbxproj index 51fd68434..439b2764a 100644 --- a/AdjustTests/AdjustTestApp/AdjustTestApp.xcodeproj/project.pbxproj +++ b/AdjustTests/AdjustTestApp/AdjustTestApp.xcodeproj/project.pbxproj @@ -60,6 +60,7 @@ 6FFCFE70200797D100467F01 /* ATAAdjustDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FFCFE66200797D000467F01 /* ATAAdjustDelegate.m */; }; 6FFCFE71200797D100467F01 /* ATAAdjustDelegateEventSuccess.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FFCFE69200797D000467F01 /* ATAAdjustDelegateEventSuccess.m */; }; 6FFCFE72200797D100467F01 /* ATAAdjustDelegateSessionSuccess.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FFCFE6A200797D000467F01 /* ATAAdjustDelegateSessionSuccess.m */; }; + 9D75AFDB210217FF0079A36C /* ATAAdjustDelegateDeferredDeeplink.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D75AFDA210217FF0079A36C /* ATAAdjustDelegateDeferredDeeplink.m */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -167,6 +168,8 @@ 6FFCFE6A200797D000467F01 /* ATAAdjustDelegateSessionSuccess.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ATAAdjustDelegateSessionSuccess.m; sourceTree = ""; }; 6FFCFE6B200797D000467F01 /* ATAAdjustDelegateEventSuccess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ATAAdjustDelegateEventSuccess.h; sourceTree = ""; }; 6FFCFE6C200797D000467F01 /* ATAAdjustDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ATAAdjustDelegate.h; sourceTree = ""; }; + 9D75AFD9210217FF0079A36C /* ATAAdjustDelegateDeferredDeeplink.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ATAAdjustDelegateDeferredDeeplink.h; sourceTree = ""; }; + 9D75AFDA210217FF0079A36C /* ATAAdjustDelegateDeferredDeeplink.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ATAAdjustDelegateDeferredDeeplink.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -336,6 +339,8 @@ 6FFCFE65200797D000467F01 /* ATAAdjustDelegateSessionFailure.m */, 6FFCFE67200797D000467F01 /* ATAAdjustDelegateSessionSuccess.h */, 6FFCFE6A200797D000467F01 /* ATAAdjustDelegateSessionSuccess.m */, + 9D75AFD9210217FF0079A36C /* ATAAdjustDelegateDeferredDeeplink.h */, + 9D75AFDA210217FF0079A36C /* ATAAdjustDelegateDeferredDeeplink.m */, ); path = Delegates; sourceTree = ""; @@ -441,6 +446,7 @@ 6F3A5E6E2018CE14000AACD0 /* ADJDeviceInfo.m in Sources */, 6FFCFE5F2007978300467F01 /* ATAAdjustCommandExecutor.m in Sources */, 6F08422F2007769F00568A31 /* ViewController.m in Sources */, + 9D75AFDB210217FF0079A36C /* ATAAdjustDelegateDeferredDeeplink.m in Sources */, 6F3A5E8A2018CE14000AACD0 /* ADJResponseData.m in Sources */, 6F08423A200776A000568A31 /* main.m in Sources */, 6F3A5E9E2018CE3A000AACD0 /* ATLTestInfo.m in Sources */, diff --git a/AdjustTests/AdjustTestApp/AdjustTestApp/ATAAdjustCommandExecutor.m b/AdjustTests/AdjustTestApp/AdjustTestApp/ATAAdjustCommandExecutor.m index 161fbf955..fed0461a5 100644 --- a/AdjustTests/AdjustTestApp/AdjustTestApp/ATAAdjustCommandExecutor.m +++ b/AdjustTests/AdjustTestApp/AdjustTestApp/ATAAdjustCommandExecutor.m @@ -14,6 +14,7 @@ #import "ATAAdjustDelegateEventSuccess.h" #import "ATAAdjustDelegateSessionSuccess.h" #import "ATAAdjustDelegateSessionFailure.h" +#import "ATAAdjustDelegateDeferredDeeplink.h" #import "ATAAdjustCommandExecutor.h" #import "ViewController.h" @@ -264,58 +265,44 @@ - (void)config:(NSDictionary *)parameters { [adjustConfig setUserAgent:userAgent]; } - /* - self.adjustDelegate = [[ATAAdjustDelegate alloc] initWithTestLibrary:self.testLibrary]; - BOOL swizzleAttributionCallback = NO; - BOOL swizzleSessionSuccessCallback = NO; - BOOL swizzleSessionFailureCallback = NO; - BOOL swizzleEventSuccessCallback = NO; - BOOL swizzleEventFailureCallback = NO; - */ - if ([parameters objectForKey:@"attributionCallbackSendAll"]) { NSLog(@"attributionCallbackSendAll detected"); self.adjustDelegate = [[ATAAdjustDelegateAttribution alloc] initWithTestLibrary:self.testLibrary andBasePath:self.basePath]; - // swizzleAttributionCallback = YES; } if ([parameters objectForKey:@"sessionCallbackSendSuccess"]) { NSLog(@"sessionCallbackSendSuccess detected"); self.adjustDelegate = [[ATAAdjustDelegateSessionSuccess alloc] initWithTestLibrary:self.testLibrary andBasePath:self.basePath]; - // swizzleSessionSuccessCallback = YES; } if ([parameters objectForKey:@"sessionCallbackSendFailure"]) { NSLog(@"sessionCallbackSendFailure detected"); self.adjustDelegate = [[ATAAdjustDelegateSessionFailure alloc] initWithTestLibrary:self.testLibrary andBasePath:self.basePath]; - // swizzleSessionFailureCallback = YES; } if ([parameters objectForKey:@"eventCallbackSendSuccess"]) { NSLog(@"eventCallbackSendSuccess detected"); self.adjustDelegate = [[ATAAdjustDelegateEventSuccess alloc] initWithTestLibrary:self.testLibrary andBasePath:self.basePath]; - // swizzleEventSuccessCallback = YES; } if ([parameters objectForKey:@"eventCallbackSendFailure"]) { NSLog(@"eventCallbackSendFailure detected"); self.adjustDelegate = [[ATAAdjustDelegateEventFailure alloc] initWithTestLibrary:self.testLibrary andBasePath:self.basePath]; - // swizzleEventFailureCallback = YES; } - /* - [self.adjustDelegate swizzleAttributionCallback:swizzleAttributionCallback - eventSucceededCallback:swizzleEventSuccessCallback - eventFailedCallback:swizzleEventFailureCallback - sessionSucceededCallback:swizzleSessionSuccessCallback - sessionFailedCallback:swizzleSessionFailureCallback]; - [adjustConfig setDelegate:self.adjustDelegate]; - */ + if ([parameters objectForKey:@"deferredDeeplinkCallback"]) { + NSLog(@"deferredDeeplinkCallback detected"); + NSString *shouldOpenDeeplinkS = [parameters objectForKey:@"deferredDeeplinkCallback"][0]; + self.adjustDelegate = [[ATAAdjustDelegateDeferredDeeplink alloc] initWithTestLibrary:self.testLibrary + basePath:self.basePath + andReturnValue:[shouldOpenDeeplinkS boolValue]]; + } + [adjustConfig setDelegate:self.adjustDelegate]; } diff --git a/AdjustTests/AdjustTestApp/AdjustTestApp/AppDelegate.m b/AdjustTests/AdjustTestApp/AdjustTestApp/AppDelegate.m index 34bfc054c..f0dfcfc76 100644 --- a/AdjustTests/AdjustTestApp/AdjustTestApp/AppDelegate.m +++ b/AdjustTests/AdjustTestApp/AdjustTestApp/AppDelegate.m @@ -7,6 +7,7 @@ // #import "AppDelegate.h" +#import "Adjust.h" @interface AppDelegate () @@ -41,4 +42,9 @@ - (void)applicationWillTerminate:(UIApplication *)application { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } +- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { + [Adjust appWillOpenUrl:url]; + return YES; +} + @end diff --git a/AdjustTests/AdjustTestApp/AdjustTestApp/Delegates/ATAAdjustDelegateDeferredDeeplink.h b/AdjustTests/AdjustTestApp/AdjustTestApp/Delegates/ATAAdjustDelegateDeferredDeeplink.h new file mode 100644 index 000000000..89e3683de --- /dev/null +++ b/AdjustTests/AdjustTestApp/AdjustTestApp/Delegates/ATAAdjustDelegateDeferredDeeplink.h @@ -0,0 +1,17 @@ +// +// ATAAdjustDelegateDeferredDeeplink.h +// AdjustTestApp +// +// Created by Uglješa Erceg on 20.07.18. +// Copyright © 2018 adjust. All rights reserved. +// + +#import +#import "Adjust.h" +#import "ATLTestLibrary.h" + +@interface ATAAdjustDelegateDeferredDeeplink : NSObject + +- (id)initWithTestLibrary:(ATLTestLibrary *)testLibrary basePath:(NSString *)basePath andReturnValue:(BOOL)returnValue; + +@end diff --git a/AdjustTests/AdjustTestApp/AdjustTestApp/Delegates/ATAAdjustDelegateDeferredDeeplink.m b/AdjustTests/AdjustTestApp/AdjustTestApp/Delegates/ATAAdjustDelegateDeferredDeeplink.m new file mode 100644 index 000000000..6e30364d5 --- /dev/null +++ b/AdjustTests/AdjustTestApp/AdjustTestApp/Delegates/ATAAdjustDelegateDeferredDeeplink.m @@ -0,0 +1,45 @@ +// +// ATAAdjustDelegateDeferredDeeplink.m +// AdjustTestApp +// +// Created by Uglješa Erceg on 20.07.18. +// Copyright © 2018 adjust. All rights reserved. +// + +#import "ATAAdjustDelegateDeferredDeeplink.h" + +@interface ATAAdjustDelegateDeferredDeeplink () + +@property (nonatomic, strong) ATLTestLibrary *testLibrary; +@property (nonatomic, copy) NSString *basePath; +@property (nonatomic, assign) BOOL returnValue; + +@end + +@implementation ATAAdjustDelegateDeferredDeeplink + +- (id)initWithTestLibrary:(ATLTestLibrary *)testLibrary basePath:(NSString *)basePath andReturnValue:(BOOL)returnValue { + self = [super init]; + + if (nil == self) { + return nil; + } + + self.testLibrary = testLibrary; + self.basePath = basePath; + self.returnValue = returnValue; + + return self; +} + +- (BOOL)adjustDeeplinkResponse:(nullable NSURL *)deeplink { + NSLog(@"Deferred deep link callback called!"); + NSLog(@"Deep link: %@", deeplink); + + [self.testLibrary addInfoToSend:@"deeplink" value:[deeplink absoluteString]]; + [self.testLibrary sendInfoToServer:self.basePath]; + + return self.returnValue; +} + +@end diff --git a/AdjustTests/AdjustTestApp/AdjustTestApp/Info.plist b/AdjustTests/AdjustTestApp/AdjustTestApp/Info.plist index 16be3b681..9d6cd0051 100644 --- a/AdjustTests/AdjustTestApp/AdjustTestApp/Info.plist +++ b/AdjustTests/AdjustTestApp/AdjustTestApp/Info.plist @@ -41,5 +41,16 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + CFBundleURLTypes + + + CFBundleURLName + com.adjust.AdjustTestApp + CFBundleURLSchemes + + adjust-test + + + From ad02bb34808104234dbc1b85596f678325a0710f Mon Sep 17 00:00:00 2001 From: nonelse Date: Mon, 23 Jul 2018 13:36:01 +0200 Subject: [PATCH 12/67] Remove info.plist from test app bundle resources --- .../AdjustTestApp/AdjustTestApp.xcodeproj/project.pbxproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/AdjustTests/AdjustTestApp/AdjustTestApp.xcodeproj/project.pbxproj b/AdjustTests/AdjustTestApp/AdjustTestApp.xcodeproj/project.pbxproj index 439b2764a..9e6c655b0 100644 --- a/AdjustTests/AdjustTestApp/AdjustTestApp.xcodeproj/project.pbxproj +++ b/AdjustTests/AdjustTestApp/AdjustTestApp.xcodeproj/project.pbxproj @@ -44,7 +44,6 @@ 6F3A5E8A2018CE14000AACD0 /* ADJResponseData.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3A5E632018CE14000AACD0 /* ADJResponseData.m */; }; 6F3A5E8B2018CE14000AACD0 /* ADJPackageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3A5E652018CE14000AACD0 /* ADJPackageBuilder.m */; }; 6F3A5E8C2018CE14000AACD0 /* ADJUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3A5E662018CE14000AACD0 /* ADJUserDefaults.m */; }; - 6F3A5E8D2018CE14000AACD0 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 6F3A5E6A2018CE14000AACD0 /* Info.plist */; }; 6F3A5E8E2018CE14000AACD0 /* ADJActivityHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3A5E6C2018CE14000AACD0 /* ADJActivityHandler.m */; }; 6F3A5E8F2018CE14000AACD0 /* ADJReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3A5E6D2018CE14000AACD0 /* ADJReachability.m */; }; 6F3A5E9E2018CE3A000AACD0 /* ATLTestInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3A5E912018CE3A000AACD0 /* ATLTestInfo.m */; }; @@ -403,7 +402,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6F3A5E8D2018CE14000AACD0 /* Info.plist in Resources */, 6F084237200776A000568A31 /* LaunchScreen.storyboard in Resources */, 6F0842342007769F00568A31 /* Assets.xcassets in Resources */, 6F0842322007769F00568A31 /* Main.storyboard in Resources */, From 7a005e362813615fb5f42669abf6c776844b7799 Mon Sep 17 00:00:00 2001 From: nonelse Date: Thu, 26 Jul 2018 11:19:26 +0200 Subject: [PATCH 13/67] Remove duplicated info plist references --- Adjust.xcodeproj/project.pbxproj | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/Adjust.xcodeproj/project.pbxproj b/Adjust.xcodeproj/project.pbxproj index 476b53d46..1531a6226 100644 --- a/Adjust.xcodeproj/project.pbxproj +++ b/Adjust.xcodeproj/project.pbxproj @@ -220,7 +220,6 @@ 9DEAF131210072BC005CAEDB /* ADJBackoffStrategy.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0EE210072BC005CAEDB /* ADJBackoffStrategy.h */; }; 9DEAF132210072BC005CAEDB /* ADJLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0EF210072BC005CAEDB /* ADJLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9DEAF133210072BC005CAEDB /* ADJSessionParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0F0210072BC005CAEDB /* ADJSessionParameters.h */; }; - 9DEAF134210072BC005CAEDB /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9DEAF0F1210072BC005CAEDB /* Info.plist */; }; 9DEAF135210072BC005CAEDB /* ADJTimerCycle.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEAF0F2210072BC005CAEDB /* ADJTimerCycle.h */; }; 9DEAF136210072BC005CAEDB /* ADJActivityHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0F3210072BC005CAEDB /* ADJActivityHandler.m */; }; 9DEAF137210072BC005CAEDB /* ADJReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAF0F4210072BC005CAEDB /* ADJReachability.m */; }; @@ -282,7 +281,6 @@ 9DF9C9441D6F3CA5008E362F /* Adjust.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DF9C9051D6F3CA5008E362F /* Adjust.m */; }; 9DF9C9451D6F3CA5008E362F /* ADJUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DF9C9061D6F3CA5008E362F /* ADJUtil.h */; }; 9DF9C9461D6F3CA5008E362F /* ADJUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DF9C9071D6F3CA5008E362F /* ADJUtil.m */; }; - 9DF9C9471D6F3CA5008E362F /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9DF9C9081D6F3CA5008E362F /* Info.plist */; }; 9DFA37B71C0F21D600782607 /* AdjustSdk.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DFA37B51C0F21D600782607 /* AdjustSdk.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9DFB06131D747070006D48FC /* AdjustSdkTv.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DFB06121D747070006D48FC /* AdjustSdkTv.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9DFB065A1D7470C0006D48FC /* ADJActivityHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DFB061A1D7470C0006D48FC /* ADJActivityHandler.h */; }; @@ -345,7 +343,6 @@ 9DFB06951D7470C0006D48FC /* Adjust.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DFB06561D7470C0006D48FC /* Adjust.m */; }; 9DFB06961D7470C0006D48FC /* ADJUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DFB06571D7470C0006D48FC /* ADJUtil.h */; }; 9DFB06971D7470C0006D48FC /* ADJUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DFB06581D7470C0006D48FC /* ADJUtil.m */; }; - 9DFB06981D7470C0006D48FC /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9DFB06591D7470C0006D48FC /* Info.plist */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -699,7 +696,6 @@ 9DEAF0EE210072BC005CAEDB /* ADJBackoffStrategy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJBackoffStrategy.h; sourceTree = ""; }; 9DEAF0EF210072BC005CAEDB /* ADJLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJLogger.h; sourceTree = ""; }; 9DEAF0F0210072BC005CAEDB /* ADJSessionParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSessionParameters.h; sourceTree = ""; }; - 9DEAF0F1210072BC005CAEDB /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 9DEAF0F2210072BC005CAEDB /* ADJTimerCycle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJTimerCycle.h; sourceTree = ""; }; 9DEAF0F3210072BC005CAEDB /* ADJActivityHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityHandler.m; sourceTree = ""; }; 9DEAF0F4210072BC005CAEDB /* ADJReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJReachability.m; sourceTree = ""; }; @@ -765,7 +761,6 @@ 9DF9C9051D6F3CA5008E362F /* Adjust.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Adjust.m; sourceTree = ""; }; 9DF9C9061D6F3CA5008E362F /* ADJUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUtil.h; sourceTree = ""; }; 9DF9C9071D6F3CA5008E362F /* ADJUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUtil.m; sourceTree = ""; }; - 9DF9C9081D6F3CA5008E362F /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 9DFA37AD1C0F219400782607 /* AdjustSdk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AdjustSdk.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9DFA37B51C0F21D600782607 /* AdjustSdk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustSdk.h; sourceTree = ""; }; 9DFA37B61C0F21D600782607 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -832,7 +827,6 @@ 9DFB06561D7470C0006D48FC /* Adjust.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Adjust.m; sourceTree = ""; }; 9DFB06571D7470C0006D48FC /* ADJUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUtil.h; sourceTree = ""; }; 9DFB06581D7470C0006D48FC /* ADJUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUtil.m; sourceTree = ""; }; - 9DFB06591D7470C0006D48FC /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1295,7 +1289,6 @@ 9DEAF0EE210072BC005CAEDB /* ADJBackoffStrategy.h */, 9DEAF0EF210072BC005CAEDB /* ADJLogger.h */, 9DEAF0F0210072BC005CAEDB /* ADJSessionParameters.h */, - 9DEAF0F1210072BC005CAEDB /* Info.plist */, 9DEAF0F2210072BC005CAEDB /* ADJTimerCycle.h */, 9DEAF0F3210072BC005CAEDB /* ADJActivityHandler.m */, 9DEAF0F4210072BC005CAEDB /* ADJReachability.m */, @@ -1378,7 +1371,6 @@ 96B671131D788F4A0090A023 /* ADJSessionParameters.m */, 6FCC85021F27944600D6A0ED /* ADJReachability.h */, 6FCC85031F27944600D6A0ED /* ADJReachability.m */, - 9DF9C9081D6F3CA5008E362F /* Info.plist */, ); path = Adjust; sourceTree = SOURCE_ROOT; @@ -1478,7 +1470,6 @@ 96B671171D788F7A0090A023 /* ADJSessionParameters.m */, 6FCC85071F27948700D6A0ED /* ADJReachability.h */, 6FCC85061F27948700D6A0ED /* ADJReachability.m */, - 9DFB06591D7470C0006D48FC /* Info.plist */, ); path = Adjust; sourceTree = SOURCE_ROOT; @@ -1992,7 +1983,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9DEAF134210072BC005CAEDB /* Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2000,7 +1990,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9DF9C9471D6F3CA5008E362F /* Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2008,7 +1997,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9DFB06981D7470C0006D48FC /* Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; From 1b3728efa0f8d9561693b0da4b599b40772daea8 Mon Sep 17 00:00:00 2001 From: uerceg Date: Thu, 26 Jul 2018 11:22:01 +0200 Subject: [PATCH 14/67] Removing build of iMessage framework from script, awaiting Carthage way --- scripts/build.sh | 6 ------ 1 file changed, 6 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index af059e080..cb7dd8fb0 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -43,12 +43,6 @@ echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # -echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding dynamic iMessage SDK framework and copying it to destination folder ... ${NC}" -xcodebuild -target AdjustSdkIm -configuration Release clean build -echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" - -# ======================================== # - echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding universal tvOS SDK framework (device + simulator) and copying it to destination folder ... ${NC}" xcodebuild -configuration Release -target AdjustSdkTv -arch x86_64 -sdk appletvsimulator clean build xcodebuild -configuration Release -target AdjustSdkTv -arch arm64 -sdk appletvos clean build From 8dac7f3dc513d7a9f231a84f54219843e92b0176 Mon Sep 17 00:00:00 2001 From: uerceg Date: Thu, 26 Jul 2018 11:22:31 +0200 Subject: [PATCH 15/67] Remove IM framework copy phase, not needed --- Adjust.xcodeproj/project.pbxproj | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/Adjust.xcodeproj/project.pbxproj b/Adjust.xcodeproj/project.pbxproj index 1531a6226..fb63319a8 100644 --- a/Adjust.xcodeproj/project.pbxproj +++ b/Adjust.xcodeproj/project.pbxproj @@ -1736,7 +1736,6 @@ 9DE354CE2100726300D211C9 /* Frameworks */, 9DE354CF2100726300D211C9 /* Headers */, 9DE354D02100726300D211C9 /* Resources */, - 9DEAF13821007AA2005CAEDB /* Copy IM Framework */, ); buildRules = ( ); @@ -2045,20 +2044,6 @@ shellPath = /bin/sh; shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_INPUT_STATIC_LIB=\"lib${PROJECT_NAME}.a\"\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/static/${RW_FRAMEWORK_NAME}Sdk.framework\"\n\nfunction build_static_library {\n echo \"1\"\n echo \"${BUILD_DIR}\"\n # Will rebuild the static library as specified\n # build_static_library sdk\n xcrun xcodebuild -project \"${PROJECT_FILE_PATH}\" \\\n -target \"${TARGET_NAME}\" \\\n -configuration \"${CONFIGURATION}\" \\\n -sdk \"${1}\" \\\n ONLY_ACTIVE_ARCH=NO \\\n BUILD_DIR=\"${BUILD_DIR}\" \\\n OBJROOT=\"${OBJROOT}\" \\\n BUILD_ROOT=\"${BUILD_ROOT}\" \\\n SYMROOT=\"${SYMROOT}\" $ACTION\n}\n\nfunction make_fat_library {\n # Will smash 2 static libs together\n # make_fat_library in1 in2 out\n xcrun lipo -create \"${1}\" \"${2}\" -output \"${3}\"\n}\n\n# 1 - Extract the platform (iphoneos/iphonesimulator) from the SDK name\nif [[ \"$SDK_NAME\" =~ ([A-Za-z]+) ]]; then\nRW_SDK_PLATFORM=${BASH_REMATCH[1]}\nelse\necho \"Could not find platform name from SDK_NAME: $SDK_NAME\"\nexit 1\nfi\n\n# 2 - Extract the version from the SDK\nif [[ \"$SDK_NAME\" =~ ([0-9]+.*$) ]]; then\nRW_SDK_VERSION=${BASH_REMATCH[1]}\nelse\necho \"Could not find sdk version from SDK_NAME: $SDK_NAME\"\nexit 1\nfi\n\n# 3 - Determine the other platform\nif [ \"$RW_SDK_PLATFORM\" == \"iphoneos\" ]; then\nRW_OTHER_PLATFORM=iphonesimulator\nelse\nRW_OTHER_PLATFORM=iphoneos\nfi\n\n# 4 - Find the build directory\nif [[ \"$BUILT_PRODUCTS_DIR\" =~ (.*)$RW_SDK_PLATFORM$ ]]; then\nRW_OTHER_BUILT_PRODUCTS_DIR=\"${BASH_REMATCH[1]}${RW_OTHER_PLATFORM}\"\nelse\necho \"Could not find other platform build directory.\"\nexit 1\nfi\n\n# Build the other platform.\nbuild_static_library \"${RW_OTHER_PLATFORM}${RW_SDK_VERSION}\"\n\n# If we're currently building for iphonesimulator, then need to rebuild\n# to ensure that we get both i386 and x86_64\nif [ \"$RW_SDK_PLATFORM\" == \"iphonesimulator\" ]; then\nbuild_static_library \"${SDK_NAME}\"\nfi\n\n# Join the 2 static libs into 1 and push into the .framework\nmake_fat_library \"${BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}\" \\\n\"${RW_OTHER_BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}\" \\\n\"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}Sdk\"\n\n# Ensure that the framework is present in both platform's build directories\ncp -a \"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}Sdk\" \\\n\"${RW_OTHER_BUILT_PRODUCTS_DIR}/static/${RW_FRAMEWORK_NAME}Sdk.framework/Versions/A/${RW_FRAMEWORK_NAME}Sdk\"\n\n# Copy the framework to the project directory\nditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/frameworks/static/${RW_FRAMEWORK_NAME}Sdk.framework\""; }; - 9DEAF13821007AA2005CAEDB /* Copy IM Framework */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Copy IM Framework"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}SdkIm.framework\"\n\n# Copy the framework to the iMessage framework folder\nditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/frameworks/imessage/${RW_FRAMEWORK_NAME}SdkIm.framework\""; - }; 9DFB06991D747BBE006D48FC /* Copy tvOS Framework */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; From a14bfd9edd7660a7aa41f7ccbc9b2ded5a0d9b33 Mon Sep 17 00:00:00 2001 From: uerceg Date: Thu, 26 Jul 2018 11:23:59 +0200 Subject: [PATCH 16/67] Remove copy dynamic framework phases, not needed --- Adjust.xcodeproj/project.pbxproj | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/Adjust.xcodeproj/project.pbxproj b/Adjust.xcodeproj/project.pbxproj index fb63319a8..4a0b3d639 100644 --- a/Adjust.xcodeproj/project.pbxproj +++ b/Adjust.xcodeproj/project.pbxproj @@ -1754,7 +1754,6 @@ 9DFA37A91C0F219400782607 /* Frameworks */, 9DFA37AA1C0F219400782607 /* Headers */, 9DFA37AB1C0F219400782607 /* Resources */, - 9DB1EE2C1C635DC0007FCFFC /* Copy Dynamic Framework */, ); buildRules = ( ); @@ -1773,7 +1772,6 @@ 9DFB060C1D747070006D48FC /* Frameworks */, 9DFB060D1D747070006D48FC /* Headers */, 9DFB060E1D747070006D48FC /* Resources */, - 9DFB06991D747BBE006D48FC /* Copy tvOS Framework */, ); buildRules = ( ); @@ -2002,20 +2000,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 9DB1EE2C1C635DC0007FCFFC /* Copy Dynamic Framework */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Copy Dynamic Framework"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}Sdk.framework\"\n\n# Copy the framework to the dynamic framework directory\n# ditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/frameworks/dynamic/${RW_FRAMEWORK_NAME}Sdk.framework\"\n# Copying not done because Carthage dynamic build is used for dynamic framework version"; - }; 9DE7C9011AE68F68001556E5 /* Build Framework */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -2044,20 +2028,6 @@ shellPath = /bin/sh; shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_INPUT_STATIC_LIB=\"lib${PROJECT_NAME}.a\"\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/static/${RW_FRAMEWORK_NAME}Sdk.framework\"\n\nfunction build_static_library {\n echo \"1\"\n echo \"${BUILD_DIR}\"\n # Will rebuild the static library as specified\n # build_static_library sdk\n xcrun xcodebuild -project \"${PROJECT_FILE_PATH}\" \\\n -target \"${TARGET_NAME}\" \\\n -configuration \"${CONFIGURATION}\" \\\n -sdk \"${1}\" \\\n ONLY_ACTIVE_ARCH=NO \\\n BUILD_DIR=\"${BUILD_DIR}\" \\\n OBJROOT=\"${OBJROOT}\" \\\n BUILD_ROOT=\"${BUILD_ROOT}\" \\\n SYMROOT=\"${SYMROOT}\" $ACTION\n}\n\nfunction make_fat_library {\n # Will smash 2 static libs together\n # make_fat_library in1 in2 out\n xcrun lipo -create \"${1}\" \"${2}\" -output \"${3}\"\n}\n\n# 1 - Extract the platform (iphoneos/iphonesimulator) from the SDK name\nif [[ \"$SDK_NAME\" =~ ([A-Za-z]+) ]]; then\nRW_SDK_PLATFORM=${BASH_REMATCH[1]}\nelse\necho \"Could not find platform name from SDK_NAME: $SDK_NAME\"\nexit 1\nfi\n\n# 2 - Extract the version from the SDK\nif [[ \"$SDK_NAME\" =~ ([0-9]+.*$) ]]; then\nRW_SDK_VERSION=${BASH_REMATCH[1]}\nelse\necho \"Could not find sdk version from SDK_NAME: $SDK_NAME\"\nexit 1\nfi\n\n# 3 - Determine the other platform\nif [ \"$RW_SDK_PLATFORM\" == \"iphoneos\" ]; then\nRW_OTHER_PLATFORM=iphonesimulator\nelse\nRW_OTHER_PLATFORM=iphoneos\nfi\n\n# 4 - Find the build directory\nif [[ \"$BUILT_PRODUCTS_DIR\" =~ (.*)$RW_SDK_PLATFORM$ ]]; then\nRW_OTHER_BUILT_PRODUCTS_DIR=\"${BASH_REMATCH[1]}${RW_OTHER_PLATFORM}\"\nelse\necho \"Could not find other platform build directory.\"\nexit 1\nfi\n\n# Build the other platform.\nbuild_static_library \"${RW_OTHER_PLATFORM}${RW_SDK_VERSION}\"\n\n# If we're currently building for iphonesimulator, then need to rebuild\n# to ensure that we get both i386 and x86_64\nif [ \"$RW_SDK_PLATFORM\" == \"iphonesimulator\" ]; then\nbuild_static_library \"${SDK_NAME}\"\nfi\n\n# Join the 2 static libs into 1 and push into the .framework\nmake_fat_library \"${BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}\" \\\n\"${RW_OTHER_BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}\" \\\n\"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}Sdk\"\n\n# Ensure that the framework is present in both platform's build directories\ncp -a \"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}Sdk\" \\\n\"${RW_OTHER_BUILT_PRODUCTS_DIR}/static/${RW_FRAMEWORK_NAME}Sdk.framework/Versions/A/${RW_FRAMEWORK_NAME}Sdk\"\n\n# Copy the framework to the project directory\nditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/frameworks/static/${RW_FRAMEWORK_NAME}Sdk.framework\""; }; - 9DFB06991D747BBE006D48FC /* Copy tvOS Framework */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Copy tvOS Framework"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}SdkTv.framework\"\n\n# Copy the framework to the tvOS framework directory\n# ditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/frameworks/tvos/${RW_FRAMEWORK_NAME}SdkTv.framework\"\n# Copying not done because build script handles this with building target for device + simulator"; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ From c087b766322f605e26346a2b0e779d0d97b4d303 Mon Sep 17 00:00:00 2001 From: uerceg Date: Thu, 26 Jul 2018 11:24:41 +0200 Subject: [PATCH 17/67] Adding and sharing IM scheme --- .../xcschemes/AdjustSdkIm.xcscheme | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkIm.xcscheme diff --git a/Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkIm.xcscheme b/Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkIm.xcscheme new file mode 100644 index 000000000..847e3002e --- /dev/null +++ b/Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkIm.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From aa9befdb601ed2990e4dbc701fb3f771e941e000 Mon Sep 17 00:00:00 2001 From: nonelse Date: Thu, 26 Jul 2018 11:27:54 +0200 Subject: [PATCH 18/67] Remove duplicated info plist ref from example apps --- .../AdjustExample-Swift.xcodeproj/project.pbxproj | 4 ---- .../AdjustExample-WebView.xcodeproj/project.pbxproj | 4 ---- .../AdjustExample-iMessage.xcodeproj/project.pbxproj | 4 ---- .../AdjustExample-iWatch.xcodeproj/project.pbxproj | 4 ---- .../AdjustExample-tvOS.xcodeproj/project.pbxproj | 4 ---- 5 files changed, 20 deletions(-) diff --git a/examples/AdjustExample-Swift/AdjustExample-Swift.xcodeproj/project.pbxproj b/examples/AdjustExample-Swift/AdjustExample-Swift.xcodeproj/project.pbxproj index 7e5df0295..0c9dc94b8 100644 --- a/examples/AdjustExample-Swift/AdjustExample-Swift.xcodeproj/project.pbxproj +++ b/examples/AdjustExample-Swift/AdjustExample-Swift.xcodeproj/project.pbxproj @@ -39,7 +39,6 @@ 9D449E931E6EDC3D00E7E80B /* ADJTimerOnce.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D449E701E6EDC3D00E7E80B /* ADJTimerOnce.m */; }; 9D449E941E6EDC3D00E7E80B /* Adjust.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D449E721E6EDC3D00E7E80B /* Adjust.m */; }; 9D449E951E6EDC3D00E7E80B /* ADJUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D449E741E6EDC3D00E7E80B /* ADJUtil.m */; }; - 9D449E961E6EDC3D00E7E80B /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9D449E751E6EDC3D00E7E80B /* Info.plist */; }; 9DD0E9C11F45879A00B2A759 /* ADJUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DD0E9C01F45879A00B2A759 /* ADJUserDefaults.m */; }; 9DF7A9C61CB4ECA600D3591F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DF7A9C51CB4ECA600D3591F /* AppDelegate.swift */; }; 9DF7A9C81CB4ECA600D3591F /* ViewControllerSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DF7A9C71CB4ECA600D3591F /* ViewControllerSwift.swift */; }; @@ -115,7 +114,6 @@ 9D449E721E6EDC3D00E7E80B /* Adjust.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Adjust.m; sourceTree = ""; }; 9D449E731E6EDC3D00E7E80B /* ADJUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUtil.h; sourceTree = ""; }; 9D449E741E6EDC3D00E7E80B /* ADJUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUtil.m; sourceTree = ""; }; - 9D449E751E6EDC3D00E7E80B /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 9DD0E9BF1F45879A00B2A759 /* ADJUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUserDefaults.h; sourceTree = ""; }; 9DD0E9C01F45879A00B2A759 /* ADJUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUserDefaults.m; sourceTree = ""; }; 9DF7A9C21CB4ECA600D3591F /* AdjustExample-Swift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "AdjustExample-Swift.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -207,7 +205,6 @@ 6FCC850E1F2794BE00D6A0ED /* ADJReachability.m */, 9DD0E9BF1F45879A00B2A759 /* ADJUserDefaults.h */, 9DD0E9C01F45879A00B2A759 /* ADJUserDefaults.m */, - 9D449E751E6EDC3D00E7E80B /* Info.plist */, ); name = Adjust; path = ../../../Adjust; @@ -327,7 +324,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9D449E961E6EDC3D00E7E80B /* Info.plist in Resources */, 9DF7A9D01CB4ECA600D3591F /* LaunchScreen.storyboard in Resources */, 9DF7A9CD1CB4ECA600D3591F /* Assets.xcassets in Resources */, 9DF7A9CB1CB4ECA600D3591F /* Main.storyboard in Resources */, diff --git a/examples/AdjustExample-WebView/AdjustExample-WebView.xcodeproj/project.pbxproj b/examples/AdjustExample-WebView/AdjustExample-WebView.xcodeproj/project.pbxproj index 55b36d0c0..bc84da7c2 100644 --- a/examples/AdjustExample-WebView/AdjustExample-WebView.xcodeproj/project.pbxproj +++ b/examples/AdjustExample-WebView/AdjustExample-WebView.xcodeproj/project.pbxproj @@ -52,7 +52,6 @@ 9D449EF71E6EDD4100E7E80B /* ADJTimerOnce.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D449ED41E6EDD4100E7E80B /* ADJTimerOnce.m */; }; 9D449EF81E6EDD4100E7E80B /* Adjust.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D449ED61E6EDD4100E7E80B /* Adjust.m */; }; 9D449EF91E6EDD4100E7E80B /* ADJUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D449ED81E6EDD4100E7E80B /* ADJUtil.m */; }; - 9D449EFA1E6EDD4100E7E80B /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9D449ED91E6EDD4100E7E80B /* Info.plist */; }; 9D75F1961D07463800E5D222 /* WebViewJavascriptBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D75F1881D07463800E5D222 /* WebViewJavascriptBridge.m */; }; 9D75F1971D07463800E5D222 /* WebViewJavascriptBridge_JS.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D75F18A1D07463800E5D222 /* WebViewJavascriptBridge_JS.m */; }; 9D75F1981D07463800E5D222 /* WebViewJavascriptBridgeBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D75F18C1D07463800E5D222 /* WebViewJavascriptBridgeBase.m */; }; @@ -148,7 +147,6 @@ 9D449ED61E6EDD4100E7E80B /* Adjust.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Adjust.m; sourceTree = ""; }; 9D449ED71E6EDD4100E7E80B /* ADJUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUtil.h; sourceTree = ""; }; 9D449ED81E6EDD4100E7E80B /* ADJUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUtil.m; sourceTree = ""; }; - 9D449ED91E6EDD4100E7E80B /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 9D75F1871D07463800E5D222 /* WebViewJavascriptBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewJavascriptBridge.h; sourceTree = ""; }; 9D75F1881D07463800E5D222 /* WebViewJavascriptBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewJavascriptBridge.m; sourceTree = ""; }; 9D75F1891D07463800E5D222 /* WebViewJavascriptBridge_JS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewJavascriptBridge_JS.h; sourceTree = ""; }; @@ -307,7 +305,6 @@ 6FCC85111F2794D600D6A0ED /* ADJReachability.m */, 9DD0E9C21F4587C600B2A759 /* ADJUserDefaults.h */, 9DD0E9C31F4587C600B2A759 /* ADJUserDefaults.m */, - 9D449ED91E6EDD4100E7E80B /* Info.plist */, ); name = Adjust; path = ../../../Adjust; @@ -421,7 +418,6 @@ 9D75F19D1D07463800E5D222 /* adjust_config.js in Resources */, 9D75F19C1D07463800E5D222 /* adjust_event.js in Resources */, 9D75F19B1D07463800E5D222 /* adjust.js in Resources */, - 9D449EFA1E6EDD4100E7E80B /* Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.pbxproj b/examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.pbxproj index ca5171a2f..6c88f2ed5 100644 --- a/examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.pbxproj +++ b/examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj/project.pbxproj @@ -44,7 +44,6 @@ 9D01687220FF88F60029CFFF /* ADJResponseData.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01684B20FF88F60029CFFF /* ADJResponseData.m */; }; 9D01687320FF88F60029CFFF /* ADJPackageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01684D20FF88F60029CFFF /* ADJPackageBuilder.m */; }; 9D01687420FF88F60029CFFF /* ADJUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01684E20FF88F60029CFFF /* ADJUserDefaults.m */; }; - 9D01687520FF88F60029CFFF /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9D01685220FF88F60029CFFF /* Info.plist */; }; 9D01687620FF88F60029CFFF /* ADJActivityHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01685420FF88F60029CFFF /* ADJActivityHandler.m */; }; 9D01687720FF88F60029CFFF /* ADJReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D01685520FF88F60029CFFF /* ADJReachability.m */; }; /* End PBXBuildFile section */ @@ -147,7 +146,6 @@ 9D01684F20FF88F60029CFFF /* ADJBackoffStrategy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJBackoffStrategy.h; sourceTree = ""; }; 9D01685020FF88F60029CFFF /* ADJLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJLogger.h; sourceTree = ""; }; 9D01685120FF88F60029CFFF /* ADJSessionParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSessionParameters.h; sourceTree = ""; }; - 9D01685220FF88F60029CFFF /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 9D01685320FF88F60029CFFF /* ADJTimerCycle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJTimerCycle.h; sourceTree = ""; }; 9D01685420FF88F60029CFFF /* ADJActivityHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityHandler.m; sourceTree = ""; }; 9D01685520FF88F60029CFFF /* ADJReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJReachability.m; sourceTree = ""; }; @@ -275,7 +273,6 @@ 9D01684F20FF88F60029CFFF /* ADJBackoffStrategy.h */, 9D01685020FF88F60029CFFF /* ADJLogger.h */, 9D01685120FF88F60029CFFF /* ADJSessionParameters.h */, - 9D01685220FF88F60029CFFF /* Info.plist */, 9D01685320FF88F60029CFFF /* ADJTimerCycle.h */, 9D01685420FF88F60029CFFF /* ADJActivityHandler.m */, 9D01685520FF88F60029CFFF /* ADJReachability.m */, @@ -385,7 +382,6 @@ files = ( 9D01677E20FF812C0029CFFF /* Assets.xcassets in Resources */, 9D01677C20FF812B0029CFFF /* MainInterface.storyboard in Resources */, - 9D01687520FF88F60029CFFF /* Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/examples/AdjustExample-iWatch/AdjustExample-iWatch.xcodeproj/project.pbxproj b/examples/AdjustExample-iWatch/AdjustExample-iWatch.xcodeproj/project.pbxproj index 4e6df9c20..d28ea29f4 100644 --- a/examples/AdjustExample-iWatch/AdjustExample-iWatch.xcodeproj/project.pbxproj +++ b/examples/AdjustExample-iWatch/AdjustExample-iWatch.xcodeproj/project.pbxproj @@ -39,7 +39,6 @@ 9D449FC01E6EE72000E7E80B /* ADJTimerOnce.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D449F9D1E6EE72000E7E80B /* ADJTimerOnce.m */; }; 9D449FC11E6EE72000E7E80B /* Adjust.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D449F9F1E6EE72000E7E80B /* Adjust.m */; }; 9D449FC21E6EE72000E7E80B /* ADJUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D449FA11E6EE72000E7E80B /* ADJUtil.m */; }; - 9D449FC31E6EE72000E7E80B /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9D449FA21E6EE72000E7E80B /* Info.plist */; }; 9DD0E9C71F45949600B2A759 /* ADJUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DD0E9C61F45949600B2A759 /* ADJUserDefaults.m */; }; 9DF7AC191CB4FEDB00D3591F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DF7AC181CB4FEDB00D3591F /* main.m */; }; 9DF7AC1C1CB4FEDB00D3591F /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DF7AC1B1CB4FEDB00D3591F /* AppDelegate.m */; }; @@ -170,7 +169,6 @@ 9D449F9F1E6EE72000E7E80B /* Adjust.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Adjust.m; sourceTree = ""; }; 9D449FA01E6EE72000E7E80B /* ADJUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUtil.h; sourceTree = ""; }; 9D449FA11E6EE72000E7E80B /* ADJUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUtil.m; sourceTree = ""; }; - 9D449FA21E6EE72000E7E80B /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 9DD0E9C51F45949600B2A759 /* ADJUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUserDefaults.h; sourceTree = ""; }; 9DD0E9C61F45949600B2A759 /* ADJUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUserDefaults.m; sourceTree = ""; }; 9DF7AC141CB4FEDB00D3591F /* AdjustExample-iWatch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "AdjustExample-iWatch.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -292,7 +290,6 @@ 6FCC85171F2794F800D6A0ED /* ADJReachability.m */, 9DD0E9C51F45949600B2A759 /* ADJUserDefaults.h */, 9DD0E9C61F45949600B2A759 /* ADJUserDefaults.m */, - 9D449FA21E6EE72000E7E80B /* Info.plist */, ); name = Adjust; path = ../../../Adjust; @@ -502,7 +499,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9D449FC31E6EE72000E7E80B /* Info.plist in Resources */, 9DF7AC271CB4FEDB00D3591F /* LaunchScreen.storyboard in Resources */, 9DF7AC241CB4FEDB00D3591F /* Assets.xcassets in Resources */, 9DF7AC221CB4FEDB00D3591F /* Main.storyboard in Resources */, diff --git a/examples/AdjustExample-tvOS/AdjustExample-tvOS.xcodeproj/project.pbxproj b/examples/AdjustExample-tvOS/AdjustExample-tvOS.xcodeproj/project.pbxproj index 293224d35..e0f851cc2 100644 --- a/examples/AdjustExample-tvOS/AdjustExample-tvOS.xcodeproj/project.pbxproj +++ b/examples/AdjustExample-tvOS/AdjustExample-tvOS.xcodeproj/project.pbxproj @@ -45,7 +45,6 @@ 9D449F5C1E6EE6C500E7E80B /* ADJTimerOnce.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D449F391E6EE6C500E7E80B /* ADJTimerOnce.m */; }; 9D449F5D1E6EE6C500E7E80B /* Adjust.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D449F3B1E6EE6C500E7E80B /* Adjust.m */; }; 9D449F5E1E6EE6C500E7E80B /* ADJUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D449F3D1E6EE6C500E7E80B /* ADJUtil.m */; }; - 9D449F5F1E6EE6C500E7E80B /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9D449F3E1E6EE6C500E7E80B /* Info.plist */; }; 9DC95F2F1C10596500138E4B /* Constants.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DC95F2E1C10596500138E4B /* Constants.m */; }; 9DD0E9CF1F459ECE00B2A759 /* ADJUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DD0E9CE1F459ECE00B2A759 /* ADJUserDefaults.m */; }; /* End PBXBuildFile section */ @@ -138,7 +137,6 @@ 9D449F3B1E6EE6C500E7E80B /* Adjust.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Adjust.m; sourceTree = ""; }; 9D449F3C1E6EE6C500E7E80B /* ADJUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUtil.h; sourceTree = ""; }; 9D449F3D1E6EE6C500E7E80B /* ADJUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUtil.m; sourceTree = ""; }; - 9D449F3E1E6EE6C500E7E80B /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 9DC95F2D1C10596500138E4B /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constants.h; sourceTree = ""; }; 9DC95F2E1C10596500138E4B /* Constants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Constants.m; sourceTree = ""; }; 9DD0E9CD1F459ECE00B2A759 /* ADJUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUserDefaults.h; sourceTree = ""; }; @@ -264,7 +262,6 @@ 6FCC85131F2794E800D6A0ED /* ADJReachability.m */, 9DD0E9CD1F459ECE00B2A759 /* ADJUserDefaults.h */, 9DD0E9CE1F459ECE00B2A759 /* ADJUserDefaults.m */, - 9D449F3E1E6EE6C500E7E80B /* Info.plist */, ); name = Adjust; path = ../../../Adjust; @@ -358,7 +355,6 @@ files = ( 963909C21BCC0D8300A2E8A4 /* Assets.xcassets in Resources */, 963909C01BCC0D8300A2E8A4 /* Main.storyboard in Resources */, - 9D449F5F1E6EE6C500E7E80B /* Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; From 6e735f041e079093f53452c529734e6debc5f544 Mon Sep 17 00:00:00 2001 From: nonelse Date: Mon, 25 Jun 2018 16:58:37 +0200 Subject: [PATCH 19/67] WVJSB update --- .../WebViewJavascriptBridge/WKWebViewJavascriptBridge.m | 5 ++++- .../WebViewJavascriptBridge/WebViewJavascriptBridge_JS.h | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/AdjustBridge/WebViewJavascriptBridge/WKWebViewJavascriptBridge.m b/AdjustBridge/WebViewJavascriptBridge/WKWebViewJavascriptBridge.m index 3c6caba1e..73c923db6 100644 --- a/AdjustBridge/WebViewJavascriptBridge/WKWebViewJavascriptBridge.m +++ b/AdjustBridge/WebViewJavascriptBridge/WKWebViewJavascriptBridge.m @@ -147,7 +147,10 @@ - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigati [_base logUnkownMessage:url]; } decisionHandler(WKNavigationActionPolicyCancel); - } else if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]) { + return; + } + + if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]) { [_webViewDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler]; } else { decisionHandler(WKNavigationActionPolicyAllow); diff --git a/AdjustBridge/WebViewJavascriptBridge/WebViewJavascriptBridge_JS.h b/AdjustBridge/WebViewJavascriptBridge/WebViewJavascriptBridge_JS.h index 6cb1cb95c..9c857f16e 100644 --- a/AdjustBridge/WebViewJavascriptBridge/WebViewJavascriptBridge_JS.h +++ b/AdjustBridge/WebViewJavascriptBridge/WebViewJavascriptBridge_JS.h @@ -1,3 +1,3 @@ #import -NSString * WebViewJavascriptBridge_js(); \ No newline at end of file +NSString * WebViewJavascriptBridge_js(void); From e5e874181fc0017a149d306988ce7687ad4564bc Mon Sep 17 00:00:00 2001 From: nonelse Date: Tue, 10 Jul 2018 16:08:03 +0200 Subject: [PATCH 20/67] Use global bridge instead of injected --- AdjustBridge/adjust.js | 42 +++++++++---------- AdjustBridge/adjust_config.js | 38 ++++++++++++----- .../AdjustExample-WebView.html | 3 +- 3 files changed, 50 insertions(+), 33 deletions(-) diff --git a/AdjustBridge/adjust.js b/AdjustBridge/adjust.js index b5150e72b..bf345769f 100644 --- a/AdjustBridge/adjust.js +++ b/AdjustBridge/adjust.js @@ -1,75 +1,75 @@ var Adjust = { appDidLaunch: function (adjustConfig) { - this.bridge = adjustConfig.getBridge(); - if (this.bridge != null) { + + if (WebViewJavascriptBridge) { if (adjustConfig != null) { if (adjustConfig.getAttributionCallback() != null) { - this.bridge.callHandler('adjust_setAttributionCallback', null, adjustConfig.getAttributionCallback()) + WebViewJavascriptBridge.callHandler('adjust_setAttributionCallback', null, adjustConfig.getAttributionCallback()) } if (adjustConfig.getEventSuccessCallback() != null) { - this.bridge.callHandler('adjust_setEventSuccessCallback', null, adjustConfig.getEventSuccessCallback()) + WebViewJavascriptBridge.callHandler('adjust_setEventSuccessCallback', null, adjustConfig.getEventSuccessCallback()) } if (adjustConfig.getEventFailureCallback() != null) { - this.bridge.callHandler('adjust_setEventFailureCallback', null, adjustConfig.getEventFailureCallback()) + WebViewJavascriptBridge.callHandler('adjust_setEventFailureCallback', null, adjustConfig.getEventFailureCallback()) } if (adjustConfig.getSessionSuccessCallback() != null) { - this.bridge.callHandler('adjust_setSessionSuccessCallback', null, adjustConfig.getSessionSuccessCallback()) + WebViewJavascriptBridge.callHandler('adjust_setSessionSuccessCallback', null, adjustConfig.getSessionSuccessCallback()) } if (adjustConfig.getSessionFailureCallback() != null) { - this.bridge.callHandler('adjust_setSessionFailureCallback', null, adjustConfig.getSessionFailureCallback()) + WebViewJavascriptBridge.callHandler('adjust_setSessionFailureCallback', null, adjustConfig.getSessionFailureCallback()) } if (adjustConfig.getDeferredDeeplinkCallback() != null) { - this.bridge.callHandler('adjust_setDeferredDeeplinkCallback', null, adjustConfig.getDeferredDeeplinkCallback()) + WebViewJavascriptBridge.callHandler('adjust_setDeferredDeeplinkCallback', null, adjustConfig.getDeferredDeeplinkCallback()) } - this.bridge.callHandler('adjust_appDidLaunch', adjustConfig, null) + WebViewJavascriptBridge.callHandler('adjust_appDidLaunch', adjustConfig, null) } } }, trackEvent: function (adjustEvent) { - if (this.bridge != null) { - this.bridge.callHandler('adjust_trackEvent', adjustEvent, null) + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_trackEvent', adjustEvent, null) } }, setOfflineMode: function(isOffline) { - if (this.bridge != null) { - this.bridge.callHandler('adjust_setOfflineMode', isOffline, null) + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_setOfflineMode', isOffline, null) } }, setEnabled: function (enabled) { - if (this.bridge != null) { - this.bridge.callHandler('adjust_setEnabled', enabled, null) + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_setEnabled', enabled, null) } }, isEnabled: function (callback) { - if (this.bridge != null) { - this.bridge.callHandler('adjust_isEnabled', null, function(response) { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_isEnabled', null, function(response) { callback(new Boolean(response)) }) } }, getIdfa: function (callback) { - if (this.bridge != null) { - this.bridge.callHandler('adjust_idfa', null, function(response) { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_idfa', null, function(response) { callback(response) }) } }, appWillOpenUrl: function (url) { - if (this.bridge != null) { - this.bridge.callHandler('adjust_appWillOpenUrl', url, null) + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_appWillOpenUrl', url, null) } } }; diff --git a/AdjustBridge/adjust_config.js b/AdjustBridge/adjust_config.js index b6194c19e..52949ac4e 100644 --- a/AdjustBridge/adjust_config.js +++ b/AdjustBridge/adjust_config.js @@ -1,7 +1,22 @@ -function AdjustConfig(bridge, appToken, environment) { - this.bridge = bridge; - this.appToken = appToken; - this.environment = environment; +function AdjustConfig(appToken, environment, legacy) { + + if (arguments.length === 2) { + // new format does not require bridge as first parameter + this.appToken = appToken; + this.environment = environment; + } else if (arguments.length === 3) { + // new format with allowSuppressLogLevel + if (typeof(legacy) == typeof(true)) { + this.appToken = appToken; + this.environment = environment; + this.allowSuppressLogLevel = legacy; + } else { + // old format with first argument being the bridge instance + this.bridge = appToken; + this.appToken = environment; + this.environment = legacy; + } + } this.sdkPrefix = 'web-bridge4.9.1'; @@ -31,12 +46,15 @@ AdjustConfig.LogLevelWarn = 'WARN', AdjustConfig.LogLevelError = 'ERROR', AdjustConfig.LogLevelAssert = 'ASSERT', -AdjustConfig.prototype.getBridge = function() { - return this.bridge; -}; - -AdjustConfig.prototype.getAttributionCallback = function() { - return this.attributionCallback; +AdjustConfig.prototype.iterateConfiguredCallbacks = function(handleCallbackWithName) { + if (!this.callbacksMap) { + return; + } + var keysArray = Object.keys(this.callbacksMap); + for (var idx in keysArray) { + var key = keysArray[idx]; + handleCallbackWithName(key, this.callbacksMap[key]); + } }; AdjustConfig.prototype.getEventSuccessCallback = function() { diff --git a/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html b/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html index 4cc76c58a..579c55ad1 100644 --- a/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html +++ b/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html @@ -30,8 +30,7 @@

Adjust Web View Demo

bridge.registerHandler('adjust_deeplink', function(data, responseCallback) { alert('Deeplink:\n' + data) }) - - var adjustConfig = new AdjustConfig(bridge, '2fm9gkqubvpc', AdjustConfig.EnvironmentSandbox) + let adjustConfig = new AdjustConfig('2fm9gkqubvpc', AdjustConfig.EnvironmentSandbox); adjustConfig.setLogLevel(AdjustConfig.LogLevelVerbose) adjustConfig.setOpenDeferredDeeplink(true) // Just for test, is true by default. From 56b7b5d53b7c95beb58f5098762a01661295ec47 Mon Sep 17 00:00:00 2001 From: nonelse Date: Wed, 11 Jul 2018 14:05:39 +0200 Subject: [PATCH 21/67] Simplify callback save --- AdjustBridge/AdjustBridge.m | 60 ++++++++--------------------------- AdjustBridge/adjust.js | 29 ++++------------- AdjustBridge/adjust_config.js | 39 ++++------------------- 3 files changed, 26 insertions(+), 102 deletions(-) diff --git a/AdjustBridge/AdjustBridge.m b/AdjustBridge/AdjustBridge.m index 35d1fff0e..ec6c17dd9 100644 --- a/AdjustBridge/AdjustBridge.m +++ b/AdjustBridge/AdjustBridge.m @@ -194,58 +194,24 @@ - (void)loadWKWebViewBridge:(WKWebView *)wkWebView } - (void)loadWebViewBridge { - // Register for setting attribution callback method. - [self.bridgeRegister registerHandler:@"adjust_setAttributionCallback" handler:^(id data, WVJBResponseCallback responseCallback) { + [self.bridgeRegister registerHandler:@"adjust_setCallback" handler:^(id data, WVJBResponseCallback responseCallback) { if (responseCallback == nil) { return; } - self.attributionCallback = responseCallback; - }]; - - // Register for setting event tracking success callback method. - [self.bridgeRegister registerHandler:@"adjust_setEventSuccessCallback" handler:^(id data, WVJBResponseCallback responseCallback) { - if (responseCallback == nil) { - return; + if ([data isEqualToString:@"attributionCallback"]) { + self.attributionCallback = responseCallback; + } else if ([data isEqualToString:@"eventSuccessCallback"]) { + self.eventSuccessCallback = responseCallback; + } else if ([data isEqualToString:@"eventFailureCallback"]) { + self.eventFailureCallback = responseCallback; + } else if ([data isEqualToString:@"sessionSuccessCallback"]) { + self.sessionSuccessCallback = responseCallback; + } else if ([data isEqualToString:@"sessionFailureCallback"]) { + self.sessionFailureCallback = responseCallback; + } else if ([data isEqualToString:@"deferredDeeplinkCallback"]) { + self.deferredDeeplinkCallback = responseCallback; } - - self.eventSuccessCallback = responseCallback; - }]; - - // Register for setting event tracking failure method. - [self.bridgeRegister registerHandler:@"adjust_setEventFailureCallback" handler:^(id data, WVJBResponseCallback responseCallback) { - if (responseCallback == nil) { - return; - } - - self.eventFailureCallback = responseCallback; - }]; - - // Register for setting session tracking success method. - [self.bridgeRegister registerHandler:@"adjust_setSessionSuccessCallback" handler:^(id data, WVJBResponseCallback responseCallback) { - if (responseCallback == nil) { - return; - } - - self.sessionSuccessCallback = responseCallback; - }]; - - // Register for setting session tracking failure method. - [self.bridgeRegister registerHandler:@"adjust_setSessionFailureCallback" handler:^(id data, WVJBResponseCallback responseCallback) { - if (responseCallback == nil) { - return; - } - - self.sessionFailureCallback = responseCallback; - }]; - - // Register for setting direct deeplink handler method. - [self.bridgeRegister registerHandler:@"adjust_setDeferredDeeplinkCallback" handler:^(id data, WVJBResponseCallback responseCallback) { - if (responseCallback == nil) { - return; - } - - self.deferredDeeplinkCallback = responseCallback; }]; // Register for appDidLaunch method. diff --git a/AdjustBridge/adjust.js b/AdjustBridge/adjust.js index bf345769f..18899bd41 100644 --- a/AdjustBridge/adjust.js +++ b/AdjustBridge/adjust.js @@ -4,30 +4,13 @@ var Adjust = { if (WebViewJavascriptBridge) { if (adjustConfig != null) { - if (adjustConfig.getAttributionCallback() != null) { - WebViewJavascriptBridge.callHandler('adjust_setAttributionCallback', null, adjustConfig.getAttributionCallback()) - } - - if (adjustConfig.getEventSuccessCallback() != null) { - WebViewJavascriptBridge.callHandler('adjust_setEventSuccessCallback', null, adjustConfig.getEventSuccessCallback()) - } - - if (adjustConfig.getEventFailureCallback() != null) { - WebViewJavascriptBridge.callHandler('adjust_setEventFailureCallback', null, adjustConfig.getEventFailureCallback()) - } - - if (adjustConfig.getSessionSuccessCallback() != null) { - WebViewJavascriptBridge.callHandler('adjust_setSessionSuccessCallback', null, adjustConfig.getSessionSuccessCallback()) - } - - if (adjustConfig.getSessionFailureCallback() != null) { - WebViewJavascriptBridge.callHandler('adjust_setSessionFailureCallback', null, adjustConfig.getSessionFailureCallback()) - } - - if (adjustConfig.getDeferredDeeplinkCallback() != null) { - WebViewJavascriptBridge.callHandler('adjust_setDeferredDeeplinkCallback', null, adjustConfig.getDeferredDeeplinkCallback()) - } + adjustConfig.iterateConfiguredCallbacks( + function(callbackName, callback) { + console.log("calling adjust_setCallback with " + callbackName); + WebViewJavascriptBridge.callHandler('adjust_setCallback', callbackName, callback); + } + ); WebViewJavascriptBridge.callHandler('adjust_appDidLaunch', adjustConfig, null) } } diff --git a/AdjustBridge/adjust_config.js b/AdjustBridge/adjust_config.js index 52949ac4e..8c5ec494d 100644 --- a/AdjustBridge/adjust_config.js +++ b/AdjustBridge/adjust_config.js @@ -28,12 +28,7 @@ function AdjustConfig(appToken, environment, legacy) { this.eventBufferingEnabled = null; this.webBridgeLoggingEnabled = null; - this.attributionCallback = null; - this.eventSuccessCallback = null; - this.eventFailureCallback = null; - this.sessionSuccessCallback = null; - this.sessionFailureCallback = null; - this.deferredDeeplinkCallback = null; + this.callbacksMap = {}; } AdjustConfig.EnvironmentSandbox = 'sandbox'; @@ -57,26 +52,6 @@ AdjustConfig.prototype.iterateConfiguredCallbacks = function(handleCallbackWithN } }; -AdjustConfig.prototype.getEventSuccessCallback = function() { - return this.eventSuccessCallback; -}; - -AdjustConfig.prototype.getEventFailureCallback = function() { - return this.eventFailureCallback; -}; - -AdjustConfig.prototype.getSessionSuccessCallback = function() { - return this.sessionSuccessCallback; -}; - -AdjustConfig.prototype.getSessionFailureCallback = function() { - return this.sessionFailureCallback; -}; - -AdjustConfig.prototype.getDeferredDeeplinkCallback = function() { - return this.deferredDeeplinkCallback; -}; - AdjustConfig.prototype.setEventBufferingEnabled = function(isEnabled) { this.eventBufferingEnabled = isEnabled; }; @@ -106,27 +81,27 @@ AdjustConfig.prototype.setDefaultTracker = function(defaultTracker) { }; AdjustConfig.prototype.setAttributionCallback = function(callback) { - this.attributionCallback = callback; + this.callbacksMap['attributionCallback'] = callback; }; AdjustConfig.prototype.setEventSuccessCallback = function(callback) { - this.eventSuccessCallback = callback; + this.callbacksMap['eventSuccessCallback'] = callback; }; AdjustConfig.prototype.setEventFailureCallback = function(callback) { - this.eventFailureCallback = callback; + this.callbacksMap['eventFailureCallback'] = callback; }; AdjustConfig.prototype.setSessionSuccessCallback = function(callback) { - this.sessionSuccessCallback = callback; + this.callbacksMap['sessionSuccessCallback'] = callback; }; AdjustConfig.prototype.setSessionFailureCallback = function(callback) { - this.sessionFailureCallback = callback; + this.callbacksMap['sessionFailureCallback'] = callback; }; AdjustConfig.prototype.setDeferredDeeplinkCallback = function(callback) { - this.deferredDeeplinkCallback = callback; + this.callbacksMap['deferredDeeplinkCallback'] = callback; }; module.exports = AdjustConfig; From 1c4cbf7c1b1869008acb8e29a6059be7a445e927 Mon Sep 17 00:00:00 2001 From: nonelse Date: Mon, 16 Jul 2018 15:39:41 +0200 Subject: [PATCH 22/67] Replace device token with push token --- AdjustBridge/AdjustBridge.m | 15 +++++++++------ AdjustBridge/adjust.js | 13 +++++++++++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/AdjustBridge/AdjustBridge.m b/AdjustBridge/AdjustBridge.m index ec6c17dd9..b14ebe4e6 100644 --- a/AdjustBridge/AdjustBridge.m +++ b/AdjustBridge/AdjustBridge.m @@ -16,6 +16,7 @@ #import "AdjustBridgeRegister.h" #import "WebViewJavascriptBridge.h" #import "WKWebViewJavascriptBridge.h" +#import "ADJAdjustFactory.h" #define KEY_APP_TOKEN @"appToken" #define KEY_ENVIRONMENT @"environment" @@ -331,16 +332,18 @@ - (void)loadWebViewBridge { if (responseCallback == nil) { return; } - responseCallback([NSNumber numberWithBool:[Adjust isEnabled]]); }]; - - // Register for IDFA method. + [self.bridgeRegister registerHandler:@"adjust_setPushToken" handler:^(id data, WVJBResponseCallback responseCallback) { + if (![data isKindOfClass:[NSString class]]) { + return; + } + [Adjust setPushToken:(NSString *)data]; + }]; [self.bridgeRegister registerHandler:@"adjust_idfa" handler:^(id data, WVJBResponseCallback responseCallback) { if (responseCallback == nil) { return; } - responseCallback([Adjust idfa]); }]; @@ -349,9 +352,9 @@ - (void)loadWebViewBridge { [Adjust appWillOpenUrl:[NSURL URLWithString:data]]; }]; - // Register for setDeviceToken method. + // Method replaced by setPushToken [self.bridgeRegister registerHandler:@"adjust_setDeviceToken" handler:^(id data, WVJBResponseCallback responseCallback) { - [Adjust setDeviceToken:[data dataUsingEncoding:NSUTF8StringEncoding]]; + [[ADJAdjustFactory logger] warn:@"Function setDeviceToken has been replaced by setPushToken in web bridge"]; }]; } diff --git a/AdjustBridge/adjust.js b/AdjustBridge/adjust.js index 18899bd41..ef8fc6ccb 100644 --- a/AdjustBridge/adjust.js +++ b/AdjustBridge/adjust.js @@ -15,13 +15,15 @@ var Adjust = { } } }, - trackEvent: function (adjustEvent) { if (WebViewJavascriptBridge != null) { WebViewJavascriptBridge.callHandler('adjust_trackEvent', adjustEvent, null) + }, + setPushToken: function (pushToken) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_setPushToken', pushToken, null); } }, - setOfflineMode: function(isOffline) { if (WebViewJavascriptBridge != null) { WebViewJavascriptBridge.callHandler('adjust_setOfflineMode', isOffline, null) @@ -54,6 +56,13 @@ var Adjust = { if (WebViewJavascriptBridge != null) { WebViewJavascriptBridge.callHandler('adjust_appWillOpenUrl', url, null) } + }, + + // metod replaced by setPushToken, that accepts a simple string + setDeviceToken: function (deviceToken) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_setDeviceToken', deviceToken, null); + } } }; From 9120669e572982d6ca5b1dee09dadf18fc71d9f2 Mon Sep 17 00:00:00 2001 From: nonelse Date: Mon, 16 Jul 2018 15:45:19 +0200 Subject: [PATCH 23/67] Remove deeplink up-bridge and expose bridge lib --- AdjustBridge/AdjustBridge.h | 5 +++-- AdjustBridge/AdjustBridge.m | 14 ++++---------- .../AdjustExample-WebView.html | 3 --- .../AdjustExample-WebView/AppDelegate.m | 8 +------- 4 files changed, 8 insertions(+), 22 deletions(-) diff --git a/AdjustBridge/AdjustBridge.h b/AdjustBridge/AdjustBridge.h index e10420273..5ee7d7fa6 100644 --- a/AdjustBridge/AdjustBridge.h +++ b/AdjustBridge/AdjustBridge.h @@ -12,14 +12,15 @@ #import "WKWebViewJavascriptBridge.h" #import "WebViewJavascriptBridge.h" +#import "AdjustBridgeRegister.h" @interface AdjustBridge : NSObject +@property (nonatomic, strong, readonly) id bridgeRegister; + - (void)loadUIWebViewBridge:(WVJB_WEBVIEW_TYPE *)webView; - (void)loadWKWebViewBridge:(WKWebView *)wkWebView; - (void)loadUIWebViewBridge:(WVJB_WEBVIEW_TYPE *)webView webViewDelegate:(WVJB_WEBVIEW_DELEGATE_TYPE *)webViewDelegate; - (void)loadWKWebViewBridge:(WKWebView *)wkWebView wkWebViewDelegate:(id)wkWebViewDelegate; -- (void)sendDeeplinkToWebView:(NSURL *)deeplink; - @end diff --git a/AdjustBridge/AdjustBridge.m b/AdjustBridge/AdjustBridge.m index b14ebe4e6..225014041 100644 --- a/AdjustBridge/AdjustBridge.m +++ b/AdjustBridge/AdjustBridge.m @@ -13,7 +13,6 @@ // (depends how you import the adjust SDK to your app) #import "AdjustBridge.h" -#import "AdjustBridgeRegister.h" #import "WebViewJavascriptBridge.h" #import "WKWebViewJavascriptBridge.h" #import "ADJAdjustFactory.h" @@ -46,8 +45,6 @@ @interface AdjustBridge() @property WVJBResponseCallback sessionFailureCallback; @property WVJBResponseCallback deferredDeeplinkCallback; -@property (nonatomic, strong) id bridgeRegister; - @end @implementation AdjustBridge @@ -61,7 +58,7 @@ - (id)init { return nil; } - self.bridgeRegister = nil; + _bridgeRegister = nil; self.openDeferredDeeplink = YES; @@ -176,7 +173,7 @@ - (void)loadUIWebViewBridge:(WVJB_WEBVIEW_TYPE *)webView AdjustUIBridgeRegister *uiBridgeRegister = [AdjustUIBridgeRegister bridgeRegisterWithUIWebView:webView]; [uiBridgeRegister setWebViewDelegate:webViewDelegate]; - self.bridgeRegister = uiBridgeRegister; + _bridgeRegister = uiBridgeRegister; [self loadWebViewBridge]; } @@ -190,11 +187,12 @@ - (void)loadWKWebViewBridge:(WKWebView *)wkWebView AdjustWKBridgeRegister *wkBridgeRegister = [AdjustWKBridgeRegister bridgeRegisterWithWKWebView:wkWebView]; [wkBridgeRegister setWebViewDelegate:wkWebViewDelegate]; - self.bridgeRegister = wkBridgeRegister; + _bridgeRegister = wkBridgeRegister; [self loadWebViewBridge]; } - (void)loadWebViewBridge { + // Register setCallback method to save callbacks before appDidLaunch [self.bridgeRegister registerHandler:@"adjust_setCallback" handler:^(id data, WVJBResponseCallback responseCallback) { if (responseCallback == nil) { return; @@ -358,10 +356,6 @@ - (void)loadWebViewBridge { }]; } -- (void)sendDeeplinkToWebView:(NSURL *)deeplink { - [self.bridgeRegister callHandler:@"adjust_deeplink" data:[deeplink absoluteString]]; -} - #pragma mark - Private & helper methods - (BOOL)isFieldValid:(NSObject *)field { diff --git a/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html b/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html index 579c55ad1..f16da9681 100644 --- a/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html +++ b/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html @@ -27,9 +27,6 @@

Adjust Web View Demo

} setupWebViewJavascriptBridge(function(bridge) { - bridge.registerHandler('adjust_deeplink', function(data, responseCallback) { - alert('Deeplink:\n' + data) - }) let adjustConfig = new AdjustConfig('2fm9gkqubvpc', AdjustConfig.EnvironmentSandbox); adjustConfig.setLogLevel(AdjustConfig.LogLevelVerbose) adjustConfig.setOpenDeferredDeeplink(true) // Just for test, is true by default. diff --git a/examples/AdjustExample-WebView/AdjustExample-WebView/AppDelegate.m b/examples/AdjustExample-WebView/AdjustExample-WebView/AppDelegate.m index ba8f69fe9..a74dfae76 100644 --- a/examples/AdjustExample-WebView/AdjustExample-WebView/AppDelegate.m +++ b/examples/AdjustExample-WebView/AdjustExample-WebView/AppDelegate.m @@ -46,18 +46,12 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSLog(@"application openURL %@", url); - [self.uiWebViewExampleController.adjustBridge sendDeeplinkToWebView:url]; - [self.wkWebViewExampleController.adjustBridge sendDeeplinkToWebView:url]; - return YES; } -- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler { +- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler { if ([[userActivity activityType] isEqualToString:NSUserActivityTypeBrowsingWeb]) { NSLog(@"application continueUserActivity %@", [userActivity webpageURL]); - - [self.uiWebViewExampleController.adjustBridge sendDeeplinkToWebView:[userActivity webpageURL]]; - [self.wkWebViewExampleController.adjustBridge sendDeeplinkToWebView:[userActivity webpageURL]]; } return YES; From 3f32153587a3e299bceb03ee820aabafae8a50ac Mon Sep 17 00:00:00 2001 From: nonelse Date: Mon, 16 Jul 2018 15:57:28 +0200 Subject: [PATCH 24/67] Remove WebBridgeLogging --- AdjustBridge/AdjustBridge.m | 9 --------- AdjustBridge/adjust_config.js | 9 --------- 2 files changed, 18 deletions(-) diff --git a/AdjustBridge/AdjustBridge.m b/AdjustBridge/AdjustBridge.m index 225014041..1da9de4c8 100644 --- a/AdjustBridge/AdjustBridge.m +++ b/AdjustBridge/AdjustBridge.m @@ -25,7 +25,6 @@ #define KEY_SEND_IN_BACKGROUND @"sendInBackground" #define KEY_OPEN_DEFERRED_DEEPLINK @"openDeferredDeeplink" #define KEY_EVENT_BUFFERING_ENABLED @"eventBufferingEnabled" -#define KEY_WEB_VIEW_LOGGING_ENABLED @"webViewLoggingEnabled" #define KEY_EVENT_TOKEN @"eventToken" #define KEY_REVENUE @"revenue" #define KEY_CURRENCY @"currency" @@ -222,7 +221,6 @@ - (void)loadWebViewBridge { NSString *defaultTracker = [data objectForKey:KEY_DEFAULT_TRACKER]; NSNumber *sendInBackground = [data objectForKey:KEY_SEND_IN_BACKGROUND]; NSNumber *eventBufferingEnabled = [data objectForKey:KEY_EVENT_BUFFERING_ENABLED]; - NSNumber *webViewLoggingEnabled = [data objectForKey:KEY_WEB_VIEW_LOGGING_ENABLED]; NSNumber *shouldOpenDeferredDeeplink = [data objectForKey:KEY_OPEN_DEFERRED_DEEPLINK]; ADJConfig *adjustConfig = [ADJConfig configWithAppToken:appToken environment:environment]; @@ -243,13 +241,6 @@ - (void)loadWebViewBridge { [adjustConfig setEventBufferingEnabled:[eventBufferingEnabled boolValue]]; } - // Web bridge logging - if ([self isFieldValid:webViewLoggingEnabled]) { - if ([eventBufferingEnabled boolValue]) { - [WebViewJavascriptBridge enableLogging]; - } - } - // Deferred deeplink opening if ([self isFieldValid:shouldOpenDeferredDeeplink]) { self.openDeferredDeeplink = [shouldOpenDeferredDeeplink boolValue]; diff --git a/AdjustBridge/adjust_config.js b/AdjustBridge/adjust_config.js index 8c5ec494d..12fbdc691 100644 --- a/AdjustBridge/adjust_config.js +++ b/AdjustBridge/adjust_config.js @@ -26,7 +26,6 @@ function AdjustConfig(appToken, environment, legacy) { this.sendInBackground = null; this.openDeferredDeeplink = null; this.eventBufferingEnabled = null; - this.webBridgeLoggingEnabled = null; this.callbacksMap = {}; } @@ -55,23 +54,15 @@ AdjustConfig.prototype.iterateConfiguredCallbacks = function(handleCallbackWithN AdjustConfig.prototype.setEventBufferingEnabled = function(isEnabled) { this.eventBufferingEnabled = isEnabled; }; - AdjustConfig.prototype.setSendInBackground = function(isEnabled) { this.sendInBackground = isEnabled; }; - AdjustConfig.prototype.setOpenDeferredDeeplink = function(shouldOpen) { this.openDeferredDeeplink = shouldOpen; }; - -AdjustConfig.prototype.setWebBridgeLoggingEnabled = function(isEnabled) { - this.webBridgeLoggingEnabled = isEnabled; -}; - AdjustConfig.prototype.setLogLevel = function(logLevel) { this.logLevel = logLevel; }; - AdjustConfig.prototype.setProcessName = function(processName) { this.processName = processName; }; From 01632e6fa269da237973d83cf152fd53f5c81ebe Mon Sep 17 00:00:00 2001 From: nonelse Date: Mon, 16 Jul 2018 16:14:12 +0200 Subject: [PATCH 25/67] Reorder and remove constants --- AdjustBridge/AdjustBridge.m | 209 ++++++++++++++++-------------------- AdjustBridge/adjust.js | 59 +++++----- 2 files changed, 118 insertions(+), 150 deletions(-) diff --git a/AdjustBridge/AdjustBridge.m b/AdjustBridge/AdjustBridge.m index 1da9de4c8..62fc1a896 100644 --- a/AdjustBridge/AdjustBridge.m +++ b/AdjustBridge/AdjustBridge.m @@ -17,21 +17,6 @@ #import "WKWebViewJavascriptBridge.h" #import "ADJAdjustFactory.h" -#define KEY_APP_TOKEN @"appToken" -#define KEY_ENVIRONMENT @"environment" -#define KEY_LOG_LEVEL @"logLevel" -#define KEY_SDK_PREFIX @"sdkPrefix" -#define KEY_DEFAULT_TRACKER @"defaultTracker" -#define KEY_SEND_IN_BACKGROUND @"sendInBackground" -#define KEY_OPEN_DEFERRED_DEEPLINK @"openDeferredDeeplink" -#define KEY_EVENT_BUFFERING_ENABLED @"eventBufferingEnabled" -#define KEY_EVENT_TOKEN @"eventToken" -#define KEY_REVENUE @"revenue" -#define KEY_CURRENCY @"currency" -#define KEY_TRANSACTION_ID @"transactionId" -#define KEY_CALLBACK_PARAMETERS @"callbackParameters" -#define KEY_PARTNER_PARAMETERS @"partnerParameters" - @interface AdjustBridge() @property BOOL openDeferredDeeplink; @@ -87,10 +72,10 @@ - (void)adjustEventTrackingSucceeded:(ADJEventSuccess *)eventSuccessResponseData NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - [dictionary setValue:eventSuccessResponseData.eventToken forKey:@"eventToken"]; + [dictionary setValue:eventSuccessResponseData.message forKey:@"message"]; [dictionary setValue:eventSuccessResponseData.timeStamp forKey:@"timestamp"]; [dictionary setValue:eventSuccessResponseData.adid forKey:@"adid"]; - [dictionary setValue:eventSuccessResponseData.message forKey:@"message"]; + [dictionary setValue:eventSuccessResponseData.eventToken forKey:@"eventToken"]; [dictionary setValue:eventSuccessResponseData.jsonResponse forKey:@"jsonResponse"]; self.eventSuccessCallback(dictionary); @@ -103,12 +88,12 @@ - (void)adjustEventTrackingFailed:(ADJEventFailure *)eventFailureResponseData { NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - [dictionary setValue:eventFailureResponseData.eventToken forKey:@"eventToken"]; + [dictionary setValue:eventFailureResponseData.message forKey:@"message"]; [dictionary setValue:eventFailureResponseData.timeStamp forKey:@"timestamp"]; [dictionary setValue:eventFailureResponseData.adid forKey:@"adid"]; - [dictionary setValue:eventFailureResponseData.message forKey:@"message"]; - [dictionary setValue:eventFailureResponseData.jsonResponse forKey:@"jsonResponse"]; + [dictionary setValue:eventFailureResponseData.eventToken forKey:@"eventToken"]; [dictionary setValue:[NSNumber numberWithBool:eventFailureResponseData.willRetry] forKey:@"willRetry"]; + [dictionary setValue:eventFailureResponseData.jsonResponse forKey:@"jsonResponse"]; self.eventFailureCallback(dictionary); } @@ -120,9 +105,9 @@ - (void)adjustSessionTrackingSucceeded:(ADJSessionSuccess *)sessionSuccessRespon NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; + [dictionary setValue:sessionSuccessResponseData.message forKey:@"message"]; [dictionary setValue:sessionSuccessResponseData.timeStamp forKey:@"timestamp"]; [dictionary setValue:sessionSuccessResponseData.adid forKey:@"adid"]; - [dictionary setValue:sessionSuccessResponseData.message forKey:@"message"]; [dictionary setValue:sessionSuccessResponseData.jsonResponse forKey:@"jsonResponse"]; self.sessionSuccessCallback(dictionary); @@ -135,11 +120,11 @@ - (void)adjustSessionTrackingFailed:(ADJSessionFailure *)sessionFailureResponseD NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; + [dictionary setValue:sessionFailureResponseData.message forKey:@"message"]; [dictionary setValue:sessionFailureResponseData.timeStamp forKey:@"timestamp"]; [dictionary setValue:sessionFailureResponseData.adid forKey:@"adid"]; - [dictionary setValue:sessionFailureResponseData.message forKey:@"message"]; - [dictionary setValue:sessionFailureResponseData.jsonResponse forKey:@"jsonResponse"]; [dictionary setValue:[NSNumber numberWithBool:sessionFailureResponseData.willRetry] forKey:@"willRetry"]; + [dictionary setValue:sessionFailureResponseData.jsonResponse forKey:@"jsonResponse"]; self.sessionFailureCallback(dictionary); } @@ -214,106 +199,91 @@ - (void)loadWebViewBridge { // Register for appDidLaunch method. [self.bridgeRegister registerHandler:@"adjust_appDidLaunch" handler:^(id data, WVJBResponseCallback responseCallback) { - NSString *appToken = [data objectForKey:KEY_APP_TOKEN]; - NSString *environment = [data objectForKey:KEY_ENVIRONMENT]; - NSString *logLevel = [data objectForKey:KEY_LOG_LEVEL]; - NSString *sdkPrefix = [data objectForKey:KEY_SDK_PREFIX]; - NSString *defaultTracker = [data objectForKey:KEY_DEFAULT_TRACKER]; - NSNumber *sendInBackground = [data objectForKey:KEY_SEND_IN_BACKGROUND]; - NSNumber *eventBufferingEnabled = [data objectForKey:KEY_EVENT_BUFFERING_ENABLED]; - NSNumber *shouldOpenDeferredDeeplink = [data objectForKey:KEY_OPEN_DEFERRED_DEEPLINK]; - - ADJConfig *adjustConfig = [ADJConfig configWithAppToken:appToken environment:environment]; - - if ([adjustConfig isValid]) { - // Log level - if ([self isFieldValid:logLevel]) { - [adjustConfig setLogLevel:[ADJLogger logLevelFromString:[logLevel lowercaseString]]]; - } - - // Sending in background - if ([self isFieldValid:sendInBackground]) { - [adjustConfig setSendInBackground:[sendInBackground boolValue]]; - } - - // Event buffering - if ([self isFieldValid:eventBufferingEnabled]) { - [adjustConfig setEventBufferingEnabled:[eventBufferingEnabled boolValue]]; - } - - // Deferred deeplink opening - if ([self isFieldValid:shouldOpenDeferredDeeplink]) { - self.openDeferredDeeplink = [shouldOpenDeferredDeeplink boolValue]; - } - - // SDK prefix - if ([self isFieldValid:sdkPrefix]) { - [adjustConfig setSdkPrefix:sdkPrefix]; - } - - // Default tracker - if ([self isFieldValid:defaultTracker]) { - [adjustConfig setDefaultTracker:defaultTracker]; - } - - // Attribution delegate - if (self.attributionCallback != nil || self.eventSuccessCallback != nil || - self.eventFailureCallback != nil || self.sessionSuccessCallback != nil || - self.sessionFailureCallback != nil || self.deferredDeeplinkCallback != nil) { - [adjustConfig setDelegate:self]; - } - - [Adjust appDidLaunch:adjustConfig]; - [Adjust trackSubsessionStart]; + NSString *appToken = [data objectForKey:@"appToken"]; + NSString *environment = [data objectForKey:@"environment"]; + NSString *allowSuppressLogLevel = [data objectForKey:@"allowSuppressLogLevel"]; + NSString *sdkPrefix = [data objectForKey:@"sdkPrefix"]; + NSString *defaultTracker = [data objectForKey:@"defaultTracker"]; + NSString *logLevel = [data objectForKey:@"logLevel"]; + NSNumber *eventBufferingEnabled = [data objectForKey:@"eventBufferingEnabled"]; + NSNumber *openDeferredDeeplink = [data objectForKey:@"openDeferredDeeplink"]; + + ADJConfig *adjustConfig; + if ([self isFieldValid:allowSuppressLogLevel]) { + adjustConfig = [ADJConfig configWithAppToken:appToken environment:environment allowSuppressLogLevel:[allowSuppressLogLevel boolValue]]; + } else { + adjustConfig = [ADJConfig configWithAppToken:appToken environment:environment]; } - }]; - - // Register for trackEvent method. - [self.bridgeRegister registerHandler:@"adjust_trackEvent" handler:^(id data, WVJBResponseCallback responseCallback) { - NSString *eventToken = [data objectForKey:KEY_EVENT_TOKEN]; - NSString *revenue = [data objectForKey:KEY_REVENUE]; - NSString *currency = [data objectForKey:KEY_CURRENCY]; - NSString *transactionId = [data objectForKey:KEY_TRANSACTION_ID]; - ADJEvent *adjustEvent = [ADJEvent eventWithEventToken:eventToken]; - - if ([adjustEvent isValid]) { - // Revenue and currency - if ([self isFieldValid:revenue] || [self isFieldValid:currency]) { - double revenueValue = [revenue doubleValue]; + // no need to continue if adjust config is not valid + if (![adjustConfig isValid]) { + return; + } - [adjustEvent setRevenue:revenueValue currency:currency]; - } + if ([self isFieldValid:sdkPrefix]) { + [adjustConfig setSdkPrefix:sdkPrefix]; + } + if ([self isFieldValid:defaultTracker]) { + [adjustConfig setDefaultTracker:defaultTracker]; + } + if ([self isFieldValid:logLevel]) { + [adjustConfig setLogLevel:[ADJLogger logLevelFromString:[logLevel lowercaseString]]]; + } + if ([self isFieldValid:eventBufferingEnabled]) { + [adjustConfig setEventBufferingEnabled:[eventBufferingEnabled boolValue]]; + } + if ([self isFieldValid:openDeferredDeeplink]) { + self.openDeferredDeeplink = [openDeferredDeeplink boolValue]; + } + // Set self as delegate if any callback is configured + // Change to swifle the methods in the future + if (self.attributionCallback != nil || self.eventSuccessCallback != nil || + self.eventFailureCallback != nil || self.sessionSuccessCallback != nil || + self.sessionFailureCallback != nil || self.deferredDeeplinkCallback != nil) { + [adjustConfig setDelegate:self]; + } - // Callback parameters - for (int i = 0; i < [[data objectForKey:KEY_CALLBACK_PARAMETERS] count]; i += 2) { - [adjustEvent addCallbackParameter:[[data objectForKey:KEY_CALLBACK_PARAMETERS] objectAtIndex:i] - value:[[data objectForKey:KEY_CALLBACK_PARAMETERS] objectAtIndex:(i+1)]]; - } + [Adjust appDidLaunch:adjustConfig]; + [Adjust trackSubsessionStart]; + }]; + [self.bridgeRegister registerHandler:@"adjust_trackEvent" handler:^(id data, WVJBResponseCallback responseCallback) { - // Partner parameters - for (int i = 0; i < [[data objectForKey:KEY_PARTNER_PARAMETERS] count]; i += 2) { - [adjustEvent addPartnerParameter:[[data objectForKey:KEY_PARTNER_PARAMETERS] objectAtIndex:i] - value:[[data objectForKey:KEY_PARTNER_PARAMETERS] objectAtIndex:(i+1)]]; - } + NSString *eventToken = [data objectForKey:@"eventToken"]; + NSString *revenue = [data objectForKey:@"revenue"]; + NSString *currency = [data objectForKey:@"currency"]; + NSString *transactionId = [data objectForKey:@"transactionId"]; + id callbackParameters = [data objectForKey:@"callbackParameters"]; + id partnerParameters = [data objectForKey:@"partnerParameters"]; - // Transaction ID - if ([self isFieldValid:transactionId]) { - [adjustEvent setTransactionId:transactionId]; - } + ADJEvent *adjustEvent = [ADJEvent eventWithEventToken:eventToken]; - [Adjust trackEvent:adjustEvent]; + // no need to continue if adjust event is not valid + if (![adjustEvent isValid]) { + return; + } + if ([self isFieldValid:revenue] && [self isFieldValid:currency]) { + double revenueValue = [revenue doubleValue]; + [adjustEvent setRevenue:revenueValue currency:currency]; + } + if ([self isFieldValid:transactionId]) { + [adjustEvent setTransactionId:transactionId]; + } + for (int i = 0; i < [callbackParameters count]; i += 2) { + [adjustEvent addCallbackParameter:[callbackParameters objectAtIndex:i] + value:[callbackParameters objectAtIndex:(i+1)]]; + } + for (int i = 0; i < [partnerParameters count]; i += 2) { + [adjustEvent addPartnerParameter:[partnerParameters objectAtIndex:i] + value:[partnerParameters objectAtIndex:(i+1)]]; } - }]; - // Register for setOfflineMode method. - [self.bridgeRegister registerHandler:@"adjust_setOfflineMode" handler:^(NSNumber *data, WVJBResponseCallback responseCallback) { - [Adjust setOfflineMode:[data boolValue]]; + [Adjust trackEvent:adjustEvent]; }]; - - // Register for setEnabled method. - [self.bridgeRegister registerHandler:@"adjust_setEnabled" handler:^(NSNumber *data, WVJBResponseCallback responseCallback) { - [Adjust setEnabled:[data boolValue]]; + [self.bridgeRegister registerHandler:@"adjust_setEnabled" handler:^(id data, WVJBResponseCallback responseCallback) { + if (![data isKindOfClass:[NSNumber class]]) { + return; + } + [Adjust setEnabled:[(NSNumber *)data boolValue]]; }]; // Register for isEnabled method. @@ -323,12 +293,21 @@ - (void)loadWebViewBridge { } responseCallback([NSNumber numberWithBool:[Adjust isEnabled]]); }]; + [self.bridgeRegister registerHandler:@"adjust_appWillOpenUrl" handler:^(id data, WVJBResponseCallback responseCallback) { + [Adjust appWillOpenUrl:[NSURL URLWithString:data]]; + }]; [self.bridgeRegister registerHandler:@"adjust_setPushToken" handler:^(id data, WVJBResponseCallback responseCallback) { if (![data isKindOfClass:[NSString class]]) { return; } [Adjust setPushToken:(NSString *)data]; }]; + [self.bridgeRegister registerHandler:@"adjust_setOfflineMode" handler:^(id data, WVJBResponseCallback responseCallback) { + if (![data isKindOfClass:[NSNumber class]]) { + return; + } + [Adjust setOfflineMode:[(NSNumber *)data boolValue]]; + }]; [self.bridgeRegister registerHandler:@"adjust_idfa" handler:^(id data, WVJBResponseCallback responseCallback) { if (responseCallback == nil) { return; @@ -336,10 +315,6 @@ - (void)loadWebViewBridge { responseCallback([Adjust idfa]); }]; - // Register for appWillOpenUrl method. - [self.bridgeRegister registerHandler:@"adjust_appWillOpenUrl" handler:^(id data, WVJBResponseCallback responseCallback) { - [Adjust appWillOpenUrl:[NSURL URLWithString:data]]; - }]; // Method replaced by setPushToken [self.bridgeRegister registerHandler:@"adjust_setDeviceToken" handler:^(id data, WVJBResponseCallback responseCallback) { diff --git a/AdjustBridge/adjust.js b/AdjustBridge/adjust.js index ef8fc6ccb..6de3cbf37 100644 --- a/AdjustBridge/adjust.js +++ b/AdjustBridge/adjust.js @@ -1,60 +1,53 @@ var Adjust = { appDidLaunch: function (adjustConfig) { - - if (WebViewJavascriptBridge) { - if (adjustConfig != null) { - + if (adjustConfig) { adjustConfig.iterateConfiguredCallbacks( function(callbackName, callback) { - console.log("calling adjust_setCallback with " + callbackName); WebViewJavascriptBridge.callHandler('adjust_setCallback', callbackName, callback); } ); - WebViewJavascriptBridge.callHandler('adjust_appDidLaunch', adjustConfig, null) + WebViewJavascriptBridge.callHandler('adjust_appDidLaunch', adjustConfig, null); } } }, trackEvent: function (adjustEvent) { - if (WebViewJavascriptBridge != null) { - WebViewJavascriptBridge.callHandler('adjust_trackEvent', adjustEvent, null) + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_trackEvent', adjustEvent, null); + } }, - setPushToken: function (pushToken) { + setEnabled: function (enabled) { if (WebViewJavascriptBridge) { - WebViewJavascriptBridge.callHandler('adjust_setPushToken', pushToken, null); + WebViewJavascriptBridge.callHandler('adjust_setEnabled', enabled, null); } }, - setOfflineMode: function(isOffline) { - if (WebViewJavascriptBridge != null) { - WebViewJavascriptBridge.callHandler('adjust_setOfflineMode', isOffline, null) + isEnabled: function (callback) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_isEnabled', null, + function(response) { + callback(new Boolean(response)); + } + ); } }, - - setEnabled: function (enabled) { - if (WebViewJavascriptBridge != null) { - WebViewJavascriptBridge.callHandler('adjust_setEnabled', enabled, null) + appWillOpenUrl: function (url) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_appWillOpenUrl', url, null); } }, - - isEnabled: function (callback) { - if (WebViewJavascriptBridge != null) { - WebViewJavascriptBridge.callHandler('adjust_isEnabled', null, function(response) { - callback(new Boolean(response)) - }) + setPushToken: function (pushToken) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_setPushToken', pushToken, null); } }, - - getIdfa: function (callback) { - if (WebViewJavascriptBridge != null) { - WebViewJavascriptBridge.callHandler('adjust_idfa', null, function(response) { - callback(response) - }) + setOfflineMode: function(isOffline) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_setOfflineMode', isOffline, null); } }, - - appWillOpenUrl: function (url) { - if (WebViewJavascriptBridge != null) { - WebViewJavascriptBridge.callHandler('adjust_appWillOpenUrl', url, null) + getIdfa: function (callback) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_idfa', null, callback); } }, From c64a964fe824f2c6379dd75be0e44ba62d2f97b2 Mon Sep 17 00:00:00 2001 From: nonelse Date: Mon, 16 Jul 2018 16:15:49 +0200 Subject: [PATCH 26/67] Add missing features --- AdjustBridge/AdjustBridge.m | 102 ++++++++++++++++++++++++++++++++-- AdjustBridge/adjust.js | 60 ++++++++++++++++++++ AdjustBridge/adjust_config.js | 47 +++++++++++----- AdjustBridge/adjust_event.js | 12 ++-- 4 files changed, 198 insertions(+), 23 deletions(-) diff --git a/AdjustBridge/AdjustBridge.m b/AdjustBridge/AdjustBridge.m index 62fc1a896..fb8640773 100644 --- a/AdjustBridge/AdjustBridge.m +++ b/AdjustBridge/AdjustBridge.m @@ -196,8 +196,6 @@ - (void)loadWebViewBridge { self.deferredDeeplinkCallback = responseCallback; } }]; - - // Register for appDidLaunch method. [self.bridgeRegister registerHandler:@"adjust_appDidLaunch" handler:^(id data, WVJBResponseCallback responseCallback) { NSString *appToken = [data objectForKey:@"appToken"]; NSString *environment = [data objectForKey:@"environment"]; @@ -206,6 +204,15 @@ - (void)loadWebViewBridge { NSString *defaultTracker = [data objectForKey:@"defaultTracker"]; NSString *logLevel = [data objectForKey:@"logLevel"]; NSNumber *eventBufferingEnabled = [data objectForKey:@"eventBufferingEnabled"]; + NSNumber *sendInBackground = [data objectForKey:@"sendInBackground"]; + NSNumber *delayStart = [data objectForKey:@"delayStart"]; + NSString *userAgent = [data objectForKey:@"userAgent"]; + NSNumber *isDeviceKnown = [data objectForKey:@"isDeviceKnown"]; + NSNumber *secretId = [data objectForKey:@"secretId"]; + NSNumber *info1 = [data objectForKey:@"info1"]; + NSNumber *info2 = [data objectForKey:@"info2"]; + NSNumber *info3 = [data objectForKey:@"info3"]; + NSNumber *info4 = [data objectForKey:@"info4"]; NSNumber *openDeferredDeeplink = [data objectForKey:@"openDeferredDeeplink"]; ADJConfig *adjustConfig; @@ -232,6 +239,32 @@ - (void)loadWebViewBridge { if ([self isFieldValid:eventBufferingEnabled]) { [adjustConfig setEventBufferingEnabled:[eventBufferingEnabled boolValue]]; } + if ([self isFieldValid:sendInBackground]) { + [adjustConfig setSendInBackground:[sendInBackground boolValue]]; + } + if ([self isFieldValid:delayStart]) { + [adjustConfig setDelayStart:[delayStart doubleValue]]; + } + if ([self isFieldValid:userAgent]) { + [adjustConfig setUserAgent:userAgent]; + } + if ([self isFieldValid:isDeviceKnown]) { + [adjustConfig setIsDeviceKnown:[isDeviceKnown boolValue]]; + } + BOOL isAppSecretDefined = + [self isFieldValid:secretId] && + [self isFieldValid:info1] && + [self isFieldValid:info2] && + [self isFieldValid:info3] && + [self isFieldValid:info4]; + + if (isAppSecretDefined) { + [adjustConfig setAppSecret:[secretId unsignedIntegerValue] + info1:[info1 unsignedIntegerValue] + info2:[info2 unsignedIntegerValue] + info3:[info3 unsignedIntegerValue] + info4:[info4 unsignedIntegerValue]]; + } if ([self isFieldValid:openDeferredDeeplink]) { self.openDeferredDeeplink = [openDeferredDeeplink boolValue]; } @@ -279,14 +312,18 @@ - (void)loadWebViewBridge { [Adjust trackEvent:adjustEvent]; }]; + [self.bridgeRegister registerHandler:@"adjust_trackSubsessionStart" handler:^(id data, WVJBResponseCallback responseCallback) { + [Adjust trackSubsessionStart]; + }]; + [self.bridgeRegister registerHandler:@"adjust_trackSubsessionEnd" handler:^(id data, WVJBResponseCallback responseCallback) { + [Adjust trackSubsessionEnd]; + }]; [self.bridgeRegister registerHandler:@"adjust_setEnabled" handler:^(id data, WVJBResponseCallback responseCallback) { if (![data isKindOfClass:[NSNumber class]]) { return; } [Adjust setEnabled:[(NSNumber *)data boolValue]]; }]; - - // Register for isEnabled method. [self.bridgeRegister registerHandler:@"adjust_isEnabled" handler:^(id data, WVJBResponseCallback responseCallback) { if (responseCallback == nil) { return; @@ -314,7 +351,64 @@ - (void)loadWebViewBridge { } responseCallback([Adjust idfa]); }]; + [self.bridgeRegister registerHandler:@"adjust_adid" handler:^(id data, WVJBResponseCallback responseCallback) { + if (responseCallback == nil) { + return; + } + responseCallback([Adjust adid]); + }]; + [self.bridgeRegister registerHandler:@"adjust_attribution" handler:^(id data, WVJBResponseCallback responseCallback) { + if (responseCallback == nil) { + return; + } + ADJAttribution * attribution = [Adjust attribution]; + NSDictionary * attributionDictionary = nil; + if (attribution != nil) { + attributionDictionary = [attribution dictionary]; + } + responseCallback(attributionDictionary); + }]; + [self.bridgeRegister registerHandler:@"adjust_sendFirstPackages" handler:^(id data, WVJBResponseCallback responseCallback) { + [Adjust sendFirstPackages]; + }]; + [self.bridgeRegister registerHandler:@"adjust_addSessionCallbackParameter" handler:^(id data, WVJBResponseCallback responseCallback) { + NSString *key = [data objectForKey:@"key"]; + NSString *value = [data objectForKey:@"value"]; + [Adjust addSessionCallbackParameter:key value:value]; + }]; + [self.bridgeRegister registerHandler:@"adjust_addSessionPartnerParameter" handler:^(id data, WVJBResponseCallback responseCallback) { + NSString *key = [data objectForKey:@"key"]; + NSString *value = [data objectForKey:@"value"]; + [Adjust addSessionPartnerParameter:key value:value]; + }]; + [self.bridgeRegister registerHandler:@"adjust_removeSessionCallbackParameter" handler:^(id data, WVJBResponseCallback responseCallback) { + if (![data isKindOfClass:[NSString class]]) { + return; + } + [Adjust removeSessionCallbackParameter:(NSString *)data]; + }]; + [self.bridgeRegister registerHandler:@"adjust_removeSessionPartnerParameter" handler:^(id data, WVJBResponseCallback responseCallback) { + if (![data isKindOfClass:[NSString class]]) { + return; + } + [Adjust removeSessionPartnerParameter:(NSString *)data]; + }]; + [self.bridgeRegister registerHandler:@"adjust_resetSessionCallbackParameters" handler:^(id data, WVJBResponseCallback responseCallback) { + if (![data isKindOfClass:[NSString class]]) { + return; + } + [Adjust resetSessionCallbackParameters]; + }]; + [self.bridgeRegister registerHandler:@"adjust_resetSessionPartnerParameters" handler:^(id data, WVJBResponseCallback responseCallback) { + if (![data isKindOfClass:[NSString class]]) { + return; + } + [Adjust resetSessionPartnerParameters]; + }]; + [self.bridgeRegister registerHandler:@"adjust_gdprForgetMe" handler:^(id data, WVJBResponseCallback responseCallback) { + [Adjust gdprForgetMe]; + }]; // Method replaced by setPushToken [self.bridgeRegister registerHandler:@"adjust_setDeviceToken" handler:^(id data, WVJBResponseCallback responseCallback) { diff --git a/AdjustBridge/adjust.js b/AdjustBridge/adjust.js index 6de3cbf37..144ca18ea 100644 --- a/AdjustBridge/adjust.js +++ b/AdjustBridge/adjust.js @@ -16,6 +16,16 @@ var Adjust = { WebViewJavascriptBridge.callHandler('adjust_trackEvent', adjustEvent, null); } }, + trackSubsessionStart: function() { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_trackSubsessionStart', null, null); + } + }, + trackSubsessionEnd: function() { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_trackSubsessionEnd', null, null); + } + }, setEnabled: function (enabled) { if (WebViewJavascriptBridge) { WebViewJavascriptBridge.callHandler('adjust_setEnabled', enabled, null); @@ -50,6 +60,56 @@ var Adjust = { WebViewJavascriptBridge.callHandler('adjust_idfa', null, callback); } }, + getAdid: function (callback) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_adid', null, callback); + } + }, + getAttribution: function (callback) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_attribution', null, callback); + } + }, + sendFirstPackages: function () { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_sendFirstPackages', null, null); + } + }, + addSessionCallbackParameter: function (key, value) { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_addSessionCallbackParameter', {key: key, value: value}, null); + } + }, + addSessionPartnerParameter: function (key, value) { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_addSessionPartnerParameter', {key: key, value: value}, null); + } + }, + removeSessionCallbackParameter: function (key) { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_removeSessionCallbackParameter', key, null); + } + }, + removeSessionPartnerParameter: function (key) { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_removeSessionPartnerParameter', key, null); + } + }, + resetSessionCallbackParameters: function () { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_resetSessionCallbackParameters', null, null); + } + }, + resetSessionPartnerParameters: function () { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_resetSessionPartnerParameters', null, null); + } + }, + gdprForgetMe: function () { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_gdprForgetMe', null, null); + } + }, // metod replaced by setPushToken, that accepts a simple string setDeviceToken: function (deviceToken) { diff --git a/AdjustBridge/adjust_config.js b/AdjustBridge/adjust_config.js index 12fbdc691..08b4e997d 100644 --- a/AdjustBridge/adjust_config.js +++ b/AdjustBridge/adjust_config.js @@ -19,14 +19,19 @@ function AdjustConfig(appToken, environment, legacy) { } this.sdkPrefix = 'web-bridge4.9.1'; - - this.logLevel = null; this.defaultTracker = null; - + this.logLevel = null; + this.eventBufferingEnabled = null; this.sendInBackground = null; + this.delayStart = null; + this.userAgent = null; + this.isDeviceKnown = null; + this.secretId = null; + this.info1 = null; + this.info2 = null; + this.info3 = null; + this.info4 = null; this.openDeferredDeeplink = null; - this.eventBufferingEnabled = null; - this.callbacksMap = {}; } @@ -51,24 +56,40 @@ AdjustConfig.prototype.iterateConfiguredCallbacks = function(handleCallbackWithN } }; +AdjustConfig.prototype.setSdkPrefix = function(sdkPrefix) { + this.sdkPrefix = sdkPrefix; +}; +AdjustConfig.prototype.setDefaultTracker = function(defaultTracker) { + this.defaultTracker = defaultTracker; +}; +AdjustConfig.prototype.setLogLevel = function(logLevel) { + this.logLevel = logLevel; +}; AdjustConfig.prototype.setEventBufferingEnabled = function(isEnabled) { this.eventBufferingEnabled = isEnabled; }; AdjustConfig.prototype.setSendInBackground = function(isEnabled) { this.sendInBackground = isEnabled; }; -AdjustConfig.prototype.setOpenDeferredDeeplink = function(shouldOpen) { - this.openDeferredDeeplink = shouldOpen; +AdjustConfig.prototype.setDelayStart = function(delayStartInSeconds) { + this.delayStart = delayStartInSeconds; }; -AdjustConfig.prototype.setLogLevel = function(logLevel) { - this.logLevel = logLevel; +AdjustConfig.prototype.setUserAgent = function(userAgent) { + this.userAgent = userAgent; }; -AdjustConfig.prototype.setProcessName = function(processName) { - this.processName = processName; +AdjustConfig.prototype.setIsDeviceKnown = function(isDeviceKnown) { + this.isDeviceKnown = isDeviceKnown; +}; +AdjustConfig.prototype.setAppSecret = function(secretId, info1, info2, info3, info4) { + this.secretId = secretId; + this.info1 = info1; + this.info2 = info2; + this.info3 = info3; + this.info4 = info4; }; -AdjustConfig.prototype.setDefaultTracker = function(defaultTracker) { - this.defaultTracker = defaultTracker; +AdjustConfig.prototype.setOpenDeferredDeeplink = function(shouldOpen) { + this.openDeferredDeeplink = shouldOpen; }; AdjustConfig.prototype.setAttributionCallback = function(callback) { diff --git a/AdjustBridge/adjust_event.js b/AdjustBridge/adjust_event.js index b769d33b0..e1ef61ea7 100644 --- a/AdjustBridge/adjust_event.js +++ b/AdjustBridge/adjust_event.js @@ -9,11 +9,6 @@ function AdjustEvent(eventToken) { this.partnerParameters = []; } -AdjustEvent.prototype.setRevenue = function(revenue, currency) { - this.revenue = revenue; - this.currency = currency; -}; - AdjustEvent.prototype.addCallbackParameter = function(key, value) { this.callbackParameters.push(key); this.callbackParameters.push(value); @@ -24,8 +19,13 @@ AdjustEvent.prototype.addPartnerParameter = function(key, value) { this.partnerParameters.push(value); }; +AdjustEvent.prototype.setRevenue = function(revenue, currency) { + this.revenue = revenue; + this.currency = currency; +}; + AdjustEvent.prototype.setTransactionId = function(transactionId) { this.transactionId = transactionId; }; -module.exports = AdjustEvent; \ No newline at end of file +module.exports = AdjustEvent; From a159b507202547d09dc953772aaef27f0055a26d Mon Sep 17 00:00:00 2001 From: uerceg Date: Tue, 17 Jul 2018 14:34:31 +0200 Subject: [PATCH 27/67] AdjustBridge cleanup --- AdjustBridge/AdjustBridge.h | 10 ++-- AdjustBridge/AdjustBridge.m | 76 +++++++++++++++-------------- AdjustBridge/AdjustBridgeRegister.h | 6 +-- AdjustBridge/AdjustBridgeRegister.m | 14 ++---- AdjustBridge/adjust_config.js | 6 +-- 5 files changed, 53 insertions(+), 59 deletions(-) diff --git a/AdjustBridge/AdjustBridge.h b/AdjustBridge/AdjustBridge.h index 5ee7d7fa6..2f6326363 100644 --- a/AdjustBridge/AdjustBridge.h +++ b/AdjustBridge/AdjustBridge.h @@ -1,18 +1,18 @@ // // AdjustBridge.h -// Adjust +// Adjust SDK // -// Created by Pedro Filipe on 27/04/16. -// Copyright © 2016 adjust GmbH. All rights reserved. +// Created by Pedro Filipe (@nonelse) on 27th April 2016. +// Copyright © 2016-2018 Adjust GmbH. All rights reserved. // #import #import #import -#import "WKWebViewJavascriptBridge.h" -#import "WebViewJavascriptBridge.h" #import "AdjustBridgeRegister.h" +#import "WebViewJavascriptBridge.h" +#import "WKWebViewJavascriptBridge.h" @interface AdjustBridge : NSObject diff --git a/AdjustBridge/AdjustBridge.m b/AdjustBridge/AdjustBridge.m index fb8640773..c173e951e 100644 --- a/AdjustBridge/AdjustBridge.m +++ b/AdjustBridge/AdjustBridge.m @@ -1,26 +1,24 @@ // // AdjustBridge.m -// Adjust +// Adjust SDK // -// Created by Pedro Filipe on 27/04/16. -// Copyright © 2016 adjust GmbH. All rights reserved. +// Created by Pedro Filipe (@nonelse) on 27th April 2016. +// Copyright © 2016-2018 Adjust GmbH. All rights reserved. // #import "Adjust.h" -// #import // In case of erroneous import statement try with: // #import -// (depends how you import the adjust SDK to your app) +// (depends how you import the Adjust SDK to your app) #import "AdjustBridge.h" +#import "ADJAdjustFactory.h" #import "WebViewJavascriptBridge.h" #import "WKWebViewJavascriptBridge.h" -#import "ADJAdjustFactory.h" @interface AdjustBridge() @property BOOL openDeferredDeeplink; - @property WVJBResponseCallback deeplinkCallback; @property WVJBResponseCallback attributionCallback; @property WVJBResponseCallback eventSuccessCallback; @@ -37,15 +35,12 @@ @implementation AdjustBridge - (id)init { self = [super init]; - if (self == nil) { return nil; } _bridgeRegister = nil; - self.openDeferredDeeplink = YES; - self.attributionCallback = nil; self.eventSuccessCallback = nil; self.eventFailureCallback = nil; @@ -61,7 +56,6 @@ - (void)adjustAttributionChanged:(ADJAttribution *)attribution { if (self.attributionCallback == nil) { return; } - self.attributionCallback([attribution dictionary]); } @@ -71,13 +65,11 @@ - (void)adjustEventTrackingSucceeded:(ADJEventSuccess *)eventSuccessResponseData } NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - [dictionary setValue:eventSuccessResponseData.message forKey:@"message"]; [dictionary setValue:eventSuccessResponseData.timeStamp forKey:@"timestamp"]; [dictionary setValue:eventSuccessResponseData.adid forKey:@"adid"]; [dictionary setValue:eventSuccessResponseData.eventToken forKey:@"eventToken"]; [dictionary setValue:eventSuccessResponseData.jsonResponse forKey:@"jsonResponse"]; - self.eventSuccessCallback(dictionary); } @@ -87,14 +79,12 @@ - (void)adjustEventTrackingFailed:(ADJEventFailure *)eventFailureResponseData { } NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - [dictionary setValue:eventFailureResponseData.message forKey:@"message"]; [dictionary setValue:eventFailureResponseData.timeStamp forKey:@"timestamp"]; [dictionary setValue:eventFailureResponseData.adid forKey:@"adid"]; [dictionary setValue:eventFailureResponseData.eventToken forKey:@"eventToken"]; [dictionary setValue:[NSNumber numberWithBool:eventFailureResponseData.willRetry] forKey:@"willRetry"]; [dictionary setValue:eventFailureResponseData.jsonResponse forKey:@"jsonResponse"]; - self.eventFailureCallback(dictionary); } @@ -104,12 +94,10 @@ - (void)adjustSessionTrackingSucceeded:(ADJSessionSuccess *)sessionSuccessRespon } NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - [dictionary setValue:sessionSuccessResponseData.message forKey:@"message"]; [dictionary setValue:sessionSuccessResponseData.timeStamp forKey:@"timestamp"]; [dictionary setValue:sessionSuccessResponseData.adid forKey:@"adid"]; [dictionary setValue:sessionSuccessResponseData.jsonResponse forKey:@"jsonResponse"]; - self.sessionSuccessCallback(dictionary); } @@ -119,13 +107,11 @@ - (void)adjustSessionTrackingFailed:(ADJSessionFailure *)sessionFailureResponseD } NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - [dictionary setValue:sessionFailureResponseData.message forKey:@"message"]; [dictionary setValue:sessionFailureResponseData.timeStamp forKey:@"timestamp"]; [dictionary setValue:sessionFailureResponseData.adid forKey:@"adid"]; [dictionary setValue:[NSNumber numberWithBool:sessionFailureResponseData.willRetry] forKey:@"willRetry"]; [dictionary setValue:sessionFailureResponseData.jsonResponse forKey:@"jsonResponse"]; - self.sessionFailureCallback(dictionary); } @@ -133,7 +119,6 @@ - (BOOL)adjustDeeplinkResponse:(NSURL *)deeplink { if (self.deferredDeeplinkCallback) { self.deferredDeeplinkCallback([deeplink absoluteString]); } - return self.openDeferredDeeplink; } @@ -156,7 +141,6 @@ - (void)loadUIWebViewBridge:(WVJB_WEBVIEW_TYPE *)webView AdjustUIBridgeRegister *uiBridgeRegister = [AdjustUIBridgeRegister bridgeRegisterWithUIWebView:webView]; [uiBridgeRegister setWebViewDelegate:webViewDelegate]; - _bridgeRegister = uiBridgeRegister; [self loadWebViewBridge]; } @@ -170,7 +154,6 @@ - (void)loadWKWebViewBridge:(WKWebView *)wkWebView AdjustWKBridgeRegister *wkBridgeRegister = [AdjustWKBridgeRegister bridgeRegisterWithWKWebView:wkWebView]; [wkBridgeRegister setWebViewDelegate:wkWebViewDelegate]; - _bridgeRegister = wkBridgeRegister; [self loadWebViewBridge]; } @@ -196,6 +179,7 @@ - (void)loadWebViewBridge { self.deferredDeeplinkCallback = responseCallback; } }]; + [self.bridgeRegister registerHandler:@"adjust_appDidLaunch" handler:^(id data, WVJBResponseCallback responseCallback) { NSString *appToken = [data objectForKey:@"appToken"]; NSString *environment = [data objectForKey:@"environment"]; @@ -222,7 +206,7 @@ - (void)loadWebViewBridge { adjustConfig = [ADJConfig configWithAppToken:appToken environment:environment]; } - // no need to continue if adjust config is not valid + // No need to continue if adjust config is not valid. if (![adjustConfig isValid]) { return; } @@ -257,7 +241,6 @@ - (void)loadWebViewBridge { [self isFieldValid:info2] && [self isFieldValid:info3] && [self isFieldValid:info4]; - if (isAppSecretDefined) { [adjustConfig setAppSecret:[secretId unsignedIntegerValue] info1:[info1 unsignedIntegerValue] @@ -268,19 +251,22 @@ - (void)loadWebViewBridge { if ([self isFieldValid:openDeferredDeeplink]) { self.openDeferredDeeplink = [openDeferredDeeplink boolValue]; } - // Set self as delegate if any callback is configured - // Change to swifle the methods in the future - if (self.attributionCallback != nil || self.eventSuccessCallback != nil || - self.eventFailureCallback != nil || self.sessionSuccessCallback != nil || - self.sessionFailureCallback != nil || self.deferredDeeplinkCallback != nil) { + // Set self as delegate if any callback is configured. + // Change to swifle the methods in the future. + if (self.attributionCallback != nil + || self.eventSuccessCallback != nil + || self.eventFailureCallback != nil + || self.sessionSuccessCallback != nil + || self.sessionFailureCallback != nil + || self.deferredDeeplinkCallback != nil) { [adjustConfig setDelegate:self]; } [Adjust appDidLaunch:adjustConfig]; [Adjust trackSubsessionStart]; }]; - [self.bridgeRegister registerHandler:@"adjust_trackEvent" handler:^(id data, WVJBResponseCallback responseCallback) { + [self.bridgeRegister registerHandler:@"adjust_trackEvent" handler:^(id data, WVJBResponseCallback responseCallback) { NSString *eventToken = [data objectForKey:@"eventToken"]; NSString *revenue = [data objectForKey:@"revenue"]; NSString *currency = [data objectForKey:@"currency"]; @@ -289,11 +275,11 @@ - (void)loadWebViewBridge { id partnerParameters = [data objectForKey:@"partnerParameters"]; ADJEvent *adjustEvent = [ADJEvent eventWithEventToken:eventToken]; - - // no need to continue if adjust event is not valid + // No need to continue if adjust event is not valid if (![adjustEvent isValid]) { return; } + if ([self isFieldValid:revenue] && [self isFieldValid:currency]) { double revenueValue = [revenue doubleValue]; [adjustEvent setRevenue:revenueValue currency:currency]; @@ -312,107 +298,125 @@ - (void)loadWebViewBridge { [Adjust trackEvent:adjustEvent]; }]; + [self.bridgeRegister registerHandler:@"adjust_trackSubsessionStart" handler:^(id data, WVJBResponseCallback responseCallback) { [Adjust trackSubsessionStart]; }]; + [self.bridgeRegister registerHandler:@"adjust_trackSubsessionEnd" handler:^(id data, WVJBResponseCallback responseCallback) { [Adjust trackSubsessionEnd]; }]; + [self.bridgeRegister registerHandler:@"adjust_setEnabled" handler:^(id data, WVJBResponseCallback responseCallback) { if (![data isKindOfClass:[NSNumber class]]) { return; } [Adjust setEnabled:[(NSNumber *)data boolValue]]; }]; + [self.bridgeRegister registerHandler:@"adjust_isEnabled" handler:^(id data, WVJBResponseCallback responseCallback) { if (responseCallback == nil) { return; } responseCallback([NSNumber numberWithBool:[Adjust isEnabled]]); }]; + [self.bridgeRegister registerHandler:@"adjust_appWillOpenUrl" handler:^(id data, WVJBResponseCallback responseCallback) { [Adjust appWillOpenUrl:[NSURL URLWithString:data]]; }]; + [self.bridgeRegister registerHandler:@"adjust_setPushToken" handler:^(id data, WVJBResponseCallback responseCallback) { if (![data isKindOfClass:[NSString class]]) { return; } [Adjust setPushToken:(NSString *)data]; }]; + [self.bridgeRegister registerHandler:@"adjust_setOfflineMode" handler:^(id data, WVJBResponseCallback responseCallback) { if (![data isKindOfClass:[NSNumber class]]) { return; } [Adjust setOfflineMode:[(NSNumber *)data boolValue]]; }]; + [self.bridgeRegister registerHandler:@"adjust_idfa" handler:^(id data, WVJBResponseCallback responseCallback) { if (responseCallback == nil) { return; } responseCallback([Adjust idfa]); }]; + [self.bridgeRegister registerHandler:@"adjust_adid" handler:^(id data, WVJBResponseCallback responseCallback) { if (responseCallback == nil) { return; } responseCallback([Adjust adid]); }]; + [self.bridgeRegister registerHandler:@"adjust_attribution" handler:^(id data, WVJBResponseCallback responseCallback) { if (responseCallback == nil) { return; } - ADJAttribution * attribution = [Adjust attribution]; - NSDictionary * attributionDictionary = nil; + ADJAttribution *attribution = [Adjust attribution]; + NSDictionary *attributionDictionary = nil; if (attribution != nil) { attributionDictionary = [attribution dictionary]; } responseCallback(attributionDictionary); }]; + [self.bridgeRegister registerHandler:@"adjust_sendFirstPackages" handler:^(id data, WVJBResponseCallback responseCallback) { [Adjust sendFirstPackages]; }]; + [self.bridgeRegister registerHandler:@"adjust_addSessionCallbackParameter" handler:^(id data, WVJBResponseCallback responseCallback) { NSString *key = [data objectForKey:@"key"]; NSString *value = [data objectForKey:@"value"]; [Adjust addSessionCallbackParameter:key value:value]; }]; + [self.bridgeRegister registerHandler:@"adjust_addSessionPartnerParameter" handler:^(id data, WVJBResponseCallback responseCallback) { NSString *key = [data objectForKey:@"key"]; NSString *value = [data objectForKey:@"value"]; [Adjust addSessionPartnerParameter:key value:value]; }]; + [self.bridgeRegister registerHandler:@"adjust_removeSessionCallbackParameter" handler:^(id data, WVJBResponseCallback responseCallback) { if (![data isKindOfClass:[NSString class]]) { return; } [Adjust removeSessionCallbackParameter:(NSString *)data]; }]; + [self.bridgeRegister registerHandler:@"adjust_removeSessionPartnerParameter" handler:^(id data, WVJBResponseCallback responseCallback) { if (![data isKindOfClass:[NSString class]]) { return; } [Adjust removeSessionPartnerParameter:(NSString *)data]; }]; + [self.bridgeRegister registerHandler:@"adjust_resetSessionCallbackParameters" handler:^(id data, WVJBResponseCallback responseCallback) { if (![data isKindOfClass:[NSString class]]) { return; } [Adjust resetSessionCallbackParameters]; }]; + [self.bridgeRegister registerHandler:@"adjust_resetSessionPartnerParameters" handler:^(id data, WVJBResponseCallback responseCallback) { if (![data isKindOfClass:[NSString class]]) { return; } [Adjust resetSessionPartnerParameters]; }]; + [self.bridgeRegister registerHandler:@"adjust_gdprForgetMe" handler:^(id data, WVJBResponseCallback responseCallback) { [Adjust gdprForgetMe]; }]; // Method replaced by setPushToken [self.bridgeRegister registerHandler:@"adjust_setDeviceToken" handler:^(id data, WVJBResponseCallback responseCallback) { - [[ADJAdjustFactory logger] warn:@"Function setDeviceToken has been replaced by setPushToken in web bridge"]; + [[ADJAdjustFactory logger] warn:@"Function setDeviceToken has been replaced by setPushToken: in web bridge"]; }]; } @@ -422,11 +426,9 @@ - (BOOL)isFieldValid:(NSObject *)field { if (field == nil) { return NO; } - if ([field isKindOfClass:[NSNull class]]) { return NO; } - return YES; } diff --git a/AdjustBridge/AdjustBridgeRegister.h b/AdjustBridge/AdjustBridgeRegister.h index 3e337adcf..032ad003b 100644 --- a/AdjustBridge/AdjustBridgeRegister.h +++ b/AdjustBridge/AdjustBridgeRegister.h @@ -1,9 +1,9 @@ // // AdjustWebViewJSBridge.h -// Adjust +// Adjust SDK // -// Created by Pedro Filipe on 10/06/16. -// Copyright © 2016 adjust GmbH. All rights reserved. +// Created by Pedro Filipe (@nonelse) on 10th June 2016. +// Copyright © 2016-2018 Adjust GmbH. All rights reserved. // #import diff --git a/AdjustBridge/AdjustBridgeRegister.m b/AdjustBridge/AdjustBridgeRegister.m index b1abfc3b8..a5f125300 100644 --- a/AdjustBridge/AdjustBridgeRegister.m +++ b/AdjustBridge/AdjustBridgeRegister.m @@ -1,9 +1,9 @@ // // AdjustBridgeRegister.m -// Adjust +// Adjust SDK // -// Created by Pedro Filipe on 10/06/16. -// Copyright © 2016 adjust GmbH. All rights reserved. +// Created by Pedro Filipe (@nonelse) on 10th June 2016. +// Copyright © 2016-2018 Adjust GmbH. All rights reserved. // #import "AdjustBridgeRegister.h" @@ -24,13 +24,11 @@ @implementation AdjustUIBridgeRegister - (id)initWithUIWebView:(WVJB_WEBVIEW_TYPE *)uiWebView { self = [super init]; - if (self == nil) { return nil; } self.uiBridge = [WebViewJavascriptBridge bridgeForWebView:uiWebView]; - return self; } @@ -42,7 +40,6 @@ - (void)registerHandler:(NSString *)handlerName handler:(WVJBHandler)handler { if ([handlerName hasPrefix:kHandlerPrefix] == NO) { return; } - [self.uiBridge registerHandler:handlerName handler:handler]; } @@ -50,7 +47,6 @@ - (void)callHandler:(NSString *)handlerName data:(id)data { if ([handlerName hasPrefix:kHandlerPrefix] == NO) { return; } - [self.uiBridge callHandler:handlerName data:data]; } @@ -70,13 +66,11 @@ @implementation AdjustWKBridgeRegister - (id)initWithWKWebView:(WKWebView *)wkWebView { self = [super init]; - if (self == nil) { return nil; } self.wkBridge = [WebViewJavascriptBridge bridgeForWebView:wkWebView]; - return self; } @@ -88,7 +82,6 @@ - (void)registerHandler:(NSString *)handlerName handler:(WVJBHandler)handler { if ([handlerName hasPrefix:kHandlerPrefix] == NO) { return; } - [self.wkBridge registerHandler:handlerName handler:handler]; } @@ -96,7 +89,6 @@ - (void)callHandler:(NSString *)handlerName data:(id)data { if ([handlerName hasPrefix:kHandlerPrefix] == NO) { return; } - [self.wkBridge callHandler:handlerName data:data]; } diff --git a/AdjustBridge/adjust_config.js b/AdjustBridge/adjust_config.js index 08b4e997d..7f9e88e95 100644 --- a/AdjustBridge/adjust_config.js +++ b/AdjustBridge/adjust_config.js @@ -1,17 +1,17 @@ function AdjustConfig(appToken, environment, legacy) { if (arguments.length === 2) { - // new format does not require bridge as first parameter + // New format does not require bridge as first parameter. this.appToken = appToken; this.environment = environment; } else if (arguments.length === 3) { - // new format with allowSuppressLogLevel + // New format with allowSuppressLogLevel. if (typeof(legacy) == typeof(true)) { this.appToken = appToken; this.environment = environment; this.allowSuppressLogLevel = legacy; } else { - // old format with first argument being the bridge instance + // Old format with first argument being the bridge instance. this.bridge = appToken; this.appToken = environment; this.environment = legacy; From f3706f13f870a19f5b89459028e7110783d6c2ee Mon Sep 17 00:00:00 2001 From: uerceg Date: Tue, 17 Jul 2018 14:45:12 +0200 Subject: [PATCH 28/67] Fix method signature and add calls to appWillOpenUrl: --- .../AdjustExample-WebView/AppDelegate.m | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/examples/AdjustExample-WebView/AdjustExample-WebView/AppDelegate.m b/examples/AdjustExample-WebView/AdjustExample-WebView/AppDelegate.m index a74dfae76..50409c6d2 100644 --- a/examples/AdjustExample-WebView/AdjustExample-WebView/AppDelegate.m +++ b/examples/AdjustExample-WebView/AdjustExample-WebView/AppDelegate.m @@ -6,6 +6,7 @@ // Copyright © 2016 adjust GmbH. All rights reserved. // +#import "Adjust.h" #import "AppDelegate.h" #import "UIWebViewController.h" #import "WKWebViewController.h" @@ -44,16 +45,14 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { - NSLog(@"application openURL %@", url); - + [Adjust appWillOpenUrl:url]; return YES; } -- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler { +- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler { if ([[userActivity activityType] isEqualToString:NSUserActivityTypeBrowsingWeb]) { - NSLog(@"application continueUserActivity %@", [userActivity webpageURL]); + [Adjust appWillOpenUrl:[userActivity webpageURL]]; } - return YES; } From 651995b873c902eadc8662895cc8378ec62a3651 Mon Sep 17 00:00:00 2001 From: uerceg Date: Tue, 17 Jul 2018 15:06:19 +0200 Subject: [PATCH 29/67] Update web bridge version to 4.14.0 --- AdjustBridge/adjust_config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AdjustBridge/adjust_config.js b/AdjustBridge/adjust_config.js index 7f9e88e95..c7b9d63dd 100644 --- a/AdjustBridge/adjust_config.js +++ b/AdjustBridge/adjust_config.js @@ -18,7 +18,7 @@ function AdjustConfig(appToken, environment, legacy) { } } - this.sdkPrefix = 'web-bridge4.9.1'; + this.sdkPrefix = 'web-bridge4.14.0'; this.defaultTracker = null; this.logLevel = null; this.eventBufferingEnabled = null; From 8890af212550a35bdc132ef9f891d51f53833ec6 Mon Sep 17 00:00:00 2001 From: uerceg Date: Tue, 17 Jul 2018 15:35:17 +0200 Subject: [PATCH 30/67] HTML page update --- .../AdjustExample-WebView.html | 48 +++++++++++++------ 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html b/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html index f16da9681..113534a6a 100644 --- a/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html +++ b/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html @@ -3,12 +3,12 @@ -

Adjust Web View Demo

+

Adjust Web View Demo

@@ -159,16 +159,36 @@

Adjust Web View Demo

} }) -
- - - - - - - - - - -
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
From 897393499ba6b5cd48f3b4cbd7398b74c9c861d8 Mon Sep 17 00:00:00 2001 From: uerceg Date: Tue, 17 Jul 2018 15:38:34 +0200 Subject: [PATCH 31/67] Update custom URL scheme in example app --- examples/AdjustExample-WebView/AdjustExample-WebView/Info.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/AdjustExample-WebView/AdjustExample-WebView/Info.plist b/examples/AdjustExample-WebView/AdjustExample-WebView/Info.plist index 866573564..0fe6a6867 100644 --- a/examples/AdjustExample-WebView/AdjustExample-WebView/Info.plist +++ b/examples/AdjustExample-WebView/AdjustExample-WebView/Info.plist @@ -25,7 +25,7 @@ com.adjust.examples CFBundleURLSchemes - adjustExample + adjust-examples From d68edbe073963ac2cee8022bc239df58c1d79bbb Mon Sep 17 00:00:00 2001 From: uerceg Date: Tue, 17 Jul 2018 15:41:41 +0200 Subject: [PATCH 32/67] Log message update --- AdjustBridge/AdjustBridge.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AdjustBridge/AdjustBridge.m b/AdjustBridge/AdjustBridge.m index c173e951e..c28c3b15a 100644 --- a/AdjustBridge/AdjustBridge.m +++ b/AdjustBridge/AdjustBridge.m @@ -416,7 +416,7 @@ - (void)loadWebViewBridge { // Method replaced by setPushToken [self.bridgeRegister registerHandler:@"adjust_setDeviceToken" handler:^(id data, WVJBResponseCallback responseCallback) { - [[ADJAdjustFactory logger] warn:@"Function setDeviceToken has been replaced by setPushToken: in web bridge"]; + [[ADJAdjustFactory logger] warn:@"Function setDeviceToken: has been replaced by setPushToken: in web bridge"]; }]; } From 3cec6f0367713bd5532f61d71dfe8cee8b7ffc24 Mon Sep 17 00:00:00 2001 From: uerceg Date: Tue, 17 Jul 2018 15:48:00 +0200 Subject: [PATCH 33/67] A bit of HTML cleanup --- .../AdjustExample-WebView/AdjustExample-WebView.html | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html b/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html index 113534a6a..e98dd140e 100644 --- a/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html +++ b/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html @@ -73,7 +73,6 @@

Adjust Web View Demo

var btnTrackSimpleEvent = document.getElementById('btnTrackSimpleEvent') btnTrackSimpleEvent.onclick = function(e) { e.preventDefault() - var adjustEvent = new AdjustEvent('g3mfiw') Adjust.trackEvent(adjustEvent) } @@ -81,18 +80,14 @@

Adjust Web View Demo

var btnTrackRevenueEvent = document.getElementById('btnTrackRevenueEvent') btnTrackRevenueEvent.onclick = function(e) { e.preventDefault() - var adjustEvent = new AdjustEvent('a4fd35') adjustEvent.setRevenue(0.01, 'EUR') Adjust.trackEvent(adjustEvent) } var btnTrackCallbackEvent = document.getElementById('btnTrackCallbackEvent') - btnTrackCallbackEvent.onclick = function(e) { - e.preventDefault() - var adjustEvent = new AdjustEvent('34vgg9') adjustEvent.addCallbackParameter('key', 'value') adjustEvent.addCallbackParameter('x', 'y') @@ -103,7 +98,6 @@

Adjust Web View Demo

var btnTrackPartnerEvent = document.getElementById('btnTrackPartnerEvent') btnTrackPartnerEvent.onclick = function(e) { e.preventDefault() - var adjustEvent = new AdjustEvent('w788qs') adjustEvent.addPartnerParameter('foo', 'bar') adjustEvent.addPartnerParameter('x', 'y') @@ -115,35 +109,30 @@

Adjust Web View Demo

var btnEnableOfflineMode = document.getElementById('btnEnableOfflineMode') btnEnableOfflineMode.onclick = function(e) { e.preventDefault() - Adjust.setOfflineMode(true) } var btnDisableOfflineMode = document.getElementById('btnDisableOfflineMode') btnDisableOfflineMode.onclick = function(e) { e.preventDefault() - Adjust.setOfflineMode(false) } var btnEnableSdk = document.getElementById('btnEnableSdk') btnEnableSdk.onclick = function(e) { e.preventDefault() - Adjust.setEnabled(true) } var btnDisableSdk = document.getElementById('btnDisableSdk') btnDisableSdk.onclick = function(e) { e.preventDefault() - Adjust.setEnabled(false) } var btnIsSdkEnabled = document.getElementById('btnIsSdkEnabled') btnIsSdkEnabled.onclick = function(e) { e.preventDefault() - Adjust.isEnabled(function(isEnabled) { alert('Is SDK enabled? ' + isEnabled) }) @@ -152,7 +141,6 @@

Adjust Web View Demo

var btnGetIdfa = document.getElementById('btnGetIdfa') btnGetIdfa.onclick = function(e) { e.preventDefault() - Adjust.getIdfa(function(idfa) { alert('IDFA\n' + idfa) }) From 6e9857290d222f2a3421a8ccfe40854c8084edfa Mon Sep 17 00:00:00 2001 From: uerceg Date: Tue, 17 Jul 2018 16:03:44 +0200 Subject: [PATCH 34/67] Custom URL scheme update --- examples/AdjustExample-WebView/AdjustExample-WebView/Info.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/AdjustExample-WebView/AdjustExample-WebView/Info.plist b/examples/AdjustExample-WebView/AdjustExample-WebView/Info.plist index 0fe6a6867..808e18c1f 100644 --- a/examples/AdjustExample-WebView/AdjustExample-WebView/Info.plist +++ b/examples/AdjustExample-WebView/AdjustExample-WebView/Info.plist @@ -25,7 +25,7 @@ com.adjust.examples CFBundleURLSchemes - adjust-examples + adjust-example From c170b0f91d727a4d39504fd62a23059ea4ade263 Mon Sep 17 00:00:00 2001 From: nonelse Date: Wed, 18 Jul 2018 13:45:34 +0200 Subject: [PATCH 35/67] Remove set push token --- AdjustBridge/AdjustBridge.m | 7 +------ AdjustBridge/adjust.js | 11 ++--------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/AdjustBridge/AdjustBridge.m b/AdjustBridge/AdjustBridge.m index c28c3b15a..236757807 100644 --- a/AdjustBridge/AdjustBridge.m +++ b/AdjustBridge/AdjustBridge.m @@ -325,7 +325,7 @@ - (void)loadWebViewBridge { [Adjust appWillOpenUrl:[NSURL URLWithString:data]]; }]; - [self.bridgeRegister registerHandler:@"adjust_setPushToken" handler:^(id data, WVJBResponseCallback responseCallback) { + [self.bridgeRegister registerHandler:@"adjust_setDeviceToken" handler:^(id data, WVJBResponseCallback responseCallback) { if (![data isKindOfClass:[NSString class]]) { return; } @@ -413,11 +413,6 @@ - (void)loadWebViewBridge { [self.bridgeRegister registerHandler:@"adjust_gdprForgetMe" handler:^(id data, WVJBResponseCallback responseCallback) { [Adjust gdprForgetMe]; }]; - - // Method replaced by setPushToken - [self.bridgeRegister registerHandler:@"adjust_setDeviceToken" handler:^(id data, WVJBResponseCallback responseCallback) { - [[ADJAdjustFactory logger] warn:@"Function setDeviceToken: has been replaced by setPushToken: in web bridge"]; - }]; } #pragma mark - Private & helper methods diff --git a/AdjustBridge/adjust.js b/AdjustBridge/adjust.js index 144ca18ea..e5daec388 100644 --- a/AdjustBridge/adjust.js +++ b/AdjustBridge/adjust.js @@ -45,9 +45,9 @@ var Adjust = { WebViewJavascriptBridge.callHandler('adjust_appWillOpenUrl', url, null); } }, - setPushToken: function (pushToken) { + setDeviceToken: function (deviceToken) { if (WebViewJavascriptBridge) { - WebViewJavascriptBridge.callHandler('adjust_setPushToken', pushToken, null); + WebViewJavascriptBridge.callHandler('adjust_setDeviceToken', deviceToken, null); } }, setOfflineMode: function(isOffline) { @@ -109,13 +109,6 @@ var Adjust = { if (WebViewJavascriptBridge != null) { WebViewJavascriptBridge.callHandler('adjust_gdprForgetMe', null, null); } - }, - - // metod replaced by setPushToken, that accepts a simple string - setDeviceToken: function (deviceToken) { - if (WebViewJavascriptBridge) { - WebViewJavascriptBridge.callHandler('adjust_setDeviceToken', deviceToken, null); - } } }; From e403f137c0610878be9ae955628fb66d9c74cc5c Mon Sep 17 00:00:00 2001 From: nonelse Date: Thu, 19 Jul 2018 17:04:42 +0200 Subject: [PATCH 36/67] Use description instead of cast --- AdjustBridge/AdjustBridge.m | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/AdjustBridge/AdjustBridge.m b/AdjustBridge/AdjustBridge.m index 236757807..923a48770 100644 --- a/AdjustBridge/AdjustBridge.m +++ b/AdjustBridge/AdjustBridge.m @@ -288,12 +288,16 @@ - (void)loadWebViewBridge { [adjustEvent setTransactionId:transactionId]; } for (int i = 0; i < [callbackParameters count]; i += 2) { - [adjustEvent addCallbackParameter:[callbackParameters objectAtIndex:i] - value:[callbackParameters objectAtIndex:(i+1)]]; + NSString * key = [[callbackParameters objectAtIndex:i] description]; + NSString * value = [[callbackParameters objectAtIndex:(i + 1)] description]; + + [adjustEvent addCallbackParameter:key value:value]; } for (int i = 0; i < [partnerParameters count]; i += 2) { - [adjustEvent addPartnerParameter:[partnerParameters objectAtIndex:i] - value:[partnerParameters objectAtIndex:(i+1)]]; + NSString * key = [[partnerParameters objectAtIndex:i] description]; + NSString * value = [[partnerParameters objectAtIndex:(i + 1)] description]; + + [adjustEvent addPartnerParameter:key value:value]; } [Adjust trackEvent:adjustEvent]; From 27cb25da70371f3dc00bbfb2a8d9f094c71e1d06 Mon Sep 17 00:00:00 2001 From: nonelse Date: Thu, 19 Jul 2018 17:17:15 +0200 Subject: [PATCH 37/67] Remove unecessary copies of js in example app --- .../AdjustExample-WebView/adjust.js | 67 ------------- .../AdjustExample-WebView/adjust_config.js | 95 ------------------- .../AdjustExample-WebView/adjust_event.js | 31 ------ 3 files changed, 193 deletions(-) delete mode 100644 examples/AdjustExample-WebView/AdjustExample-WebView/adjust.js delete mode 100644 examples/AdjustExample-WebView/AdjustExample-WebView/adjust_config.js delete mode 100644 examples/AdjustExample-WebView/AdjustExample-WebView/adjust_event.js diff --git a/examples/AdjustExample-WebView/AdjustExample-WebView/adjust.js b/examples/AdjustExample-WebView/AdjustExample-WebView/adjust.js deleted file mode 100644 index 3580aa9da..000000000 --- a/examples/AdjustExample-WebView/AdjustExample-WebView/adjust.js +++ /dev/null @@ -1,67 +0,0 @@ -var Adjust = { - appDidLaunch: function (adjustConfig) { - this.bridge = adjustConfig.getBridge(); - - if (this.bridge != null) { - if (adjustConfig != null) { - if (adjustConfig.getAttributionCallback() != null) { - this.bridge.callHandler('setAttributionCallback', null, adjustConfig.getAttributionCallback()) - } - - if (adjustConfig.getEventSuccessCallback() != null) { - this.bridge.callHandler('setEventSuccessCallback', null, adjustConfig.getEventSuccessCallback()) - } - - if (adjustConfig.getEventFailureCallback() != null) { - this.bridge.callHandler('setEventFailureCallback', null, adjustConfig.getEventFailureCallback()) - } - - if (adjustConfig.getSessionSuccessCallback() != null) { - this.bridge.callHandler('setSessionSuccessCallback', null, adjustConfig.getSessionSuccessCallback()) - } - - if (adjustConfig.getSessionFailureCallback() != null) { - this.bridge.callHandler('setSessionFailureCallback', null, adjustConfig.getSessionFailureCallback()) - } - - this.bridge.callHandler('appDidLaunch', adjustConfig, null) - } - } - }, - - trackEvent: function (adjustEvent) { - if (this.bridge != null) { - this.bridge.callHandler('trackEvent', adjustEvent, null) - } - }, - - setOfflineMode: function(isOffline) { - if (this.bridge != null) { - this.bridge.callHandler('setOfflineMode', isOffline, null) - } - }, - - appWillOpenUrl: function(url) { - - }, - - setEnabled: function (enabled) { - if (this.bridge != null) { - this.bridge.callHandler('setEnabled', enabled, null) - } - }, - - isEnabled: function (callback) { - this.bridge.callHandler('isEnabled', null, function(response) { - callback(response) - }) - }, - - getIdfa: function (callback) { - this.bridge.callHandler('idfa', null, function(response) { - callback(response) - }) - } -}; - -module.exports = Adjust; \ No newline at end of file diff --git a/examples/AdjustExample-WebView/AdjustExample-WebView/adjust_config.js b/examples/AdjustExample-WebView/AdjustExample-WebView/adjust_config.js deleted file mode 100644 index bab7ba8f3..000000000 --- a/examples/AdjustExample-WebView/AdjustExample-WebView/adjust_config.js +++ /dev/null @@ -1,95 +0,0 @@ -function AdjustConfig(bridge, appToken, environment) { - this.bridge = bridge; - this.appToken = appToken; - this.environment = environment; - - this.sdkPrefix = 'web'; - - this.logLevel = null; - this.defaultTracker = null; - - this.sendInBackground = null; - this.eventBufferingEnabled = null; - - this.attributionCallback = null; - this.eventSuccessCallback = null; - this.eventFailureCallback = null; - this.sessionSuccessCallback = null; - this.sessionFailureCallback = null; -} - -AdjustConfig.EnvironmentSandbox = 'sandbox'; -AdjustConfig.EnvironmentProduction = 'production'; - -AdjustConfig.LogLevelVerbose = 'VERBOSE', -AdjustConfig.LogLevelDebug = 'DEBUG', -AdjustConfig.LogLevelInfo = 'INFO', -AdjustConfig.LogLevelWarn = 'WARN', -AdjustConfig.LogLevelError = 'ERROR', -AdjustConfig.LogLevelAssert = 'ASSERT', - -AdjustConfig.prototype.getBridge = function() { - return this.bridge; -}; - -AdjustConfig.prototype.getAttributionCallback = function() { - return this.attributionCallback; -}; - -AdjustConfig.prototype.getEventSuccessCallback = function() { - return this.eventSuccessCallback; -}; - -AdjustConfig.prototype.getEventFailureCallback = function() { - return this.eventFailureCallback; -}; - -AdjustConfig.prototype.getSessionSuccessCallback = function() { - return this.sessionSuccessCallback; -}; - -AdjustConfig.prototype.getSessionFailureCallback = function() { - return this.sessionFailureCallback; -}; - -AdjustConfig.prototype.setEventBufferingEnabled = function(isEnabled) { - this.eventBufferingEnabled = isEnabled; -}; - -AdjustConfig.prototype.setSendInBackground = function(isEnabled) { - this.sendInBackground = isEnabled; -}; - -AdjustConfig.prototype.setLogLevel = function(logLevel) { - this.logLevel = logLevel; -}; - -AdjustConfig.prototype.setProcessName = function(processName) { - this.processName = processName; -}; - -AdjustConfig.prototype.setDefaultTracker = function(defaultTracker) { - this.defaultTracker = defaultTracker; -}; - -AdjustConfig.prototype.setAttributionCallback = function(callbackFluf) { - this.attributionCallback = callbackFluf; -}; - -AdjustConfig.prototype.setEventSuccessCallback = function(callback) { - this.eventSuccessCallback = callback; -}; - -AdjustConfig.prototype.setEventFailureCallback = function(callback) { - this.eventFailureCallback = callback; -}; - -AdjustConfig.prototype.setSessionSuccessCallback = function(callback) { - this.sessionSuccessCallback = callback; -}; - -AdjustConfig.prototype.setSessionFailureCallback = function(callback) { - this.sessionFailureCallback = callback; -}; - -module.exports = AdjustConfig; diff --git a/examples/AdjustExample-WebView/AdjustExample-WebView/adjust_event.js b/examples/AdjustExample-WebView/AdjustExample-WebView/adjust_event.js deleted file mode 100644 index b769d33b0..000000000 --- a/examples/AdjustExample-WebView/AdjustExample-WebView/adjust_event.js +++ /dev/null @@ -1,31 +0,0 @@ -function AdjustEvent(eventToken) { - this.eventToken = eventToken; - - this.revenue = null; - this.currency = null; - this.transactionId = null; - - this.callbackParameters = []; - this.partnerParameters = []; -} - -AdjustEvent.prototype.setRevenue = function(revenue, currency) { - this.revenue = revenue; - this.currency = currency; -}; - -AdjustEvent.prototype.addCallbackParameter = function(key, value) { - this.callbackParameters.push(key); - this.callbackParameters.push(value); -}; - -AdjustEvent.prototype.addPartnerParameter = function(key, value) { - this.partnerParameters.push(key); - this.partnerParameters.push(value); -}; - -AdjustEvent.prototype.setTransactionId = function(transactionId) { - this.transactionId = transactionId; -}; - -module.exports = AdjustEvent; \ No newline at end of file From 09f754b72db9cf4fa5503f56a6557bb10858a04b Mon Sep 17 00:00:00 2001 From: nonelse Date: Fri, 20 Jul 2018 11:57:27 +0200 Subject: [PATCH 38/67] Save replace js with .m --- Adjust.xcodeproj/project.pbxproj | 6 + .../WebViewJavascriptBridge/AdjustBridge_JS.h | 11 + .../WebViewJavascriptBridge/AdjustBridge_JS.m | 316 ++++++++++++++++++ .../WebViewJavascriptBridgeBase.m | 4 + .../AdjustExample-WebView.html | 6 +- 5 files changed, 339 insertions(+), 4 deletions(-) create mode 100644 AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.h create mode 100644 AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.m diff --git a/Adjust.xcodeproj/project.pbxproj b/Adjust.xcodeproj/project.pbxproj index 4a0b3d639..2d202e5d7 100644 --- a/Adjust.xcodeproj/project.pbxproj +++ b/Adjust.xcodeproj/project.pbxproj @@ -23,6 +23,7 @@ /* Begin PBXBuildFile section */ 2067002A1F18BDC700B4FDE1 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9601C19C1A31DD7F00A9AE21 /* CoreTelephony.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 6FA69FD72101E00100FCD3B5 /* AdjustBridge_JS.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FA69FD62101E00100FCD3B5 /* AdjustBridge_JS.m */; }; 6FCC85001F278CF300D6A0ED /* ADJReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FCC84F71F278CF300D6A0ED /* ADJReachability.m */; }; 6FCC85011F278CF300D6A0ED /* ADJReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FCC84F81F278CF300D6A0ED /* ADJReachability.h */; }; 6FCC85041F27945E00D6A0ED /* ADJReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FCC85021F27944600D6A0ED /* ADJReachability.h */; }; @@ -471,6 +472,8 @@ /* Begin PBXFileReference section */ 6F0842182007766700568A31 /* AdjustTestLibrary.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = AdjustTestLibrary.xcodeproj; path = AdjustTestLibrary/AdjustTestLibrary.xcodeproj; sourceTree = ""; }; 6F084240200776A000568A31 /* AdjustTestApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = AdjustTestApp.xcodeproj; path = AdjustTestApp/AdjustTestApp.xcodeproj; sourceTree = ""; }; + 6FA69FD52101E00100FCD3B5 /* AdjustBridge_JS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AdjustBridge_JS.h; sourceTree = ""; }; + 6FA69FD62101E00100FCD3B5 /* AdjustBridge_JS.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AdjustBridge_JS.m; sourceTree = ""; }; 6FCC84F71F278CF300D6A0ED /* ADJReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJReachability.m; sourceTree = ""; }; 6FCC84F81F278CF300D6A0ED /* ADJReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJReachability.h; sourceTree = ""; }; 6FCC85021F27944600D6A0ED /* ADJReachability.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ADJReachability.h; sourceTree = ""; }; @@ -984,6 +987,8 @@ 9648C5E51CD1765E00A3B049 /* WebViewJavascriptBridge */ = { isa = PBXGroup; children = ( + 6FA69FD52101E00100FCD3B5 /* AdjustBridge_JS.h */, + 6FA69FD62101E00100FCD3B5 /* AdjustBridge_JS.m */, 9648C5E61CD1765E00A3B049 /* WebViewJavascriptBridge.h */, 9648C5E71CD1765E00A3B049 /* WebViewJavascriptBridge.m */, 9648C5E81CD1765E00A3B049 /* WebViewJavascriptBridge_JS.h */, @@ -2040,6 +2045,7 @@ 961515A31CD2CB9D0022D336 /* WebViewJavascriptBridge.m in Sources */, 961515A41CD2CBA20022D336 /* WebViewJavascriptBridge_JS.m in Sources */, 961515A61CD2CBAC0022D336 /* WKWebViewJavascriptBridge.m in Sources */, + 6FA69FD72101E00100FCD3B5 /* AdjustBridge_JS.m in Sources */, 961515A51CD2CBA80022D336 /* WebViewJavascriptBridgeBase.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.h b/AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.h new file mode 100644 index 000000000..d00938489 --- /dev/null +++ b/AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.h @@ -0,0 +1,11 @@ +// +// AdjustBridge_JS.h +// AdjustBridge +// +// Created by Pedro on 20.07.18. +// Copyright © 2018 adjust GmbH. All rights reserved. +// + +#import + +NSString * AdjustBridge_js(void); diff --git a/AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.m b/AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.m new file mode 100644 index 000000000..594007df4 --- /dev/null +++ b/AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.m @@ -0,0 +1,316 @@ +// +// AdjustBridge_JS.m +// AdjustBridge +// +// Created by Pedro on 20.07.18. +// Copyright © 2018 adjust GmbH. All rights reserved. +// + +// This file including the header and format is copied with adaptions from +// WebViewJavascriptBridge_JS.m + +// This file contains the source for the Javascript side of the +// Adjust Webview bridge. It is plaintext, but converted to an NSString +// via some preprocessor tricks. + +// Previous implementations of Adjust Webview bridge loaded the javascript source +// from a resource. This worked fine for app developers, but library developers who +// included the bridge into their library, awkwardly had to ask consumers of their +// library to include the resource, violating their encapsulation. By including the +// Javascript as a string resource, the encapsulation of the library is maintained. + +#import "AdjustBridge_JS.h" + +NSString * AdjustBridge_js() { + #define __adj_wvjb_js_func__(x) #x + // BEGIN preprocessorJSCode + static NSString * preprocessorJSCode = @__adj_wvjb_js_func__( + ;(function() { + + if (window.Adjust) { + return; + } + + // copied from adjust.js + window.Adjust = { + printObject: function(o) { + if (!o) { + return 'not true'; + } + var out = ''; + for (var p in o) { + out += p + ': ' + o[p] + '\n'; + } + return out; + }, + appDidLaunch: function (adjustConfig) { + console.log("WebViewJavascriptBridge: " + this.printObject(WebViewJavascriptBridge)); + console.log("adjustConfig: " + this.printObject(adjustConfig)); + if (WebViewJavascriptBridge) { + if (adjustConfig) { + adjustConfig.iterateConfiguredCallbacks( + function(callbackName, callback) { + WebViewJavascriptBridge.callHandler('adjust_setCallback', callbackName, callback); + } + ); WebViewJavascriptBridge.callHandler('adjust_appDidLaunch', adjustConfig, null); + } + } + }, + trackEvent: function (adjustEvent) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_trackEvent', adjustEvent, null); + } + }, + trackSubsessionStart: function() { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_trackSubsessionStart', null, null); + } + }, + trackSubsessionEnd: function() { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_trackSubsessionEnd', null, null); + } + }, + setEnabled: function (enabled) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_setEnabled', enabled, null); + } + }, + isEnabled: function (callback) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_isEnabled', null, + function(response) { + callback(new Boolean(response)); + } + ); + } + }, + appWillOpenUrl: function (url) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_appWillOpenUrl', url, null); + } + }, + setDeviceToken: function (deviceToken) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_setDeviceToken', deviceToken, null); + } + }, + setOfflineMode: function(isOffline) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_setOfflineMode', isOffline, null); + } + }, + getIdfa: function (callback) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_idfa', null, callback); + } + }, + getAdid: function (callback) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_adid', null, callback); + } + }, + getAttribution: function (callback) { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_attribution', null, callback); + } + }, + sendFirstPackages: function () { + if (WebViewJavascriptBridge) { + WebViewJavascriptBridge.callHandler('adjust_sendFirstPackages', null, null); + } + }, + addSessionCallbackParameter: function (key, value) { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_addSessionCallbackParameter', {key: key, value: value}, null); + } + }, + addSessionPartnerParameter: function (key, value) { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_addSessionPartnerParameter', {key: key, value: value}, null); + } + }, + removeSessionCallbackParameter: function (key) { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_removeSessionCallbackParameter', key, null); + } + }, + removeSessionPartnerParameter: function (key) { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_removeSessionPartnerParameter', key, null); + } + }, + resetSessionCallbackParameters: function () { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_resetSessionCallbackParameters', null, null); + } + }, + resetSessionPartnerParameters: function () { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_resetSessionPartnerParameters', null, null); + } + }, + gdprForgetMe: function () { + if (WebViewJavascriptBridge != null) { + WebViewJavascriptBridge.callHandler('adjust_gdprForgetMe', null, null); + } + } + }; + + // copied from adjust_event.js + + function AdjustEvent(eventToken) { + this.eventToken = eventToken; + + this.revenue = null; + this.currency = null; + this.transactionId = null; + + this.callbackParameters = []; + this.partnerParameters = []; + } + + AdjustEvent.prototype.addCallbackParameter = function(key, value) { + this.callbackParameters.push(key); + this.callbackParameters.push(value); + }; + + AdjustEvent.prototype.addPartnerParameter = function(key, value) { + this.partnerParameters.push(key); + this.partnerParameters.push(value); + }; + + AdjustEvent.prototype.setRevenue = function(revenue, currency) { + this.revenue = revenue; + this.currency = currency; + }; + + AdjustEvent.prototype.setTransactionId = function(transactionId) { + this.transactionId = transactionId; + }; + + // copied from adjust_config.js + function AdjustConfig(appToken, environment, legacy) { + + if (arguments.length === 2) { + // New format does not require bridge as first parameter. + this.appToken = appToken; + this.environment = environment; + } else if (arguments.length === 3) { + // New format with allowSuppressLogLevel. + if (typeof(legacy) == typeof(true)) { + this.appToken = appToken; + this.environment = environment; + this.allowSuppressLogLevel = legacy; + } else { + // Old format with first argument being the bridge instance. + this.bridge = appToken; + this.appToken = environment; + this.environment = legacy; + } + } + + this.sdkPrefix = 'web-bridge4.14.0'; + this.defaultTracker = null; + this.logLevel = null; + this.eventBufferingEnabled = null; + this.sendInBackground = null; + this.delayStart = null; + this.userAgent = null; + this.isDeviceKnown = null; + this.secretId = null; + this.info1 = null; + this.info2 = null; + this.info3 = null; + this.info4 = null; + this.openDeferredDeeplink = null; + this.callbacksMap = {}; + } + + AdjustConfig.EnvironmentSandbox = 'sandbox'; + AdjustConfig.EnvironmentProduction = 'production'; + + AdjustConfig.LogLevelVerbose = 'VERBOSE', + AdjustConfig.LogLevelDebug = 'DEBUG', + AdjustConfig.LogLevelInfo = 'INFO', + AdjustConfig.LogLevelWarn = 'WARN', + AdjustConfig.LogLevelError = 'ERROR', + AdjustConfig.LogLevelAssert = 'ASSERT', + + AdjustConfig.prototype.iterateConfiguredCallbacks = function(handleCallbackWithName) { + if (!this.callbacksMap) { + return; + } + var keysArray = Object.keys(this.callbacksMap); + for (var idx in keysArray) { + var key = keysArray[idx]; + handleCallbackWithName(key, this.callbacksMap[key]); + } + }; + + AdjustConfig.prototype.setSdkPrefix = function(sdkPrefix) { + this.sdkPrefix = sdkPrefix; + }; + AdjustConfig.prototype.setDefaultTracker = function(defaultTracker) { + this.defaultTracker = defaultTracker; + }; + AdjustConfig.prototype.setLogLevel = function(logLevel) { + this.logLevel = logLevel; + }; + AdjustConfig.prototype.setEventBufferingEnabled = function(isEnabled) { + this.eventBufferingEnabled = isEnabled; + }; + AdjustConfig.prototype.setSendInBackground = function(isEnabled) { + this.sendInBackground = isEnabled; + }; + AdjustConfig.prototype.setDelayStart = function(delayStartInSeconds) { + this.delayStart = delayStartInSeconds; + }; + AdjustConfig.prototype.setUserAgent = function(userAgent) { + this.userAgent = userAgent; + }; + AdjustConfig.prototype.setIsDeviceKnown = function(isDeviceKnown) { + this.isDeviceKnown = isDeviceKnown; + }; + AdjustConfig.prototype.setAppSecret = function(secretId, info1, info2, info3, info4) { + this.secretId = secretId; + this.info1 = info1; + this.info2 = info2; + this.info3 = info3; + this.info4 = info4; + }; + + AdjustConfig.prototype.setOpenDeferredDeeplink = function(shouldOpen) { + this.openDeferredDeeplink = shouldOpen; + }; + + AdjustConfig.prototype.setAttributionCallback = function(callback) { + this.callbacksMap['attributionCallback'] = callback; + }; + + AdjustConfig.prototype.setEventSuccessCallback = function(callback) { + this.callbacksMap['eventSuccessCallback'] = callback; + }; + + AdjustConfig.prototype.setEventFailureCallback = function(callback) { + this.callbacksMap['eventFailureCallback'] = callback; + }; + + AdjustConfig.prototype.setSessionSuccessCallback = function(callback) { + this.callbacksMap['sessionSuccessCallback'] = callback; + }; + + AdjustConfig.prototype.setSessionFailureCallback = function(callback) { + this.callbacksMap['sessionFailureCallback'] = callback; + }; + + AdjustConfig.prototype.setDeferredDeeplinkCallback = function(callback) { + this.callbacksMap['deferredDeeplinkCallback'] = callback; + }; + + })(); + ); // END preprocessorJSCode + +#undef __adj_wvjb_js_func__ + return preprocessorJSCode; +}; diff --git a/AdjustBridge/WebViewJavascriptBridge/WebViewJavascriptBridgeBase.m b/AdjustBridge/WebViewJavascriptBridge/WebViewJavascriptBridgeBase.m index 3ec26ed41..b6f4ec141 100755 --- a/AdjustBridge/WebViewJavascriptBridge/WebViewJavascriptBridgeBase.m +++ b/AdjustBridge/WebViewJavascriptBridge/WebViewJavascriptBridgeBase.m @@ -8,6 +8,7 @@ #import #import "WebViewJavascriptBridgeBase.h" #import "WebViewJavascriptBridge_JS.h" +#import "AdjustBridge_JS.h" @implementation WebViewJavascriptBridgeBase { __weak id _webViewDelegate; @@ -113,6 +114,9 @@ - (void)flushMessageQueue:(NSString *)messageQueueString{ - (void)injectJavascriptFile { NSString *js = WebViewJavascriptBridge_js(); [self _evaluateJavascript:js]; + // Added to inject adjust js code + NSString *adjust_js = AdjustBridge_js(); + [self _evaluateJavascript:adjust_js]; if (self.startupMessageQueue) { NSArray* queue = self.startupMessageQueue; self.startupMessageQueue = nil; diff --git a/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html b/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html index e98dd140e..6ffc567a1 100644 --- a/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html +++ b/examples/AdjustExample-WebView/AdjustExample-WebView/AdjustExample-WebView.html @@ -9,10 +9,8 @@

Adjust Web View Demo

- - - - - - -``` - -Once you added references to Javascript files, you can use them in your HTML file to initialise the adjust SDK: - -```js -setupWebViewJavascriptBridge(function(bridge) { - // ... - - var yourAppToken = '{YourAppToken}' - var environment = AdjustConfig.EnvironmentSandbox - var adjustConfig = new AdjustConfig(bridge, yourAppToken, environment) - - Adjust.appDidLaunch(adjustConfig) - - // ... -)} -``` - -![][bridge_init_js_xcode] - -Replace `{YourAppToken}` with your app token. You can find it in your [dashboard]. - -Depending on whether you build your app for testing or for production, you must set `environment` with one of these values: - -```js -var environment = AdjustConfig.EnvironmentSandbox -var environment = AdjustConfig.EnvironmentProduction -``` - -**Important:** This value should be set to `AdjustConfig.EnvironmentSandbox` if and only if you or someone else is testing -your app. Make sure to set the environment to `AdjustConfig.EnvironmentProduction` just before you publish the app. Set it -back to `AdjustConfig.EnvironmentSandbox` when you start developing and testing it again. - -We use this environment to distinguish between real traffic and test traffic from test devices. It is very important that -you keep this value meaningful at all times! This is especially important if you are tracking revenue. - -### AdjustBridge logging - -You can increase or decrease the amount of logs you see in tests by calling `setLogLevel` on your `AdjustConfig` instance -with one of the following parameters: - -```objc -adjustConfig.setLogLevel(AdjustConfig.LogLevelVerbose) // enable all logging -adjustConfig.setLogLevel(AdjustConfig.LogLevelDebug) // enable more logging -adjustConfig.setLogLevel(AdjustConfig.LogLevelInfo) // the default -adjustConfig.setLogLevel(AdjustConfig.LogLevelWarn) // disable info logging -adjustConfig.setLogLevel(AdjustConfig.LogLevelError) // disable warnings as well -adjustConfig.setLogLevel(AdjustConfig.LogLevelAssert) // disable errors as well -``` - ### Build your app Build and run your app. If the build succeeds, you should carefully read the SDK logs in the console. After the app launches for the first time, you should see the info log `Install tracked`. -![][bridge_install_tracked] - ## Additional features Once you integrate the adjust SDK into your project, you can take advantage of the following features. @@ -825,8 +668,6 @@ If your user already has the app installed and hits the tracker URL with deep li Deep linking on iOS 8 and earlier devices is being done with usage of a custom URL scheme setting. You need to pick a custom URL scheme name which your app will be in charge for opening. This scheme name will also be used in the adjust tracker URL as part of the `deep_link` parameter. In order to set this in your app, open your `Info.plist` file and add new `URL types` row to it. In there, as `URL identifier` write you app's bundle ID and under `URL schemes` add scheme name(s) which you want your app to handle. In the example below, we have chosen that our app should handle the `adjustExample` scheme name. -![][custom-url-scheme] - After this has been set up, your app will be opened after you click the adjust tracker URL with `deep_link` parameter which contains the scheme name which you have chosen. After app is opened, `openURL` method of your `AppDelegate` class will be triggered and the place where the content of the `deep_link` parameter from the tracker URL will be delivered. If you want to access the content of the deep link, override this method. ```objc @@ -853,8 +694,6 @@ Once you have successfully enabled the universal links feature in the dashboard, After enabling `Associated Domains` for your app in Apple Developer Portal, you need to do the same thing in your app's Xcode project. After enabling `Assciated Domains`, add the universal link which was generated for you in the adjust dashboard in the `Domains` section by prefixing it with `applinks:` and make sure that you also remove the `http(s)` part of the universal link. -![][associated-domains-applinks] - After this has been set up, your app will be opened after you click the adjust tracker universal link. After app is opened, `continueUserActivity` method of your `AppDelegate` class will be triggered and the place where the content of the universal link URL will be delivered. If you want to access the content of the deep link, override this method. ``` objc @@ -977,13 +816,6 @@ Adjust.appWillOpenUrl(deeplinkUrl); [event-tracking-guide]: https://docs.adjust.com/en/event-tracking/#reference-tracking-purchases-and-revenues [reattribution-deeplinks]: https://docs.adjust.com/en/deeplinking/#manually-appending-attribution-data-to-a-deep-link -[bridge_add]: https://raw.githubusercontent.com/adjust/sdks/master/Resources/ios/bridge/bridge_add.png -[bridge_drag]: https://raw.githubusercontent.com/adjust/sdks/master/Resources/ios/bridge/bridge_drag.png -[bridge_init_js]: https://raw.githubusercontent.com/adjust/sdks/master/Resources/ios/bridge/bridge_init_js.png -[bridge_init_objc]: https://raw.githubusercontent.com/adjust/sdks/master/Resources/ios/bridge/bridge_init_objc.png -[bridge_init_js_xcode]: https://raw.githubusercontent.com/adjust/sdks/master/Resources/ios/bridge/bridge_init_js_xcode.png -[bridge_install_tracked]: https://raw.githubusercontent.com/adjust/sdks/master/Resources/ios/bridge/bridge_install_tracked.png - ## License The adjust SDK is licensed under the MIT License. From 728ed2cab76ddf0b267d44082e7ca18df11f079d Mon Sep 17 00:00:00 2001 From: nonelse Date: Fri, 27 Jul 2018 11:26:58 +0200 Subject: [PATCH 50/67] Remove xcode build scripts --- Adjust.xcodeproj/project.pbxproj | 41 -------------------------------- 1 file changed, 41 deletions(-) diff --git a/Adjust.xcodeproj/project.pbxproj b/Adjust.xcodeproj/project.pbxproj index 604a7ba8b..d32754bf2 100644 --- a/Adjust.xcodeproj/project.pbxproj +++ b/Adjust.xcodeproj/project.pbxproj @@ -1291,7 +1291,6 @@ 96E5E34B18BBB48A008E7B30 /* Adjust */, 9DFA37AE1C0F219400782607 /* AdjustSdk */, 9DE354D32100726300D211C9 /* AdjustSdkIm */, - 9648C5E41CD1765E00A3B049 /* AdjustBridge */, 6FCD0E0D210757F000465ACF /* AdjustSdkWVJB */, 9DFB06111D747070006D48FC /* AdjustSdkTv */, 9648C5E41CD1765E00A3B049 /* AdjustBridge */, @@ -2004,7 +2003,6 @@ 6FCD0DD7210757BE00465ACF /* Frameworks */, 6FCD0DD8210757BE00465ACF /* Headers */, 6FCD0DFB210757BE00465ACF /* Resources */, - 6FCD0DFD210757BE00465ACF /* Copy WVJB Framework */, ); buildRules = ( ); @@ -2130,7 +2128,6 @@ 9DFB060B1D747070006D48FC /* Sources */, 9DFB060C1D747070006D48FC /* Frameworks */, 9DFB060D1D747070006D48FC /* Headers */, - 9DFB060E1D747070006D48FC /* Resources */, ); buildRules = ( ); @@ -2359,30 +2356,6 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 6FCD0DFD210757BE00465ACF /* Copy WVJB Framework */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Copy WVJB Framework"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}SdkWVJB.framework\"\n\n# Copy the framework to the WVJB framework directory\n# ditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/Frameworks/WVJB/${RW_FRAMEWORK_NAME}SdkWVJB.framework\"\n"; - }; - 9DB1EE2C1C635DC0007FCFFC /* Copy Dynamic Framework */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - /* Begin PBXShellScriptBuildPhase section */ 9DE7C9011AE68F68001556E5 /* Build Framework */ = { isa = PBXShellScriptBuildPhase; @@ -2412,20 +2385,6 @@ shellPath = /bin/sh; shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_INPUT_STATIC_LIB=\"lib${PROJECT_NAME}.a\"\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/static/${RW_FRAMEWORK_NAME}Sdk.framework\"\n\nfunction build_static_library {\n echo \"1\"\n echo \"${BUILD_DIR}\"\n # Will rebuild the static library as specified\n # build_static_library sdk\n xcrun xcodebuild -project \"${PROJECT_FILE_PATH}\" \\\n -target \"${TARGET_NAME}\" \\\n -configuration \"${CONFIGURATION}\" \\\n -sdk \"${1}\" \\\n ONLY_ACTIVE_ARCH=NO \\\n BUILD_DIR=\"${BUILD_DIR}\" \\\n OBJROOT=\"${OBJROOT}\" \\\n BUILD_ROOT=\"${BUILD_ROOT}\" \\\n SYMROOT=\"${SYMROOT}\" $ACTION\n}\n\nfunction make_fat_library {\n # Will smash 2 static libs together\n # make_fat_library in1 in2 out\n xcrun lipo -create \"${1}\" \"${2}\" -output \"${3}\"\n}\n\n# 1 - Extract the platform (iphoneos/iphonesimulator) from the SDK name\nif [[ \"$SDK_NAME\" =~ ([A-Za-z]+) ]]; then\nRW_SDK_PLATFORM=${BASH_REMATCH[1]}\nelse\necho \"Could not find platform name from SDK_NAME: $SDK_NAME\"\nexit 1\nfi\n\n# 2 - Extract the version from the SDK\nif [[ \"$SDK_NAME\" =~ ([0-9]+.*$) ]]; then\nRW_SDK_VERSION=${BASH_REMATCH[1]}\nelse\necho \"Could not find sdk version from SDK_NAME: $SDK_NAME\"\nexit 1\nfi\n\n# 3 - Determine the other platform\nif [ \"$RW_SDK_PLATFORM\" == \"iphoneos\" ]; then\nRW_OTHER_PLATFORM=iphonesimulator\nelse\nRW_OTHER_PLATFORM=iphoneos\nfi\n\n# 4 - Find the build directory\nif [[ \"$BUILT_PRODUCTS_DIR\" =~ (.*)$RW_SDK_PLATFORM$ ]]; then\nRW_OTHER_BUILT_PRODUCTS_DIR=\"${BASH_REMATCH[1]}${RW_OTHER_PLATFORM}\"\nelse\necho \"Could not find other platform build directory.\"\nexit 1\nfi\n\n# Build the other platform.\nbuild_static_library \"${RW_OTHER_PLATFORM}${RW_SDK_VERSION}\"\n\n# If we're currently building for iphonesimulator, then need to rebuild\n# to ensure that we get both i386 and x86_64\nif [ \"$RW_SDK_PLATFORM\" == \"iphonesimulator\" ]; then\nbuild_static_library \"${SDK_NAME}\"\nfi\n\n# Join the 2 static libs into 1 and push into the .framework\nmake_fat_library \"${BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}\" \\\n\"${RW_OTHER_BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}\" \\\n\"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}Sdk\"\n\n# Ensure that the framework is present in both platform's build directories\ncp -a \"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}Sdk\" \\\n\"${RW_OTHER_BUILT_PRODUCTS_DIR}/static/${RW_FRAMEWORK_NAME}Sdk.framework/Versions/A/${RW_FRAMEWORK_NAME}Sdk\"\n\n# Copy the framework to the project directory\nditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/Frameworks/static/${RW_FRAMEWORK_NAME}Sdk.framework\""; }; - 9DFB06991D747BBE006D48FC /* Copy tvOS Framework */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Copy tvOS Framework"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "set -e\n\n# If we're already inside this script then die\nif [ -n \"$RW_MULTIPLATFORM_BUILD_IN_PROGRESS\" ]; then\nexit 0\nfi\nexport RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1\n\nRW_FRAMEWORK_NAME=${PROJECT_NAME}\nRW_FRAMEWORK_LOCATION=\"${BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}SdkTv.framework\"\n\n# Copy the framework to the tvOS framework directory\n# ditto \"${RW_FRAMEWORK_LOCATION}\" \"${SRCROOT}/Frameworks/tvOS/${RW_FRAMEWORK_NAME}SdkTv.framework\"\n"; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ From a940bf4aee944c44a4a1f4eb5fec08024f6f1f30 Mon Sep 17 00:00:00 2001 From: nonelse Date: Fri, 27 Jul 2018 14:53:50 +0200 Subject: [PATCH 51/67] Update build scripts for dynamic libraries --- scripts/build.sh | 84 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 71 insertions(+), 13 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index cb7dd8fb0..9bfaa8369 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -20,19 +20,19 @@ cd ${ROOT_DIR} # ======================================== # echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Removing framework targets folders ... ${NC}" -rm -rf ${ROOT_DIR}/frameworks/static -rm -rf ${ROOT_DIR}/frameworks/dynamic -rm -rf ${ROOT_DIR}/frameworks/tvos -rm -rf ${ROOT_DIR}/frameworks/imessage +rm -rf frameworks +rm -rf Carthage +rm -rf build echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Creating framework targets folders ... ${NC}" -mkdir -p ${ROOT_DIR}/frameworks/static -mkdir -p ${ROOT_DIR}/frameworks/dynamic -mkdir -p ${ROOT_DIR}/frameworks/tvos -mkdir -p ${ROOT_DIR}/frameworks/imessage +mkdir -p frameworks/static +mkdir -p frameworks/dynamic/ios +mkdir -p frameworks/dynamic/tvos +mkdir -p frameworks/dynamic/imessage +mkdir -p frameworks/dynamic/wvjb echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # @@ -46,24 +46,82 @@ echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding universal tvOS SDK framework (device + simulator) and copying it to destination folder ... ${NC}" xcodebuild -configuration Release -target AdjustSdkTv -arch x86_64 -sdk appletvsimulator clean build xcodebuild -configuration Release -target AdjustSdkTv -arch arm64 -sdk appletvos clean build -cp -Rv build/Release-appletvos/AdjustSdkTv.framework frameworks/tvos -lipo -create -output frameworks/tvos/AdjustSdkTv.framework/AdjustSdkTv build/Release-appletvos/AdjustSdkTv.framework/AdjustSdkTv build/Release-appletvsimulator/AdjustSdkTv.framework/AdjustSdkTv +cp -Rv build/Release-appletvos/AdjustSdkTv.framework frameworks/static +lipo -create -output frameworks/static/AdjustSdkTv.framework/AdjustSdkTv build/Release-appletvos/AdjustSdkTv.framework/AdjustSdkTv build/Release-appletvsimulator/AdjustSdkTv.framework/AdjustSdkTv echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # -echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding shared dynamic targets with Carthage ... ${NC}" +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Moving Shared schemas to generate dynamic iOS and tvOS SDK framework using Carthage ${NC}" + +mv Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkIm.xcscheme \ + Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkWVJB.xcscheme . + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding dynamic iOs and tvOS targets with Carthage ... ${NC}" +carthage build --no-skip-current +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Move Carthage generated dynamic iOS SDK framework to destination folder ... ${NC}" +mv Carthage/Build/iOS/* frameworks/dynamic/ios +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Move Carthage generated dynamic tvOs SDK framework to destination folder ... ${NC}" +mv Carthage/Build/tvOS/* frameworks/dynamic/tvos/ +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Moving Shared schemas to generate dynamic iMessage SDK framework using Carthage ${NC}" + +mv Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdk.xcscheme \ + Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkTv.xcscheme . +mv AdjustSdkIm.xcscheme Adjust.xcodeproj/xcshareddata/xcschemes + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding dynamic iMessage target with Carthage ... ${NC}" carthage build --no-skip-current echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # -echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Copying Carthage generated dynamic SDK framework to destination folder ... ${NC}" -cp -Rv Carthage/Build/iOS/* frameworks/dynamic/ +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Move Carthage generated dynamic iMessage SDK framework to destination folder ... ${NC}" +mv Carthage/Build/iOS/* frameworks/dynamic/imessage/ echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Moving Shared schemas to generate dynamic WVJB SDK framework using Carthage ${NC}" + +mv Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkIm.xcscheme . +mv AdjustSdkWVJB.xcscheme Adjust.xcodeproj/xcshareddata/xcschemes + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding dynamic WVJB target with Carthage ... ${NC}" +carthage build --no-skip-current +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Move Carthage generated dynamic WVJB SDK framework to destination folder ... ${NC}" +mv Carthage/Build/iOS/* frameworks/dynamic/wvjb/ +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" + +# ======================================== # + +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Moving Shared schemas back ${NC}" + +mv *.xcscheme Adjust.xcodeproj/xcshareddata/xcschemes + +# ======================================== # + echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding static test library framework and copying it to destination folder ... ${NC}" cd ${ROOT_DIR}/AdjustTests/AdjustTestLibrary xcodebuild -target AdjustTestLibraryStatic -configuration Debug clean build From 29f699d172b802f6a53b7b84f9c9fa2e09e58384 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uglje=C5=A1a=20Erceg?= Date: Fri, 27 Jul 2018 15:33:22 +0200 Subject: [PATCH 52/67] Update web_views.md --- doc/english/web_views.md | 230 +++++++++++++++++---------------------- 1 file changed, 101 insertions(+), 129 deletions(-) diff --git a/doc/english/web_views.md b/doc/english/web_views.md index 5b3919898..11001ce65 100644 --- a/doc/english/web_views.md +++ b/doc/english/web_views.md @@ -1,14 +1,12 @@ ## Summary -This is the guide to the iOS SDK of adjust.com™ for iOS apps which are using web views. You can read more about adjust.com™ -at [adjust.com]. +This is the guide to the iOS SDK of Adjust™ for iOS apps which are using web views. You can read more about Adjust™ at [adjust.com]. -It provides a bridge from Javascript to native Objective-C calls (and vice versa) by using the -[WebViewJavascriptBridge][web_view_js_bridge] plugin. This plugin is also licensed under `MIT License`. +It provides a bridge from Javascript to native Objective-C calls (and vice versa) by using the [WebViewJavascriptBridge][web_view_js_bridge] plugin. This plugin is also licensed under `MIT License`. ## Table of contents -* [Example apps](#example-apps) +* [Example app](#example-app) * [Basic integration](#basic-integration) * [Add the SDK with the web bridge to your project](#sdk-add) * [Add iOS frameworks](#sdk-frameworks) @@ -48,16 +46,15 @@ It provides a bridge from Javascript to native Objective-C calls (and vice versa * [Deep linking on iOS 9 and later](#deeplinking-setup-new) * [Deferred deep linking scenario](#deeplinking-deferred) * [Reattribution via deep links](#deeplinking-reattribution) - * [License](#license) -## Example apps +## Example app -There are example apps inside the [`examples` directory][examples] for [`iOS (Objective-C)`][example-ios-objc], [`iOS (Swift)`][example-ios-swift], [`tvOS`][example-tvos] and [`Apple Watch`][example-iwatch]. You can open any of these Xcode projects to see an example of how the adjust SDK can be integrated. +In the repository, you can find an example [`iOS app with web view`][example-webview]. You can use this project to see how the Adjust SDK can be integrated. -## Basic integration +## Basic integration -We will describe the steps to integrate the adjust SDK into your iOS project. We are going to assume that you are using Xcode for your iOS development. +We will describe the steps to integrate the Adjust SDK into your iOS project. We are going to assume that you are using Xcode for your iOS development. ### Add the SDK with the web bridge to your project @@ -69,8 +66,7 @@ pod 'Adjust/WebViewJavascriptBridge', '~> 4.14.1' --- -If you're using [Carthage][carthage], you can add following line to your `Cartfile` and continue from -[this step](#sdk-frameworks): +If you're using [Carthage][carthage], you can add following line to your `Cartfile` and continue from [this step](#sdk-frameworks): ```ruby github "adjust/ios_sdk" "WebViewJavascriptBridge" @@ -78,12 +74,12 @@ github "adjust/ios_sdk" "WebViewJavascriptBridge" --- -You can also choose to integrate the adjust SDK by adding it to your project as a framework. On the [releases page][releases] you can find the following archives: +You can also choose to integrate the Adjust SDK by adding it to your project as a framework. On the [releases page][releases] you can find the following archives: -* `AdjustSdkStaticWVJB.framework.zip` -* `AdjustSdkDynamicWVJB.framework.zip` +* `AdjustSdkStaticWebBridge.framework.zip` +* `AdjustSdkDynamicWebBridge.framework.zip` -Since the release of iOS 8, Apple has introduced dynamic frameworks (also known as embedded frameworks). If your app is targeting iOS 8 or higher, you can use the adjust SDK dynamic framework. Choose which framework you want to use – static or dynamic – and add it to your project. +Since the release of iOS 8, Apple has introduced dynamic frameworks (also known as embedded frameworks). If your app is targeting iOS 8 or higher, you can use the Adjust SDK dynamic framework. Choose which framework you want to use – static or dynamic – and add it to your project. ### Add iOS frameworks @@ -97,7 +93,7 @@ Since the release of iOS 8, Apple has introduced dynamic frameworks (also known ### Integrate the SDK into your app -If you added the adjust SDK via a Pod repository, you should use one of the following import statements in the app delegate: +If you added the Adjust SDK via a Pod repository, you should use one of the following import statements in the app delegate: ```objc #import "Adjust.h" @@ -111,15 +107,15 @@ or --- -If you added the adjust SDK as a static/dynamic framework or via Carthage, you should use the following import statement in the app delegate: +If you added the Adjust SDK as a static/dynamic framework or via Carthage, you should use the following import statement in the app delegate: ```objc -#import +#import ``` Next, we'll set up basic session tracking. -### Integrate AdjustBridge into your app +### Integrate AdjustBridge into your app In the Project Navigator open the source file your View Controller. Add the `import` statement at the top of the file. In the `viewDidLoad` or `viewWillAppear` method of your Web View Delegate add the following calls to `AdjustBridge`: @@ -149,11 +145,9 @@ the `viewDidLoad` or `viewWillAppear` method of your Web View Delegate add the f // ... ``` -### Integrate AdjustBrige into your web view +### Integrate AdjustBrige into your web view -To use the Javascript bridge on your web view, it must be configured like the `WebViewJavascriptBridge` plugin -[README][wvjsb_readme] is advising in section `4`. Include the following Javascript code to intialize the adjust iOS web -bridge: +To use the Javascript bridge on your web view, it must be configured like the `WebViewJavascriptBridge` plugin [README][wvjsb_readme] is advising in section `4`. Include the following Javascript code to intialize the Adjust iOS web bridge: ```js function setupWebViewJavascriptBridge(callback) { @@ -178,9 +172,9 @@ function setupWebViewJavascriptBridge(callback) { Take notice that the line `WVJBIframe.src = 'https://__bridge_loaded__';` was changed in version 4.11.6 from `WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';` due to a change in the `WebViewJavascriptBridge` plugin. -### Basic setup +### Basic setup -In the same HTML file, initialise the adjust SDK inside the `setupWebViewJavascriptBridge` callback: +In the same HTML file, initialise the Adjust SDK inside the `setupWebViewJavascriptBridge` callback: ```js setupWebViewJavascriptBridge(function(bridge) { @@ -196,7 +190,7 @@ setupWebViewJavascriptBridge(function(bridge) { }); ``` -**Note**: Initialising the adjust SDK like this is `very important`. Otherwise, you may encounter different kinds of issues as described in our [troubleshooting section](#ts-delayed-init). +**Note**: Initialising the Adjust SDK like this is `very important`. Otherwise, you may encounter different kinds of issues as described in our [troubleshooting section](#ts-delayed-init). Replace `yourAppToken` with your app token. You can find this in your [dashboard]. @@ -216,15 +210,16 @@ We use this environment to distinguish between real traffic and test traffic fro You can increase or decrease the amount of logs that you see during testing by calling `setLogLevel:` on your `ADJConfig` instance with one of the following parameters: ```js -adjustConfig.setLogLevel(AdjustConfig.LogLevelVerbose) // enable all logging -adjustConfig.setLogLevel(AdjustConfig.LogLevelDebug) // enable more logging -adjustConfig.setLogLevel(AdjustConfig.LogLevelInfo) // the default -adjustConfig.setLogLevel(AdjustConfig.LogLevelWarn) // disable info logging -adjustConfig.setLogLevel(AdjustConfig.LogLevelError) // disable warnings as well -adjustConfig.setLogLevel(AdjustConfig.LogLevelAssert) // disable errors as well +adjustConfig.setLogLevel(AdjustConfig.LogLevelVerbose) // enable all logging +adjustConfig.setLogLevel(AdjustConfig.LogLevelDebug) // enable more logging +adjustConfig.setLogLevel(AdjustConfig.LogLevelInfo) // the default +adjustConfig.setLogLevel(AdjustConfig.LogLevelWarn) // disable info logging +adjustConfig.setLogLevel(AdjustConfig.LogLevelError) // disable warnings as well +adjustConfig.setLogLevel(AdjustConfig.LogLevelAssert) // disable errors as well +adjustConfig.setLogLevel(AdjustConfig.LogLevelSuppress) // disable all logging ``` -If you don't want your app in production to display any logs coming from the adjust SDK, then you should select `AdjustConfig.LogLevelSuppress` and in addition to that, initialise `AdjustConfig` object with another constructor where you should enable suppress log level mode with `true` in the third parameter: +If you don't want your app in production to display any logs coming from the Adjust SDK, then you should select `AdjustConfig.LogLevelSuppress` and in addition to that, initialise `AdjustConfig` object with another constructor where you should enable suppress log level mode with `true` in the third parameter: ```js setupWebViewJavascriptBridge(function(bridge) { @@ -240,20 +235,18 @@ setupWebViewJavascriptBridge(function(bridge) { }); ``` -### Build your app +### Build your app Build and run your app. If the build succeeds, you should carefully read the SDK logs in the console. After the app launches for the first time, you should see the info log `Install tracked`. -## Additional features +## Additional features -Once you integrate the adjust SDK into your project, you can take advantage of the following features. +Once you integrate the Adjust SDK into your project, you can take advantage of the following features. -### Event tracking +### Event tracking -You can use adjust to track events. Let's say you want to track every tap on a particular button. You would create a new -event token in your [dashboard], which has an associated event token - looking something like `abc123`. In your button's -`onclick` method you would then add the following lines to track the tap: +You can use Adjust to track events. Let's say you want to track every tap on a particular button. You would create a new event token in your [dashboard], which has an associated event token - looking something like `abc123`. In your button's `onclick` method you would then add the following lines to track the tap: ```js var adjustEvent = new AdjustEvent('abc123'); @@ -264,22 +257,19 @@ When tapping the button you should now see `Event tracked` in the logs. The event instance can be used to configure the event even more before tracking it. -#### Revenue tracking +### Revenue tracking -If your users can generate revenue by tapping on advertisements or making in-app purchases you can track those revenues with -events. Lets say a tap is worth one Euro cent. You could then track the revenue event like this: +If your users can generate revenue by tapping on advertisements or making in-app purchases you can track those revenues with events. Lets say a tap is worth one Euro cent. You could then track the revenue event like this: ```js var adjustEvent = new AdjustEvent(eventToken); adjustEvent.setRevenue(0.01, 'EUR'); - Adjust.trackEvent(adjustEvent); ``` This can be combined with callback parameters of course. -When you set a currency token, adjust will automatically convert the incoming revenues into a reporting revenue of your -choice. Read more about [currency conversion here.][currency-conversion] +When you set a currency token, Adjust will automatically convert the incoming revenues into a reporting revenue of your choice. Read more about [currency conversion here.][currency-conversion] You can read more about revenue and event tracking in the [event tracking guide][event-tracking-guide]. @@ -287,20 +277,17 @@ You can read more about revenue and event tracking in the [event tracking guide] You can also pass in an optional transaction ID to avoid tracking duplicate revenues. The last ten transaction IDs are remembered and revenue events with duplicate transaction IDs are skipped. This is especially useful for in-app purchase tracking. -If you have access to the transaction indentifier from the webview, you can pass it to the `setTransactionId` method on the adjust event object. That way you can avoid tracking revenue that is not actually being generated. +If you have access to the transaction indentifier from the web view, you can pass it to the `setTransactionId` method on the Adjust event object. That way you can avoid tracking revenue that is not actually being generated. -```objc +```js var adjustEvent = new AdjustEvent(eventToken); adjustEvent.setTransactionId(transactionIdentifier); - Adjust.trackEvent(adjustEvent); ``` -#### Callback parameters +### Callback parameters -You can register a callback URL for your events in your [dashboard]. We will send a GET request to that URL whenever the -event gets tracked. You can add callback parameters to that event by calling `addCallbackParameter` on the event before -tracking it. We will then append these parameters to your callback URL. +You can register a callback URL for your events in your [dashboard]. We will send a GET request to that URL whenever the event gets tracked. You can add callback parameters to that event by calling `addCallbackParameter` on the event before tracking it. We will then append these parameters to your callback URL. For example, suppose you have registered the URL `http://www.adjust.com/callback` then track an event like this: @@ -308,7 +295,6 @@ For example, suppose you have registered the URL `http://www.adjust.com/callback var adjustEvent = new AdjustEvent(eventToken); adjustEvent.addCallbackParameter('key', 'value'); adjustEvent.addCallbackParameter('foo', 'bar'); - Adjust.trackEvent(adjustEvent); ``` @@ -316,27 +302,20 @@ In that case we would track the event and send a request to: http://www.adjust.com/callback?key=value&foo=bar -It should be mentioned that we support a variety of placeholders like `{idfa}` that can be used as parameter values. In the -resulting callback this placeholder would be replaced with the ID for Advertisers of the current device. Also note that we -don't store any of your custom parameters, but only append them to your callbacks. If you haven't registered a callback for -an event, these parameters won't even be read. +It should be mentioned that we support a variety of placeholders like `{idfa}` that can be used as parameter values. In the resulting callback this placeholder would be replaced with the ID for Advertisers of the current device. Also note that we don't store any of your custom parameters, but only append them to your callbacks. If you haven't registered a callback for an event, these parameters won't even be read. -You can read more about using URL callbacks, including a full list of available values, in our -[callbacks guide][callbacks-guide]. +You can read more about using URL callbacks, including a full list of available values, in our [callbacks guide][callbacks-guide]. -#### Partner parameters +### Partner parameters -You can also add parameters to be transmitted to network partners, for the integrations that have been activated in your -adjust dashboard. +You can also add parameters to be transmitted to network partners, for the integrations that have been activated in your Adjust dashboard. -This works similarly to the callback parameters mentioned above, but can be added by calling the `addPartnerParameter` -method on your `AdjustEvent` instance. +This works similarly to the callback parameters mentioned above, but can be added by calling the `addPartnerParameter` method on your `AdjustEvent` instance. ```js var adjustEvent = new AdjustEvent('abc123'); adjustEvent.addPartnerParameter('key', 'value'); adjustEvent.addPartnerParameter('foo', 'bar'); - Adjust.trackEvent(adjustEvent); ``` @@ -344,13 +323,13 @@ You can read more about special partners and these integrations in our [guide to ### Session parameters -Some parameters are saved to be sent in every event and session of the adjust SDK. Once you have added any of these parameters, you don't need to add them every time, since they will be saved locally. If you add the same parameter twice, there will be no effect. +Some parameters are saved to be sent in every event and session of the Adjust SDK. Once you have added any of these parameters, you don't need to add them every time, since they will be saved locally. If you add the same parameter twice, there will be no effect. -If you want to send session parameters with the initial install event, they must be called before the Adjust SDK launches via `Adjust.appDidLaunch()`. If you need to send them with an install, but can only obtain the needed values after launch, it's possible to [delay](#delay-start) the first launch of the adjust SDK to allow this behavior. +If you want to send session parameters with the initial install event, they must be called before the Adjust SDK launches via `Adjust.appDidLaunch()`. If you need to send them with an install, but can only obtain the needed values after launch, it's possible to [delay](#delay-start) the first launch of the Adjust SDK to allow this behavior. ### Session callback parameters -The same callback parameters that are registered for [events](#callback-parameters) can be also saved to be sent in every event or session of the adjust SDK. +The same callback parameters that are registered for [events](#callback-parameters) can be also saved to be sent in every event or session of the Adjust SDK. The session callback parameters have a similar interface of the event callback parameters. Instead of adding the key and it's value to an event, it's added through a call to `Adjust` method `addSessionCallbackParameter(key,value)`: @@ -374,9 +353,9 @@ Adjust.resetSessionCallbackParameters(); ### Session partner parameters -In the same way that there is [session callback parameters](#session-callback-parameters) that are sent every in event or session of the adjust SDK, there is also session partner parameters. +In the same way that there is [session callback parameters](#session-callback-parameters) that are sent every in event or session of the Adjust SDK, there is also session partner parameters. -These will be transmitted to network partners, for the integrations that have been activated in your adjust [dashboard]. +These will be transmitted to network partners, for the integrations that have been activated in your Adjust [dashboard]. The session partner parameters have a similar interface to the event partner parameters. Instead of adding the key and it's value to an event, it's added through a call to `Adjust` method `addSessionPartnerParameter:value:`: @@ -400,7 +379,7 @@ Adjust.resetSessionPartnerParameters(); ### Delay start -Delaying the start of the adjust SDK allows your app some time to obtain session parameters, such as unique identifiers, to be send on install. +Delaying the start of the Adjust SDK allows your app some time to obtain session parameters, such as unique identifiers, to be send on install. Set the initial delay time in seconds with the method `setDelayStart` in the `AdjustConfig` instance: @@ -408,19 +387,17 @@ Set the initial delay time in seconds with the method `setDelayStart` in the `Ad adjustConfig.setDelayStart(5.5); ``` -In this case this will make the adjust SDK not send the initial install session and any event created for 5.5 seconds. After this time is expired or if you call `Adjust.sendFirstPackages()` in the meanwhile, every session parameter will be added to the delayed install session and events and the adjust SDK will resume as usual. +In this case this will make the Adjust SDK not send the initial install session and any event created for 5.5 seconds. After this time is expired or if you call `Adjust.sendFirstPackages()` in the meanwhile, every session parameter will be added to the delayed install session and events and the Adjust SDK will resume as usual. -**The maximum delay start time of the adjust SDK is 10 seconds**. +**The maximum delay start time of the Adjust SDK is 10 seconds**. -### Attribution callback +### Attribution callback -You can register a callback method to be notified of attribution changes. Due to the different sources considered -for attribution, this information cannot by provided synchronously. +You can register a callback method to be notified of attribution changes. Due to the different sources considered for attribution, this information cannot by provided synchronously. Please make sure to consider our [applicable attribution data policies][attribution-data]. -As the callback method is configured using the `AdjustConfig` instance, you should call `setAttributionCallback` before -calling `Adjust.appDidLaunch(adjustConfig)`. +As the callback method is configured using the `AdjustConfig` instance, you should call `setAttributionCallback` before calling `Adjust.appDidLaunch(adjustConfig)`. ```js adjustConfig.setAttributionCallback(function(attribution) { @@ -436,8 +413,7 @@ adjustConfig.setAttributionCallback(function(attribution) { }); ``` -The callback method will get triggered when the SDK receives final attribution data. Within the callback you have access to -the `attribution` parameter. Here is a quick summary of its properties: +The callback method will get triggered when the SDK receives final attribution data. Within the callback you have access to the `attribution` parameter. Here is a quick summary of its properties: - `var trackerToken` the tracker token of the current install. - `var trackerName` the tracker name of the current install. @@ -450,11 +426,9 @@ the `attribution` parameter. Here is a quick summary of its properties: If any value is unavailable, it will not be part of the of the attribution object. -### Event and session callbacks +### Event and session callbacks -You can register a callback to be notified when events or sessions are tracked. There are four callbacks: one for tracking -successful events, one for tracking failed events, one for tracking successful sessions and one for tracking failed -sessions. +You can register a callback to be notified when events or sessions are tracked. There are four callbacks: one for tracking successful events, one for tracking failed events, one for tracking successful sessions and one for tracking failed sessions. Follow these steps and implement the following callback methods to track successful events: @@ -488,13 +462,11 @@ adjustConfig.setSessionFailureCallback(function(sessionFailure) { }); ``` -The callback methods will be called after the SDK tries to send a package to the server. Within the callback methods you -have access to a response data object specifically for that callback. Here is a quick summary of the session response data -properties: +The callback methods will be called after the SDK tries to send a package to the server. Within the callback methods you have access to a response data object specifically for that callback. Here is a quick summary of the session response data properties: - `var message` the message from the server or the error logged by the SDK. - `var timeStamp` timestamp from the server. -- `var adid` a unique device identifier provided by adjust. +- `var adid` a unique device identifier provided by Adjust. - `var jsonResponse` the JSON object with the response from the server. Both event response data objects contain: @@ -505,17 +477,15 @@ And both event and session failed objects also contain: - `var willRetry` indicates there will be an attempt to resend the package at a later time. -### Disable tracking +### Disable tracking -You can disable the adjust SDK from tracking any activities of the current device by calling `setEnabled` with parameter -`false`. **This setting is remembered between sessions**, but it can only be activated after the first session. +You can disable the Adjust SDK from tracking any activities of the current device by calling `setEnabled` with parameter `false`. **This setting is remembered between sessions**, but it can only be activated after the first session. ```js Adjust.setEnabled(false); ``` -You can check if the adjust SDK is currently enabled by calling the function `isEnabled`. It is always -possible to activate the adjust SDK by invoking `setEnabled` with the enabled parameter as `true`. +You can check if the Adjust SDK is currently enabled by calling the function `isEnabled`. It is always possible to activate the Adjust SDK by invoking `setEnabled` with the enabled parameter as `true`. ```js Adjust.isEnabled(function(isEnabled) { @@ -527,11 +497,9 @@ Adjust.isEnabled(function(isEnabled) { }); ``` -### Offline mode +### Offline mode -You can put the adjust SDK in offline mode to suspend transmission to our servers while retaining tracked data to be sent -later. While in offline mode, all information is saved in a file, so be careful not to trigger too many events while in -offline mode. +You can put the Adjust SDK in offline mode to suspend transmission to our servers while retaining tracked data to be sent later. While in offline mode, all information is saved in a file, so be careful not to trigger too many events while in offline mode. You can activate offline mode by calling `setOfflineMode` with the parameter `true`. @@ -539,16 +507,13 @@ You can activate offline mode by calling `setOfflineMode` with the parameter `tr Adjust.setOfflineMode(true); ``` -Conversely, you can deactivate offline mode by calling `setOfflineMode` with `false`. When the adjust SDK is put back in -online mode, all saved information is send to our servers with the correct time information. +Conversely, you can deactivate offline mode by calling `setOfflineMode` with `false`. When the Adjust SDK is put back in online mode, all saved information is send to our servers with the correct time information. -Unlike disabling tracking, this setting is **not remembered bettween sessions**. This means that the SDK is in online mode -whenever it is started, even if the app was terminated in offline mode. +Unlike disabling tracking, this setting is **not remembered bettween sessions**. This means that the SDK is in online mode whenever it is started, even if the app was terminated in offline mode. -### Event buffering +### Event buffering -If your app makes heavy use of event tracking, you might want to delay some network requests in order to send them in one batch -every minute. You can enable event buffering with your `AdjustConfig` instance: +If your app makes heavy use of event tracking, you might want to delay some network requests in order to send them in one batch every minute. You can enable event buffering with your `AdjustConfig` instance: ```js adjustConfig.setEventBufferingEnabled(true); @@ -576,10 +541,9 @@ An App Secret is set by calling `setAppSecret` on your `AdjustConfig` instance: adjustConfig.setAppSecret(secretId, info1, info2, info3, info4); ``` -### Background tracking +### Background tracking -The default behaviour of the adjust SDK is to pause sending network requests while the app is in the background. You can change -this behaviour in your `AdjustConfig` instance: +The default behaviour of the Adjust SDK is to pause sending network requests while the app is in the background. You can change this behaviour in your `AdjustConfig` instance: ```js adjustConfig.setSendInBackground(true); @@ -589,7 +553,7 @@ If nothing is set, sending in background is **disabled by default**. ### Device IDs -The adjust SDK offers you possibility to obtain some of the device identifiers. +The Adjust SDK offers you possibility to obtain some of the device identifiers. ### iOS Advertising Identifier @@ -605,13 +569,13 @@ Adjust.getIdfa(function(idfa) { ### Adjust device identifier -For each device with your app installed, adjust backend generates unique **adjust device identifier** (**adid**). In order to obtain this identifier, you can make a call to the following method on the `Adjust` instance: +For each device with your app installed, Adjust backend generates unique **adjust device identifier** (**adid**). In order to obtain this identifier, you can make a call to the following method on the `Adjust` instance: ```js var adid = Adjust.getAdid(); ``` -**Note**: Information about the **adid** is available after the app's installation has been tracked by the adjust backend. From that moment on, the adjust SDK has information about the device **adid** and you can access it with this method. So, **it is not possible** to access the **adid** before the SDK has been initialised and the installation of your app has been tracked successfully. +**Note**: Information about the **adid** is available after the app's installation has been tracked by the Adjust backend. From that moment on, the Adjust SDK has information about the device **adid** and you can access it with this method. So, **it is not possible** to access the **adid** before the SDK has been initialised and the installation of your app has been tracked successfully. ### User attribution @@ -621,7 +585,7 @@ The attribution callback will be triggered as described in the [attribution call var attribution = Adjust.getAttribution(); ``` -**Note**: Information about current attribution is available after app installation has been tracked by the adjust backend and attribution callback has been initially triggered. From that moment on, adjust SDK has information about your user's attribution and you can access it with this method. So, **it is not possible** to access user's attribution value before the SDK has been initialised and attribution callback has been initially triggered. +**Note**: Information about current attribution is available after app installation has been tracked by the Adjust backend and attribution callback has been initially triggered. From that moment on, Adjust SDK has information about your user's attribution and you can access it with this method. So, **it is not possible** to access user's attribution value before the SDK has been initialised and attribution callback has been initially triggered. ### Push token @@ -635,7 +599,7 @@ To send us the push notification token, add the following call to `Adjust` in th } ``` -Or, if you have access to the push token from the webview, you can instead call the `setDeviceToken` method in the `Adjust` object in Javascript: +Or, if you have access to the push token from the web view, you can instead call the `setDeviceToken` method in the `Adjust` object in Javascript: ```js Adjust.setDeviceToken(deviceToken); @@ -658,7 +622,7 @@ If you want to use the Adjust SDK to recognize users that found your app pre-ins ### Deep linking -If you are using the adjust tracker URL with an option to deep link into your app from the URL, there is the possibility to get info about the deep link URL and its content. Hitting the URL can happen when the user has your app already installed (standard deep linking scenario) or if they don't have the app on their device (deferred deep linking scenario). Both of these scenarios are supported by the adjust SDK and in both cases the deep link URL will be provided to you after you app has been started after hitting the tracker URL. In order to use this feature in your app, you need to set it up properly. +If you are using the Adjust tracker URL with an option to deep link into your app from the URL, there is the possibility to get info about the deep link URL and its content. Hitting the URL can happen when the user has your app already installed (standard deep linking scenario) or if they don't have the app on their device (deferred deep linking scenario). Both of these scenarios are supported by the Adjust SDK and in both cases the deep link URL will be provided to you after you app has been started after hitting the tracker URL. In order to use this feature in your app, you need to set it up properly. ### Standard deep linking scenario @@ -666,9 +630,11 @@ If your user already has the app installed and hits the tracker URL with deep li ### Deep linking on iOS 8 and earlier -Deep linking on iOS 8 and earlier devices is being done with usage of a custom URL scheme setting. You need to pick a custom URL scheme name which your app will be in charge for opening. This scheme name will also be used in the adjust tracker URL as part of the `deep_link` parameter. In order to set this in your app, open your `Info.plist` file and add new `URL types` row to it. In there, as `URL identifier` write you app's bundle ID and under `URL schemes` add scheme name(s) which you want your app to handle. In the example below, we have chosen that our app should handle the `adjustExample` scheme name. +Deep linking on iOS 8 and earlier devices is being done with usage of a custom URL scheme setting. You need to pick a custom URL scheme name which your app will be in charge for opening. This scheme name will also be used in the Adjust tracker URL as part of the `deep_link` parameter. In order to set this in your app, open your `Info.plist` file and add new `URL types` row to it. In there, as `URL identifier` write you app's bundle ID and under `URL schemes` add scheme name(s) which you want your app to handle. In the example below, we have chosen that our app should handle the `adjustExample` scheme name. + +![][custom-url-scheme] -After this has been set up, your app will be opened after you click the adjust tracker URL with `deep_link` parameter which contains the scheme name which you have chosen. After app is opened, `openURL` method of your `AppDelegate` class will be triggered and the place where the content of the `deep_link` parameter from the tracker URL will be delivered. If you want to access the content of the deep link, override this method. +After this has been set up, your app will be opened after you click the Adjust tracker URL with `deep_link` parameter which contains the scheme name which you have chosen. After app is opened, `openURL` method of your `AppDelegate` class will be triggered and the place where the content of the `deep_link` parameter from the tracker URL will be delivered. If you want to access the content of the deep link, override this method. ```objc - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url @@ -688,13 +654,15 @@ With this setup, you have successfully set up deep linking handling for iOS devi In order to set deep linking support for iOS 9 and later devices, you need to enable your app to handle Apple universal links. To find out more about universal links and how their setup looks like, you can check [here][universal-links]. -Adjust is taking care of lots of things to do with universal links behind the scenes. But, in order to support universal links with the adjust, you need to perform small setup for universal links in the adjust dashboard. For more information on that should be done, please consult our official [docs][universal-links-guide]. +Adjust is taking care of lots of things to do with universal links behind the scenes. But, in order to support universal links with the Adjust, you need to perform small setup for universal links in the Adjust dashboard. For more information on that should be done, please consult our official [docs][universal-links-guide]. Once you have successfully enabled the universal links feature in the dashboard, you need to do this in your app as well: -After enabling `Associated Domains` for your app in Apple Developer Portal, you need to do the same thing in your app's Xcode project. After enabling `Assciated Domains`, add the universal link which was generated for you in the adjust dashboard in the `Domains` section by prefixing it with `applinks:` and make sure that you also remove the `http(s)` part of the universal link. +After enabling `Associated Domains` for your app in Apple Developer Portal, you need to do the same thing in your app's Xcode project. After enabling `Assciated Domains`, add the universal link which was generated for you in the Adjust dashboard in the `Domains` section by prefixing it with `applinks:` and make sure that you also remove the `http(s)` part of the universal link. -After this has been set up, your app will be opened after you click the adjust tracker universal link. After app is opened, `continueUserActivity` method of your `AppDelegate` class will be triggered and the place where the content of the universal link URL will be delivered. If you want to access the content of the deep link, override this method. +![][associated-domains-applinks] + +After this has been set up, your app will be opened after you click the Adjust tracker universal link. After app is opened, `continueUserActivity` method of your `AppDelegate` class will be triggered and the place where the content of the universal link URL will be delivered. If you want to access the content of the deep link, override this method. ``` objc - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity @@ -743,9 +711,9 @@ adjustConfig.setDeferredDeeplinkCallback(function(deferredDeeplink) { ``` The callback function will be called after the SDK receives a deffered deep link from our server and before opening it. -If this callback is not implemented, **the adjust SDK will always try to open the deep link by default**. +If this callback is not implemented, **the Adjust SDK will always try to open the deep link by default**. -With another setting on the `AdjustConfig` instance, you have the possibility to decide whether the adjust SDK will open this deeplink or not. You could, for example, not allow the SDK to open the deep link at the current moment, save it, and open it yourself later. You can do this by calling the `setOpenDeferredDeeplink` method: +With another setting on the `AdjustConfig` instance, you have the possibility to decide whether the Adjust SDK will open this deeplink or not. You could, for example, not allow the SDK to open the deep link at the current moment, save it, and open it yourself later. You can do this by calling the `setOpenDeferredDeeplink` method: ```js // Default setting. The SDK will open the deeplink after the deferred deeplink callback @@ -759,9 +727,9 @@ adjustConfig.setOpenDeferredDeeplink(false); Adjust enables you to run re-engagement campaigns with usage of deep links. For more information on how to do that, please check our [official docs][reattribution-with-deeplinks]. -If you are using this feature, in order for your user to be properly reattributed, you need to make one additional call to the adjust SDK in your app. +If you are using this feature, in order for your user to be properly reattributed, you need to make one additional call to the Adjust SDK in your app. -Once you have received deep link content information in your app, add a call to the `appWillOpenUrl` method. By making this call, the adjust SDK will try to find if there is any new attribution info inside of the deep link and if any, it will be sent to the adjust backend. If your user should be reattributed due to a click on the adjust tracker URL with deep link content in it, you will see the [attribution callback](#attribution-callback) in your app being triggered with new attribution info for this user. +Once you have received deep link content information in your app, add a call to the `appWillOpenUrl` method. By making this call, the Adjust SDK will try to find if there is any new attribution info inside of the deep link and if any, it will be sent to the Adjust backend. If your user should be reattributed due to a click on the Adjust tracker URL with deep link content in it, you will see the [attribution callback](#attribution-callback) in your app being triggered with new attribution info for this user. The call to `appWillOpenUrl` should be done like this to support deep linking reattributions in all iOS versions: @@ -795,7 +763,7 @@ The call to `appWillOpenUrl` should be done like this to support deep linking re } ``` -If you have access to the deeplink url in the webview, you can call the `appWillOpenUrl` method from the `Adjust` object from Javascript: +If you have access to the deeplink url in the web view, you can call the `appWillOpenUrl` method from the `Adjust` object from Javascript: ```js Adjust.appWillOpenUrl(deeplinkUrl); @@ -804,9 +772,11 @@ Adjust.appWillOpenUrl(deeplinkUrl); [dashboard]: http://adjust.com [adjust.com]: http://adjust.com +[releases]: https://github.com/adjust/ios_sdk/releases [wvjsb_readme]: https://github.com/marcuswestin/WebViewJavascriptBridge#usage [ios_sdk_ulinks]: https://github.com/adjust/ios_sdk/#universal-links +[example-webview]: examples/AdjustExample-WebView [callbacks-guide]: https://docs.adjust.com/en/callbacks [attribution-data]: https://github.com/adjust/sdks/blob/master/doc/attribution-data.md [special-partners]: https://docs.adjust.com/en/special-partners @@ -816,12 +786,14 @@ Adjust.appWillOpenUrl(deeplinkUrl); [event-tracking-guide]: https://docs.adjust.com/en/event-tracking/#reference-tracking-purchases-and-revenues [reattribution-deeplinks]: https://docs.adjust.com/en/deeplinking/#manually-appending-attribution-data-to-a-deep-link -## License +[custom-url-scheme]: https://raw.github.com/adjust/sdks/master/Resources/ios/custom-url-scheme.png +[associated-domains-applinks]: https://raw.github.com/adjust/sdks/master/Resources/ios/associated-domains-applinks.png + +## License -The adjust SDK is licensed under the MIT License. +The Adjust SDK is licensed under the MIT License. -Copyright (c) 2012-2016 adjust GmbH, -http://www.adjust.com +Copyright (c) 2012-2018 Adjust GmbH, http://www.adjust.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in From e3fce18201918cc806c9c10aa4bf55d189a827c4 Mon Sep 17 00:00:00 2001 From: uerceg Date: Fri, 27 Jul 2018 15:40:11 +0200 Subject: [PATCH 53/67] WVJB -> WebBridge rename --- Adjust.xcodeproj/project.pbxproj | 971 +++++++++--------- ...B.xcscheme => AdjustSdkWebBridge.xcscheme} | 20 +- AdjustSdkWVJB/AdjustSdkWVJB.h | 25 - AdjustSdkWebBridge/AdjustSdkWebBridge.h | 28 + .../Info.plist | 4 +- 5 files changed, 533 insertions(+), 515 deletions(-) rename Adjust.xcodeproj/xcshareddata/xcschemes/{AdjustSdkWVJB.xcscheme => AdjustSdkWebBridge.xcscheme} (81%) delete mode 100644 AdjustSdkWVJB/AdjustSdkWVJB.h create mode 100644 AdjustSdkWebBridge/AdjustSdkWebBridge.h rename {AdjustSdkWVJB => AdjustSdkWebBridge}/Info.plist (90%) diff --git a/Adjust.xcodeproj/project.pbxproj b/Adjust.xcodeproj/project.pbxproj index d32754bf2..625b1322c 100644 --- a/Adjust.xcodeproj/project.pbxproj +++ b/Adjust.xcodeproj/project.pbxproj @@ -30,87 +30,6 @@ 6FCC85051F27946100D6A0ED /* ADJReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FCC85031F27944600D6A0ED /* ADJReachability.m */; }; 6FCC85081F27948C00D6A0ED /* ADJReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FCC85071F27948700D6A0ED /* ADJReachability.h */; }; 6FCC85091F27949000D6A0ED /* ADJReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FCC85061F27948700D6A0ED /* ADJReachability.m */; }; - 6FE4B4DD2108C4DB00ACB67D /* AdjustSdkWVJB.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4DC2108C4DB00ACB67D /* AdjustSdkWVJB.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FE4B5252108C57100ACB67D /* ADJDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4E12108C57100ACB67D /* ADJDeviceInfo.m */; }; - 6FE4B5262108C57100ACB67D /* ADJTimerOnce.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4E22108C57100ACB67D /* ADJTimerOnce.m */; }; - 6FE4B5272108C57100ACB67D /* ADJAttributionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4E32108C57100ACB67D /* ADJAttributionHandler.m */; }; - 6FE4B52A2108C57100ACB67D /* ADJRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4E62108C57100ACB67D /* ADJRequestHandler.m */; }; - 6FE4B52D2108C57100ACB67D /* ADJKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4E92108C57100ACB67D /* ADJKeychain.m */; }; - 6FE4B52E2108C57100ACB67D /* ADJSdkClickHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4EA2108C57100ACB67D /* ADJSdkClickHandler.m */; }; - 6FE4B5302108C57100ACB67D /* ADJEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4EC2108C57100ACB67D /* ADJEvent.m */; }; - 6FE4B5342108C57100ACB67D /* ADJSessionSuccess.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4F02108C57100ACB67D /* ADJSessionSuccess.m */; }; - 6FE4B5352108C57100ACB67D /* ADJEventFailure.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4F12108C57100ACB67D /* ADJEventFailure.m */; }; - 6FE4B5372108C57100ACB67D /* ADJEventSuccess.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4F32108C57100ACB67D /* ADJEventSuccess.m */; }; - 6FE4B5382108C57100ACB67D /* ADJActivityState.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4F42108C57100ACB67D /* ADJActivityState.m */; }; - 6FE4B5392108C57100ACB67D /* ADJSessionFailure.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4F52108C57100ACB67D /* ADJSessionFailure.m */; }; - 6FE4B53D2108C57100ACB67D /* ADJTimerCycle.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4F92108C57100ACB67D /* ADJTimerCycle.m */; }; - 6FE4B53E2108C57100ACB67D /* ADJSessionParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4FA2108C57100ACB67D /* ADJSessionParameters.m */; }; - 6FE4B53F2108C57100ACB67D /* ADJLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4FB2108C57100ACB67D /* ADJLogger.m */; }; - 6FE4B5402108C57100ACB67D /* ADJBackoffStrategy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4FC2108C57100ACB67D /* ADJBackoffStrategy.m */; }; - 6FE4B5422108C57100ACB67D /* Adjust.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B4FE2108C57100ACB67D /* Adjust.m */; }; - 6FE4B5462108C57100ACB67D /* ADJConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B5022108C57100ACB67D /* ADJConfig.m */; }; - 6FE4B5472108C57100ACB67D /* ADJPackageHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B5032108C57100ACB67D /* ADJPackageHandler.m */; }; - 6FE4B54A2108C57100ACB67D /* ADJActivityKind.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B5062108C57100ACB67D /* ADJActivityKind.m */; }; - 6FE4B54C2108C57100ACB67D /* NSString+ADJAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B5092108C57100ACB67D /* NSString+ADJAdditions.m */; }; - 6FE4B54E2108C57100ACB67D /* NSData+ADJAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B50B2108C57100ACB67D /* NSData+ADJAdditions.m */; }; - 6FE4B5502108C57100ACB67D /* UIDevice+ADJAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B50D2108C57100ACB67D /* UIDevice+ADJAdditions.m */; }; - 6FE4B5522108C57100ACB67D /* ADJAttribution.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B50F2108C57100ACB67D /* ADJAttribution.m */; }; - 6FE4B5532108C57100ACB67D /* ADJSystemProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B5102108C57100ACB67D /* ADJSystemProfile.m */; }; - 6FE4B5552108C57100ACB67D /* ADJActivityPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B5122108C57100ACB67D /* ADJActivityPackage.m */; }; - 6FE4B5562108C57100ACB67D /* ADJUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B5132108C57100ACB67D /* ADJUtil.m */; }; - 6FE4B5592108C57100ACB67D /* ADJAdjustFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B5162108C57100ACB67D /* ADJAdjustFactory.m */; }; - 6FE4B55C2108C57100ACB67D /* ADJResponseData.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B5192108C57100ACB67D /* ADJResponseData.m */; }; - 6FE4B55E2108C57100ACB67D /* ADJPackageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B51B2108C57100ACB67D /* ADJPackageBuilder.m */; }; - 6FE4B55F2108C57100ACB67D /* ADJUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B51C2108C57100ACB67D /* ADJUserDefaults.m */; }; - 6FE4B5652108C57100ACB67D /* ADJActivityHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B5222108C57100ACB67D /* ADJActivityHandler.m */; }; - 6FE4B5662108C57100ACB67D /* ADJReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B5232108C57100ACB67D /* ADJReachability.m */; }; - 6FE4B5672108C6BC00ACB67D /* ADJConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4E02108C57100ACB67D /* ADJConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FE4B5682108C6BC00ACB67D /* Adjust.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4E42108C57100ACB67D /* Adjust.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FE4B5692108C6BC00ACB67D /* ADJActivityPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4E52108C57100ACB67D /* ADJActivityPackage.h */; }; - 6FE4B56A2108C6BC00ACB67D /* ADJSystemProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4E72108C57100ACB67D /* ADJSystemProfile.h */; }; - 6FE4B56B2108C6BC00ACB67D /* ADJAttribution.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4E82108C57100ACB67D /* ADJAttribution.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FE4B56C2108C6BC00ACB67D /* ADJActivityKind.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4EB2108C57100ACB67D /* ADJActivityKind.h */; }; - 6FE4B56D2108C6BC00ACB67D /* ADJPackageHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4ED2108C57100ACB67D /* ADJPackageHandler.h */; }; - 6FE4B56E2108C6BC00ACB67D /* ADJPackageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4EE2108C57100ACB67D /* ADJPackageBuilder.h */; }; - 6FE4B56F2108C6BC00ACB67D /* ADJResponseData.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4EF2108C57100ACB67D /* ADJResponseData.h */; }; - 6FE4B5702108C6BC00ACB67D /* ADJAdjustFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4F22108C57100ACB67D /* ADJAdjustFactory.h */; }; - 6FE4B5712108C6BC00ACB67D /* ADJUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4F62108C57100ACB67D /* ADJUtil.h */; }; - 6FE4B5722108C6BC00ACB67D /* ADJReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4F72108C57100ACB67D /* ADJReachability.h */; }; - 6FE4B5732108C6BC00ACB67D /* ADJActivityHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4F82108C57100ACB67D /* ADJActivityHandler.h */; }; - 6FE4B5742108C6BC00ACB67D /* ADJUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4FD2108C57100ACB67D /* ADJUserDefaults.h */; }; - 6FE4B5752108C6BC00ACB67D /* ADJAttributionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B4FF2108C57100ACB67D /* ADJAttributionHandler.h */; }; - 6FE4B5762108C6BC00ACB67D /* ADJTimerOnce.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5002108C57100ACB67D /* ADJTimerOnce.h */; }; - 6FE4B5772108C6BC00ACB67D /* ADJDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5012108C57100ACB67D /* ADJDeviceInfo.h */; }; - 6FE4B5782108C6BC00ACB67D /* ADJSdkClickHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5052108C57100ACB67D /* ADJSdkClickHandler.h */; }; - 6FE4B5792108C6BC00ACB67D /* ADJKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5072108C57100ACB67D /* ADJKeychain.h */; }; - 6FE4B57A2108C6BC00ACB67D /* UIDevice+ADJAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B50A2108C57100ACB67D /* UIDevice+ADJAdditions.h */; }; - 6FE4B57B2108C6BC00ACB67D /* NSData+ADJAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B50C2108C57100ACB67D /* NSData+ADJAdditions.h */; }; - 6FE4B57C2108C6BC00ACB67D /* NSString+ADJAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B50E2108C57100ACB67D /* NSString+ADJAdditions.h */; }; - 6FE4B57D2108C6BC00ACB67D /* ADJRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5112108C57100ACB67D /* ADJRequestHandler.h */; }; - 6FE4B57E2108C6BC00ACB67D /* ADJSessionFailure.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5142108C57100ACB67D /* ADJSessionFailure.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FE4B57F2108C6BC00ACB67D /* ADJActivityState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5152108C57100ACB67D /* ADJActivityState.h */; }; - 6FE4B5802108C6BC00ACB67D /* ADJEventSuccess.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5172108C57100ACB67D /* ADJEventSuccess.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FE4B5812108C6BC00ACB67D /* ADJEventFailure.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5182108C57100ACB67D /* ADJEventFailure.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FE4B5822108C6BC00ACB67D /* ADJSessionSuccess.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B51A2108C57100ACB67D /* ADJSessionSuccess.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FE4B5832108C6BC00ACB67D /* ADJBackoffStrategy.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B51D2108C57100ACB67D /* ADJBackoffStrategy.h */; }; - 6FE4B5842108C6BC00ACB67D /* ADJLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B51E2108C57100ACB67D /* ADJLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FE4B5852108C6BC00ACB67D /* ADJSessionParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B51F2108C57100ACB67D /* ADJSessionParameters.h */; }; - 6FE4B5862108C6BC00ACB67D /* ADJTimerCycle.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5212108C57100ACB67D /* ADJTimerCycle.h */; }; - 6FE4B5872108C75800ACB67D /* ADJEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5042108C57100ACB67D /* ADJEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FE4B5982108C7A200ACB67D /* AdjustBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B5892108C7A100ACB67D /* AdjustBridge.m */; }; - 6FE4B5992108C7A200ACB67D /* AdjustBridgeRegister.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B58A2108C7A100ACB67D /* AdjustBridgeRegister.h */; }; - 6FE4B59A2108C7A200ACB67D /* WebViewJavascriptBridgeBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B58C2108C7A100ACB67D /* WebViewJavascriptBridgeBase.m */; }; - 6FE4B59B2108C7A200ACB67D /* AdjustBridge_JS.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B58D2108C7A100ACB67D /* AdjustBridge_JS.m */; }; - 6FE4B59C2108C7A200ACB67D /* WKWebViewJavascriptBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B58E2108C7A100ACB67D /* WKWebViewJavascriptBridge.m */; }; - 6FE4B59D2108C7A200ACB67D /* WebViewJavascriptBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B58F2108C7A100ACB67D /* WebViewJavascriptBridge.m */; }; - 6FE4B59E2108C7A200ACB67D /* WebViewJavascriptBridge_JS.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5902108C7A100ACB67D /* WebViewJavascriptBridge_JS.h */; }; - 6FE4B59F2108C7A200ACB67D /* WebViewJavascriptBridgeBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5912108C7A100ACB67D /* WebViewJavascriptBridgeBase.h */; }; - 6FE4B5A02108C7A200ACB67D /* AdjustBridge_JS.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5922108C7A100ACB67D /* AdjustBridge_JS.h */; }; - 6FE4B5A12108C7A200ACB67D /* WebViewJavascriptBridge_JS.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B5932108C7A100ACB67D /* WebViewJavascriptBridge_JS.m */; }; - 6FE4B5A22108C7A200ACB67D /* WebViewJavascriptBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5942108C7A100ACB67D /* WebViewJavascriptBridge.h */; }; - 6FE4B5A32108C7A200ACB67D /* WKWebViewJavascriptBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5952108C7A100ACB67D /* WKWebViewJavascriptBridge.h */; }; - 6FE4B5A42108C7A200ACB67D /* AdjustBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE4B5962108C7A100ACB67D /* AdjustBridge.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FE4B5A52108C7A200ACB67D /* AdjustBridgeRegister.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE4B5972108C7A100ACB67D /* AdjustBridgeRegister.m */; }; 9601C1A01A31DD8900A9AE21 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9601C19C1A31DD7F00A9AE21 /* CoreTelephony.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 9601C1A31A31DE0D00A9AE21 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9601C1A11A31DE0300A9AE21 /* SystemConfiguration.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 9601CAE41C74B70600670879 /* ADJEventSuccess.h in Headers */ = {isa = PBXBuildFile; fileRef = 9601CAE21C74B70600670879 /* ADJEventSuccess.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -222,6 +141,87 @@ 96FCC53B1C186426007BBFE1 /* ADJResponseData.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FCC5371C186426007BBFE1 /* ADJResponseData.m */; }; 96FDD75E1C566C38009C402E /* NSURLSession+NSURLDataWithRequestMocking.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FDD75D1C566C38009C402E /* NSURLSession+NSURLDataWithRequestMocking.m */; }; 9D0C7D3F1D79B3FE009DDF4E /* ADJInitState.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0C7D3E1D79B3FE009DDF4E /* ADJInitState.m */; }; + 9D0E2E06210B570600133B4F /* AdjustSdkWebBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E04210B570600133B4F /* AdjustSdkWebBridge.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D0E2E6B210B575600133B4F /* ADJConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E17210B575600133B4F /* ADJConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D0E2E6C210B575600133B4F /* ADJDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E18210B575600133B4F /* ADJDeviceInfo.m */; }; + 9D0E2E6D210B575600133B4F /* ADJTimerOnce.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E19210B575600133B4F /* ADJTimerOnce.m */; }; + 9D0E2E6E210B575600133B4F /* ADJAttributionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E1A210B575600133B4F /* ADJAttributionHandler.m */; }; + 9D0E2E6F210B575600133B4F /* Adjust.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E1B210B575600133B4F /* Adjust.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D0E2E70210B575600133B4F /* ADJActivityPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E1C210B575600133B4F /* ADJActivityPackage.h */; }; + 9D0E2E71210B575600133B4F /* ADJRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E1D210B575600133B4F /* ADJRequestHandler.m */; }; + 9D0E2E72210B575600133B4F /* ADJSystemProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E1E210B575600133B4F /* ADJSystemProfile.h */; }; + 9D0E2E73210B575600133B4F /* ADJAttribution.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E1F210B575600133B4F /* ADJAttribution.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D0E2E74210B575600133B4F /* ADJKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E20210B575600133B4F /* ADJKeychain.m */; }; + 9D0E2E75210B575600133B4F /* ADJSdkClickHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E21210B575600133B4F /* ADJSdkClickHandler.m */; }; + 9D0E2E76210B575600133B4F /* ADJActivityKind.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E22210B575600133B4F /* ADJActivityKind.h */; }; + 9D0E2E77210B575600133B4F /* ADJEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E23210B575600133B4F /* ADJEvent.m */; }; + 9D0E2E78210B575600133B4F /* ADJPackageHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E24210B575600133B4F /* ADJPackageHandler.h */; }; + 9D0E2E79210B575600133B4F /* ADJPackageBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E25210B575600133B4F /* ADJPackageBuilder.h */; }; + 9D0E2E7A210B575600133B4F /* ADJResponseData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E26210B575600133B4F /* ADJResponseData.h */; }; + 9D0E2E7B210B575600133B4F /* ADJSessionSuccess.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E27210B575600133B4F /* ADJSessionSuccess.m */; }; + 9D0E2E7C210B575600133B4F /* ADJEventFailure.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E28210B575600133B4F /* ADJEventFailure.m */; }; + 9D0E2E7D210B575600133B4F /* ADJAdjustFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E29210B575600133B4F /* ADJAdjustFactory.h */; }; + 9D0E2E7E210B575600133B4F /* ADJEventSuccess.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E2A210B575600133B4F /* ADJEventSuccess.m */; }; + 9D0E2E7F210B575600133B4F /* ADJActivityState.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E2B210B575600133B4F /* ADJActivityState.m */; }; + 9D0E2E80210B575600133B4F /* ADJSessionFailure.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E2C210B575600133B4F /* ADJSessionFailure.m */; }; + 9D0E2E81210B575600133B4F /* ADJUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E2D210B575600133B4F /* ADJUtil.h */; }; + 9D0E2E82210B575600133B4F /* ADJReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E2E210B575600133B4F /* ADJReachability.h */; }; + 9D0E2E83210B575600133B4F /* ADJActivityHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E2F210B575600133B4F /* ADJActivityHandler.h */; }; + 9D0E2E84210B575600133B4F /* ADJTimerCycle.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E30210B575600133B4F /* ADJTimerCycle.m */; }; + 9D0E2E85210B575600133B4F /* ADJSessionParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E31210B575600133B4F /* ADJSessionParameters.m */; }; + 9D0E2E86210B575600133B4F /* ADJLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E32210B575600133B4F /* ADJLogger.m */; }; + 9D0E2E87210B575600133B4F /* ADJBackoffStrategy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E33210B575600133B4F /* ADJBackoffStrategy.m */; }; + 9D0E2E88210B575600133B4F /* ADJUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E34210B575600133B4F /* ADJUserDefaults.h */; }; + 9D0E2E89210B575600133B4F /* Adjust.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E35210B575600133B4F /* Adjust.m */; }; + 9D0E2E8A210B575600133B4F /* ADJAttributionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E36210B575600133B4F /* ADJAttributionHandler.h */; }; + 9D0E2E8B210B575600133B4F /* ADJTimerOnce.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E37210B575600133B4F /* ADJTimerOnce.h */; }; + 9D0E2E8C210B575600133B4F /* ADJDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E38210B575600133B4F /* ADJDeviceInfo.h */; }; + 9D0E2E8D210B575600133B4F /* ADJConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E39210B575600133B4F /* ADJConfig.m */; }; + 9D0E2E8E210B575600133B4F /* ADJPackageHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E3A210B575600133B4F /* ADJPackageHandler.m */; }; + 9D0E2E8F210B575600133B4F /* ADJEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E3B210B575600133B4F /* ADJEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D0E2E90210B575600133B4F /* ADJSdkClickHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E3C210B575600133B4F /* ADJSdkClickHandler.h */; }; + 9D0E2E91210B575600133B4F /* ADJActivityKind.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E3D210B575600133B4F /* ADJActivityKind.m */; }; + 9D0E2E92210B575600133B4F /* ADJKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E3E210B575600133B4F /* ADJKeychain.h */; }; + 9D0E2E93210B575600133B4F /* NSString+ADJAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E40210B575600133B4F /* NSString+ADJAdditions.m */; }; + 9D0E2E94210B575600133B4F /* UIDevice+ADJAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E41210B575600133B4F /* UIDevice+ADJAdditions.h */; }; + 9D0E2E95210B575600133B4F /* NSData+ADJAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E42210B575600133B4F /* NSData+ADJAdditions.m */; }; + 9D0E2E96210B575600133B4F /* NSData+ADJAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E43210B575600133B4F /* NSData+ADJAdditions.h */; }; + 9D0E2E97210B575600133B4F /* UIDevice+ADJAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E44210B575600133B4F /* UIDevice+ADJAdditions.m */; }; + 9D0E2E98210B575600133B4F /* NSString+ADJAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E45210B575600133B4F /* NSString+ADJAdditions.h */; }; + 9D0E2E99210B575600133B4F /* ADJAttribution.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E46210B575600133B4F /* ADJAttribution.m */; }; + 9D0E2E9A210B575600133B4F /* ADJSystemProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E47210B575600133B4F /* ADJSystemProfile.m */; }; + 9D0E2E9B210B575600133B4F /* ADJRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E48210B575600133B4F /* ADJRequestHandler.h */; }; + 9D0E2E9C210B575600133B4F /* ADJActivityPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E49210B575600133B4F /* ADJActivityPackage.m */; }; + 9D0E2E9D210B575600133B4F /* ADJUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E4A210B575600133B4F /* ADJUtil.m */; }; + 9D0E2E9E210B575600133B4F /* ADJSessionFailure.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E4B210B575600133B4F /* ADJSessionFailure.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D0E2E9F210B575600133B4F /* ADJActivityState.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E4C210B575600133B4F /* ADJActivityState.h */; }; + 9D0E2EA0210B575600133B4F /* ADJAdjustFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E4D210B575600133B4F /* ADJAdjustFactory.m */; }; + 9D0E2EA1210B575600133B4F /* ADJEventSuccess.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E4E210B575600133B4F /* ADJEventSuccess.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D0E2EA2210B575600133B4F /* ADJEventFailure.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E4F210B575600133B4F /* ADJEventFailure.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D0E2EA3210B575600133B4F /* ADJResponseData.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E50210B575600133B4F /* ADJResponseData.m */; }; + 9D0E2EA4210B575600133B4F /* ADJSessionSuccess.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E51210B575600133B4F /* ADJSessionSuccess.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D0E2EA5210B575600133B4F /* ADJPackageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E52210B575600133B4F /* ADJPackageBuilder.m */; }; + 9D0E2EA6210B575600133B4F /* ADJUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E53210B575600133B4F /* ADJUserDefaults.m */; }; + 9D0E2EA7210B575600133B4F /* ADJBackoffStrategy.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E54210B575600133B4F /* ADJBackoffStrategy.h */; }; + 9D0E2EA8210B575600133B4F /* ADJLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E55210B575600133B4F /* ADJLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D0E2EA9210B575600133B4F /* ADJSessionParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E56210B575600133B4F /* ADJSessionParameters.h */; }; + 9D0E2EAB210B575600133B4F /* ADJTimerCycle.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E58210B575600133B4F /* ADJTimerCycle.h */; }; + 9D0E2EAC210B575600133B4F /* ADJActivityHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E59210B575600133B4F /* ADJActivityHandler.m */; }; + 9D0E2EAD210B575600133B4F /* ADJReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E5A210B575600133B4F /* ADJReachability.m */; }; + 9D0E2EAE210B575600133B4F /* AdjustBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E5C210B575600133B4F /* AdjustBridge.m */; }; + 9D0E2EAF210B575600133B4F /* AdjustBridgeRegister.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E5D210B575600133B4F /* AdjustBridgeRegister.h */; }; + 9D0E2EB0210B575600133B4F /* WebViewJavascriptBridgeBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E5F210B575600133B4F /* WebViewJavascriptBridgeBase.m */; }; + 9D0E2EB1210B575600133B4F /* AdjustBridge_JS.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E60210B575600133B4F /* AdjustBridge_JS.m */; }; + 9D0E2EB2210B575600133B4F /* WKWebViewJavascriptBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E61210B575600133B4F /* WKWebViewJavascriptBridge.m */; }; + 9D0E2EB3210B575600133B4F /* WebViewJavascriptBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E62210B575600133B4F /* WebViewJavascriptBridge.m */; }; + 9D0E2EB4210B575600133B4F /* WebViewJavascriptBridge_JS.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E63210B575600133B4F /* WebViewJavascriptBridge_JS.h */; }; + 9D0E2EB5210B575600133B4F /* WebViewJavascriptBridgeBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E64210B575600133B4F /* WebViewJavascriptBridgeBase.h */; }; + 9D0E2EB6210B575600133B4F /* AdjustBridge_JS.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E65210B575600133B4F /* AdjustBridge_JS.h */; }; + 9D0E2EB7210B575600133B4F /* WebViewJavascriptBridge_JS.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E66210B575600133B4F /* WebViewJavascriptBridge_JS.m */; }; + 9D0E2EB8210B575600133B4F /* WebViewJavascriptBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E67210B575600133B4F /* WebViewJavascriptBridge.h */; }; + 9D0E2EB9210B575600133B4F /* WKWebViewJavascriptBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E68210B575600133B4F /* WKWebViewJavascriptBridge.h */; }; + 9D0E2EBA210B575600133B4F /* AdjustBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E69210B575600133B4F /* AdjustBridge.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D0E2EBB210B575600133B4F /* AdjustBridgeRegister.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E6A210B575600133B4F /* AdjustBridgeRegister.m */; }; 9D363AC31BDA50FA00B47FE9 /* ADJLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E5E37318BBB48A008E7B30 /* ADJLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9D7431EA1EB9F9B700969F14 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D7431E91EB9F9B700969F14 /* main.m */; }; 9D7431ED1EB9F9B700969F14 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D7431EC1EB9F9B700969F14 /* AppDelegate.m */; }; @@ -561,88 +561,6 @@ 6FCC85031F27944600D6A0ED /* ADJReachability.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ADJReachability.m; sourceTree = ""; }; 6FCC85061F27948700D6A0ED /* ADJReachability.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ADJReachability.m; sourceTree = ""; }; 6FCC85071F27948700D6A0ED /* ADJReachability.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ADJReachability.h; sourceTree = ""; }; - 6FCD0E01210757BE00465ACF /* AdjustSdkWVJB.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AdjustSdkWVJB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6FE4B4DC2108C4DB00ACB67D /* AdjustSdkWVJB.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AdjustSdkWVJB.h; sourceTree = ""; }; - 6FE4B4E02108C57100ACB67D /* ADJConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJConfig.h; sourceTree = ""; }; - 6FE4B4E12108C57100ACB67D /* ADJDeviceInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJDeviceInfo.m; sourceTree = ""; }; - 6FE4B4E22108C57100ACB67D /* ADJTimerOnce.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJTimerOnce.m; sourceTree = ""; }; - 6FE4B4E32108C57100ACB67D /* ADJAttributionHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJAttributionHandler.m; sourceTree = ""; }; - 6FE4B4E42108C57100ACB67D /* Adjust.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Adjust.h; sourceTree = ""; }; - 6FE4B4E52108C57100ACB67D /* ADJActivityPackage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityPackage.h; sourceTree = ""; }; - 6FE4B4E62108C57100ACB67D /* ADJRequestHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJRequestHandler.m; sourceTree = ""; }; - 6FE4B4E72108C57100ACB67D /* ADJSystemProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSystemProfile.h; sourceTree = ""; }; - 6FE4B4E82108C57100ACB67D /* ADJAttribution.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJAttribution.h; sourceTree = ""; }; - 6FE4B4E92108C57100ACB67D /* ADJKeychain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJKeychain.m; sourceTree = ""; }; - 6FE4B4EA2108C57100ACB67D /* ADJSdkClickHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSdkClickHandler.m; sourceTree = ""; }; - 6FE4B4EB2108C57100ACB67D /* ADJActivityKind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityKind.h; sourceTree = ""; }; - 6FE4B4EC2108C57100ACB67D /* ADJEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJEvent.m; sourceTree = ""; }; - 6FE4B4ED2108C57100ACB67D /* ADJPackageHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJPackageHandler.h; sourceTree = ""; }; - 6FE4B4EE2108C57100ACB67D /* ADJPackageBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJPackageBuilder.h; sourceTree = ""; }; - 6FE4B4EF2108C57100ACB67D /* ADJResponseData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJResponseData.h; sourceTree = ""; }; - 6FE4B4F02108C57100ACB67D /* ADJSessionSuccess.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSessionSuccess.m; sourceTree = ""; }; - 6FE4B4F12108C57100ACB67D /* ADJEventFailure.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJEventFailure.m; sourceTree = ""; }; - 6FE4B4F22108C57100ACB67D /* ADJAdjustFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJAdjustFactory.h; sourceTree = ""; }; - 6FE4B4F32108C57100ACB67D /* ADJEventSuccess.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJEventSuccess.m; sourceTree = ""; }; - 6FE4B4F42108C57100ACB67D /* ADJActivityState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityState.m; sourceTree = ""; }; - 6FE4B4F52108C57100ACB67D /* ADJSessionFailure.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSessionFailure.m; sourceTree = ""; }; - 6FE4B4F62108C57100ACB67D /* ADJUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUtil.h; sourceTree = ""; }; - 6FE4B4F72108C57100ACB67D /* ADJReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJReachability.h; sourceTree = ""; }; - 6FE4B4F82108C57100ACB67D /* ADJActivityHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityHandler.h; sourceTree = ""; }; - 6FE4B4F92108C57100ACB67D /* ADJTimerCycle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJTimerCycle.m; sourceTree = ""; }; - 6FE4B4FA2108C57100ACB67D /* ADJSessionParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSessionParameters.m; sourceTree = ""; }; - 6FE4B4FB2108C57100ACB67D /* ADJLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJLogger.m; sourceTree = ""; }; - 6FE4B4FC2108C57100ACB67D /* ADJBackoffStrategy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJBackoffStrategy.m; sourceTree = ""; }; - 6FE4B4FD2108C57100ACB67D /* ADJUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUserDefaults.h; sourceTree = ""; }; - 6FE4B4FE2108C57100ACB67D /* Adjust.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Adjust.m; sourceTree = ""; }; - 6FE4B4FF2108C57100ACB67D /* ADJAttributionHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJAttributionHandler.h; sourceTree = ""; }; - 6FE4B5002108C57100ACB67D /* ADJTimerOnce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJTimerOnce.h; sourceTree = ""; }; - 6FE4B5012108C57100ACB67D /* ADJDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJDeviceInfo.h; sourceTree = ""; }; - 6FE4B5022108C57100ACB67D /* ADJConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJConfig.m; sourceTree = ""; }; - 6FE4B5032108C57100ACB67D /* ADJPackageHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJPackageHandler.m; sourceTree = ""; }; - 6FE4B5042108C57100ACB67D /* ADJEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJEvent.h; sourceTree = ""; }; - 6FE4B5052108C57100ACB67D /* ADJSdkClickHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSdkClickHandler.h; sourceTree = ""; }; - 6FE4B5062108C57100ACB67D /* ADJActivityKind.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityKind.m; sourceTree = ""; }; - 6FE4B5072108C57100ACB67D /* ADJKeychain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJKeychain.h; sourceTree = ""; }; - 6FE4B5092108C57100ACB67D /* NSString+ADJAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+ADJAdditions.m"; sourceTree = ""; }; - 6FE4B50A2108C57100ACB67D /* UIDevice+ADJAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIDevice+ADJAdditions.h"; sourceTree = ""; }; - 6FE4B50B2108C57100ACB67D /* NSData+ADJAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+ADJAdditions.m"; sourceTree = ""; }; - 6FE4B50C2108C57100ACB67D /* NSData+ADJAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+ADJAdditions.h"; sourceTree = ""; }; - 6FE4B50D2108C57100ACB67D /* UIDevice+ADJAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIDevice+ADJAdditions.m"; sourceTree = ""; }; - 6FE4B50E2108C57100ACB67D /* NSString+ADJAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+ADJAdditions.h"; sourceTree = ""; }; - 6FE4B50F2108C57100ACB67D /* ADJAttribution.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJAttribution.m; sourceTree = ""; }; - 6FE4B5102108C57100ACB67D /* ADJSystemProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSystemProfile.m; sourceTree = ""; }; - 6FE4B5112108C57100ACB67D /* ADJRequestHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJRequestHandler.h; sourceTree = ""; }; - 6FE4B5122108C57100ACB67D /* ADJActivityPackage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityPackage.m; sourceTree = ""; }; - 6FE4B5132108C57100ACB67D /* ADJUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUtil.m; sourceTree = ""; }; - 6FE4B5142108C57100ACB67D /* ADJSessionFailure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSessionFailure.h; sourceTree = ""; }; - 6FE4B5152108C57100ACB67D /* ADJActivityState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityState.h; sourceTree = ""; }; - 6FE4B5162108C57100ACB67D /* ADJAdjustFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJAdjustFactory.m; sourceTree = ""; }; - 6FE4B5172108C57100ACB67D /* ADJEventSuccess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJEventSuccess.h; sourceTree = ""; }; - 6FE4B5182108C57100ACB67D /* ADJEventFailure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJEventFailure.h; sourceTree = ""; }; - 6FE4B5192108C57100ACB67D /* ADJResponseData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJResponseData.m; sourceTree = ""; }; - 6FE4B51A2108C57100ACB67D /* ADJSessionSuccess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSessionSuccess.h; sourceTree = ""; }; - 6FE4B51B2108C57100ACB67D /* ADJPackageBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJPackageBuilder.m; sourceTree = ""; }; - 6FE4B51C2108C57100ACB67D /* ADJUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUserDefaults.m; sourceTree = ""; }; - 6FE4B51D2108C57100ACB67D /* ADJBackoffStrategy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJBackoffStrategy.h; sourceTree = ""; }; - 6FE4B51E2108C57100ACB67D /* ADJLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJLogger.h; sourceTree = ""; }; - 6FE4B51F2108C57100ACB67D /* ADJSessionParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSessionParameters.h; sourceTree = ""; }; - 6FE4B5212108C57100ACB67D /* ADJTimerCycle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJTimerCycle.h; sourceTree = ""; }; - 6FE4B5222108C57100ACB67D /* ADJActivityHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityHandler.m; sourceTree = ""; }; - 6FE4B5232108C57100ACB67D /* ADJReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJReachability.m; sourceTree = ""; }; - 6FE4B5892108C7A100ACB67D /* AdjustBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdjustBridge.m; sourceTree = ""; }; - 6FE4B58A2108C7A100ACB67D /* AdjustBridgeRegister.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustBridgeRegister.h; sourceTree = ""; }; - 6FE4B58C2108C7A100ACB67D /* WebViewJavascriptBridgeBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewJavascriptBridgeBase.m; sourceTree = ""; }; - 6FE4B58D2108C7A100ACB67D /* AdjustBridge_JS.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdjustBridge_JS.m; sourceTree = ""; }; - 6FE4B58E2108C7A100ACB67D /* WKWebViewJavascriptBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WKWebViewJavascriptBridge.m; sourceTree = ""; }; - 6FE4B58F2108C7A100ACB67D /* WebViewJavascriptBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewJavascriptBridge.m; sourceTree = ""; }; - 6FE4B5902108C7A100ACB67D /* WebViewJavascriptBridge_JS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewJavascriptBridge_JS.h; sourceTree = ""; }; - 6FE4B5912108C7A100ACB67D /* WebViewJavascriptBridgeBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewJavascriptBridgeBase.h; sourceTree = ""; }; - 6FE4B5922108C7A100ACB67D /* AdjustBridge_JS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustBridge_JS.h; sourceTree = ""; }; - 6FE4B5932108C7A100ACB67D /* WebViewJavascriptBridge_JS.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewJavascriptBridge_JS.m; sourceTree = ""; }; - 6FE4B5942108C7A100ACB67D /* WebViewJavascriptBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewJavascriptBridge.h; sourceTree = ""; }; - 6FE4B5952108C7A100ACB67D /* WKWebViewJavascriptBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebViewJavascriptBridge.h; sourceTree = ""; }; - 6FE4B5962108C7A100ACB67D /* AdjustBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustBridge.h; sourceTree = ""; }; - 6FE4B5972108C7A100ACB67D /* AdjustBridgeRegister.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdjustBridgeRegister.m; sourceTree = ""; }; 9601C19C1A31DD7F00A9AE21 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; 9601C1A11A31DE0300A9AE21 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; 9601CAE21C74B70600670879 /* ADJEventSuccess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJEventSuccess.h; sourceTree = ""; }; @@ -775,6 +693,89 @@ 9D0167FE20FF88DE0029CFFF /* AdjustExample-iMessage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "AdjustExample-iMessage.xcodeproj"; path = "examples/AdjustExample-iMessage/AdjustExample-iMessage.xcodeproj"; sourceTree = ""; }; 9D0C7D3D1D79B3FE009DDF4E /* ADJInitState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJInitState.h; sourceTree = ""; }; 9D0C7D3E1D79B3FE009DDF4E /* ADJInitState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJInitState.m; sourceTree = ""; }; + 9D0E2E02210B570600133B4F /* AdjustSdkWebBridge.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AdjustSdkWebBridge.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D0E2E04210B570600133B4F /* AdjustSdkWebBridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AdjustSdkWebBridge.h; sourceTree = ""; }; + 9D0E2E05210B570600133B4F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9D0E2E17210B575600133B4F /* ADJConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJConfig.h; sourceTree = ""; }; + 9D0E2E18210B575600133B4F /* ADJDeviceInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJDeviceInfo.m; sourceTree = ""; }; + 9D0E2E19210B575600133B4F /* ADJTimerOnce.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJTimerOnce.m; sourceTree = ""; }; + 9D0E2E1A210B575600133B4F /* ADJAttributionHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJAttributionHandler.m; sourceTree = ""; }; + 9D0E2E1B210B575600133B4F /* Adjust.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Adjust.h; sourceTree = ""; }; + 9D0E2E1C210B575600133B4F /* ADJActivityPackage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityPackage.h; sourceTree = ""; }; + 9D0E2E1D210B575600133B4F /* ADJRequestHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJRequestHandler.m; sourceTree = ""; }; + 9D0E2E1E210B575600133B4F /* ADJSystemProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSystemProfile.h; sourceTree = ""; }; + 9D0E2E1F210B575600133B4F /* ADJAttribution.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJAttribution.h; sourceTree = ""; }; + 9D0E2E20210B575600133B4F /* ADJKeychain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJKeychain.m; sourceTree = ""; }; + 9D0E2E21210B575600133B4F /* ADJSdkClickHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSdkClickHandler.m; sourceTree = ""; }; + 9D0E2E22210B575600133B4F /* ADJActivityKind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityKind.h; sourceTree = ""; }; + 9D0E2E23210B575600133B4F /* ADJEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJEvent.m; sourceTree = ""; }; + 9D0E2E24210B575600133B4F /* ADJPackageHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJPackageHandler.h; sourceTree = ""; }; + 9D0E2E25210B575600133B4F /* ADJPackageBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJPackageBuilder.h; sourceTree = ""; }; + 9D0E2E26210B575600133B4F /* ADJResponseData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJResponseData.h; sourceTree = ""; }; + 9D0E2E27210B575600133B4F /* ADJSessionSuccess.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSessionSuccess.m; sourceTree = ""; }; + 9D0E2E28210B575600133B4F /* ADJEventFailure.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJEventFailure.m; sourceTree = ""; }; + 9D0E2E29210B575600133B4F /* ADJAdjustFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJAdjustFactory.h; sourceTree = ""; }; + 9D0E2E2A210B575600133B4F /* ADJEventSuccess.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJEventSuccess.m; sourceTree = ""; }; + 9D0E2E2B210B575600133B4F /* ADJActivityState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityState.m; sourceTree = ""; }; + 9D0E2E2C210B575600133B4F /* ADJSessionFailure.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSessionFailure.m; sourceTree = ""; }; + 9D0E2E2D210B575600133B4F /* ADJUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUtil.h; sourceTree = ""; }; + 9D0E2E2E210B575600133B4F /* ADJReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJReachability.h; sourceTree = ""; }; + 9D0E2E2F210B575600133B4F /* ADJActivityHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityHandler.h; sourceTree = ""; }; + 9D0E2E30210B575600133B4F /* ADJTimerCycle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJTimerCycle.m; sourceTree = ""; }; + 9D0E2E31210B575600133B4F /* ADJSessionParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSessionParameters.m; sourceTree = ""; }; + 9D0E2E32210B575600133B4F /* ADJLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJLogger.m; sourceTree = ""; }; + 9D0E2E33210B575600133B4F /* ADJBackoffStrategy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJBackoffStrategy.m; sourceTree = ""; }; + 9D0E2E34210B575600133B4F /* ADJUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJUserDefaults.h; sourceTree = ""; }; + 9D0E2E35210B575600133B4F /* Adjust.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Adjust.m; sourceTree = ""; }; + 9D0E2E36210B575600133B4F /* ADJAttributionHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJAttributionHandler.h; sourceTree = ""; }; + 9D0E2E37210B575600133B4F /* ADJTimerOnce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJTimerOnce.h; sourceTree = ""; }; + 9D0E2E38210B575600133B4F /* ADJDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJDeviceInfo.h; sourceTree = ""; }; + 9D0E2E39210B575600133B4F /* ADJConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJConfig.m; sourceTree = ""; }; + 9D0E2E3A210B575600133B4F /* ADJPackageHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJPackageHandler.m; sourceTree = ""; }; + 9D0E2E3B210B575600133B4F /* ADJEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJEvent.h; sourceTree = ""; }; + 9D0E2E3C210B575600133B4F /* ADJSdkClickHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSdkClickHandler.h; sourceTree = ""; }; + 9D0E2E3D210B575600133B4F /* ADJActivityKind.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityKind.m; sourceTree = ""; }; + 9D0E2E3E210B575600133B4F /* ADJKeychain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJKeychain.h; sourceTree = ""; }; + 9D0E2E40210B575600133B4F /* NSString+ADJAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+ADJAdditions.m"; sourceTree = ""; }; + 9D0E2E41210B575600133B4F /* UIDevice+ADJAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIDevice+ADJAdditions.h"; sourceTree = ""; }; + 9D0E2E42210B575600133B4F /* NSData+ADJAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+ADJAdditions.m"; sourceTree = ""; }; + 9D0E2E43210B575600133B4F /* NSData+ADJAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+ADJAdditions.h"; sourceTree = ""; }; + 9D0E2E44210B575600133B4F /* UIDevice+ADJAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIDevice+ADJAdditions.m"; sourceTree = ""; }; + 9D0E2E45210B575600133B4F /* NSString+ADJAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+ADJAdditions.h"; sourceTree = ""; }; + 9D0E2E46210B575600133B4F /* ADJAttribution.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJAttribution.m; sourceTree = ""; }; + 9D0E2E47210B575600133B4F /* ADJSystemProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJSystemProfile.m; sourceTree = ""; }; + 9D0E2E48210B575600133B4F /* ADJRequestHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJRequestHandler.h; sourceTree = ""; }; + 9D0E2E49210B575600133B4F /* ADJActivityPackage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityPackage.m; sourceTree = ""; }; + 9D0E2E4A210B575600133B4F /* ADJUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUtil.m; sourceTree = ""; }; + 9D0E2E4B210B575600133B4F /* ADJSessionFailure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSessionFailure.h; sourceTree = ""; }; + 9D0E2E4C210B575600133B4F /* ADJActivityState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJActivityState.h; sourceTree = ""; }; + 9D0E2E4D210B575600133B4F /* ADJAdjustFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJAdjustFactory.m; sourceTree = ""; }; + 9D0E2E4E210B575600133B4F /* ADJEventSuccess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJEventSuccess.h; sourceTree = ""; }; + 9D0E2E4F210B575600133B4F /* ADJEventFailure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJEventFailure.h; sourceTree = ""; }; + 9D0E2E50210B575600133B4F /* ADJResponseData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJResponseData.m; sourceTree = ""; }; + 9D0E2E51210B575600133B4F /* ADJSessionSuccess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSessionSuccess.h; sourceTree = ""; }; + 9D0E2E52210B575600133B4F /* ADJPackageBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJPackageBuilder.m; sourceTree = ""; }; + 9D0E2E53210B575600133B4F /* ADJUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJUserDefaults.m; sourceTree = ""; }; + 9D0E2E54210B575600133B4F /* ADJBackoffStrategy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJBackoffStrategy.h; sourceTree = ""; }; + 9D0E2E55210B575600133B4F /* ADJLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJLogger.h; sourceTree = ""; }; + 9D0E2E56210B575600133B4F /* ADJSessionParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJSessionParameters.h; sourceTree = ""; }; + 9D0E2E58210B575600133B4F /* ADJTimerCycle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADJTimerCycle.h; sourceTree = ""; }; + 9D0E2E59210B575600133B4F /* ADJActivityHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJActivityHandler.m; sourceTree = ""; }; + 9D0E2E5A210B575600133B4F /* ADJReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADJReachability.m; sourceTree = ""; }; + 9D0E2E5C210B575600133B4F /* AdjustBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdjustBridge.m; sourceTree = ""; }; + 9D0E2E5D210B575600133B4F /* AdjustBridgeRegister.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustBridgeRegister.h; sourceTree = ""; }; + 9D0E2E5F210B575600133B4F /* WebViewJavascriptBridgeBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewJavascriptBridgeBase.m; sourceTree = ""; }; + 9D0E2E60210B575600133B4F /* AdjustBridge_JS.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdjustBridge_JS.m; sourceTree = ""; }; + 9D0E2E61210B575600133B4F /* WKWebViewJavascriptBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WKWebViewJavascriptBridge.m; sourceTree = ""; }; + 9D0E2E62210B575600133B4F /* WebViewJavascriptBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewJavascriptBridge.m; sourceTree = ""; }; + 9D0E2E63210B575600133B4F /* WebViewJavascriptBridge_JS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewJavascriptBridge_JS.h; sourceTree = ""; }; + 9D0E2E64210B575600133B4F /* WebViewJavascriptBridgeBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewJavascriptBridgeBase.h; sourceTree = ""; }; + 9D0E2E65210B575600133B4F /* AdjustBridge_JS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustBridge_JS.h; sourceTree = ""; }; + 9D0E2E66210B575600133B4F /* WebViewJavascriptBridge_JS.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewJavascriptBridge_JS.m; sourceTree = ""; }; + 9D0E2E67210B575600133B4F /* WebViewJavascriptBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewJavascriptBridge.h; sourceTree = ""; }; + 9D0E2E68210B575600133B4F /* WKWebViewJavascriptBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebViewJavascriptBridge.h; sourceTree = ""; }; + 9D0E2E69210B575600133B4F /* AdjustBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustBridge.h; sourceTree = ""; }; + 9D0E2E6A210B575600133B4F /* AdjustBridgeRegister.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdjustBridgeRegister.m; sourceTree = ""; }; 9D449DAD1E6ED22900E7E80B /* AdjustExample-iOS.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "AdjustExample-iOS.xcodeproj"; path = "examples/AdjustExample-iOS/AdjustExample-iOS.xcodeproj"; sourceTree = ""; }; 9D449DB31E6ED23400E7E80B /* AdjustExample-iWatch.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "AdjustExample-iWatch.xcodeproj"; path = "examples/AdjustExample-iWatch/AdjustExample-iWatch.xcodeproj"; sourceTree = ""; }; 9D449DBF1E6ED23900E7E80B /* AdjustExample-Swift.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "AdjustExample-Swift.xcodeproj"; path = "examples/AdjustExample-Swift/AdjustExample-Swift.xcodeproj"; sourceTree = ""; }; @@ -993,13 +994,6 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 6FCD0DD7210757BE00465ACF /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 9615158C1CD2CB2C0022D336 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1035,6 +1029,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9D0E2DFE210B570600133B4F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 9D7431E31EB9F9B700969F14 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1136,126 +1137,6 @@ name = Products; sourceTree = ""; }; - 6FCD0E0D210757F000465ACF /* AdjustSdkWVJB */ = { - isa = PBXGroup; - children = ( - 6FE4B5882108C7A100ACB67D /* AdjustBridge */, - 6FE4B4DF2108C57100ACB67D /* Adjust */, - 6FE4B4DC2108C4DB00ACB67D /* AdjustSdkWVJB.h */, - ); - path = AdjustSdkWVJB; - sourceTree = ""; - }; - 6FE4B4DF2108C57100ACB67D /* Adjust */ = { - isa = PBXGroup; - children = ( - 6FE4B4E02108C57100ACB67D /* ADJConfig.h */, - 6FE4B4E12108C57100ACB67D /* ADJDeviceInfo.m */, - 6FE4B4E22108C57100ACB67D /* ADJTimerOnce.m */, - 6FE4B4E32108C57100ACB67D /* ADJAttributionHandler.m */, - 6FE4B4E42108C57100ACB67D /* Adjust.h */, - 6FE4B4E52108C57100ACB67D /* ADJActivityPackage.h */, - 6FE4B4E62108C57100ACB67D /* ADJRequestHandler.m */, - 6FE4B4E72108C57100ACB67D /* ADJSystemProfile.h */, - 6FE4B4E82108C57100ACB67D /* ADJAttribution.h */, - 6FE4B4E92108C57100ACB67D /* ADJKeychain.m */, - 6FE4B4EA2108C57100ACB67D /* ADJSdkClickHandler.m */, - 6FE4B4EB2108C57100ACB67D /* ADJActivityKind.h */, - 6FE4B4EC2108C57100ACB67D /* ADJEvent.m */, - 6FE4B4ED2108C57100ACB67D /* ADJPackageHandler.h */, - 6FE4B4EE2108C57100ACB67D /* ADJPackageBuilder.h */, - 6FE4B4EF2108C57100ACB67D /* ADJResponseData.h */, - 6FE4B4F02108C57100ACB67D /* ADJSessionSuccess.m */, - 6FE4B4F12108C57100ACB67D /* ADJEventFailure.m */, - 6FE4B4F22108C57100ACB67D /* ADJAdjustFactory.h */, - 6FE4B4F32108C57100ACB67D /* ADJEventSuccess.m */, - 6FE4B4F42108C57100ACB67D /* ADJActivityState.m */, - 6FE4B4F52108C57100ACB67D /* ADJSessionFailure.m */, - 6FE4B4F62108C57100ACB67D /* ADJUtil.h */, - 6FE4B4F72108C57100ACB67D /* ADJReachability.h */, - 6FE4B4F82108C57100ACB67D /* ADJActivityHandler.h */, - 6FE4B4F92108C57100ACB67D /* ADJTimerCycle.m */, - 6FE4B4FA2108C57100ACB67D /* ADJSessionParameters.m */, - 6FE4B4FB2108C57100ACB67D /* ADJLogger.m */, - 6FE4B4FC2108C57100ACB67D /* ADJBackoffStrategy.m */, - 6FE4B4FD2108C57100ACB67D /* ADJUserDefaults.h */, - 6FE4B4FE2108C57100ACB67D /* Adjust.m */, - 6FE4B4FF2108C57100ACB67D /* ADJAttributionHandler.h */, - 6FE4B5002108C57100ACB67D /* ADJTimerOnce.h */, - 6FE4B5012108C57100ACB67D /* ADJDeviceInfo.h */, - 6FE4B5022108C57100ACB67D /* ADJConfig.m */, - 6FE4B5032108C57100ACB67D /* ADJPackageHandler.m */, - 6FE4B5042108C57100ACB67D /* ADJEvent.h */, - 6FE4B5052108C57100ACB67D /* ADJSdkClickHandler.h */, - 6FE4B5062108C57100ACB67D /* ADJActivityKind.m */, - 6FE4B5072108C57100ACB67D /* ADJKeychain.h */, - 6FE4B5082108C57100ACB67D /* ADJAdditions */, - 6FE4B50F2108C57100ACB67D /* ADJAttribution.m */, - 6FE4B5102108C57100ACB67D /* ADJSystemProfile.m */, - 6FE4B5112108C57100ACB67D /* ADJRequestHandler.h */, - 6FE4B5122108C57100ACB67D /* ADJActivityPackage.m */, - 6FE4B5132108C57100ACB67D /* ADJUtil.m */, - 6FE4B5142108C57100ACB67D /* ADJSessionFailure.h */, - 6FE4B5152108C57100ACB67D /* ADJActivityState.h */, - 6FE4B5162108C57100ACB67D /* ADJAdjustFactory.m */, - 6FE4B5172108C57100ACB67D /* ADJEventSuccess.h */, - 6FE4B5182108C57100ACB67D /* ADJEventFailure.h */, - 6FE4B5192108C57100ACB67D /* ADJResponseData.m */, - 6FE4B51A2108C57100ACB67D /* ADJSessionSuccess.h */, - 6FE4B51B2108C57100ACB67D /* ADJPackageBuilder.m */, - 6FE4B51C2108C57100ACB67D /* ADJUserDefaults.m */, - 6FE4B51D2108C57100ACB67D /* ADJBackoffStrategy.h */, - 6FE4B51E2108C57100ACB67D /* ADJLogger.h */, - 6FE4B51F2108C57100ACB67D /* ADJSessionParameters.h */, - 6FE4B5212108C57100ACB67D /* ADJTimerCycle.h */, - 6FE4B5222108C57100ACB67D /* ADJActivityHandler.m */, - 6FE4B5232108C57100ACB67D /* ADJReachability.m */, - ); - path = Adjust; - sourceTree = SOURCE_ROOT; - }; - 6FE4B5082108C57100ACB67D /* ADJAdditions */ = { - isa = PBXGroup; - children = ( - 6FE4B5092108C57100ACB67D /* NSString+ADJAdditions.m */, - 6FE4B50A2108C57100ACB67D /* UIDevice+ADJAdditions.h */, - 6FE4B50B2108C57100ACB67D /* NSData+ADJAdditions.m */, - 6FE4B50C2108C57100ACB67D /* NSData+ADJAdditions.h */, - 6FE4B50D2108C57100ACB67D /* UIDevice+ADJAdditions.m */, - 6FE4B50E2108C57100ACB67D /* NSString+ADJAdditions.h */, - ); - path = ADJAdditions; - sourceTree = ""; - }; - 6FE4B5882108C7A100ACB67D /* AdjustBridge */ = { - isa = PBXGroup; - children = ( - 6FE4B5892108C7A100ACB67D /* AdjustBridge.m */, - 6FE4B58A2108C7A100ACB67D /* AdjustBridgeRegister.h */, - 6FE4B58B2108C7A100ACB67D /* WebViewJavascriptBridge */, - 6FE4B5962108C7A100ACB67D /* AdjustBridge.h */, - 6FE4B5972108C7A100ACB67D /* AdjustBridgeRegister.m */, - ); - path = AdjustBridge; - sourceTree = SOURCE_ROOT; - }; - 6FE4B58B2108C7A100ACB67D /* WebViewJavascriptBridge */ = { - isa = PBXGroup; - children = ( - 6FE4B58C2108C7A100ACB67D /* WebViewJavascriptBridgeBase.m */, - 6FE4B58D2108C7A100ACB67D /* AdjustBridge_JS.m */, - 6FE4B58E2108C7A100ACB67D /* WKWebViewJavascriptBridge.m */, - 6FE4B58F2108C7A100ACB67D /* WebViewJavascriptBridge.m */, - 6FE4B5902108C7A100ACB67D /* WebViewJavascriptBridge_JS.h */, - 6FE4B5912108C7A100ACB67D /* WebViewJavascriptBridgeBase.h */, - 6FE4B5922108C7A100ACB67D /* AdjustBridge_JS.h */, - 6FE4B5932108C7A100ACB67D /* WebViewJavascriptBridge_JS.m */, - 6FE4B5942108C7A100ACB67D /* WebViewJavascriptBridge.h */, - 6FE4B5952108C7A100ACB67D /* WKWebViewJavascriptBridge.h */, - ); - path = WebViewJavascriptBridge; - sourceTree = ""; - }; 9648C5E41CD1765E00A3B049 /* AdjustBridge */ = { isa = PBXGroup; children = ( @@ -1291,9 +1172,9 @@ 96E5E34B18BBB48A008E7B30 /* Adjust */, 9DFA37AE1C0F219400782607 /* AdjustSdk */, 9DE354D32100726300D211C9 /* AdjustSdkIm */, - 6FCD0E0D210757F000465ACF /* AdjustSdkWVJB */, 9DFB06111D747070006D48FC /* AdjustSdkTv */, 9648C5E41CD1765E00A3B049 /* AdjustBridge */, + 9D0E2E03210B570600133B4F /* AdjustSdkWebBridge */, 96E5E39A18BBB49E008E7B30 /* AdjustTests */, 9D449DAC1E6ED20400E7E80B /* Example Apps */, 9679920F18BBAE2800394606 /* Frameworks */, @@ -1311,7 +1192,7 @@ 9DFB06101D747070006D48FC /* AdjustSdkTv.framework */, 9D7431E61EB9F9B700969F14 /* AdjustExampleTests.app */, 9DE354D22100726300D211C9 /* AdjustSdkIm.framework */, - 6FCD0E01210757BE00465ACF /* AdjustSdkWVJB.framework */, + 9D0E2E02210B570600133B4F /* AdjustSdkWebBridge.framework */, ); name = Products; sourceTree = ""; @@ -1430,6 +1311,127 @@ name = Products; sourceTree = ""; }; + 9D0E2E03210B570600133B4F /* AdjustSdkWebBridge */ = { + isa = PBXGroup; + children = ( + 9D0E2E04210B570600133B4F /* AdjustSdkWebBridge.h */, + 9D0E2E16210B575600133B4F /* Adjust */, + 9D0E2E5B210B575600133B4F /* AdjustBridge */, + 9D0E2E05210B570600133B4F /* Info.plist */, + ); + path = AdjustSdkWebBridge; + sourceTree = ""; + }; + 9D0E2E16210B575600133B4F /* Adjust */ = { + isa = PBXGroup; + children = ( + 9D0E2E17210B575600133B4F /* ADJConfig.h */, + 9D0E2E18210B575600133B4F /* ADJDeviceInfo.m */, + 9D0E2E19210B575600133B4F /* ADJTimerOnce.m */, + 9D0E2E1A210B575600133B4F /* ADJAttributionHandler.m */, + 9D0E2E1B210B575600133B4F /* Adjust.h */, + 9D0E2E1C210B575600133B4F /* ADJActivityPackage.h */, + 9D0E2E1D210B575600133B4F /* ADJRequestHandler.m */, + 9D0E2E1E210B575600133B4F /* ADJSystemProfile.h */, + 9D0E2E1F210B575600133B4F /* ADJAttribution.h */, + 9D0E2E20210B575600133B4F /* ADJKeychain.m */, + 9D0E2E21210B575600133B4F /* ADJSdkClickHandler.m */, + 9D0E2E22210B575600133B4F /* ADJActivityKind.h */, + 9D0E2E23210B575600133B4F /* ADJEvent.m */, + 9D0E2E24210B575600133B4F /* ADJPackageHandler.h */, + 9D0E2E25210B575600133B4F /* ADJPackageBuilder.h */, + 9D0E2E26210B575600133B4F /* ADJResponseData.h */, + 9D0E2E27210B575600133B4F /* ADJSessionSuccess.m */, + 9D0E2E28210B575600133B4F /* ADJEventFailure.m */, + 9D0E2E29210B575600133B4F /* ADJAdjustFactory.h */, + 9D0E2E2A210B575600133B4F /* ADJEventSuccess.m */, + 9D0E2E2B210B575600133B4F /* ADJActivityState.m */, + 9D0E2E2C210B575600133B4F /* ADJSessionFailure.m */, + 9D0E2E2D210B575600133B4F /* ADJUtil.h */, + 9D0E2E2E210B575600133B4F /* ADJReachability.h */, + 9D0E2E2F210B575600133B4F /* ADJActivityHandler.h */, + 9D0E2E30210B575600133B4F /* ADJTimerCycle.m */, + 9D0E2E31210B575600133B4F /* ADJSessionParameters.m */, + 9D0E2E32210B575600133B4F /* ADJLogger.m */, + 9D0E2E33210B575600133B4F /* ADJBackoffStrategy.m */, + 9D0E2E34210B575600133B4F /* ADJUserDefaults.h */, + 9D0E2E35210B575600133B4F /* Adjust.m */, + 9D0E2E36210B575600133B4F /* ADJAttributionHandler.h */, + 9D0E2E37210B575600133B4F /* ADJTimerOnce.h */, + 9D0E2E38210B575600133B4F /* ADJDeviceInfo.h */, + 9D0E2E39210B575600133B4F /* ADJConfig.m */, + 9D0E2E3A210B575600133B4F /* ADJPackageHandler.m */, + 9D0E2E3B210B575600133B4F /* ADJEvent.h */, + 9D0E2E3C210B575600133B4F /* ADJSdkClickHandler.h */, + 9D0E2E3D210B575600133B4F /* ADJActivityKind.m */, + 9D0E2E3E210B575600133B4F /* ADJKeychain.h */, + 9D0E2E3F210B575600133B4F /* ADJAdditions */, + 9D0E2E46210B575600133B4F /* ADJAttribution.m */, + 9D0E2E47210B575600133B4F /* ADJSystemProfile.m */, + 9D0E2E48210B575600133B4F /* ADJRequestHandler.h */, + 9D0E2E49210B575600133B4F /* ADJActivityPackage.m */, + 9D0E2E4A210B575600133B4F /* ADJUtil.m */, + 9D0E2E4B210B575600133B4F /* ADJSessionFailure.h */, + 9D0E2E4C210B575600133B4F /* ADJActivityState.h */, + 9D0E2E4D210B575600133B4F /* ADJAdjustFactory.m */, + 9D0E2E4E210B575600133B4F /* ADJEventSuccess.h */, + 9D0E2E4F210B575600133B4F /* ADJEventFailure.h */, + 9D0E2E50210B575600133B4F /* ADJResponseData.m */, + 9D0E2E51210B575600133B4F /* ADJSessionSuccess.h */, + 9D0E2E52210B575600133B4F /* ADJPackageBuilder.m */, + 9D0E2E53210B575600133B4F /* ADJUserDefaults.m */, + 9D0E2E54210B575600133B4F /* ADJBackoffStrategy.h */, + 9D0E2E55210B575600133B4F /* ADJLogger.h */, + 9D0E2E56210B575600133B4F /* ADJSessionParameters.h */, + 9D0E2E58210B575600133B4F /* ADJTimerCycle.h */, + 9D0E2E59210B575600133B4F /* ADJActivityHandler.m */, + 9D0E2E5A210B575600133B4F /* ADJReachability.m */, + ); + path = Adjust; + sourceTree = SOURCE_ROOT; + }; + 9D0E2E3F210B575600133B4F /* ADJAdditions */ = { + isa = PBXGroup; + children = ( + 9D0E2E40210B575600133B4F /* NSString+ADJAdditions.m */, + 9D0E2E41210B575600133B4F /* UIDevice+ADJAdditions.h */, + 9D0E2E42210B575600133B4F /* NSData+ADJAdditions.m */, + 9D0E2E43210B575600133B4F /* NSData+ADJAdditions.h */, + 9D0E2E44210B575600133B4F /* UIDevice+ADJAdditions.m */, + 9D0E2E45210B575600133B4F /* NSString+ADJAdditions.h */, + ); + path = ADJAdditions; + sourceTree = ""; + }; + 9D0E2E5B210B575600133B4F /* AdjustBridge */ = { + isa = PBXGroup; + children = ( + 9D0E2E5C210B575600133B4F /* AdjustBridge.m */, + 9D0E2E5D210B575600133B4F /* AdjustBridgeRegister.h */, + 9D0E2E5E210B575600133B4F /* WebViewJavascriptBridge */, + 9D0E2E69210B575600133B4F /* AdjustBridge.h */, + 9D0E2E6A210B575600133B4F /* AdjustBridgeRegister.m */, + ); + path = AdjustBridge; + sourceTree = SOURCE_ROOT; + }; + 9D0E2E5E210B575600133B4F /* WebViewJavascriptBridge */ = { + isa = PBXGroup; + children = ( + 9D0E2E5F210B575600133B4F /* WebViewJavascriptBridgeBase.m */, + 9D0E2E60210B575600133B4F /* AdjustBridge_JS.m */, + 9D0E2E61210B575600133B4F /* WKWebViewJavascriptBridge.m */, + 9D0E2E62210B575600133B4F /* WebViewJavascriptBridge.m */, + 9D0E2E63210B575600133B4F /* WebViewJavascriptBridge_JS.h */, + 9D0E2E64210B575600133B4F /* WebViewJavascriptBridgeBase.h */, + 9D0E2E65210B575600133B4F /* AdjustBridge_JS.h */, + 9D0E2E66210B575600133B4F /* WebViewJavascriptBridge_JS.m */, + 9D0E2E67210B575600133B4F /* WebViewJavascriptBridge.h */, + 9D0E2E68210B575600133B4F /* WKWebViewJavascriptBridge.h */, + ); + path = WebViewJavascriptBridge; + sourceTree = ""; + }; 9D449DAC1E6ED20400E7E80B /* Example Apps */ = { isa = PBXGroup; children = ( @@ -1781,54 +1783,6 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 6FCD0DD8210757BE00465ACF /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 6FE4B5A42108C7A200ACB67D /* AdjustBridge.h in Headers */, - 6FE4B5992108C7A200ACB67D /* AdjustBridgeRegister.h in Headers */, - 6FE4B56B2108C6BC00ACB67D /* ADJAttribution.h in Headers */, - 6FE4B5872108C75800ACB67D /* ADJEvent.h in Headers */, - 6FE4B57E2108C6BC00ACB67D /* ADJSessionFailure.h in Headers */, - 6FE4B5842108C6BC00ACB67D /* ADJLogger.h in Headers */, - 6FE4B5802108C6BC00ACB67D /* ADJEventSuccess.h in Headers */, - 6FE4B5812108C6BC00ACB67D /* ADJEventFailure.h in Headers */, - 6FE4B5A22108C7A200ACB67D /* WebViewJavascriptBridge.h in Headers */, - 6FE4B5822108C6BC00ACB67D /* ADJSessionSuccess.h in Headers */, - 6FE4B4DD2108C4DB00ACB67D /* AdjustSdkWVJB.h in Headers */, - 6FE4B5672108C6BC00ACB67D /* ADJConfig.h in Headers */, - 6FE4B5682108C6BC00ACB67D /* Adjust.h in Headers */, - 6FE4B5692108C6BC00ACB67D /* ADJActivityPackage.h in Headers */, - 6FE4B56A2108C6BC00ACB67D /* ADJSystemProfile.h in Headers */, - 6FE4B56C2108C6BC00ACB67D /* ADJActivityKind.h in Headers */, - 6FE4B56D2108C6BC00ACB67D /* ADJPackageHandler.h in Headers */, - 6FE4B5A32108C7A200ACB67D /* WKWebViewJavascriptBridge.h in Headers */, - 6FE4B56E2108C6BC00ACB67D /* ADJPackageBuilder.h in Headers */, - 6FE4B56F2108C6BC00ACB67D /* ADJResponseData.h in Headers */, - 6FE4B5702108C6BC00ACB67D /* ADJAdjustFactory.h in Headers */, - 6FE4B5712108C6BC00ACB67D /* ADJUtil.h in Headers */, - 6FE4B59E2108C7A200ACB67D /* WebViewJavascriptBridge_JS.h in Headers */, - 6FE4B5722108C6BC00ACB67D /* ADJReachability.h in Headers */, - 6FE4B5732108C6BC00ACB67D /* ADJActivityHandler.h in Headers */, - 6FE4B5742108C6BC00ACB67D /* ADJUserDefaults.h in Headers */, - 6FE4B5A02108C7A200ACB67D /* AdjustBridge_JS.h in Headers */, - 6FE4B5752108C6BC00ACB67D /* ADJAttributionHandler.h in Headers */, - 6FE4B5762108C6BC00ACB67D /* ADJTimerOnce.h in Headers */, - 6FE4B5772108C6BC00ACB67D /* ADJDeviceInfo.h in Headers */, - 6FE4B59F2108C7A200ACB67D /* WebViewJavascriptBridgeBase.h in Headers */, - 6FE4B5782108C6BC00ACB67D /* ADJSdkClickHandler.h in Headers */, - 6FE4B5792108C6BC00ACB67D /* ADJKeychain.h in Headers */, - 6FE4B57A2108C6BC00ACB67D /* UIDevice+ADJAdditions.h in Headers */, - 6FE4B57B2108C6BC00ACB67D /* NSData+ADJAdditions.h in Headers */, - 6FE4B57C2108C6BC00ACB67D /* NSString+ADJAdditions.h in Headers */, - 6FE4B57D2108C6BC00ACB67D /* ADJRequestHandler.h in Headers */, - 6FE4B57F2108C6BC00ACB67D /* ADJActivityState.h in Headers */, - 6FE4B5832108C6BC00ACB67D /* ADJBackoffStrategy.h in Headers */, - 6FE4B5852108C6BC00ACB67D /* ADJSessionParameters.h in Headers */, - 6FE4B5862108C6BC00ACB67D /* ADJTimerCycle.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 96BCFBCC1AC9920E005A65C5 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1869,6 +1823,54 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9D0E2DFF210B570600133B4F /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 9D0E2E06210B570600133B4F /* AdjustSdkWebBridge.h in Headers */, + 9D0E2EBA210B575600133B4F /* AdjustBridge.h in Headers */, + 9D0E2E6F210B575600133B4F /* Adjust.h in Headers */, + 9D0E2E6B210B575600133B4F /* ADJConfig.h in Headers */, + 9D0E2E8F210B575600133B4F /* ADJEvent.h in Headers */, + 9D0E2E73210B575600133B4F /* ADJAttribution.h in Headers */, + 9D0E2EA2210B575600133B4F /* ADJEventFailure.h in Headers */, + 9D0E2EAF210B575600133B4F /* AdjustBridgeRegister.h in Headers */, + 9D0E2EA1210B575600133B4F /* ADJEventSuccess.h in Headers */, + 9D0E2E9E210B575600133B4F /* ADJSessionFailure.h in Headers */, + 9D0E2EA4210B575600133B4F /* ADJSessionSuccess.h in Headers */, + 9D0E2EA8210B575600133B4F /* ADJLogger.h in Headers */, + 9D0E2E92210B575600133B4F /* ADJKeychain.h in Headers */, + 9D0E2E7D210B575600133B4F /* ADJAdjustFactory.h in Headers */, + 9D0E2E76210B575600133B4F /* ADJActivityKind.h in Headers */, + 9D0E2E88210B575600133B4F /* ADJUserDefaults.h in Headers */, + 9D0E2E8B210B575600133B4F /* ADJTimerOnce.h in Headers */, + 9D0E2EAB210B575600133B4F /* ADJTimerCycle.h in Headers */, + 9D0E2EB8210B575600133B4F /* WebViewJavascriptBridge.h in Headers */, + 9D0E2E7A210B575600133B4F /* ADJResponseData.h in Headers */, + 9D0E2E98210B575600133B4F /* NSString+ADJAdditions.h in Headers */, + 9D0E2EA7210B575600133B4F /* ADJBackoffStrategy.h in Headers */, + 9D0E2E8C210B575600133B4F /* ADJDeviceInfo.h in Headers */, + 9D0E2E90210B575600133B4F /* ADJSdkClickHandler.h in Headers */, + 9D0E2EB9210B575600133B4F /* WKWebViewJavascriptBridge.h in Headers */, + 9D0E2E81210B575600133B4F /* ADJUtil.h in Headers */, + 9D0E2E78210B575600133B4F /* ADJPackageHandler.h in Headers */, + 9D0E2EA9210B575600133B4F /* ADJSessionParameters.h in Headers */, + 9D0E2EB4210B575600133B4F /* WebViewJavascriptBridge_JS.h in Headers */, + 9D0E2E9B210B575600133B4F /* ADJRequestHandler.h in Headers */, + 9D0E2EB6210B575600133B4F /* AdjustBridge_JS.h in Headers */, + 9D0E2E94210B575600133B4F /* UIDevice+ADJAdditions.h in Headers */, + 9D0E2E72210B575600133B4F /* ADJSystemProfile.h in Headers */, + 9D0E2EB5210B575600133B4F /* WebViewJavascriptBridgeBase.h in Headers */, + 9D0E2E83210B575600133B4F /* ADJActivityHandler.h in Headers */, + 9D0E2E79210B575600133B4F /* ADJPackageBuilder.h in Headers */, + 9D0E2E70210B575600133B4F /* ADJActivityPackage.h in Headers */, + 9D0E2E82210B575600133B4F /* ADJReachability.h in Headers */, + 9D0E2E8A210B575600133B4F /* ADJAttributionHandler.h in Headers */, + 9D0E2E96210B575600133B4F /* NSData+ADJAdditions.h in Headers */, + 9D0E2E9F210B575600133B4F /* ADJActivityState.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 9DE354CF2100726300D211C9 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1995,24 +1997,6 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 6FCD0DB4210757BE00465ACF /* AdjustSdkWVJB */ = { - isa = PBXNativeTarget; - buildConfigurationList = 6FCD0DFE210757BE00465ACF /* Build configuration list for PBXNativeTarget "AdjustSdkWVJB" */; - buildPhases = ( - 6FCD0DB5210757BE00465ACF /* Sources */, - 6FCD0DD7210757BE00465ACF /* Frameworks */, - 6FCD0DD8210757BE00465ACF /* Headers */, - 6FCD0DFB210757BE00465ACF /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = AdjustSdkWVJB; - productName = AdjustSdk; - productReference = 6FCD0E01210757BE00465ACF /* AdjustSdkWVJB.framework */; - productType = "com.apple.product-type.framework"; - }; 9615158E1CD2CB2C0022D336 /* AdjustBridge */ = { isa = PBXNativeTarget; buildConfigurationList = 9615159E1CD2CB2C0022D336 /* Build configuration list for PBXNativeTarget "AdjustBridge" */; @@ -2068,6 +2052,24 @@ productReference = 9679921D18BBAE2800394606 /* AdjustTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; + 9D0E2E01210B570600133B4F /* AdjustSdkWebBridge */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9D0E2E15210B570600133B4F /* Build configuration list for PBXNativeTarget "AdjustSdkWebBridge" */; + buildPhases = ( + 9D0E2DFD210B570600133B4F /* Sources */, + 9D0E2DFE210B570600133B4F /* Frameworks */, + 9D0E2DFF210B570600133B4F /* Headers */, + 9D0E2E00210B570600133B4F /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AdjustSdkWebBridge; + productName = AdjustSdkWebBridge; + productReference = 9D0E2E02210B570600133B4F /* AdjustSdkWebBridge.framework */; + productType = "com.apple.product-type.framework"; + }; 9D7431E51EB9F9B700969F14 /* AdjustExampleTests */ = { isa = PBXNativeTarget; buildConfigurationList = 9D7432031EB9F9B700969F14 /* Build configuration list for PBXNativeTarget "AdjustExampleTests" */; @@ -2156,6 +2158,11 @@ 96BCFBE71AC99FBD005A65C5 = { CreatedOnToolsVersion = 6.2; }; + 9D0E2E01210B570600133B4F = { + CreatedOnToolsVersion = 9.4.1; + DevelopmentTeam = QGUGW9AUMK; + ProvisioningStyle = Automatic; + }; 9D7431E51EB9F9B700969F14 = { CreatedOnToolsVersion = 8.3.2; DevelopmentTeam = QGUGW9AUMK; @@ -2222,14 +2229,14 @@ projectRoot = ""; targets = ( 9679920C18BBAE2800394606 /* Adjust */, + 9615158E1CD2CB2C0022D336 /* AdjustBridge */, 96BCFBE71AC99FBD005A65C5 /* AdjustStatic */, 9DFA37AC1C0F219400782607 /* AdjustSdk */, 9DE354D12100726300D211C9 /* AdjustSdkIm */, 9DFB060F1D747070006D48FC /* AdjustSdkTv */, - 9615158E1CD2CB2C0022D336 /* AdjustBridge */, + 9D0E2E01210B570600133B4F /* AdjustSdkWebBridge */, 9679921C18BBAE2800394606 /* AdjustTests */, 9D7431E51EB9F9B700969F14 /* AdjustExampleTests */, - 6FCD0DB4210757BE00465ACF /* AdjustSdkWVJB */, ); }; /* End PBXProject section */ @@ -2315,18 +2322,18 @@ /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ - 6FCD0DFB210757BE00465ACF /* Resources */ = { + 9679921B18BBAE2800394606 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 96E5E3B718BBB49E008E7B30 /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9679921B18BBAE2800394606 /* Resources */ = { + 9D0E2E00210B570600133B4F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 96E5E3B718BBB49E008E7B30 /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2388,53 +2395,6 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 6FCD0DB5210757BE00465ACF /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 6FE4B54C2108C57100ACB67D /* NSString+ADJAdditions.m in Sources */, - 6FE4B59D2108C7A200ACB67D /* WebViewJavascriptBridge.m in Sources */, - 6FE4B5372108C57100ACB67D /* ADJEventSuccess.m in Sources */, - 6FE4B5352108C57100ACB67D /* ADJEventFailure.m in Sources */, - 6FE4B5382108C57100ACB67D /* ADJActivityState.m in Sources */, - 6FE4B59A2108C7A200ACB67D /* WebViewJavascriptBridgeBase.m in Sources */, - 6FE4B54E2108C57100ACB67D /* NSData+ADJAdditions.m in Sources */, - 6FE4B52E2108C57100ACB67D /* ADJSdkClickHandler.m in Sources */, - 6FE4B53E2108C57100ACB67D /* ADJSessionParameters.m in Sources */, - 6FE4B5562108C57100ACB67D /* ADJUtil.m in Sources */, - 6FE4B5422108C57100ACB67D /* Adjust.m in Sources */, - 6FE4B5652108C57100ACB67D /* ADJActivityHandler.m in Sources */, - 6FE4B52D2108C57100ACB67D /* ADJKeychain.m in Sources */, - 6FE4B5392108C57100ACB67D /* ADJSessionFailure.m in Sources */, - 6FE4B59C2108C7A200ACB67D /* WKWebViewJavascriptBridge.m in Sources */, - 6FE4B5502108C57100ACB67D /* UIDevice+ADJAdditions.m in Sources */, - 6FE4B5342108C57100ACB67D /* ADJSessionSuccess.m in Sources */, - 6FE4B5A12108C7A200ACB67D /* WebViewJavascriptBridge_JS.m in Sources */, - 6FE4B5532108C57100ACB67D /* ADJSystemProfile.m in Sources */, - 6FE4B52A2108C57100ACB67D /* ADJRequestHandler.m in Sources */, - 6FE4B54A2108C57100ACB67D /* ADJActivityKind.m in Sources */, - 6FE4B5552108C57100ACB67D /* ADJActivityPackage.m in Sources */, - 6FE4B5472108C57100ACB67D /* ADJPackageHandler.m in Sources */, - 6FE4B53F2108C57100ACB67D /* ADJLogger.m in Sources */, - 6FE4B5262108C57100ACB67D /* ADJTimerOnce.m in Sources */, - 6FE4B5302108C57100ACB67D /* ADJEvent.m in Sources */, - 6FE4B5462108C57100ACB67D /* ADJConfig.m in Sources */, - 6FE4B59B2108C7A200ACB67D /* AdjustBridge_JS.m in Sources */, - 6FE4B5272108C57100ACB67D /* ADJAttributionHandler.m in Sources */, - 6FE4B5402108C57100ACB67D /* ADJBackoffStrategy.m in Sources */, - 6FE4B5A52108C7A200ACB67D /* AdjustBridgeRegister.m in Sources */, - 6FE4B53D2108C57100ACB67D /* ADJTimerCycle.m in Sources */, - 6FE4B5252108C57100ACB67D /* ADJDeviceInfo.m in Sources */, - 6FE4B55E2108C57100ACB67D /* ADJPackageBuilder.m in Sources */, - 6FE4B5662108C57100ACB67D /* ADJReachability.m in Sources */, - 6FE4B5522108C57100ACB67D /* ADJAttribution.m in Sources */, - 6FE4B55C2108C57100ACB67D /* ADJResponseData.m in Sources */, - 6FE4B5592108C57100ACB67D /* ADJAdjustFactory.m in Sources */, - 6FE4B55F2108C57100ACB67D /* ADJUserDefaults.m in Sources */, - 6FE4B5982108C7A200ACB67D /* AdjustBridge.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 9615158B1CD2CB2C0022D336 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -2523,6 +2483,53 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9D0E2DFD210B570600133B4F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9D0E2E93210B575600133B4F /* NSString+ADJAdditions.m in Sources */, + 9D0E2EB3210B575600133B4F /* WebViewJavascriptBridge.m in Sources */, + 9D0E2E7E210B575600133B4F /* ADJEventSuccess.m in Sources */, + 9D0E2E7C210B575600133B4F /* ADJEventFailure.m in Sources */, + 9D0E2E7F210B575600133B4F /* ADJActivityState.m in Sources */, + 9D0E2EB0210B575600133B4F /* WebViewJavascriptBridgeBase.m in Sources */, + 9D0E2E95210B575600133B4F /* NSData+ADJAdditions.m in Sources */, + 9D0E2E75210B575600133B4F /* ADJSdkClickHandler.m in Sources */, + 9D0E2E85210B575600133B4F /* ADJSessionParameters.m in Sources */, + 9D0E2E9D210B575600133B4F /* ADJUtil.m in Sources */, + 9D0E2E89210B575600133B4F /* Adjust.m in Sources */, + 9D0E2EAC210B575600133B4F /* ADJActivityHandler.m in Sources */, + 9D0E2E74210B575600133B4F /* ADJKeychain.m in Sources */, + 9D0E2E80210B575600133B4F /* ADJSessionFailure.m in Sources */, + 9D0E2EB2210B575600133B4F /* WKWebViewJavascriptBridge.m in Sources */, + 9D0E2E97210B575600133B4F /* UIDevice+ADJAdditions.m in Sources */, + 9D0E2E7B210B575600133B4F /* ADJSessionSuccess.m in Sources */, + 9D0E2EB7210B575600133B4F /* WebViewJavascriptBridge_JS.m in Sources */, + 9D0E2E9A210B575600133B4F /* ADJSystemProfile.m in Sources */, + 9D0E2E71210B575600133B4F /* ADJRequestHandler.m in Sources */, + 9D0E2E91210B575600133B4F /* ADJActivityKind.m in Sources */, + 9D0E2E9C210B575600133B4F /* ADJActivityPackage.m in Sources */, + 9D0E2E8E210B575600133B4F /* ADJPackageHandler.m in Sources */, + 9D0E2E86210B575600133B4F /* ADJLogger.m in Sources */, + 9D0E2E6D210B575600133B4F /* ADJTimerOnce.m in Sources */, + 9D0E2E77210B575600133B4F /* ADJEvent.m in Sources */, + 9D0E2E8D210B575600133B4F /* ADJConfig.m in Sources */, + 9D0E2EB1210B575600133B4F /* AdjustBridge_JS.m in Sources */, + 9D0E2E6E210B575600133B4F /* ADJAttributionHandler.m in Sources */, + 9D0E2E87210B575600133B4F /* ADJBackoffStrategy.m in Sources */, + 9D0E2EBB210B575600133B4F /* AdjustBridgeRegister.m in Sources */, + 9D0E2E84210B575600133B4F /* ADJTimerCycle.m in Sources */, + 9D0E2E6C210B575600133B4F /* ADJDeviceInfo.m in Sources */, + 9D0E2EA5210B575600133B4F /* ADJPackageBuilder.m in Sources */, + 9D0E2EAD210B575600133B4F /* ADJReachability.m in Sources */, + 9D0E2E99210B575600133B4F /* ADJAttribution.m in Sources */, + 9D0E2EA3210B575600133B4F /* ADJResponseData.m in Sources */, + 9D0E2EA0210B575600133B4F /* ADJAdjustFactory.m in Sources */, + 9D0E2EA6210B575600133B4F /* ADJUserDefaults.m in Sources */, + 9D0E2EAE210B575600133B4F /* AdjustBridge.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 9D7431E21EB9F9B700969F14 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -2701,64 +2708,6 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 6FCD0DFF210757BE00465ACF /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - INFOPLIST_FILE = AdjustSdkWVJB/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.adjust.AdjustSdkWVJB; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 6FCD0E00210757BE00465ACF /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - INFOPLIST_FILE = AdjustSdkWVJB/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.adjust.AdjustSdkWVJB; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; 961515951CD2CB2C0022D336 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3002,6 +2951,74 @@ }; name = Release; }; + 9D0E2E07210B570600133B4F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = QGUGW9AUMK; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = AdjustSdkWebBridge/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.adjust.AdjustSdkWebBridge; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 9D0E2E08210B570600133B4F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = QGUGW9AUMK; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = AdjustSdkWebBridge/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.adjust.AdjustSdkWebBridge; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 9D7431FA1EB9F9B700969F14 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3241,15 +3258,6 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 6FCD0DFE210757BE00465ACF /* Build configuration list for PBXNativeTarget "AdjustSdkWVJB" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6FCD0DFF210757BE00465ACF /* Debug */, - 6FCD0E00210757BE00465ACF /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 9615159E1CD2CB2C0022D336 /* Build configuration list for PBXNativeTarget "AdjustBridge" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -3295,6 +3303,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 9D0E2E15210B570600133B4F /* Build configuration list for PBXNativeTarget "AdjustSdkWebBridge" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9D0E2E07210B570600133B4F /* Debug */, + 9D0E2E08210B570600133B4F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 9D7432031EB9F9B700969F14 /* Build configuration list for PBXNativeTarget "AdjustExampleTests" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkWVJB.xcscheme b/Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkWebBridge.xcscheme similarity index 81% rename from Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkWVJB.xcscheme rename to Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkWebBridge.xcscheme index cc5bc80cb..c0c8e5378 100644 --- a/Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkWVJB.xcscheme +++ b/Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkWebBridge.xcscheme @@ -1,6 +1,6 @@ @@ -45,9 +45,9 @@ @@ -63,9 +63,9 @@ diff --git a/AdjustSdkWVJB/AdjustSdkWVJB.h b/AdjustSdkWVJB/AdjustSdkWVJB.h deleted file mode 100644 index 5d625e594..000000000 --- a/AdjustSdkWVJB/AdjustSdkWVJB.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// AdjustSdkWVJB.h -// AdjustSdkWVJB -// -// Created by Pedro on 25.07.18. -// Copyright © 2018 adjust GmbH. All rights reserved. -// - -#ifndef AdjustSdkWVJB_h -#define AdjustSdkWVJB_h - -// In this header, you should import all the public headers of your framework using statements like #import - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - -#endif /* AdjustSdkWVJB_h */ diff --git a/AdjustSdkWebBridge/AdjustSdkWebBridge.h b/AdjustSdkWebBridge/AdjustSdkWebBridge.h new file mode 100644 index 000000000..aeabd39d2 --- /dev/null +++ b/AdjustSdkWebBridge/AdjustSdkWebBridge.h @@ -0,0 +1,28 @@ +// +// AdjustSdkWebBridge.h +// AdjustSdkWebBridge +// +// Created by Uglješa Erceg (@uerceg) on 27th July 2018. +// Copyright © 2018 Adjust GmbH. All rights reserved. +// + +#import + +//! Project version number for AdjustSdkWebBridge. +FOUNDATION_EXPORT double AdjustSdkWebBridgeVersionNumber; + +//! Project version string for AdjustSdkWebBridge. +FOUNDATION_EXPORT const unsigned char AdjustSdkWebBridgeVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import diff --git a/AdjustSdkWVJB/Info.plist b/AdjustSdkWebBridge/Info.plist similarity index 90% rename from AdjustSdkWVJB/Info.plist rename to AdjustSdkWebBridge/Info.plist index d3de8eefb..1007fd9dd 100644 --- a/AdjustSdkWVJB/Info.plist +++ b/AdjustSdkWebBridge/Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -16,8 +16,6 @@ FMWK CFBundleShortVersionString 1.0 - CFBundleSignature - ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass From 60fb64a4acfe9dc371a7d05916cb457d987776fe Mon Sep 17 00:00:00 2001 From: uerceg Date: Fri, 27 Jul 2018 15:48:57 +0200 Subject: [PATCH 54/67] Build script update --- scripts/build.sh | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index 9bfaa8369..a7204864f 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -32,7 +32,7 @@ mkdir -p frameworks/static mkdir -p frameworks/dynamic/ios mkdir -p frameworks/dynamic/tvos mkdir -p frameworks/dynamic/imessage -mkdir -p frameworks/dynamic/wvjb +mkdir -p frameworks/dynamic/webbridge echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # @@ -52,14 +52,14 @@ echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # -echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Moving Shared schemas to generate dynamic iOS and tvOS SDK framework using Carthage ${NC}" - +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Moving shared schemas to generate dynamic iOS and tvOS SDK framework using Carthage ... ${NC}" mv Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkIm.xcscheme \ - Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkWVJB.xcscheme . + Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkWebBridge.xcscheme . +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # -echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding dynamic iOs and tvOS targets with Carthage ... ${NC}" +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding dynamic iOS and tvOS targets with Carthage ... ${NC}" carthage build --no-skip-current echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" @@ -77,11 +77,11 @@ echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # -echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Moving Shared schemas to generate dynamic iMessage SDK framework using Carthage ${NC}" - +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Moving shared schemas to generate dynamic iMessage SDK framework using Carthage ... ${NC}" mv Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdk.xcscheme \ Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkTv.xcscheme . mv AdjustSdkIm.xcscheme Adjust.xcodeproj/xcshareddata/xcschemes +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # @@ -97,28 +97,28 @@ echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # -echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Moving Shared schemas to generate dynamic WVJB SDK framework using Carthage ${NC}" - +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Moving shared schemas to generate dynamic WebBridge SDK framework using Carthage ... ${NC}" mv Adjust.xcodeproj/xcshareddata/xcschemes/AdjustSdkIm.xcscheme . -mv AdjustSdkWVJB.xcscheme Adjust.xcodeproj/xcshareddata/xcschemes +mv AdjustSdkWebBridge.xcscheme Adjust.xcodeproj/xcshareddata/xcschemes +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # -echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding dynamic WVJB target with Carthage ... ${NC}" +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Bulding dynamic WebBridge target with Carthage ... ${NC}" carthage build --no-skip-current echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # -echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Move Carthage generated dynamic WVJB SDK framework to destination folder ... ${NC}" -mv Carthage/Build/iOS/* frameworks/dynamic/wvjb/ +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Move Carthage generated dynamic WebBridge SDK framework to destination folder ... ${NC}" +mv Carthage/Build/iOS/* frameworks/dynamic/webbridge/ echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # -echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Moving Shared schemas back ${NC}" - +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Moving shared schemas back ... ${NC}" mv *.xcscheme Adjust.xcodeproj/xcshareddata/xcschemes +echo -e "${CYAN}[ADJUST][BUILD]:${GREEN} Done! ${NC}" # ======================================== # From 79470c6fa609e6894037e5eae284bc8d67859d2f Mon Sep 17 00:00:00 2001 From: uerceg Date: Mon, 30 Jul 2018 09:19:55 +0200 Subject: [PATCH 55/67] Minor cleanup --- Adjust.xcodeproj/project.pbxproj | 14 ++++++------- AdjustBridge/AdjustBridge.h | 1 + AdjustBridge/AdjustBridge.m | 21 ++++++++----------- .../WebViewJavascriptBridge/AdjustBridge_JS.h | 6 +++--- .../WebViewJavascriptBridge/AdjustBridge_JS.m | 6 +++--- 5 files changed, 23 insertions(+), 25 deletions(-) diff --git a/Adjust.xcodeproj/project.pbxproj b/Adjust.xcodeproj/project.pbxproj index 625b1322c..8597af9bd 100644 --- a/Adjust.xcodeproj/project.pbxproj +++ b/Adjust.xcodeproj/project.pbxproj @@ -1406,11 +1406,11 @@ 9D0E2E5B210B575600133B4F /* AdjustBridge */ = { isa = PBXGroup; children = ( + 9D0E2E69210B575600133B4F /* AdjustBridge.h */, 9D0E2E5C210B575600133B4F /* AdjustBridge.m */, 9D0E2E5D210B575600133B4F /* AdjustBridgeRegister.h */, - 9D0E2E5E210B575600133B4F /* WebViewJavascriptBridge */, - 9D0E2E69210B575600133B4F /* AdjustBridge.h */, 9D0E2E6A210B575600133B4F /* AdjustBridgeRegister.m */, + 9D0E2E5E210B575600133B4F /* WebViewJavascriptBridge */, ); path = AdjustBridge; sourceTree = SOURCE_ROOT; @@ -1418,16 +1418,16 @@ 9D0E2E5E210B575600133B4F /* WebViewJavascriptBridge */ = { isa = PBXGroup; children = ( - 9D0E2E5F210B575600133B4F /* WebViewJavascriptBridgeBase.m */, + 9D0E2E65210B575600133B4F /* AdjustBridge_JS.h */, 9D0E2E60210B575600133B4F /* AdjustBridge_JS.m */, - 9D0E2E61210B575600133B4F /* WKWebViewJavascriptBridge.m */, - 9D0E2E62210B575600133B4F /* WebViewJavascriptBridge.m */, 9D0E2E63210B575600133B4F /* WebViewJavascriptBridge_JS.h */, - 9D0E2E64210B575600133B4F /* WebViewJavascriptBridgeBase.h */, - 9D0E2E65210B575600133B4F /* AdjustBridge_JS.h */, 9D0E2E66210B575600133B4F /* WebViewJavascriptBridge_JS.m */, 9D0E2E67210B575600133B4F /* WebViewJavascriptBridge.h */, + 9D0E2E62210B575600133B4F /* WebViewJavascriptBridge.m */, 9D0E2E68210B575600133B4F /* WKWebViewJavascriptBridge.h */, + 9D0E2E61210B575600133B4F /* WKWebViewJavascriptBridge.m */, + 9D0E2E64210B575600133B4F /* WebViewJavascriptBridgeBase.h */, + 9D0E2E5F210B575600133B4F /* WebViewJavascriptBridgeBase.m */, ); path = WebViewJavascriptBridge; sourceTree = ""; diff --git a/AdjustBridge/AdjustBridge.h b/AdjustBridge/AdjustBridge.h index 5a0452c54..2f6326363 100644 --- a/AdjustBridge/AdjustBridge.h +++ b/AdjustBridge/AdjustBridge.h @@ -22,4 +22,5 @@ - (void)loadWKWebViewBridge:(WKWebView *)wkWebView; - (void)loadUIWebViewBridge:(WVJB_WEBVIEW_TYPE *)webView webViewDelegate:(WVJB_WEBVIEW_DELEGATE_TYPE *)webViewDelegate; - (void)loadWKWebViewBridge:(WKWebView *)wkWebView wkWebViewDelegate:(id)wkWebViewDelegate; + @end diff --git a/AdjustBridge/AdjustBridge.m b/AdjustBridge/AdjustBridge.m index 923a48770..c5ebe3333 100644 --- a/AdjustBridge/AdjustBridge.m +++ b/AdjustBridge/AdjustBridge.m @@ -235,12 +235,11 @@ - (void)loadWebViewBridge { if ([self isFieldValid:isDeviceKnown]) { [adjustConfig setIsDeviceKnown:[isDeviceKnown boolValue]]; } - BOOL isAppSecretDefined = - [self isFieldValid:secretId] && - [self isFieldValid:info1] && - [self isFieldValid:info2] && - [self isFieldValid:info3] && - [self isFieldValid:info4]; + BOOL isAppSecretDefined = [self isFieldValid:secretId] + && [self isFieldValid:info1] + && [self isFieldValid:info2] + && [self isFieldValid:info3] + && [self isFieldValid:info4]; if (isAppSecretDefined) { [adjustConfig setAppSecret:[secretId unsignedIntegerValue] info1:[info1 unsignedIntegerValue] @@ -288,15 +287,13 @@ - (void)loadWebViewBridge { [adjustEvent setTransactionId:transactionId]; } for (int i = 0; i < [callbackParameters count]; i += 2) { - NSString * key = [[callbackParameters objectAtIndex:i] description]; - NSString * value = [[callbackParameters objectAtIndex:(i + 1)] description]; - + NSString *key = [[callbackParameters objectAtIndex:i] description]; + NSString *value = [[callbackParameters objectAtIndex:(i + 1)] description]; [adjustEvent addCallbackParameter:key value:value]; } for (int i = 0; i < [partnerParameters count]; i += 2) { - NSString * key = [[partnerParameters objectAtIndex:i] description]; - NSString * value = [[partnerParameters objectAtIndex:(i + 1)] description]; - + NSString *key = [[partnerParameters objectAtIndex:i] description]; + NSString *value = [[partnerParameters objectAtIndex:(i + 1)] description]; [adjustEvent addPartnerParameter:key value:value]; } diff --git a/AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.h b/AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.h index d00938489..6fac087a9 100644 --- a/AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.h +++ b/AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.h @@ -1,9 +1,9 @@ // // AdjustBridge_JS.h -// AdjustBridge +// Adjust SDK // -// Created by Pedro on 20.07.18. -// Copyright © 2018 adjust GmbH. All rights reserved. +// Created by Pedro Filipe (@nonelse) on 20th July 2018. +// Copyright © 2018 Adjust GmbH. All rights reserved. // #import diff --git a/AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.m b/AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.m index ee095ab64..89088ee18 100644 --- a/AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.m +++ b/AdjustBridge/WebViewJavascriptBridge/AdjustBridge_JS.m @@ -1,9 +1,9 @@ // // AdjustBridge_JS.m -// AdjustBridge +// Adjust SDK // -// Created by Pedro on 20.07.18. -// Copyright © 2018 adjust GmbH. All rights reserved. +// Created by Pedro Filipe (@nonelse) on 20th July 2018. +// Copyright © 2018 Adjust GmbH. All rights reserved. // // This file including the header and format is copied with adaptions from From 640bda0dc48bb799e5dc88f179f097418ad0e012 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uglje=C5=A1a=20Erceg?= Date: Mon, 30 Jul 2018 10:50:38 +0200 Subject: [PATCH 56/67] Update web_views.md --- doc/english/web_views.md | 46 +++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/doc/english/web_views.md b/doc/english/web_views.md index 11001ce65..7acf104d2 100644 --- a/doc/english/web_views.md +++ b/doc/english/web_views.md @@ -93,24 +93,18 @@ Since the release of iOS 8, Apple has introduced dynamic frameworks (also known ### Integrate the SDK into your app -If you added the Adjust SDK via a Pod repository, you should use one of the following import statements in the app delegate: +If you added the Adjust SDK via a Pod repository, you should use one of the following import statements in your app's source files: ```objc -#import "Adjust.h" -``` - -or - -```objc -#import +#import "AdjustBridge.h" ``` --- -If you added the Adjust SDK as a static/dynamic framework or via Carthage, you should use the following import statement in the app delegate: +If you added the Adjust SDK as a static/dynamic framework or via Carthage, you should use the following import statement in your app's source files: ```objc -#import +#import ``` Next, we'll set up basic session tracking. @@ -122,8 +116,7 @@ the `viewDidLoad` or `viewWillAppear` method of your Web View Delegate add the f ```objc #import "AdjustBridge.h" -// Or #import -// or #import +// or #import - (void)viewWillAppear:(BOOL)animated { UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; @@ -479,13 +472,13 @@ And both event and session failed objects also contain: ### Disable tracking -You can disable the Adjust SDK from tracking any activities of the current device by calling `setEnabled` with parameter `false`. **This setting is remembered between sessions**, but it can only be activated after the first session. +You can disable the Adjust SDK from tracking any activities of the current device by calling `setEnabled` with parameter `false`. **This setting is remembered between sessions**. ```js Adjust.setEnabled(false); ``` -You can check if the Adjust SDK is currently enabled by calling the function `isEnabled`. It is always possible to activate the Adjust SDK by invoking `setEnabled` with the enabled parameter as `true`. +You can check if the Adjust SDK is currently enabled by calling the function `isEnabled`. ```js Adjust.isEnabled(function(isEnabled) { @@ -497,6 +490,8 @@ Adjust.isEnabled(function(isEnabled) { }); ``` +It is always possible to activate the Adjust SDK by invoking `setEnabled` with the enabled parameter as `true`. + ### Offline mode You can put the Adjust SDK in offline mode to suspend transmission to our servers while retaining tracked data to be sent later. While in offline mode, all information is saved in a file, so be careful not to trigger too many events while in offline mode. @@ -594,6 +589,9 @@ Push tokens are used for Audience Builder and client callbacks, and they are req To send us the push notification token, add the following call to `Adjust` in the `didRegisterForRemoteNotificationsWithDeviceToken` of your app delegate: ```objc +#import "Adjust.h" +// or #import + - (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [Adjust setDeviceToken:deviceToken]; } @@ -637,6 +635,9 @@ Deep linking on iOS 8 and earlier devices is being done with usage of a custom U After this has been set up, your app will be opened after you click the Adjust tracker URL with `deep_link` parameter which contains the scheme name which you have chosen. After app is opened, `openURL` method of your `AppDelegate` class will be triggered and the place where the content of the `deep_link` parameter from the tracker URL will be delivered. If you want to access the content of the deep link, override this method. ```objc +#import "Adjust.h" +// or #import + - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { // url object contains your deep link content @@ -665,6 +666,9 @@ After enabling `Associated Domains` for your app in Apple Developer Portal, you After this has been set up, your app will be opened after you click the Adjust tracker universal link. After app is opened, `continueUserActivity` method of your `AppDelegate` class will be triggered and the place where the content of the universal link URL will be delivered. If you want to access the content of the deep link, override this method. ``` objc +#import "Adjust.h" +// or #import + - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler { if ([[userActivity activityType] isEqualToString:NSUserActivityTypeBrowsingWeb]) { @@ -685,6 +689,9 @@ With this setup, you have successfully set up deep linking handling for iOS devi We provide a helper function that allows you to convert a universal link to an old style deep link URL, in case you had some custom logic in your code which was always expecting deep link info to arrive in old style custom URL scheme format. You can call this method with universal link and the custom URL scheme name which you would like to see your deep link prefixed with and we will generate the custom URL scheme deep link for you: ``` objc +#import "Adjust.h" +// or #import + - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler { if ([[userActivity activityType] isEqualToString:NSUserActivityTypeBrowsingWeb]) { @@ -734,6 +741,9 @@ Once you have received deep link content information in your app, add a call to The call to `appWillOpenUrl` should be done like this to support deep linking reattributions in all iOS versions: ```objc +#import "Adjust.h" +// or #import + - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { // url object contains your deep link content @@ -748,6 +758,9 @@ The call to `appWillOpenUrl` should be done like this to support deep linking re ``` ``` objc +#import "Adjust.h" +// or #import + - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler { if ([[userActivity activityType] isEqualToString:NSUserActivityTypeBrowsingWeb]) { @@ -772,11 +785,14 @@ Adjust.appWillOpenUrl(deeplinkUrl); [dashboard]: http://adjust.com [adjust.com]: http://adjust.com + [releases]: https://github.com/adjust/ios_sdk/releases +[carthage]: https://github.com/Carthage/Carthage +[cocoapods]: http://cocoapods.org [wvjsb_readme]: https://github.com/marcuswestin/WebViewJavascriptBridge#usage [ios_sdk_ulinks]: https://github.com/adjust/ios_sdk/#universal-links -[example-webview]: examples/AdjustExample-WebView +[example-webview]: https://github.com/adjust/ios_sdk/tree/master/examples/AdjustExample-WebView [callbacks-guide]: https://docs.adjust.com/en/callbacks [attribution-data]: https://github.com/adjust/sdks/blob/master/doc/attribution-data.md [special-partners]: https://docs.adjust.com/en/special-partners From f9e3915bbc646b0a60fda841e70dc61fd4d556ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uglje=C5=A1a=20Erceg?= Date: Mon, 30 Jul 2018 10:51:11 +0200 Subject: [PATCH 57/67] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 21c42d27a..cf2f64025 100644 --- a/README.md +++ b/README.md @@ -534,7 +534,7 @@ And both event and session failed objects also contain: ### Disable tracking -You can disable the Adjust SDK from tracking any activities of the current device by calling `setEnabled` with parameter `NO`. **This setting is remembered between sessions**, but it can only be activated after the first session. +You can disable the Adjust SDK from tracking any activities of the current device by calling `setEnabled` with parameter `NO`. **This setting is remembered between sessions**. ```objc [Adjust setEnabled:NO]; From e8d964958954e51ee7e56905bf7d54e9ace47bd7 Mon Sep 17 00:00:00 2001 From: uerceg Date: Mon, 30 Jul 2018 11:11:14 +0200 Subject: [PATCH 58/67] Remove unused dependencies from AdjustBridge.h --- AdjustBridge/AdjustBridge.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/AdjustBridge/AdjustBridge.h b/AdjustBridge/AdjustBridge.h index 2f6326363..6e52a84bc 100644 --- a/AdjustBridge/AdjustBridge.h +++ b/AdjustBridge/AdjustBridge.h @@ -11,8 +11,6 @@ #import #import "AdjustBridgeRegister.h" -#import "WebViewJavascriptBridge.h" -#import "WKWebViewJavascriptBridge.h" @interface AdjustBridge : NSObject From 10fb209692d5817b440b02a2c96b093e481d0676 Mon Sep 17 00:00:00 2001 From: uerceg Date: Mon, 30 Jul 2018 11:47:32 +0200 Subject: [PATCH 59/67] Adjust public headers for web bridge target --- Adjust.xcodeproj/project.pbxproj | 24 ++++++++++++------------ AdjustSdkWebBridge/AdjustSdkWebBridge.h | 7 +++++++ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/Adjust.xcodeproj/project.pbxproj b/Adjust.xcodeproj/project.pbxproj index 8597af9bd..59583bae1 100644 --- a/Adjust.xcodeproj/project.pbxproj +++ b/Adjust.xcodeproj/project.pbxproj @@ -209,17 +209,17 @@ 9D0E2EAC210B575600133B4F /* ADJActivityHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E59210B575600133B4F /* ADJActivityHandler.m */; }; 9D0E2EAD210B575600133B4F /* ADJReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E5A210B575600133B4F /* ADJReachability.m */; }; 9D0E2EAE210B575600133B4F /* AdjustBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E5C210B575600133B4F /* AdjustBridge.m */; }; - 9D0E2EAF210B575600133B4F /* AdjustBridgeRegister.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E5D210B575600133B4F /* AdjustBridgeRegister.h */; }; + 9D0E2EAF210B575600133B4F /* AdjustBridgeRegister.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E5D210B575600133B4F /* AdjustBridgeRegister.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9D0E2EB0210B575600133B4F /* WebViewJavascriptBridgeBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E5F210B575600133B4F /* WebViewJavascriptBridgeBase.m */; }; 9D0E2EB1210B575600133B4F /* AdjustBridge_JS.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E60210B575600133B4F /* AdjustBridge_JS.m */; }; 9D0E2EB2210B575600133B4F /* WKWebViewJavascriptBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E61210B575600133B4F /* WKWebViewJavascriptBridge.m */; }; 9D0E2EB3210B575600133B4F /* WebViewJavascriptBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E62210B575600133B4F /* WebViewJavascriptBridge.m */; }; - 9D0E2EB4210B575600133B4F /* WebViewJavascriptBridge_JS.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E63210B575600133B4F /* WebViewJavascriptBridge_JS.h */; }; - 9D0E2EB5210B575600133B4F /* WebViewJavascriptBridgeBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E64210B575600133B4F /* WebViewJavascriptBridgeBase.h */; }; - 9D0E2EB6210B575600133B4F /* AdjustBridge_JS.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E65210B575600133B4F /* AdjustBridge_JS.h */; }; + 9D0E2EB4210B575600133B4F /* WebViewJavascriptBridge_JS.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E63210B575600133B4F /* WebViewJavascriptBridge_JS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D0E2EB5210B575600133B4F /* WebViewJavascriptBridgeBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E64210B575600133B4F /* WebViewJavascriptBridgeBase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D0E2EB6210B575600133B4F /* AdjustBridge_JS.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E65210B575600133B4F /* AdjustBridge_JS.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9D0E2EB7210B575600133B4F /* WebViewJavascriptBridge_JS.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E66210B575600133B4F /* WebViewJavascriptBridge_JS.m */; }; - 9D0E2EB8210B575600133B4F /* WebViewJavascriptBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E67210B575600133B4F /* WebViewJavascriptBridge.h */; }; - 9D0E2EB9210B575600133B4F /* WKWebViewJavascriptBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E68210B575600133B4F /* WKWebViewJavascriptBridge.h */; }; + 9D0E2EB8210B575600133B4F /* WebViewJavascriptBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E67210B575600133B4F /* WebViewJavascriptBridge.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D0E2EB9210B575600133B4F /* WKWebViewJavascriptBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E68210B575600133B4F /* WKWebViewJavascriptBridge.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9D0E2EBA210B575600133B4F /* AdjustBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0E2E69210B575600133B4F /* AdjustBridge.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9D0E2EBB210B575600133B4F /* AdjustBridgeRegister.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D0E2E6A210B575600133B4F /* AdjustBridgeRegister.m */; }; 9D363AC31BDA50FA00B47FE9 /* ADJLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E5E37318BBB48A008E7B30 /* ADJLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -1829,12 +1829,17 @@ files = ( 9D0E2E06210B570600133B4F /* AdjustSdkWebBridge.h in Headers */, 9D0E2EBA210B575600133B4F /* AdjustBridge.h in Headers */, + 9D0E2EAF210B575600133B4F /* AdjustBridgeRegister.h in Headers */, + 9D0E2EB6210B575600133B4F /* AdjustBridge_JS.h in Headers */, + 9D0E2EB8210B575600133B4F /* WebViewJavascriptBridge.h in Headers */, + 9D0E2EB9210B575600133B4F /* WKWebViewJavascriptBridge.h in Headers */, + 9D0E2EB4210B575600133B4F /* WebViewJavascriptBridge_JS.h in Headers */, + 9D0E2EB5210B575600133B4F /* WebViewJavascriptBridgeBase.h in Headers */, 9D0E2E6F210B575600133B4F /* Adjust.h in Headers */, 9D0E2E6B210B575600133B4F /* ADJConfig.h in Headers */, 9D0E2E8F210B575600133B4F /* ADJEvent.h in Headers */, 9D0E2E73210B575600133B4F /* ADJAttribution.h in Headers */, 9D0E2EA2210B575600133B4F /* ADJEventFailure.h in Headers */, - 9D0E2EAF210B575600133B4F /* AdjustBridgeRegister.h in Headers */, 9D0E2EA1210B575600133B4F /* ADJEventSuccess.h in Headers */, 9D0E2E9E210B575600133B4F /* ADJSessionFailure.h in Headers */, 9D0E2EA4210B575600133B4F /* ADJSessionSuccess.h in Headers */, @@ -1845,22 +1850,17 @@ 9D0E2E88210B575600133B4F /* ADJUserDefaults.h in Headers */, 9D0E2E8B210B575600133B4F /* ADJTimerOnce.h in Headers */, 9D0E2EAB210B575600133B4F /* ADJTimerCycle.h in Headers */, - 9D0E2EB8210B575600133B4F /* WebViewJavascriptBridge.h in Headers */, 9D0E2E7A210B575600133B4F /* ADJResponseData.h in Headers */, 9D0E2E98210B575600133B4F /* NSString+ADJAdditions.h in Headers */, 9D0E2EA7210B575600133B4F /* ADJBackoffStrategy.h in Headers */, 9D0E2E8C210B575600133B4F /* ADJDeviceInfo.h in Headers */, 9D0E2E90210B575600133B4F /* ADJSdkClickHandler.h in Headers */, - 9D0E2EB9210B575600133B4F /* WKWebViewJavascriptBridge.h in Headers */, 9D0E2E81210B575600133B4F /* ADJUtil.h in Headers */, 9D0E2E78210B575600133B4F /* ADJPackageHandler.h in Headers */, 9D0E2EA9210B575600133B4F /* ADJSessionParameters.h in Headers */, - 9D0E2EB4210B575600133B4F /* WebViewJavascriptBridge_JS.h in Headers */, 9D0E2E9B210B575600133B4F /* ADJRequestHandler.h in Headers */, - 9D0E2EB6210B575600133B4F /* AdjustBridge_JS.h in Headers */, 9D0E2E94210B575600133B4F /* UIDevice+ADJAdditions.h in Headers */, 9D0E2E72210B575600133B4F /* ADJSystemProfile.h in Headers */, - 9D0E2EB5210B575600133B4F /* WebViewJavascriptBridgeBase.h in Headers */, 9D0E2E83210B575600133B4F /* ADJActivityHandler.h in Headers */, 9D0E2E79210B575600133B4F /* ADJPackageBuilder.h in Headers */, 9D0E2E70210B575600133B4F /* ADJActivityPackage.h in Headers */, diff --git a/AdjustSdkWebBridge/AdjustSdkWebBridge.h b/AdjustSdkWebBridge/AdjustSdkWebBridge.h index aeabd39d2..9c057d66d 100644 --- a/AdjustSdkWebBridge/AdjustSdkWebBridge.h +++ b/AdjustSdkWebBridge/AdjustSdkWebBridge.h @@ -26,3 +26,10 @@ FOUNDATION_EXPORT const unsigned char AdjustSdkWebBridgeVersionString[]; #import #import #import + +// Exposing entire WebViewJavascriptBridge framework +#import +#import +#import +#import +#import From d0d20c853be2282cfa0a689b6ab2d265485c8175 Mon Sep 17 00:00:00 2001 From: Pedro Filipe Date: Mon, 30 Jul 2018 12:05:36 +0200 Subject: [PATCH 60/67] Add instruction how to use WebViewJavascriptBridge --- doc/english/web_views.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/english/web_views.md b/doc/english/web_views.md index 7acf104d2..c059fc138 100644 --- a/doc/english/web_views.md +++ b/doc/english/web_views.md @@ -138,6 +138,9 @@ the `viewDidLoad` or `viewWillAppear` method of your Web View Delegate add the f // ... ``` +You also can make use of the WebViewJavascriptBridge library we include, by using the `bridgeRegister` property of the `AdjustBridge` instance. +The register/call handler interface is similar to what WebViewJavascriptBridge does for ObjC. See [the library documentation](https://github.com/marcuswestin/WebViewJavascriptBridge#usage) for how to use it. + ### Integrate AdjustBrige into your web view To use the Javascript bridge on your web view, it must be configured like the `WebViewJavascriptBridge` plugin [README][wvjsb_readme] is advising in section `4`. Include the following Javascript code to intialize the Adjust iOS web bridge: From 2d3c0f07091af7ceadf6d16951bdd652e0f5b3ce Mon Sep 17 00:00:00 2001 From: uerceg Date: Mon, 30 Jul 2018 12:24:47 +0200 Subject: [PATCH 61/67] Podspec and instructions update --- Adjust.podspec | 2 +- doc/english/web_views.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Adjust.podspec b/Adjust.podspec index 63ca1a3c7..366ddff64 100644 --- a/Adjust.podspec +++ b/Adjust.podspec @@ -33,7 +33,7 @@ Pod::Spec.new do |s| tm.dependency 'Adjust/Core' end - s.subspec 'WebViewJavascriptBridge' do |wvjb| + s.subspec 'WebBridge' do |wvjb| wvjb.source_files = 'AdjustBridge/*.{h,m}', 'AdjustBridge/WebViewJavascriptBridge/*.{h,m}' wvjb.dependency 'Adjust/Core' end diff --git a/doc/english/web_views.md b/doc/english/web_views.md index c059fc138..69c5e6640 100644 --- a/doc/english/web_views.md +++ b/doc/english/web_views.md @@ -61,7 +61,7 @@ We will describe the steps to integrate the Adjust SDK into your iOS project. We If you're using [CocoaPods][cocoapods], you can add the following line to your `Podfile` and continue from [this step](#sdk-integrate): ```ruby -pod 'Adjust/WebViewJavascriptBridge', '~> 4.14.1' +pod 'Adjust/WebBridge', '~> 4.14.2' ``` --- @@ -69,7 +69,7 @@ pod 'Adjust/WebViewJavascriptBridge', '~> 4.14.1' If you're using [Carthage][carthage], you can add following line to your `Cartfile` and continue from [this step](#sdk-frameworks): ```ruby -github "adjust/ios_sdk" "WebViewJavascriptBridge" +github "adjust/ios_sdk" ``` --- From 8560bbab4f18820f942c37add125aaecaf32a87f Mon Sep 17 00:00:00 2001 From: Pedro Filipe Date: Mon, 30 Jul 2018 15:11:49 +0200 Subject: [PATCH 62/67] Create web_view_migration.md --- doc/english/web_view_migration.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 doc/english/web_view_migration.md diff --git a/doc/english/web_view_migration.md b/doc/english/web_view_migration.md new file mode 100644 index 000000000..4f584ad8a --- /dev/null +++ b/doc/english/web_view_migration.md @@ -0,0 +1,28 @@ +## Migrate your adjust SDK for iOS to v4.14.0 from v4.9.1 + +### Integration + +Before, it was required to manualy drag-and-drop source files into your project to integrate the adjust web view bridge. +One of the main reasons to have to do this, was that we required the javascript files from adjust to be used on the view. +Now that the javascript files are injected into the view, it's possible to integrate the adjust web view bridge using either +cocoapods or carthage. + +Whether you choose to keep the direct source files integration, or use cocoapods/carthage, you may remove the +adjust javascript files you imported previously and their reference from your html file(s). + +### Adjust config + +The adjust web view bridge is now accessing the bridge reference directly by name, so it's no longer necessary to pass +the bridge instance when creating the `AdjustConfig` object. So while previously you would do this: + +```js + var adjustConfig = new AdjustConfig(bridge, yourAppToken, environment); +``` + +Now you should do: + +```js + var adjustConfig = new AdjustConfig(yourAppToken, environment); +``` + +We are still detecting the previous api signature, to be compatible, but you should change it when migrating. From b2b199378639aa867565479c54a269f45aa29631 Mon Sep 17 00:00:00 2001 From: Pedro Filipe Date: Mon, 30 Jul 2018 15:14:40 +0200 Subject: [PATCH 63/67] Update web_views.md --- doc/english/web_views.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/english/web_views.md b/doc/english/web_views.md index 69c5e6640..50c86799e 100644 --- a/doc/english/web_views.md +++ b/doc/english/web_views.md @@ -54,6 +54,8 @@ In the repository, you can find an example [`iOS app with web view`][example-web ## Basic integration +If you are migrating from the web view bridge sdk v4.9.1 or previous, please follow [this migration guide](web_view_migration.md) when updating to this new version. + We will describe the steps to integrate the Adjust SDK into your iOS project. We are going to assume that you are using Xcode for your iOS development. ### Add the SDK with the web bridge to your project From d3c3ee9dbbff9fac8cbab13e4505b58a412c1576 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uglje=C5=A1a=20Erceg?= Date: Tue, 31 Jul 2018 08:35:57 +0200 Subject: [PATCH 64/67] Update web_views.md --- doc/english/web_views.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/english/web_views.md b/doc/english/web_views.md index 50c86799e..409412266 100644 --- a/doc/english/web_views.md +++ b/doc/english/web_views.md @@ -54,7 +54,7 @@ In the repository, you can find an example [`iOS app with web view`][example-web ## Basic integration -If you are migrating from the web view bridge sdk v4.9.1 or previous, please follow [this migration guide](web_view_migration.md) when updating to this new version. +If you are migrating from the web bridge SDK v4.9.1 or previous, please follow [this migration guide](web_view_migration.md) when updating to this new version. We will describe the steps to integrate the Adjust SDK into your iOS project. We are going to assume that you are using Xcode for your iOS development. From 907cd529872a3361b24b83a9a79d1190840513a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uglje=C5=A1a=20Erceg?= Date: Tue, 31 Jul 2018 08:38:41 +0200 Subject: [PATCH 65/67] Update web_view_migration.md --- doc/english/web_view_migration.md | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/doc/english/web_view_migration.md b/doc/english/web_view_migration.md index 4f584ad8a..6036f5005 100644 --- a/doc/english/web_view_migration.md +++ b/doc/english/web_view_migration.md @@ -1,28 +1,24 @@ -## Migrate your adjust SDK for iOS to v4.14.0 from v4.9.1 +## Migrate your Adjust web bridge SDK to v4.14.0 or later from v4.9.1 or earlier ### Integration -Before, it was required to manualy drag-and-drop source files into your project to integrate the adjust web view bridge. -One of the main reasons to have to do this, was that we required the javascript files from adjust to be used on the view. -Now that the javascript files are injected into the view, it's possible to integrate the adjust web view bridge using either -cocoapods or carthage. +Before, it was required to manualy drag-and-drop source files into your project to integrate the Adjust web view bridge. One of the main reasons to have to do this, was that we required the Javascript files from Adjust to be used on the view. Now that the Javascript files are injected into the view, it's possible to integrate the Adjust web bridge SDK by using either Cocoapods or Carthage. -Whether you choose to keep the direct source files integration, or use cocoapods/carthage, you may remove the -adjust javascript files you imported previously and their reference from your html file(s). +Whether you choose to keep the direct source files integration, or use Cocoapods/Carthage, you may remove the Adjust Javascript files you imported previously and their reference from your HTML file(s). ### Adjust config -The adjust web view bridge is now accessing the bridge reference directly by name, so it's no longer necessary to pass +The Adjust web bridge SDK is now accessing the bridge reference directly by name, so it's no longer necessary to pass the bridge instance when creating the `AdjustConfig` object. So while previously you would do this: ```js - var adjustConfig = new AdjustConfig(bridge, yourAppToken, environment); +var adjustConfig = new AdjustConfig(bridge, yourAppToken, environment); ``` Now you should do: ```js - var adjustConfig = new AdjustConfig(yourAppToken, environment); +var adjustConfig = new AdjustConfig(yourAppToken, environment); ``` -We are still detecting the previous api signature, to be compatible, but you should change it when migrating. +We are still detecting the previous API signature to be compatible, but you should change it when migrating. From 76a2f90ed09eb1de1a8647066d6d38873f0abe6b Mon Sep 17 00:00:00 2001 From: uerceg Date: Wed, 15 Aug 2018 13:08:43 +0200 Subject: [PATCH 66/67] Adding missing framework and enabling wb only for iOS platform --- Adjust.podspec | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Adjust.podspec b/Adjust.podspec index 366ddff64..a7b526a5a 100644 --- a/Adjust.podspec +++ b/Adjust.podspec @@ -9,7 +9,7 @@ Pod::Spec.new do |s| s.ios.deployment_target = '6.0' s.tvos.deployment_target = '9.0' s.framework = 'SystemConfiguration' - s.ios.weak_framework = 'AdSupport', 'iAd' + s.ios.weak_framework = 'AdSupport', 'iAd', 'CoreTelephony' s.tvos.weak_framework = 'AdSupport' s.requires_arc = true s.default_subspec = 'Core' @@ -33,8 +33,9 @@ Pod::Spec.new do |s| tm.dependency 'Adjust/Core' end - s.subspec 'WebBridge' do |wvjb| - wvjb.source_files = 'AdjustBridge/*.{h,m}', 'AdjustBridge/WebViewJavascriptBridge/*.{h,m}' - wvjb.dependency 'Adjust/Core' + s.subspec 'WebBridge' do |wb| + wb.source_files = 'AdjustBridge/*.{h,m}', 'AdjustBridge/WebViewJavascriptBridge/*.{h,m}' + wb.dependency 'Adjust/Core' + wb.ios.deployment_target = '6.0' end end From f9a49d3bc9d3f5d532faeed56054dceedd2430df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uglje=C5=A1a=20Erceg?= Date: Wed, 15 Aug 2018 14:08:27 +0200 Subject: [PATCH 67/67] Update CHANGELOG.md --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c07eaecd2..977da7347 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +### Version 4.14.2 (15th August 2018) +#### Added +- Added support for iMessage target. +- Added iMessage framework to releases page. +- Added Web Bridge framework to releases page. + +#### Changed +- Updated web view SDK (`v4.14.0`) and way of how it's being added to your iOS apps with web views. Please, make sure to check iOS web views SDK guide for more details. + +--- + ### Version 4.14.1 (18th June 2018) #### Added - Added `setPushToken:` method to `Adjust` interface to use push token as `NSString` data type. This method is intended only to be used by Adjust non native SDKs and you should not be using it in your native iOS app. Please, continue with usage of `setDeviceToken:` method as stated in `README`.