diff --git a/A0Auth0.podspec b/A0Auth0.podspec
index c1dc9888d..5ed048bec 100644
--- a/A0Auth0.podspec
+++ b/A0Auth0.podspec
@@ -14,6 +14,7 @@ Pod::Spec.new do |s|
s.source = { :git => 'https://github.com/auth0/react-native-auth0.git', :tag => "v#{s.version}" }
s.source_files = 'ios/**/*.{h,m,mm,swift}'
+ s.resource_bundles = { 'A0Auth0_privacy' => 'ios/PrivacyInfo.xcprivacy' }
s.requires_arc = true
s.dependency 'Auth0', '3.0.1'
diff --git a/README.md b/README.md
index 4455fc7af..cf92607b1 100644
--- a/README.md
+++ b/README.md
@@ -53,6 +53,8 @@ Our SDK requires a minimum iOS deployment target of 14.0. In your project's ios/
platform :ios, '14.0'
```
+The iOS pod ships a privacy manifest (`PrivacyInfo.xcprivacy`) that declares no tracking, no required-reason API usage, and a user identifier collected only for app functionality. Xcode includes it automatically when you generate a privacy report, so you don't have to describe this SDK's behavior yourself. You are still responsible for reviewing that report and for keeping your App Store Connect privacy answers accurate for your app as a whole, including the data this SDK collects.
+
### Installation
First install the native library module:
diff --git a/example/android/gradle.properties b/example/android/gradle.properties
index 9d2a456eb..9d16fe38d 100644
--- a/example/android/gradle.properties
+++ b/example/android/gradle.properties
@@ -41,4 +41,4 @@ hermesEnabled=true
# Use this property to enable edge-to-edge display support.
# This allows your app to draw behind system bars for an immersive UI.
# Note: Only works with ReactActivity and should not be used with custom Activity.
-edgeToEdgeEnabled=false
\ No newline at end of file
+edgeToEdgeEnabled=true
\ No newline at end of file
diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock
index edd7fc5f6..6f18ce169 100644
--- a/example/ios/Podfile.lock
+++ b/example/ios/Podfile.lock
@@ -2243,7 +2243,7 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/yoga"
SPEC CHECKSUMS:
- A0Auth0: 2c9e96b05a7422552027fd336a45ece0bd8d8545
+ A0Auth0: 6168f5be0fc061ba9858d95c481d5338627e2238
Auth0: c94e637a662b4e07aeb1e6e5acf3f8787e451e1c
FBLazyVector: b3e7ad108f0d882e30445c5527d774e3fd432f3d
hermes-engine: 4ba8c4848d46c6a441e09d1c62f883ba69bc5b76
diff --git a/example/src/App.tsx b/example/src/App.tsx
index ad0833c47..03f3e1a72 100644
--- a/example/src/App.tsx
+++ b/example/src/App.tsx
@@ -1,6 +1,7 @@
import React from 'react';
import { StatusBar } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
+import { SafeAreaProvider } from 'react-native-safe-area-context';
import RootNavigator from './navigation/RootNavigator';
/**
@@ -12,10 +13,12 @@ import RootNavigator from './navigation/RootNavigator';
*/
function App(): React.JSX.Element {
return (
-
-
-
-
+
+
+
+
+
+
);
}
diff --git a/example/src/screens/SelectionScreen.tsx b/example/src/screens/SelectionScreen.tsx
index e7afbc386..9c84c016a 100644
--- a/example/src/screens/SelectionScreen.tsx
+++ b/example/src/screens/SelectionScreen.tsx
@@ -1,7 +1,8 @@
// example/src/screens/SelectionScreen.tsx
import React from 'react';
-import { View, Text, StyleSheet, SafeAreaView } from 'react-native';
+import { View, Text, StyleSheet } from 'react-native';
+import { SafeAreaView } from 'react-native-safe-area-context';
import { useNavigation } from '@react-navigation/native';
import type { StackNavigationProp } from '@react-navigation/stack';
import Button from '../components/Button';
diff --git a/example/src/screens/class-based/ClassApiTests.tsx b/example/src/screens/class-based/ClassApiTests.tsx
index 76a248f32..73eaf6e6b 100644
--- a/example/src/screens/class-based/ClassApiTests.tsx
+++ b/example/src/screens/class-based/ClassApiTests.tsx
@@ -1,5 +1,6 @@
import React, { useState } from 'react';
-import { SafeAreaView, ScrollView, StyleSheet, Text, View } from 'react-native';
+import { ScrollView, StyleSheet, Text, View } from 'react-native';
+import { SafeAreaView } from 'react-native-safe-area-context';
import { RouteProp } from '@react-navigation/native';
import auth0 from '../../api/auth0';
import Button from '../../components/Button';
diff --git a/example/src/screens/class-based/ClassLogin.tsx b/example/src/screens/class-based/ClassLogin.tsx
index a27d52021..c043b2353 100644
--- a/example/src/screens/class-based/ClassLogin.tsx
+++ b/example/src/screens/class-based/ClassLogin.tsx
@@ -1,6 +1,5 @@
import React, { useState } from 'react';
import {
- SafeAreaView,
ScrollView,
View,
Text,
@@ -8,6 +7,7 @@ import {
Alert,
Platform,
} from 'react-native';
+import { SafeAreaView } from 'react-native-safe-area-context';
import { useNavigation } from '@react-navigation/native';
import type { StackNavigationProp } from '@react-navigation/stack';
import {
diff --git a/example/src/screens/class-based/ClassProfile.tsx b/example/src/screens/class-based/ClassProfile.tsx
index b98d42717..6f89385fe 100644
--- a/example/src/screens/class-based/ClassProfile.tsx
+++ b/example/src/screens/class-based/ClassProfile.tsx
@@ -1,6 +1,5 @@
import React, { Component } from 'react';
import {
- SafeAreaView,
ScrollView,
View,
StyleSheet,
@@ -8,6 +7,7 @@ import {
Alert,
Linking,
} from 'react-native';
+import { SafeAreaView } from 'react-native-safe-area-context';
import { RouteProp, NavigationProp } from '@react-navigation/native';
import { jwtDecode } from 'jwt-decode';
import auth0 from '../../api/auth0';
diff --git a/example/src/screens/hooks/CredentialsScreen.tsx b/example/src/screens/hooks/CredentialsScreen.tsx
index f4a711258..c9927192e 100644
--- a/example/src/screens/hooks/CredentialsScreen.tsx
+++ b/example/src/screens/hooks/CredentialsScreen.tsx
@@ -1,6 +1,5 @@
import React, { useState } from 'react';
import {
- SafeAreaView,
ScrollView,
StyleSheet,
View,
@@ -8,6 +7,7 @@ import {
Linking,
Alert,
} from 'react-native';
+import { SafeAreaView } from 'react-native-safe-area-context';
import {
useAuth0,
Credentials,
diff --git a/example/src/screens/hooks/Home.tsx b/example/src/screens/hooks/Home.tsx
index f9c22aa93..73fe7bcce 100644
--- a/example/src/screens/hooks/Home.tsx
+++ b/example/src/screens/hooks/Home.tsx
@@ -1,6 +1,5 @@
import React, { useState } from 'react';
import {
- SafeAreaView,
ScrollView,
View,
Text,
@@ -11,6 +10,7 @@ import {
Linking,
Platform,
} from 'react-native';
+import { SafeAreaView } from 'react-native-safe-area-context';
import {
useAuth0,
WebAuthError,
diff --git a/example/src/screens/hooks/More.tsx b/example/src/screens/hooks/More.tsx
index ecb7d2c4b..a3905a066 100644
--- a/example/src/screens/hooks/More.tsx
+++ b/example/src/screens/hooks/More.tsx
@@ -1,5 +1,6 @@
import React, { useState } from 'react';
-import { SafeAreaView, ScrollView, StyleSheet, View, Text } from 'react-native';
+import { ScrollView, StyleSheet, View, Text } from 'react-native';
+import { SafeAreaView } from 'react-native-safe-area-context';
import { useAuth0 } from 'react-native-auth0';
import Button from '../../components/Button';
import Header from '../../components/Header';
diff --git a/example/src/screens/hooks/MyAccountScreen.tsx b/example/src/screens/hooks/MyAccountScreen.tsx
index 0570c7812..c94d6cb24 100644
--- a/example/src/screens/hooks/MyAccountScreen.tsx
+++ b/example/src/screens/hooks/MyAccountScreen.tsx
@@ -1,6 +1,5 @@
import React, { useState } from 'react';
import {
- SafeAreaView,
ScrollView,
View,
Text,
@@ -9,6 +8,7 @@ import {
Platform,
TextInput,
} from 'react-native';
+import { SafeAreaView } from 'react-native-safe-area-context';
import {
useAuth0,
MyAccountError,
diff --git a/example/src/screens/hooks/Profile.tsx b/example/src/screens/hooks/Profile.tsx
index fa9211999..f9855cce8 100644
--- a/example/src/screens/hooks/Profile.tsx
+++ b/example/src/screens/hooks/Profile.tsx
@@ -1,11 +1,6 @@
import React, { useState } from 'react';
-import {
- SafeAreaView,
- ScrollView,
- View,
- StyleSheet,
- Alert,
-} from 'react-native';
+import { ScrollView, View, StyleSheet, Alert } from 'react-native';
+import { SafeAreaView } from 'react-native-safe-area-context';
import { useAuth0 } from 'react-native-auth0';
import Button from '../../components/Button';
import Header from '../../components/Header';
diff --git a/ios/PrivacyInfo.xcprivacy b/ios/PrivacyInfo.xcprivacy
new file mode 100644
index 000000000..d2ab1bddd
--- /dev/null
+++ b/ios/PrivacyInfo.xcprivacy
@@ -0,0 +1,27 @@
+
+
+
+
+ NSPrivacyAccessedAPITypes
+
+ NSPrivacyTracking
+
+ NSPrivacyTrackingDomains
+
+ NSPrivacyCollectedDataTypes
+
+
+ NSPrivacyCollectedDataType
+ NSPrivacyCollectedDataTypeUserID
+ NSPrivacyCollectedDataTypePurposes
+
+ NSPrivacyCollectedDataTypePurposeAppFunctionality
+
+ NSPrivacyCollectedDataTypeLinked
+
+ NSPrivacyCollectedDataTypeTracking
+
+
+
+
+
diff --git a/src/plugin/withAuth0.ts b/src/plugin/withAuth0.ts
index e2d6afae1..d4f88eb26 100644
--- a/src/plugin/withAuth0.ts
+++ b/src/plugin/withAuth0.ts
@@ -167,7 +167,7 @@ export const addAuth0AppDelegateCode = (
if (!isSwift) {
// Throw error for non-Swift files, since we're only supporting Swift app delegates (RN 78+)
throw new Error(
- 'This plugin only supports expo 53 or greater. If you are using older version 4.x'
+ 'This plugin requires a Swift AppDelegate, which means Expo SDK 55 or greater. On older Expo versions, use react-native-auth0 5.x or earlier.'
);
}
diff --git a/src/specs/NativeA0Auth0.ts b/src/specs/NativeA0Auth0.ts
index db9ba29c1..299b6f8aa 100644
--- a/src/specs/NativeA0Auth0.ts
+++ b/src/specs/NativeA0Auth0.ts
@@ -23,7 +23,8 @@ export interface Spec extends TurboModule {
clientId: string,
domain: string,
localAuthenticationOptions:
- { [key: string]: string | Int32 | boolean } | undefined,
+ | { [key: string]: string | Int32 | boolean }
+ | undefined,
useDPoP: boolean | undefined,
maxRetries: Int32,
credentialsManagerStorageKey: string | undefined