Skip to content

Releases: zoontek/react-native-permissions

4.0.0

05 Dec 14:14
7f9e774
Compare
Choose a tag to compare

Version 4.0.0, with iOS 17 and Android 14 support 🎉

⚠️ This version requires Xcode 15 and drops support for iOS < 12.4 and React Native < 0.70.

What's changed

  • Deprecated iOS permission setup methods have been removed. setup_permissions is now the unique way to do it
  • openLimitedPhotoLibraryPicker has been renamed openPhotoPicker
  • PERMISSIONS.IOS.BLUETOOTH_PERIPHERAL has been renamed PERMISSIONS.IOS.BLUETOOTH

What's new

  • New Android permission: PERMISSIONS.ANDROID.READ_MEDIA_VISUAL_USER_SELECTED (closes #827)
  • New iOS permission: PERMISSIONS.IOS.CALENDARS_WRITE_ONLY (closes #804)
  • openPhotoPicker now resolves on picker close, not immediately (closes #689)
  • PERMISSIONS.IOS.APP_TRACKING_TRANSPARENCY now resolves the requestTrackingAuthorizationWithCompletionHandler callback value (closes #823)

How to migrate

  • Migrate to the setup_permissions method
  • Replace PERMISSIONS.IOS.BLUETOOTH_PERIPHERAL with PERMISSIONS.IOS.BLUETOOTH
  • Replace BluetoothPeripheral with Bluetooth in setup_permissions
  • Replace NSCalendarsUsageDescription with NSCalendarsFullAccessUsageDescription
  • Replace NSRemindersUsageDescription with NSRemindersFullAccessUsageDescription
  • Replace openLimitedPhotoLibraryPicker with openPhotoPicker

What's next?

This release is quite minimal. If your company wants a new feature, feels free to reach me via email to hire me for it 🙂

3.10.1

26 Oct 09:09
63b695a
Compare
Choose a tag to compare
  • Catch NullPointerException in onRequestPermissionsResult (fix #820)

3.10.0

11 Oct 12:45
2d496bb
Compare
Choose a tag to compare
  • Rollback 3.9.3 changes (fix #813)
  • Remove [CLLocationManager locationServicesEnabled] check. It's not needed, if Location services are disabled, iOS will return BLOCKED (+ it matches Android behaviour)

3.9.3

04 Oct 11:06
82e178f
Compare
Choose a tag to compare
  • Execute [CLLocationManager locationServicesEnabled] in an async way to prevent UI freezes when checking / requesting location permissions on iOS (82e178f)

3.9.2

17 Sep 10:32
77ec6a3
Compare
Choose a tag to compare
  • Remove the necessity to declare NSLocationAlwaysUsageDescription as it's deprecated in iOS 17 (fixes #806)
  • Replace missing usage description error logbox with a warning one

3.9.1

12 Sep 08:19
4cddc61
Compare
Choose a tag to compare
  • Fix silent fail onRequestPermissionsResult for invalid activities (#805 by @webraptor)

3.9.0

01 Sep 17:07
3347278
Compare
Choose a tag to compare

Run setup_permissions directly in your Podfile

This release come with an alternative permission linkage system for iOS: calling a function, setup_permissions inside your Podfile.
It offers the same benefits as the react-native setup-ios-permissions command (and actually perform the exact same operation), but it lives in your Podfile, so there's no need to run it each time your delete your node_modules directory.
The only requirement is to run pod install when your update your Podfile, which make much more sense 😄
This method also solves issues with monorepos / dependencies hoisting.

To migrate, remove your reactNativePermissionsIOS config, and update your Podfile:

# with react-native >= 0.72
- # Resolve react_native_pods.rb with node to allow for hoisting
- require Pod::Executable.execute_command('node', ['-p',
-   'require.resolve(
-     "react-native/scripts/react_native_pods.rb",
-     {paths: [process.argv[1]]},
-   )', __dir__]).strip

+ def node_require(script)
+   # Resolve script with node to allow for hoisting
+   require Pod::Executable.execute_command('node', ['-p',
+     "require.resolve(
+       '#{script}',
+       {paths: [process.argv[1]]},
+     )", __dir__]).strip
+ end

+ node_require('react-native/scripts/react_native_pods.rb')
+ node_require('react-native-permissions/scripts/setup.rb')
# with react-native < 0.72
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
+ require_relative '../node_modules/react-native-permissions/scripts/setup'

Then in the same file, call setup_permissions with the wanted permissions:

# …

platform :ios, min_ios_version_supported
prepare_react_native_project!

# ⬇️ uncomment wanted permissions
setup_permissions([
  # 'AppTrackingTransparency',
  # 'BluetoothPeripheral',
  # 'Calendars',
  # 'Camera',
  # 'Contacts',
  # 'FaceID',
  # 'LocationAccuracy',
  # 'LocationAlways',
  # 'LocationWhenInUse',
  # 'MediaLibrary',
  # 'Microphone',
  # 'Motion',
  # 'Notifications',
  # 'PhotoLibrary',
  # 'PhotoLibraryAddOnly',
  # 'Reminders',
  # 'Siri',
  # 'SpeechRecognition',
  # 'StoreKit',
])

# …

And run pod install. Done! ✨

📌 The React Native CLI plugin still exists and will not be removed until next major version.


  • request now accepts () => Promise<boolean> as rationale argument.
    This way, you can display custom rationale alerts instead of the native ones (fixes #710)

3.8.4

11 Jul 20:55
011277d
Compare
Choose a tag to compare
  • Only supports iOS 12.4+ with new architecture to prevent compilation issues (#786 by @hsjoberg)

3.8.3

03 Jul 08:52
3e19398
Compare
Choose a tag to compare
  • Use gradle namespace conditionally in order to improve old react native version compatibility.
    ⚠️ Note that this library officially now follows the React Native releases support policy. If you have been impacted by this bug, that means you are using an unsupported react native version and should upgrade to the latest.

3.8.2

03 Jul 08:49
1cd3714
Compare
Choose a tag to compare
  • Update Support mention