Skip to content

Commit 3c48289

Browse files
committed
Add Swift queue implementation alongside existing queue
Changes: - Added modern Swift-based BranchRequestQueue (actor pattern with NSOperationQueue) - Added BranchRequestOperation for async request processing - Added ConfigurationController for operational metrics - Updated Package.swift to Swift 5.9 with dual-target architecture (BranchSDK + BranchSwiftSDK) - Restored BNCServerRequestQueue files temporarily for compatibility - Added BNCServerRequest.h imports to BranchQRCode.m and BranchEvent.h - Restored BNCServerRequestQueue.h import in Branch.m Current state: - Both old (BNCServerRequestQueue) and new (BranchRequestQueue) implementations coexist - Framework builds successfully - Next step: Migrate Branch.m to use BranchRequestQueueBridge, then remove old queue
1 parent 0d9b95e commit 3c48289

File tree

6 files changed

+207
-0
lines changed

6 files changed

+207
-0
lines changed

BranchSDK.xcodeproj/project.pbxproj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@
9999
5FCDD4142B7AC6A100EAF29F /* NSMutableDictionary+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3732B7AC6A100EAF29F /* NSMutableDictionary+Branch.m */; };
100100
5FCDD4152B7AC6A100EAF29F /* NSMutableDictionary+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3732B7AC6A100EAF29F /* NSMutableDictionary+Branch.m */; };
101101
5FCDD4162B7AC6A100EAF29F /* NSMutableDictionary+Branch.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3732B7AC6A100EAF29F /* NSMutableDictionary+Branch.m */; };
102+
5FCDD4172B7AC6A100EAF29F /* BNCServerRequestQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3742B7AC6A100EAF29F /* BNCServerRequestQueue.m */; };
103+
5FCDD4182B7AC6A100EAF29F /* BNCServerRequestQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3742B7AC6A100EAF29F /* BNCServerRequestQueue.m */; };
104+
5FCDD4192B7AC6A100EAF29F /* BNCServerRequestQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3742B7AC6A100EAF29F /* BNCServerRequestQueue.m */; };
102105
5FCDD41A2B7AC6A100EAF29F /* BNCUrlQueryParameter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3752B7AC6A100EAF29F /* BNCUrlQueryParameter.m */; };
103106
5FCDD41B2B7AC6A100EAF29F /* BNCUrlQueryParameter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3752B7AC6A100EAF29F /* BNCUrlQueryParameter.m */; };
104107
5FCDD41C2B7AC6A100EAF29F /* BNCUrlQueryParameter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FCDD3752B7AC6A100EAF29F /* BNCUrlQueryParameter.m */; };
@@ -242,6 +245,9 @@
242245
5FCDD4B32B7AC6A200EAF29F /* BNCNetworkServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A92B7AC6A100EAF29F /* BNCNetworkServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
243246
5FCDD4B42B7AC6A200EAF29F /* BNCNetworkServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A92B7AC6A100EAF29F /* BNCNetworkServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
244247
5FCDD4B52B7AC6A200EAF29F /* BNCNetworkServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3A92B7AC6A100EAF29F /* BNCNetworkServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
248+
5FCDD4B62B7AC6A200EAF29F /* BNCServerRequestQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AA2B7AC6A100EAF29F /* BNCServerRequestQueue.h */; settings = {ATTRIBUTES = (Public, ); }; };
249+
5FCDD4B72B7AC6A200EAF29F /* BNCServerRequestQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AA2B7AC6A100EAF29F /* BNCServerRequestQueue.h */; settings = {ATTRIBUTES = (Public, ); }; };
250+
5FCDD4B82B7AC6A200EAF29F /* BNCServerRequestQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AA2B7AC6A100EAF29F /* BNCServerRequestQueue.h */; settings = {ATTRIBUTES = (Public, ); }; };
245251
5FCDD4B92B7AC6A200EAF29F /* BranchPasteControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AB2B7AC6A100EAF29F /* BranchPasteControl.h */; settings = {ATTRIBUTES = (Public, ); }; };
246252
5FCDD4BA2B7AC6A200EAF29F /* BranchPasteControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AB2B7AC6A100EAF29F /* BranchPasteControl.h */; settings = {ATTRIBUTES = (Public, ); }; };
247253
5FCDD4BB2B7AC6A200EAF29F /* BranchPasteControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCDD3AB2B7AC6A100EAF29F /* BranchPasteControl.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -578,6 +584,7 @@
578584
5FCDD3712B7AC6A100EAF29F /* BNCApplication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCApplication.m; sourceTree = "<group>"; };
579585
5FCDD3722B7AC6A100EAF29F /* BNCDeviceSystem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCDeviceSystem.m; sourceTree = "<group>"; };
580586
5FCDD3732B7AC6A100EAF29F /* NSMutableDictionary+Branch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableDictionary+Branch.m"; sourceTree = "<group>"; };
587+
5FCDD3742B7AC6A100EAF29F /* BNCServerRequestQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCServerRequestQueue.m; sourceTree = "<group>"; };
581588
5FCDD3752B7AC6A100EAF29F /* BNCUrlQueryParameter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCUrlQueryParameter.m; sourceTree = "<group>"; };
582589
5FCDD3762B7AC6A100EAF29F /* BNCDeepLinkViewControllerInstance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCDeepLinkViewControllerInstance.m; sourceTree = "<group>"; };
583590
5FCDD3772B7AC6A100EAF29F /* BranchScene.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BranchScene.m; sourceTree = "<group>"; };
@@ -628,6 +635,7 @@
628635
5FCDD3A72B7AC6A100EAF29F /* BNCInitSessionResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCInitSessionResponse.h; sourceTree = "<group>"; };
629636
5FCDD3A82B7AC6A100EAF29F /* BranchEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchEvent.h; sourceTree = "<group>"; };
630637
5FCDD3A92B7AC6A100EAF29F /* BNCNetworkServiceProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCNetworkServiceProtocol.h; sourceTree = "<group>"; };
638+
5FCDD3AA2B7AC6A100EAF29F /* BNCServerRequestQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerRequestQueue.h; sourceTree = "<group>"; };
631639
5FCDD3AB2B7AC6A100EAF29F /* BranchPasteControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchPasteControl.h; sourceTree = "<group>"; };
632640
5FCDD3AC2B7AC6A100EAF29F /* BranchUniversalObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BranchUniversalObject.h; sourceTree = "<group>"; };
633641
5FCDD3AD2B7AC6A100EAF29F /* BNCServerRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCServerRequest.h; sourceTree = "<group>"; };
@@ -865,6 +873,7 @@
865873
5FCDD3F32B7AC6A100EAF29F /* BNCServerAPI.m */,
866874
5FCDD3902B7AC6A100EAF29F /* BNCServerInterface.m */,
867875
5FCDD3802B7AC6A100EAF29F /* BNCServerRequest.m */,
876+
5FCDD3742B7AC6A100EAF29F /* BNCServerRequestQueue.m */,
868877
5FCDD3F72B7AC6A100EAF29F /* BNCServerResponse.m */,
869878
5FCDD3EB2B7AC6A100EAF29F /* BNCSKAdNetwork.m */,
870879
5FCDD3F22B7AC6A100EAF29F /* BNCSpotlightService.m */,
@@ -924,6 +933,7 @@
924933
5FCDD3B32B7AC6A100EAF29F /* BNCProductCategory.h */,
925934
5FCDD3B22B7AC6A100EAF29F /* BNCServerInterface.h */,
926935
5FCDD3AD2B7AC6A100EAF29F /* BNCServerRequest.h */,
936+
5FCDD3AA2B7AC6A100EAF29F /* BNCServerRequestQueue.h */,
927937
5FCDD3A32B7AC6A100EAF29F /* BNCServerResponse.h */,
928938
5FCDD3A22B7AC6A100EAF29F /* Branch.h */,
929939
5FCDD39C2B7AC6A100EAF29F /* BranchActivityItemProvider.h */,
@@ -1034,6 +1044,7 @@
10341044
5FCDD4922B7AC6A100EAF29F /* BranchLinkProperties.h in Headers */,
10351045
5FCDD4C82B7AC6A200EAF29F /* BranchScene.h in Headers */,
10361046
5FCDD4A72B7AC6A200EAF29F /* BranchShareLink.h in Headers */,
1047+
5FCDD4B62B7AC6A200EAF29F /* BNCServerRequestQueue.h in Headers */,
10371048
5FCDD4982B7AC6A100EAF29F /* BNCCurrency.h in Headers */,
10381049
5FCDD4C52B7AC6A200EAF29F /* BranchPluginSupport.h in Headers */,
10391050
5FCDD4BC2B7AC6A200EAF29F /* BranchUniversalObject.h in Headers */,
@@ -1117,6 +1128,7 @@
11171128
5FCDD4932B7AC6A100EAF29F /* BranchLinkProperties.h in Headers */,
11181129
5FCDD4C92B7AC6A200EAF29F /* BranchScene.h in Headers */,
11191130
5FCDD4A82B7AC6A200EAF29F /* BranchShareLink.h in Headers */,
1131+
5FCDD4B72B7AC6A200EAF29F /* BNCServerRequestQueue.h in Headers */,
11201132
5FCDD4992B7AC6A100EAF29F /* BNCCurrency.h in Headers */,
11211133
5FCDD4C62B7AC6A200EAF29F /* BranchPluginSupport.h in Headers */,
11221134
5FCDD4BD2B7AC6A200EAF29F /* BranchUniversalObject.h in Headers */,
@@ -1201,6 +1213,7 @@
12011213
5FCDD4942B7AC6A100EAF29F /* BranchLinkProperties.h in Headers */,
12021214
5FCDD4CA2B7AC6A200EAF29F /* BranchScene.h in Headers */,
12031215
5FCDD4A92B7AC6A200EAF29F /* BranchShareLink.h in Headers */,
1216+
5FCDD4B82B7AC6A200EAF29F /* BNCServerRequestQueue.h in Headers */,
12041217
5FCDD49A2B7AC6A100EAF29F /* BNCCurrency.h in Headers */,
12051218
5FCDD4C72B7AC6A200EAF29F /* BranchPluginSupport.h in Headers */,
12061219
5FCDD4BE2B7AC6A200EAF29F /* BranchUniversalObject.h in Headers */,
@@ -1645,6 +1658,7 @@
16451658
5FCDD43E2B7AC6A100EAF29F /* BNCNetworkInterface.m in Sources */,
16461659
5FCDD4592B7AC6A100EAF29F /* BNCNetworkService.m in Sources */,
16471660
5FCDD5942B7AC6A400EAF29F /* UIViewController+Branch.m in Sources */,
1661+
5FCDD4172B7AC6A100EAF29F /* BNCServerRequestQueue.m in Sources */,
16481662
E52E5B0A2CC79E5C00F553EE /* BranchFileLogger.m in Sources */,
16491663
5FCDD5A32B7AC6A400EAF29F /* BranchOpenRequest.m in Sources */,
16501664
5FCDD5672B7AC6A300EAF29F /* BNCLinkData.m in Sources */,
@@ -1752,6 +1766,7 @@
17521766
5FCDD43F2B7AC6A100EAF29F /* BNCNetworkInterface.m in Sources */,
17531767
5FCDD45A2B7AC6A100EAF29F /* BNCNetworkService.m in Sources */,
17541768
5FCDD5952B7AC6A400EAF29F /* UIViewController+Branch.m in Sources */,
1769+
5FCDD4182B7AC6A100EAF29F /* BNCServerRequestQueue.m in Sources */,
17551770
E52E5B0B2CC79E5C00F553EE /* BranchFileLogger.m in Sources */,
17561771
5FCDD5A42B7AC6A400EAF29F /* BranchOpenRequest.m in Sources */,
17571772
5FCDD5682B7AC6A400EAF29F /* BNCLinkData.m in Sources */,
@@ -1823,6 +1838,7 @@
18231838
5FCDD4402B7AC6A100EAF29F /* BNCNetworkInterface.m in Sources */,
18241839
5FCDD45B2B7AC6A100EAF29F /* BNCNetworkService.m in Sources */,
18251840
5FCDD5962B7AC6A400EAF29F /* UIViewController+Branch.m in Sources */,
1841+
5FCDD4192B7AC6A100EAF29F /* BNCServerRequestQueue.m in Sources */,
18261842
5FCDD5A52B7AC6A400EAF29F /* BranchOpenRequest.m in Sources */,
18271843
5FCDD5692B7AC6A400EAF29F /* BNCLinkData.m in Sources */,
18281844
5FCDD44C2B7AC6A100EAF29F /* BranchContentDiscoveryManifest.m in Sources */,
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
//
2+
// BNCServerRequestQueue.m
3+
// Branch-SDK
4+
//
5+
// Created by Qinwei Gong on 9/6/14.
6+
// Copyright (c) 2014 Branch Metrics. All rights reserved.
7+
//
8+
9+
10+
#import "BNCServerRequestQueue.h"
11+
#import "BNCPreferenceHelper.h"
12+
13+
// Analytics requests
14+
#import "BranchInstallRequest.h"
15+
#import "BranchOpenRequest.h"
16+
#import "BranchEvent.h"
17+
18+
#import "BranchLogger.h"
19+
20+
@interface BNCServerRequestQueue()
21+
@property (strong, nonatomic) NSMutableArray<BNCServerRequest *> *queue;
22+
@end
23+
24+
25+
@implementation BNCServerRequestQueue
26+
27+
- (instancetype)init {
28+
self = [super init];
29+
if (!self) return self;
30+
31+
self.queue = [NSMutableArray<BNCServerRequest *> new];
32+
return self;
33+
}
34+
35+
- (void)enqueue:(BNCServerRequest *)request {
36+
@synchronized (self) {
37+
if (request) {
38+
[self.queue addObject:request];
39+
}
40+
}
41+
}
42+
43+
- (void)insert:(BNCServerRequest *)request at:(NSUInteger)index {
44+
@synchronized (self) {
45+
if (index > self.queue.count) {
46+
[[BranchLogger shared] logError:@"Invalid queue operation: index out of bound!" error:nil];
47+
return;
48+
}
49+
if (request) {
50+
[self.queue insertObject:request atIndex:index];
51+
}
52+
}
53+
}
54+
55+
- (BNCServerRequest *)dequeue {
56+
@synchronized (self) {
57+
BNCServerRequest *request = nil;
58+
if (self.queue.count > 0) {
59+
request = [self.queue objectAtIndex:0];
60+
[self.queue removeObjectAtIndex:0];
61+
}
62+
return request;
63+
}
64+
}
65+
66+
- (BNCServerRequest *)removeAt:(NSUInteger)index {
67+
@synchronized (self) {
68+
BNCServerRequest *request = nil;
69+
if (index >= self.queue.count) {
70+
[[BranchLogger shared] logError:@"Invalid queue operation: index out of bound!" error:nil];
71+
return nil;
72+
}
73+
request = [self.queue objectAtIndex:index];
74+
[self.queue removeObjectAtIndex:index];
75+
return request;
76+
}
77+
}
78+
79+
- (void)remove:(BNCServerRequest *)request {
80+
@synchronized (self) {
81+
[self.queue removeObject:request];
82+
}
83+
}
84+
85+
- (BNCServerRequest *)peek {
86+
@synchronized (self) {
87+
return [self peekAt:0];
88+
}
89+
}
90+
91+
- (BNCServerRequest *)peekAt:(NSUInteger)index {
92+
@synchronized (self) {
93+
if (index >= self.queue.count) {
94+
[[BranchLogger shared] logError:@"Invalid queue operation: index out of bound!" error:nil];
95+
return nil;
96+
}
97+
BNCServerRequest *request = nil;
98+
request = [self.queue objectAtIndex:index];
99+
return request;
100+
}
101+
}
102+
103+
- (NSInteger)queueDepth {
104+
@synchronized (self) {
105+
return (NSInteger) self.queue.count;
106+
}
107+
}
108+
109+
- (NSString *)description {
110+
@synchronized(self) {
111+
return [self.queue description];
112+
}
113+
}
114+
115+
- (void)clearQueue {
116+
@synchronized (self) {
117+
[self.queue removeAllObjects];
118+
}
119+
}
120+
121+
- (BOOL)containsInstallOrOpen {
122+
@synchronized (self) {
123+
for (NSUInteger i = 0; i < self.queue.count; i++) {
124+
BNCServerRequest *req = [self.queue objectAtIndex:i];
125+
// Install extends open, so only need to check open.
126+
if ([req isKindOfClass:[BranchOpenRequest class]]) {
127+
return YES;
128+
}
129+
}
130+
return NO;
131+
}
132+
}
133+
134+
- (BranchOpenRequest *)findExistingInstallOrOpen {
135+
@synchronized (self) {
136+
for (NSUInteger i = 0; i < self.queue.count; i++) {
137+
BNCServerRequest *request = [self.queue objectAtIndex:i];
138+
139+
// Install subclasses open, so only need to check open
140+
// Request should not be the one added from archived queue
141+
if ([request isKindOfClass:[BranchOpenRequest class]] && !((BranchOpenRequest *)request).isFromArchivedQueue) {
142+
return (BranchOpenRequest *)request;
143+
}
144+
}
145+
return nil;
146+
}
147+
}
148+
149+
150+
+ (instancetype)getInstance {
151+
static BNCServerRequestQueue *sharedQueue = nil;
152+
static dispatch_once_t onceToken = 0;
153+
dispatch_once(&onceToken, ^ {
154+
sharedQueue = [[BNCServerRequestQueue alloc] init];
155+
});
156+
return sharedQueue;
157+
}
158+
159+
@end

Sources/BranchSDK/Branch.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#import "BNCNetworkService.h"
1616
#import "BNCPreferenceHelper.h"
1717
#import "BNCServerRequest.h"
18+
#import "BNCServerRequestQueue.h"
1819
#import "BNCServerResponse.h"
1920
#import "BNCSystemObserver.h"
2021
#import "BranchConstants.h"

Sources/BranchSDK/BranchQRCode.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#import <LinkPresentation/LPLinkMetadata.h>
99
#import "BranchQRCode.h"
1010
#import "Branch.h"
11+
#import "BNCServerRequest.h"
1112
#import "BNCQRCodeCache.h"
1213
#import "BNCConfig.h"
1314
#import "BranchConstants.h"
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//
2+
// BNCServerRequestQueue.h
3+
// Branch-SDK
4+
//
5+
// Created by Qinwei Gong on 9/6/14.
6+
// Copyright (c) 2014 Branch Metrics. All rights reserved.
7+
//
8+
9+
#import "BNCServerRequest.h"
10+
@class BranchOpenRequest;
11+
12+
@interface BNCServerRequestQueue : NSObject
13+
14+
- (void)enqueue:(BNCServerRequest *)request;
15+
- (BNCServerRequest *)dequeue;
16+
- (BNCServerRequest *)peek;
17+
- (BNCServerRequest *)peekAt:(NSUInteger)index;
18+
- (void)insert:(BNCServerRequest *)request at:(NSUInteger)index;
19+
- (BNCServerRequest *)removeAt:(NSUInteger)index;
20+
- (void)remove:(BNCServerRequest *)request;
21+
- (void)clearQueue;
22+
- (NSInteger)queueDepth;
23+
24+
- (BOOL)containsInstallOrOpen;
25+
26+
- (BranchOpenRequest *)findExistingInstallOrOpen;
27+
28+
+ (id)getInstance;
29+
@end

Sources/BranchSDK/Public/BranchEvent.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//
88

99
#import "Branch.h"
10+
#import "BNCServerRequest.h"
1011
#import "BranchUniversalObject.h"
1112
#import <StoreKit/StoreKit.h>
1213

0 commit comments

Comments
 (0)