Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add react-native-permissions config plugin #126

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

Temzasse
Copy link

Why

While Expo provides ways to request various permissions via different Expo modules there is a need for a generic permission library. The most popular permission library in React Native is react-native-permissions which is currently not compatible with Expo. This plugin allows devs to configure the necessary pods inside the Podfile for react-native-permissions library as part of the prebuild process.

How

This plugin was built by taking a look at the other Expo Config Plugins in this repo and copying their implementation.

Test Plan

This plugin was first implemented and tested outside of this repo by running expo prebuild with the plugin added to the list of plugins in app.config.js like this:

{
  "expo": {
    "plugins": [
      [
        "@config-plugins/react-native-permissions",
        { "pods": ["Camera", "Notifications"] }
      ]
    ]
  }
}

This is the output of that test:

# @generated begin react-native-permissions - expo prebuild (DO NOT MODIFY) sync-653ec5c60f912dacc52beb097ec7b8b5fce97ee1

  permissions_path = '../node_modules/react-native-permissions/ios'
  pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
  pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications"

# @generated end react-native-permissions

Since the plugin is so simple there is probably no need to add further tests for this plugin or to add an example app inside /apps folder for this plugin. However, I'm happy to add those if needed 🙂

]);
};

function getPodfileContent(pods: string[]) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be cool if this was a for loop iterating some array in Podfile properties, similar to what we do in ffmpeg.


function getPodfileContent(pods: string[]) {
return `
permissions_path = '../node_modules/react-native-permissions/ios'
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should use Node module resolution to support monorepos, ex.

Basically you use Node.js to search for react-native-permissions/package.json then you get a string like ../node_modules/react-native-permissions/package.json which you can then append ../ios to. This will allow the module to live anywhere and keep the package working in most cases.

@EvanBacon
Copy link
Collaborator

This is a pretty complicated config plugin and the current state won't work in monorepos, so I recommend adding unit tests and an example app.

@gvanderclay
Copy link

I think this PR is no longer necessary!

With the addition of react-native setup-ios-permissions in version 3.7.0 of react-native-permissions, the Podfile does not need to be modified. We have successfully setup our project using a managed workflow and react-native-permissions without a config plugin.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants