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