Releases: zoontek/react-native-permissions
3.7.1
- Only request the App Tracking Transparency iOS permission when the app is focused (as it's not allowed in background).
This means that this code (which was a workaround):
useEffect(() => {
const listener = AppState.addEventListener('change', (status) => {
if (Platform.OS === 'ios' && status === 'active') {
request(PERMISSIONS.IOS.APP_TRACKING_TRANSPARENCY)
.then((result) => console.log(result))
.catch((error) => console.log(error));
}
});
return listener.remove;
}, []);
Can safely be replaced by:
useEffect(() => {
if (Platform.OS === 'ios') {
request(PERMISSIONS.IOS.APP_TRACKING_TRANSPARENCY)
.then((result) => console.log(result))
.catch((error) => console.log(error));
}
}, []);
3.7.0
The new react-native setup-ios-permissions
command
This release come with a new permission handler linkage system for iOS: the react-native setup-ios-permissions
command. No need to update your Podfile
file anymore, everything is now handled by your package.json
.
The benefits from this solution are many, but the main ones are that it should fixes Xcode cache issues and the well-known use_frameworks
issue (no more workaround needed! 🎉)
📌 The "old way" will continue to work until the next major update, but it has been removed from the latest documentation since this is not the preferred way anymore.
To migrate, remove all the extra code from your Podfile
(and the use_frameworks
workaround if you used it):
- # Convert all permission pods into static libraries
- pre_install do |installer|
- Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {}
- installer.pod_targets.each do |pod|
- if pod.name.eql?('RNPermissions') || pod.name.start_with?('Permission-')
- def pod.build_type;
- # Uncomment the line corresponding to your CocoaPods version
- # Pod::BuildType.static_library # >= 1.9
- # Pod::Target::BuildType.static_library # < 1.9
- end
- end
- end
- end
target 'MyAwesomeApp' do
# …
- permissions_path = '../node_modules/react-native-permissions/ios'
- pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
- pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse"
- pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications"
- pod 'Permission-SpeechRecognition', :path => "#{permissions_path}/SpeechRecognition"
Add a reactNativePermissionsIOS
config in your package.json
:
{
"reactNativePermissionsIOS": [
"Camera",
"LocationWhenInUse",
"Notifications",
"SpeechRecognition"
]
}
Then run react-native setup-ios-permissions
and pod install
. That's all! ✨
P.-S. As these commands must be run each tome each time you update this config, delete your node_modules
directory or update this library, I highly recommand to use a postinstall
script to simplify this:
{
"reactNativePermissionsIOS": [
"Camera",
"LocationWhenInUse",
"Notifications",
"SpeechRecognition"
],
"devDependencies": {
"pod-install": "0.1.38"
},
"scripts": {
"postinstall": "react-native setup-ios-permissions && pod-install"
}
}
Also in this release:
- Update project dependencies to React Native 0.71 in order to prepare new architecture support.
- Update the example app UI (with
react-native-paper
v5):
3.6.1
3.6.0
3.5.0
- Add support for runtime notifications check & request on Android 13+ (#697 by @artyorsh and 46840ab by @zoontek)
buildscript {
ext {
buildToolsVersion = "33.0.0" // <- set at least 33.x
minSdkVersion = 21
compileSdkVersion = 33 // <- set at least 33
targetSdkVersion = 33 // <- set at least 33
// …
3.4.0
- Add support for
android.permission.UWB_RANGING
permission - Drop
SharedPreferences
usage on Android (enables support for Ask next time setting or Only this time grant status - more informations in #696 pull request thread)
Previous Android flow
New Android flow
ℹ️ It should not be breaking if you followed the previous flow.
Known issues
- On Android, there is currently no way, without relying on
SharedPreferences
(a trick that break Ask next time setting and Only this time grant status), to determine if a permission isBLOCKED
without requesting it. - Dismissing the popup on Android 11+ will result in
BLOCKED
(see facebook/react-native#30158). It's a flaw in the Android permission system, not specific to this library or React Native.
3.3.1
3.3.0
3.2.0
3.1.0
- Add new Android 12 bluetooth permissions (#655 by @jsimonassi)
- Add App Tracking Transparency instructions in the documentation (#657 by @TheWirv)
- Fix react-native-windows reference directory (#652 by @JerryMacedoCastro)