Flutter IOS权限配置无效,info.plist不生效的问题

由 月琳 发布
  | 4477 次浏览

前言

  • 我的Flutter项目有保存图片功能,需要用到相册的访问权限,在IOS那边搞了半个下午的权限配置还是获取不到权限,记录下解决方式。本文所用权限依赖插件:permission_handler,版本8.1.6
  • 我仔细排查,网上各种搜索,info.plist配置确定是没有问题的,就很谜。Podfile也参照一些文章配置了也一样不生效(后来才发现有坑)??之后卸载了,重新Build也还是一样。并且在系统设置里也找不到自己的APP(你可以看到设置里是有其他APP可以配置权限的)。
  • 之后查看了下permission_handler官方的配置说明,点开了这个东西:
    A8BAD519-C101-4183-A7BC-F45728588C32.png
    好家伙,权限的配置说明原来在这,之前都没发现(才不是因为都是英文不想看)

配置方式

  1. 打开./ios/Runner/info.plist文件,在标签里插入权限标签,(插入自己需要的权限即可不用全部)全部权限例如:

    ...
    <dict>
        <key>NSPhotoLibraryUsageDescription</key>
        <string>App需要您的同意,才能访问相册</string>
        <key>NSLocationWhenInUseUsageDescription</key>
        <string>App需要您的同意,才能在使用期间访问位置</string>
        <key>NSLocationAlwaysUsageDescription</key>
        <string>App需要您的同意,才能始终访问位置</string>
        <key>NSCameraUsageDescription</key>
        <string>App需要您的同意,才能访问相机</string>
        <key>NSMicrophoneUsageDescription</key>
        <string>App需要您的同意,才能访问麦克风</string>
        <key>NSLocationUsageDescription</key>
        <string>App需要您的同意,才能访问位置</string>
        <key>NSCalendarsUsageDescription</key>
        <string>App需要您的同意,才能访问日历</string>
        <key>NSRemindersUsageDescription</key>
        <string>App需要您的同意,才能访问提醒事项</string>
        <key>NSMotionUsageDescription</key>
        <string>App需要您的同意,才能访问运动与健身</string>
        <key>NSHealthUpdateUsageDescription</key>
        <string>App需要您的同意,才能访问健康更新 </string>
        <key>NSHealthShareUsageDescription</key>
        <string>App需要您的同意,才能访问健康分享</string>
        <key>NSBluetoothPeripheralUsageDescription</key>
        <string>App需要您的同意,才能访问蓝牙</string>
        <key>NSAppleMusicUsageDescription</key>
        <string>App需要您的同意,才能访问媒体资料库</string>
        ...
    </dict>
    ...
  2. 打开./iosPodfile文件,找到post_install do |installer|那一行,像下面这样插入代码,或者干脆整个代码块替换掉

    post_install do |installer|
      installer.pods_project.targets.each do |target|
        flutter_additional_ios_build_settings(target)
        target.build_configurations.each do |config|
          config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
            '$(inherited)',
            ## dart: PermissionGroup.photos
            'PERMISSION_PHOTOS=1', # 相册权限,这里等于1是启用该权限,等于0是禁用该权限!
            'PERMISSION_CAMERA=1', # 相机权限
            # ...其他权限参考官方文档里的IOS配置
        end
      end
    end
  3. 检查是否成功
    在系统设置里找自己的APP,找不到就是失败了;找到的话点进去,就会看到可以配置的权限,像我配置了相册权限就可以看到这个照片的选项。1A8C85FA60120AB2A83A9CF652DE4288.png

后话

详细配置可以查看官方文档。之前看的那些文章都有点旧了,虽然有的给了Podfile的配置但是给权限赋值成了0导致没生效,以后还是得留意官方的文档说明...


版权属于:月琳cc
本文链接:https://kerrinz.com/archives/188.html
作品采用《知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议》进行许可,转载请务必注明出处!

2 条评论

  1. 小弟
    小弟 · 2022-05-11 20:32

    感谢大哥

  2. 防水材料加盟
    防水材料加盟 · 2022-03-09 09:31

    感谢分享 赞一个

发表评论