Skip to content

Commit 9d3f624

Browse files
authored
Merge pull request #644 from adjust/v4332
Version 4.33.2
2 parents f7f2d43 + 526f51a commit 9d3f624

File tree

11 files changed

+135
-55
lines changed

11 files changed

+135
-55
lines changed

Adjust.podspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
Pod::Spec.new do |s|
22
s.name = "Adjust"
3-
s.version = "4.33.1"
3+
s.version = "4.33.2"
44
s.summary = "This is the iOS SDK of adjust. You can read more about it at http://adjust.com."
55
s.homepage = "https://github.com/adjust/ios_sdk"
66
s.license = { :type => 'MIT', :file => 'MIT-LICENSE' }
77
s.author = { "Adjust GmbH" => "[email protected]" }
8-
s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.33.1" }
8+
s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.33.2" }
99
s.ios.deployment_target = '9.0'
1010
s.tvos.deployment_target = '9.0'
1111
s.framework = 'SystemConfiguration'

Adjust/ADJActivityHandler.m

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,11 +174,13 @@ - (id)initWithConfig:(ADJConfig *)adjustConfig
174174
[self readActivityState];
175175

176176
// register SKAdNetwork attribution if we haven't already
177-
[[ADJSKAdNetwork getInstance] adjRegisterWithCompletionHandler:^(NSError * _Nonnull error) {
178-
if (error) {
179-
// handle error
180-
}
181-
}];
177+
if (self.adjustConfig.isSKAdNetworkHandlingActive) {
178+
[[ADJSKAdNetwork getInstance] adjRegisterWithCompletionHandler:^(NSError * _Nonnull error) {
179+
if (error) {
180+
// handle error
181+
}
182+
}];
183+
}
182184

183185
self.internalState = [[ADJInternalState alloc] init];
184186

Adjust/ADJSKAdNetwork.m

Lines changed: 66 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,6 @@
1616
@interface ADJSKAdNetwork()
1717

1818
@property (nonatomic, weak) id<ADJLogger> logger;
19-
@property (nonatomic, strong) Class clsSkAdNetwork;
20-
@property (nonatomic, assign) SEL selRegisterAppForAdNetworkAttribution;
21-
@property (nonatomic, assign) SEL selUpdateConversionValue;
22-
@property (nonatomic, assign) SEL selUpdatePostbackConversionValueCompletionHandler;
23-
@property (nonatomic, assign) SEL selUpdatePostbackConversionValueCoarseValueCompletionHandler;
24-
@property (nonatomic, assign) SEL selUpdatePostbackConversionValueCoarseValueLockWindowCompletionHandler;
2519

2620
@end
2721

@@ -45,34 +39,41 @@ - (instancetype)init {
4539
}
4640

4741
self.logger = [ADJAdjustFactory logger];
48-
self.clsSkAdNetwork = NSClassFromString(@"SKAdNetwork");
49-
self.selRegisterAppForAdNetworkAttribution = NSSelectorFromString(@"registerAppForAdNetworkAttribution");
50-
self.selUpdateConversionValue = NSSelectorFromString(@"updateConversionValue:");
51-
self.selUpdatePostbackConversionValueCompletionHandler = NSSelectorFromString(@"updatePostbackConversionValue:completionHandler:");
52-
self.selUpdatePostbackConversionValueCoarseValueCompletionHandler = NSSelectorFromString(@"updatePostbackConversionValue:coarseValue:completionHandler:");
53-
self.selUpdatePostbackConversionValueCoarseValueLockWindowCompletionHandler = NSSelectorFromString(@"updatePostbackConversionValue:coarseValue:lockWindow:completionHandler:");
5442

5543
return self;
5644
}
5745

5846
#pragma mark - SKAdNetwork API
5947

6048
- (void)registerAppForAdNetworkAttribution {
49+
Class class = [self getSKAdNetworkClass];
50+
SEL selector = NSSelectorFromString(@"registerAppForAdNetworkAttribution");
6151
if (@available(iOS 14.0, *)) {
62-
if ([self isStoreKitAvailable]) {
63-
((id (*)(id, SEL))[self.clsSkAdNetwork methodForSelector:self.selRegisterAppForAdNetworkAttribution])(self.clsSkAdNetwork, self.selRegisterAppForAdNetworkAttribution);
64-
[self.logger debug:@"Called SKAdNetwork's registerAppForAdNetworkAttribution method"];
52+
if ([self isApiAvailableForClass:class andSelector:selector]) {
53+
NSMethodSignature *methodSignature = [class methodSignatureForSelector:selector];
54+
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
55+
[invocation setSelector:selector];
56+
[invocation setTarget:class];
57+
[invocation invoke];
58+
[self.logger verbose:@"Call to SKAdNetwork's registerAppForAdNetworkAttribution method made"];
6559
}
6660
} else {
6761
[self.logger warn:@"SKAdNetwork's registerAppForAdNetworkAttribution method not available for this operating system version"];
6862
}
6963
}
7064

7165
- (void)updateConversionValue:(NSInteger)conversionValue {
66+
Class class = [self getSKAdNetworkClass];
67+
SEL selector = NSSelectorFromString(@"updateConversionValue:");
7268
if (@available(iOS 14.0, *)) {
73-
if ([self isStoreKitAvailable]) {
74-
((id (*)(id, SEL, NSInteger))[self.clsSkAdNetwork methodForSelector:self.selUpdateConversionValue])(self.clsSkAdNetwork, self.selUpdateConversionValue, conversionValue);
75-
[self.logger verbose:@"Called SKAdNetwork's updateConversionValue: method made with conversion value: %d", conversionValue];
69+
if ([self isApiAvailableForClass:class andSelector:selector]) {
70+
NSMethodSignature *methodSignature = [class methodSignatureForSelector:selector];
71+
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
72+
[invocation setSelector:selector];
73+
[invocation setTarget:class];
74+
[invocation setArgument:&conversionValue atIndex:2];
75+
[invocation invoke];
76+
[self.logger verbose:@"Call to SKAdNetwork's updateConversionValue: method made with value %d", conversionValue];
7677
}
7778
} else {
7879
[self.logger warn:@"SKAdNetwork's updateConversionValue: method not available for this operating system version"];
@@ -81,10 +82,17 @@ - (void)updateConversionValue:(NSInteger)conversionValue {
8182

8283
- (void)updatePostbackConversionValue:(NSInteger)conversionValue
8384
completionHandler:(void (^)(NSError *error))completion {
85+
Class class = [self getSKAdNetworkClass];
86+
SEL selector = NSSelectorFromString(@"updatePostbackConversionValue:completionHandler:");
8487
if (@available(iOS 15.4, *)) {
85-
if ([self isStoreKitAvailable]) {
86-
((id (*)(id, SEL, NSInteger, void (^)(NSError *error)))[self.clsSkAdNetwork methodForSelector:self.selUpdatePostbackConversionValueCompletionHandler])(self.clsSkAdNetwork, self.selUpdatePostbackConversionValueCompletionHandler, conversionValue, completion);
87-
// call is made, success / failure will be checked and logged inside of the completion block
88+
if ([self isApiAvailableForClass:class andSelector:selector]) {
89+
NSMethodSignature *methodSignature = [class methodSignatureForSelector:selector];
90+
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
91+
[invocation setSelector:selector];
92+
[invocation setTarget:class];
93+
[invocation setArgument:&conversionValue atIndex:2];
94+
[invocation setArgument:&completion atIndex:3];
95+
[invocation invoke];
8896
}
8997
} else {
9098
[self.logger warn:@"SKAdNetwork's updatePostbackConversionValue:completionHandler: method not available for this operating system version"];
@@ -94,10 +102,18 @@ - (void)updatePostbackConversionValue:(NSInteger)conversionValue
94102
- (void)updatePostbackConversionValue:(NSInteger)fineValue
95103
coarseValue:(NSString *)coarseValue
96104
completionHandler:(void (^)(NSError *error))completion {
105+
Class class = [self getSKAdNetworkClass];
106+
SEL selector = NSSelectorFromString(@"updatePostbackConversionValue:coarseValue:completionHandler:");
97107
if (@available(iOS 16.1, *)) {
98-
if ([self isStoreKitAvailable]) {
99-
((id (*)(id, SEL, NSInteger, NSString *, void (^)(NSError *error)))[self.clsSkAdNetwork methodForSelector:self.selUpdatePostbackConversionValueCoarseValueCompletionHandler])(self.clsSkAdNetwork, self.selUpdatePostbackConversionValueCoarseValueCompletionHandler, fineValue, coarseValue, completion);
100-
// call is made, success / failure will be checked and logged inside of the completion block
108+
if ([self isApiAvailableForClass:class andSelector:selector]) {
109+
NSMethodSignature *methodSignature = [class methodSignatureForSelector:selector];
110+
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
111+
[invocation setSelector:selector];
112+
[invocation setTarget:class];
113+
[invocation setArgument:&fineValue atIndex:2];
114+
[invocation setArgument:&coarseValue atIndex:3];
115+
[invocation setArgument:&completion atIndex:4];
116+
[invocation invoke];
101117
}
102118
} else {
103119
[self.logger warn:@"SKAdNetwork's updatePostbackConversionValue:coarseValue:completionHandler: method not available for this operating system version"];
@@ -108,10 +124,19 @@ - (void)updatePostbackConversionValue:(NSInteger)fineValue
108124
coarseValue:(NSString *)coarseValue
109125
lockWindow:(BOOL)lockWindow
110126
completionHandler:(void (^)(NSError *error))completion {
127+
Class class = [self getSKAdNetworkClass];
128+
SEL selector = NSSelectorFromString(@"updatePostbackConversionValue:coarseValue:lockWindow:completionHandler:");
111129
if (@available(iOS 16.1, *)) {
112-
if ([self isStoreKitAvailable]) {
113-
((id (*)(id, SEL, NSInteger, NSString *, BOOL, void (^)(NSError *error)))[self.clsSkAdNetwork methodForSelector:self.selUpdatePostbackConversionValueCoarseValueLockWindowCompletionHandler])(self.clsSkAdNetwork, self.selUpdatePostbackConversionValueCoarseValueLockWindowCompletionHandler, fineValue, coarseValue, lockWindow, completion);
114-
// call is made, success / failure will be checked and logged inside of the completion block
130+
if ([self isApiAvailableForClass:class andSelector:selector]) {
131+
NSMethodSignature *methodSignature = [class methodSignatureForSelector:selector];
132+
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
133+
[invocation setSelector:selector];
134+
[invocation setTarget:class];
135+
[invocation setArgument:&fineValue atIndex:2];
136+
[invocation setArgument:&coarseValue atIndex:3];
137+
[invocation setArgument:&lockWindow atIndex:4];
138+
[invocation setArgument:&completion atIndex:5];
139+
[invocation invoke];
115140
}
116141
} else {
117142
[self.logger warn:@"SKAdNetwork's updatePostbackConversionValue:coarseValue:lockWindow:completionHandler: method not available for this operating system version"];
@@ -172,11 +197,19 @@ - (void)adjUpdateConversionValue:(NSInteger)conversionValue
172197

173198
#pragma mark - Private
174199

175-
- (BOOL)isStoreKitAvailable {
176-
if (self.clsSkAdNetwork == nil) {
200+
- (BOOL)isApiAvailableForClass:(Class)class andSelector:(SEL)selector {
201+
if (class == nil) {
177202
[self.logger warn:@"StoreKit.framework not found in the app (SKAdNetwork class not found)"];
178203
return NO;
179204
}
205+
if (!selector) {
206+
[self.logger warn:@"Selector for given method was not found"];
207+
return NO;
208+
}
209+
if ([class respondsToSelector:selector] == NO) {
210+
[self.logger warn:@"%@ method implementation not found", NSStringFromSelector(selector)];
211+
return NO;
212+
}
180213
return YES;
181214
}
182215

@@ -204,4 +237,8 @@ - (NSString *)getSkAdNetworkCoarseConversionValue:(NSString *)adjustCoarseValue
204237
}
205238
}
206239

240+
- (Class)getSKAdNetworkClass {
241+
return NSClassFromString(@"SKAdNetwork");
242+
}
243+
207244
@end

Adjust/ADJUtil.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
static NSRegularExpression *shortUniversalLinkRegex = nil;
4040
static NSRegularExpression *excludedDeeplinkRegex = nil;
4141

42-
static NSString * const kClientSdk = @"ios4.33.1";
42+
static NSString * const kClientSdk = @"ios4.33.2";
4343
static NSString * const kDeeplinkParam = @"deep_link=";
4444
static NSString * const kSchemeDelimiter = @"://";
4545
static NSString * const kDefaultScheme = @"AdjustUniversalScheme";

Adjust/Adjust.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Adjust.h
33
// Adjust SDK
44
//
5-
// V4.33.1
5+
// V4.33.2
66
// Created by Christian Wellenbrock (@wellle) on 23rd July 2013.
77
// Copyright (c) 2012-2021 Adjust GmbH. All rights reserved.
88
//

AdjustBridge/AdjustBridgeRegister.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ + (NSString *)adjust_js {
275275
if (this.sdkPrefix) {
276276
return this.sdkPrefix;
277277
} else {
278-
return 'web-bridge4.33.1';
278+
return 'web-bridge4.33.2';
279279
}
280280
},
281281
setTestOptions: function(testOptions) {

AdjustTests/AdjustUnitTests/ADJPackageFields.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ - (id) init {
1616

1717
// default values
1818
self.appToken = @"qwerty123456";
19-
self.clientSdk = @"ios4.33.1";
19+
self.clientSdk = @"ios4.33.2";
2020
self.suffix = @"";
2121
self.environment = @"sandbox";
2222

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1+
### Version 4.33.2 (6th December 2022)
2+
#### Fixed
3+
- Added additional checks to make sure that non-existing selectors for given platform don't attempt to be executed (https://github.com/adjust/ios_sdk/issues/641).
4+
5+
---
6+
17
### Version 4.33.1 (28th November 2022)
28
#### Added
39
- Added support for setting a new China URL Strategy. You can choose this setting by calling `setUrlStrategy:` method of `ADJConfig` instance with `ADJUrlStrategyCn` parameter.
410
- Added support to `convertUniversalLink:scheme:` method to be able to parse data residency universal links.
511

612
---
713

8-
### Version 4.33.0 (November 19th 2021)
14+
### Version 4.33.0 (November 19th 2022)
915
#### Added
1016
- Added support for SKAdNetwork 4.0.
1117

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4.33.1
1+
4.33.2

scripts/build_definitions.sh

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -184,11 +184,32 @@ Usage: $0 [options]
184184
XCF_FRM_ZIP_NAME__WEB_BRIDGE_DYNAMIC="AdjustSdk-WebBridge-Dynamic"
185185
XCF_FRM_ZIP_NAME__WEB_BRIDGE_STATIC="AdjustSdk-WebBridge-Static"
186186

187+
# Xcode version impacts the way we build frameworks
188+
XCODE12PLUS=0
189+
XCODE14PLUS=0
190+
product_version=$(xcodebuild -version)
191+
xcode_version=( ${product_version//./ } )
192+
xcode="${xcode_version[0]}"
193+
major="${xcode_version[1]}"
194+
minor="${xcode_version[2]}"
195+
echo "${xcode}.${major}.${minor}"
196+
if [[ $major > 11 ]]; then
197+
XCODE12PLUS=1
198+
fi
199+
if [[ $major > 13 ]]; then
200+
XCODE14PLUS=1
201+
fi
202+
203+
SDK_VERSION=$(head -n 1 VERSION)
204+
echo "$SDK_VERSION"
187205

188206
# previous builds artefacts cleanup
189207
rm -rf ${XCF_OUTPUT_FOLDER}
190208
mkdir ${XCF_OUTPUT_FOLDER}
191209

210+
# previous xcode build folder cleanup
211+
xcodebuild clean
212+
192213
function build_archive() {
193214
# Prameters:
194215
# 1 - scheme name
@@ -220,12 +241,14 @@ Usage: $0 [options]
220241
# 1 - Archive name
221242
# 2 - Archive location folder
222243
#echo "XCFramework: Generating BCSymbolMap paths command from $1 ..."
223-
224-
BCSYMBOLMAP_PATHS=("$(pwd -P)"/$2/$1.xcarchive/BCSymbolMaps/*)
225-
BCSYMBOLMAP_COMMANDS=""
226-
for path in "${BCSYMBOLMAP_PATHS[@]}"; do
227-
BCSYMBOLMAP_COMMANDS="$BCSYMBOLMAP_COMMANDS -debug-symbols $path "
228-
done
244+
BCSYMBOLMAP_PATHS=" "
245+
if [[ $XCODE14PLUS == 0 ]]; then
246+
BCSYMBOLMAP_PATHS=("$(pwd -P)"/$2/$1.xcarchive/BCSymbolMaps/*)
247+
BCSYMBOLMAP_COMMANDS=""
248+
for path in "${BCSYMBOLMAP_PATHS[@]}"; do
249+
BCSYMBOLMAP_COMMANDS="$BCSYMBOLMAP_COMMANDS -debug-symbols $path "
250+
done
251+
fi
229252
echo $BCSYMBOLMAP_COMMANDS
230253
}
231254

@@ -286,12 +309,21 @@ Usage: $0 [options]
286309
xcodebuild clean
287310

288311
if [[ $os == "ios" ]]; then
289-
290-
xcodebuild -configuration Release \
291-
-target "$target_scheme" \
292-
-sdk iphonesimulator \
293-
-arch x86_64 -arch i386 \
294-
build
312+
313+
if [[ $XCODE14PLUS > 0 ]]; then
314+
# Xcode14 dropped 32-bit support, so we have to drop 'i386' arc.
315+
xcodebuild -configuration Release \
316+
-target "$target_scheme" \
317+
-sdk iphonesimulator \
318+
-arch x86_64 \
319+
build
320+
else
321+
xcodebuild -configuration Release \
322+
-target "$target_scheme" \
323+
-sdk iphonesimulator \
324+
-arch x86_64 -arch i386 \
325+
build
326+
fi
295327

296328
xcodebuild -configuration Release \
297329
-target "$target_scheme" \

0 commit comments

Comments
 (0)