diff --git a/apps/example/screens/SimpleTab.tsx b/apps/example/screens/SimpleTab.tsx index 82a5616..235bce4 100644 --- a/apps/example/screens/SimpleTab.tsx +++ b/apps/example/screens/SimpleTab.tsx @@ -37,28 +37,31 @@ export function SimpleTab() { const [activities, refreshActivities] = useActivities(); - const onPressRequestCallback = useCallback(async () => { - if (authorizationStatus === AuthorizationStatus.notDetermined) { - await requestAuthorization(); - } else if (authorizationStatus === AuthorizationStatus.denied) { - Alert.alert( - "You didn't grant access", - "Please go to settings and enable it", - [ - { - text: "Open settings", - onPress: () => Linking.openSettings(), - }, - { - text: "Cancel", - style: "cancel", - }, - ], - ); - } else { - await revokeAuthorization(); - } - }, [authorizationStatus]); + const onPressRequestCallback = useCallback( + async (forIndividualOrChild: "individual" | "child" = "individual") => { + if (authorizationStatus === AuthorizationStatus.notDetermined) { + await requestAuthorization(forIndividualOrChild); + } else if (authorizationStatus === AuthorizationStatus.denied) { + Alert.alert( + "You didn't grant access", + "Please go to settings and enable it", + [ + { + text: "Open settings", + onPress: () => Linking.openSettings(), + }, + { + text: "Cancel", + style: "cancel", + }, + ], + ); + } else { + await revokeAuthorization(); + } + }, + [authorizationStatus], + ); const [showCreateActivityPopup, setShowCreateActivityPopup] = useState(false); @@ -108,12 +111,21 @@ export function SimpleTab() { {authorizationStatusMap[authorizationStatus]} - - + + + + Activities {activities.map((activity) => ( diff --git a/packages/react-native-device-activity/ios/ReactNativeDeviceActivityModule.swift b/packages/react-native-device-activity/ios/ReactNativeDeviceActivityModule.swift index c1ccf0f..aaec8e3 100644 --- a/packages/react-native-device-activity/ios/ReactNativeDeviceActivityModule.swift +++ b/packages/react-native-device-activity/ios/ReactNativeDeviceActivityModule.swift @@ -570,13 +570,18 @@ public class ReactNativeDeviceActivityModule: Module { try await ac.requestAuthorization( for: forIndividualOrChild == "child" ? .child : .individual) } else { - let errorMessage = "iOS 16.0 or later is required to request authorization." - logger.log("⚠️ \(errorMessage)") - throw NSError( - domain: "FamilyControls", - code: 9999, - userInfo: [NSLocalizedDescriptionKey: errorMessage] - ) + // Deprecated iOS 15 API - uses completion handler + try await withCheckedThrowingContinuation { (continuation: CheckedContinuation) in + ac.requestAuthorization { result in + switch result { + case .success: + continuation.resume() + case .failure(let error): + logger.log("❌ Failed to request authorization: \(error.localizedDescription, privacy: .public)") + continuation.resume(throwing: error) + } + } + } } }