Created
August 26, 2024 14:27
-
-
Save chichilatte/ff61bb53a7e032c5a487653a4247e311 to your computer and use it in GitHub Desktop.
Patch to repair the iOS ATT issue #823 for module [email protected]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/node_modules/react-native-permissions/ios/AppTrackingTransparency/RNPermissionHandlerAppTrackingTransparency.h b/node_modules/react-native-permissions/ios/AppTrackingTransparency/RNPermissionHandlerAppTrackingTransparency.h | |
index 69f8999..a1a4df1 100644 | |
--- a/node_modules/react-native-permissions/ios/AppTrackingTransparency/RNPermissionHandlerAppTrackingTransparency.h | |
+++ b/node_modules/react-native-permissions/ios/AppTrackingTransparency/RNPermissionHandlerAppTrackingTransparency.h | |
@@ -1,4 +1,4 @@ | |
-#import "RNPermissionsHelper.h" | |
+#import "RNPermissionsModule.h" | |
@interface RNPermissionHandlerAppTrackingTransparency : NSObject<RNPermissionHandler> | |
diff --git a/node_modules/react-native-permissions/ios/AppTrackingTransparency/RNPermissionHandlerAppTrackingTransparency.m b/node_modules/react-native-permissions/ios/AppTrackingTransparency/RNPermissionHandlerAppTrackingTransparency.m | |
index c492b3f..4e29886 100644 | |
--- a/node_modules/react-native-permissions/ios/AppTrackingTransparency/RNPermissionHandlerAppTrackingTransparency.m | |
+++ b/node_modules/react-native-permissions/ios/AppTrackingTransparency/RNPermissionHandlerAppTrackingTransparency.m | |
@@ -6,7 +6,6 @@ | |
@interface RNPermissionHandlerAppTrackingTransparency() | |
@property (nonatomic, strong) void (^resolve)(RNPermissionStatus status); | |
-@property (nonatomic, strong) void (^reject)(NSError *error); | |
@end | |
@@ -20,19 +19,23 @@ + (NSString * _Nonnull)handlerUniqueId { | |
return @"ios.permission.APP_TRACKING_TRANSPARENCY"; | |
} | |
+- (RNPermissionStatus)convertStatus:(ATTrackingManagerAuthorizationStatus)status API_AVAILABLE(ios(14)){ | |
+ switch (status) { | |
+ case ATTrackingManagerAuthorizationStatusNotDetermined: | |
+ return RNPermissionStatusNotDetermined; | |
+ case ATTrackingManagerAuthorizationStatusRestricted: | |
+ return RNPermissionStatusRestricted; | |
+ case ATTrackingManagerAuthorizationStatusDenied: | |
+ return RNPermissionStatusDenied; | |
+ case ATTrackingManagerAuthorizationStatusAuthorized: | |
+ return RNPermissionStatusAuthorized; | |
+ } | |
+} | |
+ | |
- (void)checkWithResolver:(void (^ _Nonnull)(RNPermissionStatus))resolve | |
rejecter:(void (__unused ^ _Nonnull)(NSError * _Nonnull))reject { | |
if (@available(iOS 14.0, *)) { | |
- switch ([ATTrackingManager trackingAuthorizationStatus]) { | |
- case ATTrackingManagerAuthorizationStatusNotDetermined: | |
- return resolve(RNPermissionStatusNotDetermined); | |
- case ATTrackingManagerAuthorizationStatusRestricted: | |
- return resolve(RNPermissionStatusRestricted); | |
- case ATTrackingManagerAuthorizationStatusDenied: | |
- return resolve(RNPermissionStatusDenied); | |
- case ATTrackingManagerAuthorizationStatusAuthorized: | |
- return resolve(RNPermissionStatusAuthorized); | |
- } | |
+ resolve([self convertStatus:[ATTrackingManager trackingAuthorizationStatus]]); | |
} else { | |
if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) { | |
resolve(RNPermissionStatusAuthorized); | |
@@ -50,12 +53,11 @@ - (void)requestWithResolver:(void (^ _Nonnull)(RNPermissionStatus))resolve | |
} | |
if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive) { | |
- [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(__unused ATTrackingManagerAuthorizationStatus status) { | |
- [self checkWithResolver:resolve rejecter:reject]; | |
+ [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) { | |
+ resolve([self convertStatus:status]); | |
}]; | |
} else { | |
_resolve = resolve; | |
- _reject = reject; | |
[[NSNotificationCenter defaultCenter] addObserver:self | |
selector:@selector(onApplicationDidBecomeActive:) | |
@@ -73,8 +75,8 @@ - (void)onApplicationDidBecomeActive:(__unused NSNotification *)notification { | |
object:nil]; | |
if (@available(iOS 14.0, *)) { | |
- [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(__unused ATTrackingManagerAuthorizationStatus status) { | |
- [self checkWithResolver:self->_resolve rejecter:self->_reject]; | |
+ [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) { | |
+ self->_resolve([self convertStatus:status]); | |
}]; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
[email protected]
had issue #823 where the App Tracking Transparency permission request was failing on iOS >= 17, preventing apps from passing the App Store review process.That issue was fixed in
[email protected]
but in the same release they dropped support for React Native < 0.70.This patch is the ATT fix contained in
[email protected]
and nothing else.Note: Here's the complete
react-native-permissions 3.10.1 > 4.0.0
diff if you're curious.