ios Flutter应用程序停止要求画廊和相机访问

e5nszbig  于 2023-10-21  发布在  iOS
关注(0)|答案(1)|浏览(136)

我最近对我的Flutter iOS应用程序做了一些重构,主要是将代码从main.dart中分离出来,并转移到单独的文件中。
在这次重构之后,应用程序突然停止要求用户允许使用相机或画廊,并且无法访问这些相应的资源。
我正在运行XCode 15和iOS 17
我尝试解决这个问题的步骤。
1.确保更新flutter包permission_handler(v11.0.1)
1.再次检查info.pblist是否包含正确的密钥:

<key>NSCameraUsageDescription</key>
    <string>We need access to your camera for taking pictures.</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>We need access to your photo library for selecting pictures.</string>

1.更新pod(1.13.0)
1.更新Homebrew(4.1.15)
1.更新Flutter及其工具:Flutter 3.13.6 · channel stable · https://github.com/flutter/flutter.git Framework · revision ead455963c(2 weeks ago)· 2023-09-26 18:28:17 -0700 Engine · revision a794cf2681 Tools · Dart 3.1.3 · DevTools 2.25.0
1.运行以下命令:

  • Flutter 清洗
  • 扑式酒吧
  • rm -rf Pods/ Podfile.lock
  • rm -rf /ios
  • Flutter Build iOS

1.重新安装应用程序(多次)物理和模拟环境。
相关代码片段:

File? _image;
  UploadState _uploadState = UploadState.idle;

  Future<void> _checkPermissionsAndPickImage(
      ImageSource source, BuildContext context) async {
    Permission permission =
        (source == ImageSource.camera) ? Permission.camera : Permission.photos;

    PermissionStatus status = await permission.request();

    if (status.isGranted) {
      _pickImage(source);
    } else if (status.isPermanentlyDenied) {
      _showPermissionDeniedDialog(context);
    } else {
      print('Permission not granted. Cannot access $source.');
    }
  }

在这里,_showPermissionDeniedDialog将通知用户,他们已经永久阻止了应用程序访问相机和图库,我引导用户进行设置以更改此设置。
我觉得奇怪的是,我找不到设置中的应用程序来更改权限.

qzwqbdag

qzwqbdag1#

RTFM解决了我的问题。在Podfile中更改我的post_install以包括必要的权限解决了这个问题:
安装后执行|安装程序|installer.pods_project.targets.each do|目标|flutter_additional_ios_build_settings(target)target.build_configurations.each do| config|

#  Preprocessor definitions can be found in: https://github.com/Baseflow/flutter-permission-handler/blob/master/permission_handler_apple/ios/Classes/PermissionHandlerEnums.h
  config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
    '$(inherited)',

    ## dart: PermissionGroup.camera
    'PERMISSION_CAMERA=1',

    ## dart: PermissionGroup.photos
    'PERMISSION_PHOTOS=1',
  ]

end 
# Permissions   end end

为什么我需要在代码重构之后做这件事,这超出了我的理解。

相关问题