Skip to content

Commit 64b59e4

Browse files
committed
Fixing crash when attempting to convert id authorization status to an int
We added the intValue conversion to try to address an Xcode warning that appears about converting id to int since we are using performSelector. Converting to intValue causes bad access crashes, so I am manually suppressing the warnings instead
1 parent f23db94 commit 64b59e4

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

iOS_SDK/OneSignalSDK/Source/OneSignalLocation.m

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,11 @@ + (void)onFocus:(BOOL)isActive {
154154
}
155155
} else {
156156
//Check if always granted
157-
if ([[NSClassFromString(@"CLLocationManager") performSelector:@selector(authorizationStatus)] intValue] == kCLAuthorizationStatusAuthorizedAlways) {
157+
#pragma clang diagnostic push
158+
#pragma clang diagnostic ignored "-Wpointer-integer-compare"
159+
#pragma clang diagnostic push
160+
#pragma clang diagnostic ignored "-Wint-conversion"
161+
if ([NSClassFromString(@"CLLocationManager") performSelector:@selector(authorizationStatus)] == kCLAuthorizationStatusAuthorizedAlways) {
158162
[OneSignalLocation beginTask];
159163
[requestLocationTimer invalidate];
160164
[self requestLocation];
@@ -186,7 +190,7 @@ + (void)sendAndClearLocationListener:(PromptActionResult)result {
186190

187191
+ (void)sendCurrentAuthStatusToListeners {
188192
id clLocationManagerClass = NSClassFromString(@"CLLocationManager");
189-
CLAuthorizationStatus permissionStatus = [[clLocationManagerClass performSelector:@selector(authorizationStatus)] intValue];
193+
CLAuthorizationStatus permissionStatus = [clLocationManagerClass performSelector:@selector(authorizationStatus)];
190194
if (permissionStatus == kCLAuthorizationStatusNotDetermined)
191195
return;
192196

@@ -203,7 +207,7 @@ + (void)internalGetLocation:(bool)prompt fallbackToSettings:(BOOL)fallback {
203207
// If location permissions was not asked "started" will never be true
204208
if ([self started]) {
205209
// We evaluate the following cases after permissions were asked (denied or given)
206-
CLAuthorizationStatus permissionStatus = [[clLocationManagerClass performSelector:@selector(authorizationStatus)] intValue];
210+
CLAuthorizationStatus permissionStatus = [clLocationManagerClass performSelector:@selector(authorizationStatus)];
207211
BOOL showSettings = prompt && fallback && permissionStatus == kCLAuthorizationStatusDenied;
208212
[OneSignal onesignalLog:ONE_S_LL_DEBUG message:[NSString stringWithFormat:@"internalGetLocation called showSettings: %@", showSettings ? @"YES" : @"NO"]];
209213
// Fallback to settings alert view when the following condition are true:
@@ -224,7 +228,7 @@ + (void)internalGetLocation:(bool)prompt fallbackToSettings:(BOOL)fallback {
224228
return;
225229
}
226230

227-
CLAuthorizationStatus permissionStatus = [[clLocationManagerClass performSelector:@selector(authorizationStatus)] intValue];
231+
CLAuthorizationStatus permissionStatus = [clLocationManagerClass performSelector:@selector(authorizationStatus)];
228232
// return if permission not determined and should not prompt
229233
if (permissionStatus == kCLAuthorizationStatusNotDetermined && !prompt) {
230234
[OneSignal onesignalLog:ONE_S_LL_DEBUG message:@"internalGetLocation kCLAuthorizationStatusNotDetermined."];

0 commit comments

Comments
 (0)