diff --git a/Source/ARTNSMutableURLRequest+ARTUtils.m b/Source/ARTNSMutableURLRequest+ARTUtils.m index cfe381ed6..7a0770511 100644 --- a/Source/ARTNSMutableURLRequest+ARTUtils.m +++ b/Source/ARTNSMutableURLRequest+ARTUtils.m @@ -2,14 +2,27 @@ @implementation NSMutableURLRequest (ARTUtils) -- (void)appendQueryItem:(NSURLQueryItem *)item { +- (void)setQueryItemNamed:(NSString *)name withValue:(NSString *)value { NSURLComponents *components = [NSURLComponents componentsWithURL:self.URL resolvingAgainstBaseURL:YES]; - if(components == nil) { + if (components == nil) { return; } - NSMutableArray *mutableQueryItems = [NSMutableArray arrayWithArray:components.queryItems]; - [mutableQueryItems addObject:item]; + NSMutableArray *mutableQueryItems = [NSMutableArray arrayWithArray:components.queryItems ?: @[]]; + + // Remove existing query item with the same name if it exists + NSMutableIndexSet *indicesToRemove = [NSMutableIndexSet indexSet]; + for (NSUInteger i = 0; i < mutableQueryItems.count; i++) { + if ([mutableQueryItems[i].name isEqualToString:name]) { + [indicesToRemove addIndex:i]; + } + } + [mutableQueryItems removeObjectsAtIndexes:indicesToRemove]; + + // Add the new query item + NSURLQueryItem *newItem = [NSURLQueryItem queryItemWithName:name value:value]; + [mutableQueryItems addObject:newItem]; + components.queryItems = mutableQueryItems; NSURL *modifiedURL = components.URL; diff --git a/Source/ARTRest.m b/Source/ARTRest.m index b17792a3e..2e2e14325 100644 --- a/Source/ARTRest.m +++ b/Source/ARTRest.m @@ -368,7 +368,7 @@ - (NSString *)agentIdentifierWithWrapperSDKAgents:(nullable NSDictionary String { return self.replacingOccurrences(of: value, with: string, options: NSString.CompareOptions.literal, range: nil) } - + + func substring(after: String) -> String? { + guard let range = self.range(of: after) else { + return nil + } + let startIndex = range.upperBound + return String(self[startIndex...]) + } + + func substring(before: String) -> String? { + guard let range = self.range(of: before) else { + return nil + } + let endIndex = range.lowerBound + return String(self[.. String? { + guard let startRange = self.range(of: between) else { + return nil + } + let searchStartIndex = startRange.upperBound + let remainingString = String(self[searchStartIndex...]) + guard let endRange = remainingString.range(of: andString) else { + return nil + } + let endIndex = endRange.lowerBound + return String(remainingString[..