Skip to content

Commit d2f3f60

Browse files
author
Edward Smith
committed
Fixed merge conflicts.
2 parents 7444179 + e5291c3 commit d2f3f60

File tree

8 files changed

+134
-93
lines changed

8 files changed

+134
-93
lines changed

Branch-SDK/Branch-SDK/BNCCallbacks.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111

1212
@class BranchUniversalObject, BranchLinkProperties;
1313

14-
typedef void (^callbackWithParams) (NSDictionary * _Nonnull params, NSError * _Nullable error);
15-
typedef void (^callbackWithUrl) (NSString * _Nonnull url, NSError * _Nullable error);
14+
typedef void (^callbackWithParams) (NSDictionary * _Nullable params, NSError * _Nullable error);
15+
typedef void (^callbackWithUrl) (NSString * _Nullable url, NSError * _Nullable error);
1616
typedef void (^callbackWithStatus) (BOOL changed, NSError * _Nullable error);
1717
typedef void (^callbackWithList) (NSArray * _Nullable list, NSError * _Nullable error);
1818
typedef void (^callbackWithUrlAndSpotlightIdentifier) (NSString * _Nullable url, NSString * _Nullable spotlightIdentifier, NSError * _Nullable error);
19-
typedef void (^callbackWithBranchUniversalObject) (BranchUniversalObject * _Nonnull universalObject, BranchLinkProperties * _Nonnull linkProperties, NSError * _Nullable error);
19+
typedef void (^callbackWithBranchUniversalObject) (BranchUniversalObject * _Nullable universalObject, BranchLinkProperties * _Nullable linkProperties, NSError * _Nullable error);
2020

2121
#endif /* BNCCallbacks_h */

Branch-SDK/Branch-SDK/BNCPreferenceHelper.m

Lines changed: 89 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -374,17 +374,20 @@ - (void)setUniversalLinkUrl:(NSString *)universalLinkUrl {
374374
}
375375

376376
- (NSString *)sessionParams {
377-
if (_sessionParams) {
378-
_sessionParams = [self readStringFromDefaults:BRANCH_PREFS_KEY_SESSION_PARAMS];
377+
@synchronized (self) {
378+
if (!_sessionParams) {
379+
_sessionParams = [self readStringFromDefaults:BRANCH_PREFS_KEY_SESSION_PARAMS];
380+
}
381+
return _sessionParams;
379382
}
380-
381-
return _sessionParams;
382383
}
383384

384385
- (void)setSessionParams:(NSString *)sessionParams {
385-
if (![_sessionParams isEqualToString:sessionParams]) {
386-
_sessionParams = sessionParams;
387-
[self writeObjectToDefaults:BRANCH_PREFS_KEY_SESSION_PARAMS value:sessionParams];
386+
@synchronized (self) {
387+
if (![_sessionParams isEqualToString:sessionParams]) {
388+
_sessionParams = sessionParams;
389+
[self writeObjectToDefaults:BRANCH_PREFS_KEY_SESSION_PARAMS value:sessionParams];
390+
}
388391
}
389392
}
390393

@@ -606,42 +609,48 @@ - (NSDictionary *)getContentAnalyticsManifest {
606609
return (NSDictionary *)[self readObjectFromDefaults:BRANCH_PREFS_KEY_ANALYTICS_MANIFEST];
607610
}
608611

612+
609613
#pragma mark - Writing To Persistence
610614

615+
611616
- (void)writeIntegerToDefaults:(NSString *)key value:(NSInteger)value {
612-
self.persistenceDict[key] = @(value);
613-
[self persistPrefsToDisk];
617+
[self writeObjectToDefaults:key value:@(value)];
614618
}
615619

616620
- (void)writeBoolToDefaults:(NSString *)key value:(BOOL)value {
617-
self.persistenceDict[key] = @(value);
618-
[self persistPrefsToDisk];
621+
[self writeObjectToDefaults:key value:@(value)];
619622
}
620623

621624
- (void)writeObjectToDefaults:(NSString *)key value:(NSObject *)value {
622-
if (value) {
623-
self.persistenceDict[key] = value;
624-
}
625-
else {
626-
[self.persistenceDict removeObjectForKey:key];
625+
@synchronized (self) {
626+
if (value) {
627+
self.persistenceDict[key] = value;
628+
}
629+
else {
630+
[self.persistenceDict removeObjectForKey:key];
631+
}
632+
[self persistPrefsToDisk];
627633
}
628-
629-
[self persistPrefsToDisk];
630634
}
631635

632636
- (void)persistPrefsToDisk {
633637
@synchronized (self) {
634-
NSDictionary *persistenceDict = [self.persistenceDict copy];
638+
if (!self.persistenceDict) return;
639+
NSData *data = nil;
640+
@try {
641+
data = [NSKeyedArchiver archivedDataWithRootObject:self.persistenceDict];
642+
}
643+
@catch (id exception) {
644+
data = nil;
645+
[self logWarning:
646+
[NSString stringWithFormat:@"Exception creating preferences data: %@.",
647+
exception]];
648+
}
649+
if (!data) {
650+
[self logWarning:@"Can't create preferences data."];
651+
return;
652+
}
635653
NSBlockOperation *newPersistOp = [NSBlockOperation blockOperationWithBlock:^ {
636-
NSData *data = nil;
637-
@try {
638-
data = [NSKeyedArchiver archivedDataWithRootObject:persistenceDict];
639-
} @catch (id n) {
640-
}
641-
if (!data) {
642-
[self logWarning:@"Can't create preferences archive."];
643-
return;
644-
}
645654
NSError *error = nil;
646655
[data writeToURL:self.class.URLForPrefsFile
647656
options:NSDataWritingAtomic error:&error];
@@ -651,7 +660,7 @@ - (void)persistPrefsToDisk {
651660
@"Failed to persist preferences to disk: %@.", error]];
652661
}
653662
}];
654-
[self.persistPrefsQueue addOperation:newPersistOp];
663+
[self.persistPrefsQueue addOperation:newPersistOp];
655664
}
656665
}
657666

@@ -717,35 +726,64 @@ + (NSString *)prefsFile_deprecated {
717726
return path;
718727
}
719728

720-
+ (NSURL*) URLForBranchDirectory {
729+
+ (NSURL* _Nonnull) URLForBranchDirectory {
730+
NSSearchPathDirectory kSearchDirectories[] = {
731+
NSApplicationSupportDirectory,
732+
NSCachesDirectory,
733+
NSDocumentDirectory,
734+
};
735+
736+
#define _countof(array) (sizeof(array)/sizeof(array[0]))
737+
738+
for (NSSearchPathDirectory directory = 0; directory < _countof(kSearchDirectories); directory++) {
739+
NSURL *URL = [self createDirectoryForBranchURLWithPath:kSearchDirectories[directory]];
740+
if (URL) return URL;
741+
}
742+
743+
#undef _countof
744+
745+
// Worst case backup plan:
746+
NSString *path = [@"~/Library/io.branch" stringByExpandingTildeInPath];
747+
NSURL *branchURL = [NSURL fileURLWithPath:path isDirectory:YES];
748+
NSFileManager *fileManager = [NSFileManager defaultManager];
721749
NSError *error = nil;
722-
NSURL *URL =
723-
[[NSFileManager defaultManager]
724-
URLForDirectory:NSApplicationSupportDirectory
725-
inDomain:NSUserDomainMask
726-
appropriateForURL:nil
727-
create:YES
750+
BOOL success =
751+
[fileManager
752+
createDirectoryAtURL:branchURL
753+
withIntermediateDirectories:YES
754+
attributes:nil
728755
error:&error];
729-
if (error) {
730-
NSLog(@"Error creating URLForPrefsDirectory: %@.", error);
731-
return nil;
756+
if (!success) {
757+
NSLog(@"Worst case CreateBranchURL error: %@ URL: %@.", error, branchURL);
732758
}
733-
URL = [URL URLByAppendingPathComponent:@"io.branch"];
734-
[[NSFileManager defaultManager]
735-
createDirectoryAtURL:URL
736-
withIntermediateDirectories:YES
737-
attributes:nil
738-
error:&error];
739-
if (error) {
740-
NSLog(@"Error creating URLForPrefsDirectory: %@.", error);
741-
return nil;
759+
return branchURL;
760+
}
761+
762+
+ (NSURL* _Null_unspecified) createDirectoryForBranchURLWithPath:(NSSearchPathDirectory)directory {
763+
NSFileManager *fileManager = [NSFileManager defaultManager];
764+
NSArray *URLs = [fileManager URLsForDirectory:directory inDomains:NSUserDomainMask | NSLocalDomainMask];
765+
766+
for (NSURL *URL in URLs) {
767+
NSError *error = nil;
768+
NSURL *branchURL = [URL URLByAppendingPathComponent:@"io.branch" isDirectory:YES];
769+
BOOL success =
770+
[fileManager
771+
createDirectoryAtURL:branchURL
772+
withIntermediateDirectories:YES
773+
attributes:nil
774+
error:&error];
775+
if (success) {
776+
return branchURL;
777+
} else {
778+
NSLog(@"CreateBranchURL error: %@ URL: %@.", error, branchURL);
779+
}
742780
}
743-
return URL;
781+
return nil;
744782
}
745783

746-
+ (NSURL*) URLForPrefsFile {
784+
+ (NSURL* _Nonnull) URLForPrefsFile {
747785
NSURL *URL = [self URLForBranchDirectory];
748-
URL = [URL URLByAppendingPathComponent:BRANCH_PREFS_FILE];
786+
URL = [URL URLByAppendingPathComponent:BRANCH_PREFS_FILE isDirectory:NO];
749787
return URL;
750788
}
751789

Branch-SDK/Branch-SDK/BNCServerRequestQueue.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
- (void)clearQueue;
2727

2828
- (BOOL)containsInstallOrOpen;
29+
- (BOOL)removeInstallOrOpen;
2930
- (BOOL)containsClose;
3031
- (BranchOpenRequest *)moveInstallOrOpenToFront:(NSInteger)networkCount;
3132

Branch-SDK/Branch-SDK/BNCServerRequestQueue.m

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,21 @@ - (BOOL)containsInstallOrOpen {
131131
return NO;
132132
}
133133

134+
- (BOOL)removeInstallOrOpen {
135+
@synchronized (self.queue) {
136+
for (int i = 0; i < self.queue.count; i++) {
137+
BranchOpenRequest *req = [self.queue objectAtIndex:i];
138+
// Install extends open, so only need to check open.
139+
if ([req isKindOfClass:[BranchOpenRequest class]]) {
140+
req.callback = nil;
141+
[self remove:req];
142+
return YES;
143+
}
144+
}
145+
return NO;
146+
}
147+
}
148+
134149
- (BranchOpenRequest *)moveInstallOrOpenToFront:(NSInteger)networkCount {
135150
BOOL requestAlreadyInProgress = networkCount > 0;
136151

@@ -291,9 +306,9 @@ + (NSString *)queueFile_deprecated {
291306
return path;
292307
}
293308

294-
+ (NSURL*) URLForQueueFile {
309+
+ (NSURL* _Nonnull) URLForQueueFile {
295310
NSURL *URL = [BNCPreferenceHelper URLForBranchDirectory];
296-
URL = [URL URLByAppendingPathComponent:BRANCH_QUEUE_FILE];
311+
URL = [URL URLByAppendingPathComponent:BRANCH_QUEUE_FILE isDirectory:NO];
297312
return URL;
298313
}
299314

Branch-SDK/Branch-SDK/Branch.m

Lines changed: 17 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,10 @@ @interface Branch() <BranchDeepLinkingControllerCompletionDelegate, FABKit>
7272

7373

7474
@property (strong, nonatomic) BNCServerInterface *bServerInterface;
75-
@property (strong, nonatomic) NSTimer *sessionTimer;
7675
@property (strong, nonatomic) BNCServerRequestQueue *requestQueue;
7776
@property (strong, nonatomic) dispatch_semaphore_t processing_sema;
78-
@property (strong, nonatomic) callbackWithParams sessionInitWithParamsCallback;
79-
@property (strong, nonatomic) callbackWithBranchUniversalObject sessionInitWithBranchUniversalObjectCallback;
77+
@property (copy, nonatomic) callbackWithParams sessionInitWithParamsCallback;
78+
@property (copy, nonatomic) callbackWithBranchUniversalObject sessionInitWithBranchUniversalObjectCallback;
8079
@property (assign, nonatomic) NSInteger networkCount;
8180
@property (assign, nonatomic) BOOL isInitialized;
8281
@property (assign, nonatomic) BOOL shouldCallSessionInitCallback;
@@ -86,15 +85,15 @@ @interface Branch() <BranchDeepLinkingControllerCompletionDelegate, FABKit>
8685
@property (strong, nonatomic) BNCContentDiscoveryManager *contentDiscoveryManager;
8786
@property (strong, nonatomic) NSString *branchKey;
8887
@property (strong, nonatomic) NSMutableDictionary *deepLinkControllers;
89-
@property (weak, nonatomic) UIViewController *deepLinkPresentingController;
88+
@property (weak, nonatomic) UIViewController *deepLinkPresentingController;
9089
@property (assign, nonatomic) BOOL useCookieBasedMatching;
9190
@property (strong, nonatomic) NSDictionary *deepLinkDebugParams;
9291
@property (assign, nonatomic) BOOL accountForFacebookSDK;
9392
@property (assign, nonatomic) id FBSDKAppLinkUtility;
9493
@property (assign, nonatomic) BOOL delayForAppleAds;
9594
@property (assign, nonatomic) BOOL searchAdsDebugMode;
9695
@property (strong, nonatomic) NSMutableArray *whiteListedSchemeList;
97-
96+
@property (assign, nonatomic) BOOL appIsInBackground;
9897
@end
9998

10099
@implementation Branch
@@ -1152,6 +1151,7 @@ - (BNCLinkData *)prepareLinkDataFor:(NSArray *)tags andAlias:(NSString *)alias a
11521151

11531152
#pragma mark - BranchUniversalObject methods
11541153

1154+
11551155
- (void)registerViewWithParams:(NSDictionary *)params andCallback:(callbackWithParams)callback {
11561156
[self initSessionIfNeededAndNotInProgress];
11571157

@@ -1164,22 +1164,18 @@ - (void)registerViewWithParams:(NSDictionary *)params andCallback:(callbackWithP
11641164
#pragma mark - Application State Change methods
11651165

11661166
- (void)applicationDidBecomeActive {
1167-
[self clearTimer];
1167+
self.appIsInBackground = NO;
11681168
if (!self.isInitialized && !self.preferenceHelper.shouldWaitForInit && ![self.requestQueue containsInstallOrOpen]) {
11691169
[self initUserSessionAndCallCallback:YES];
11701170
}
11711171
}
11721172

11731173
- (void)applicationWillResignActive {
1174-
[self clearTimer];
1175-
self.sessionTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(callClose) userInfo:nil repeats:NO];
1174+
self.appIsInBackground = YES;
1175+
[self callClose];
11761176
[self.requestQueue persistImmediately];
11771177
}
11781178

1179-
- (void)clearTimer {
1180-
[self.sessionTimer invalidate];
1181-
}
1182-
11831179
- (void)callClose {
11841180
if (self.isInitialized) {
11851181
self.isInitialized = NO;
@@ -1268,11 +1264,7 @@ - (void)processNextQueueItem {
12681264
[req processResponse:nil error:[NSError errorWithDomain:BNCErrorDomain code:BNCInitError userInfo:@{ NSLocalizedDescriptionKey: @"Branch User Session has not been initialized" }]];
12691265
return;
12701266
}
1271-
1272-
if (![req isKindOfClass:[BranchCloseRequest class]]) {
1273-
[self clearTimer];
1274-
}
1275-
1267+
12761268
[req makeRequest:self.bServerInterface key:self.branchKey callback:callback];
12771269
}
12781270
}
@@ -1338,26 +1330,17 @@ - (void)registerInstallOrOpen:(Class)clazz {
13381330
if ([BNCSystemObserver getOSVersion].integerValue >= 9 && self.useCookieBasedMatching) {
13391331
[[BNCStrongMatchHelper strongMatchHelper] createStrongMatchWithBranchKey:self.branchKey];
13401332
}
1341-
1342-
// If there isn't already an Open / Install request, add one to the queue
1343-
if (![self.requestQueue containsInstallOrOpen]) {
1344-
BranchOpenRequest *req = [[clazz alloc] initWithCallback:initSessionCallback];
1345-
1346-
[self insertRequestAtFront:req];
1347-
}
1348-
// If there is already one in the queue, make sure it's in the front.
1349-
// Make sure a callback is associated with this request. This callback can
1350-
// be cleared if the app is terminated while an Open/Install is pending.
1351-
else {
1352-
BranchOpenRequest *req = [self.requestQueue moveInstallOrOpenToFront:self.networkCount];
1353-
req.callback = initSessionCallback;
1354-
}
1355-
1333+
1334+
if ([self.requestQueue removeInstallOrOpen])
1335+
self.networkCount = 0;
1336+
BranchOpenRequest *req = [[clazz alloc] initWithCallback:initSessionCallback];
1337+
[self insertRequestAtFront:req];
13561338
[self processNextQueueItem];
13571339
}
13581340

13591341
- (void)handleInitSuccess {
1360-
self.isInitialized = YES;
1342+
if (!self.appIsInBackground)
1343+
self.isInitialized = YES;
13611344

13621345
NSDictionary *latestReferringParams = [self getLatestReferringParams];
13631346
if (self.shouldCallSessionInitCallback) {
@@ -1436,4 +1419,4 @@ + (NSString *)kitDisplayVersion {
14361419
return @"0.12.16";
14371420
}
14381421

1439-
@end
1422+
@end

Branch-SDK/Branch-SDK/BranchContentDiscoverer.m

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,14 +240,17 @@ - (UIViewController *)getActiveViewController:(UIViewController *)rootViewContro
240240
return activeController;
241241
}
242242

243-
- (void)addFormattedContentData:(NSMutableArray *)contentDataArray withText:(NSString *)contentData clearText:(BOOL)isClearText {
243+
- (void)addFormattedContentData:(NSMutableArray *)contentDataArray
244+
withText:(NSString *)contentData
245+
clearText:(BOOL)isClearText {
244246
if (contentData && contentData.length > _cdManifest.maxTextLen) {
245247
contentData = [contentData substringToIndex:_cdManifest.maxTextLen];
246248
}
247249
if (!isClearText) {
248250
contentData = [BNCEncodingUtils md5Encode:contentData];
249251
}
250-
[contentDataArray addObject:contentData];
252+
if (contentData)
253+
[contentDataArray addObject:contentData];
251254
}
252255

253256
- (NSString *)getContentText:(UIView *)view {

Branch-SDK/Branch-SDK/Requests/BranchOpenRequest.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
@interface BranchOpenRequest : BNCServerRequest
1313

14-
@property (strong, nonatomic) callbackWithStatus callback;
14+
@property (copy, nonatomic) callbackWithStatus callback;
1515

1616
- (id)initWithCallback:(callbackWithStatus)callback;
1717
- (id)initWithCallback:(callbackWithStatus)callback isInstall:(BOOL)isInstall;

0 commit comments

Comments
 (0)