Skip to content

Instantly share code, notes, and snippets.

@chichilatte
Created August 26, 2024 14:27
Show Gist options
  • Save chichilatte/ff61bb53a7e032c5a487653a4247e311 to your computer and use it in GitHub Desktop.
Save chichilatte/ff61bb53a7e032c5a487653a4247e311 to your computer and use it in GitHub Desktop.
Patch to repair the iOS ATT issue #823 for module [email protected]
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]);
}];
}
}
@chichilatte
Copy link
Author

chichilatte commented Aug 27, 2024

[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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment