dart 有没有一种简单的方法可以在flutter中找到使用权限的软件包?Info.plist提交问题中缺少目的字符串

pod7payv  于 2023-07-31  发布在  Flutter
关注(0)|答案(3)|浏览(130)

在向Apple提交申请期间,我被告知以下ITMS-90683:Info. plist中缺少目的字符串。

NSBluetoothPeripheralUsageDescription
NSBluetoothAlwaysUsageDescription
NSLocationWhenInUseUsageDescription

字符串
以前的问题与permission_handler包有关,但通过文档中提供的脚本,可以有效地排除包涉及但应用程序不使用的权限。在更新了所有依赖项并添加了许多其他依赖项之后,我发现自己被提示输入其他三个我实际上并不打算使用的权限。有没有一个快速的方法来找到这些软件包中的哪一个要使用?如果不知道哪个包可能需要这些权限?

flutter:
    sdk: flutter
  cupertino_icons: ^1.0.2
  flutter_spinkit: ^5.0.0
  shared_preferences: ^2.0.4
  cached_network_image: 2.5.1
  cached_video_player: ^1.0.3
  rxdart: ^0.25.0
  flutter_inappwebview: ^5.1.0+4
  sqflite: ^2.0.0+2
  path: ^1.8.0
  pull_to_refresh: ^1.6.4
  font_awesome_flutter: ^8.12.0
  flutter_svg: ^0.19.3
  purchases_flutter: ^3.1.0
  url_launcher: ^6.0.2
  rflutter_alert: ^2.0.2
  modal_progress_hud: ^0.1.3
  sizer: ^1.1.8
  permission_handler: ^6.1.0
  image_gallery_saver: ^1.6.8
  http: ^0.13.0
  path_provider: ^2.0.1
  onesignal_flutter: ^3.0.0-beta1
  google_mobile_ads: ^0.11.0+3
  #Firebase dependencies
  firebase_core: ^1.0.1
  firebase_auth: ^1.0.1
  cloud_firestore: ^1.0.1
  firebase_crashlytics: ^1.0.0
  firebase_analytics: ^7.1.1


我不想为我不打算使用的权限添加理由。谢谢你的好意
编辑1:我正在附加由permission_handler请求的Podfile的部分。如自述文件中所示,我的应用程序实际使用的权限已被注解(照片和通知)

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['IPHONEOS_DEPLOYMENT_TARGET'] = '10.0'
      config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'

    # You can remove unused permissions here
    # for more infomation: https://github.com/BaseflowIT/flutter-permission-handler/blob/develop/permission_handler/ios/Classes/PermissionHandlerEnums.h
    # e.g. when you don't need camera permission, just add 'PERMISSION_CAMERA=0'
    config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
      '$(inherited)',

      ## dart: PermissionGroup.photos
      # 'PERMISSION_PHOTOS=0',

      ## dart: PermissionGroup.notification
      # 'PERMISSION_NOTIFICATIONS=0',

      ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
      'PERMISSION_LOCATION=0',

      ## dart: PermissionGroup.calendar
      'PERMISSION_EVENTS=0',

      ## dart: PermissionGroup.reminders
      'PERMISSION_REMINDERS=0',

      ## dart: PermissionGroup.contacts
      'PERMISSION_CONTACTS=0',

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

      ## dart: PermissionGroup.microphone
      'PERMISSION_MICROPHONE=0',

      ## dart: PermissionGroup.speech
      'PERMISSION_SPEECH_RECOGNIZER=0',

      ## dart: PermissionGroup.mediaLibrary
      'PERMISSION_MEDIA_LIBRARY=0',

      ## dart: PermissionGroup.sensors
      'PERMISSION_SENSORS=0'
    ]
    end
  end
end


编辑2:有没有可能蓝牙权限是新Flutter版本2.0.2的一个bug?在调试模式下,在iOS应用程序首次启动时,它总是要求获得检测附近设备的权限(即使在我之前使用的1.22版本中)

dohp0rv5

dohp0rv51#

试试看

## dart: PermissionGroup.bluetooth
'PERMISSION_BLUETOOTH=0'

字符串
最近添加到permission_handler GitHub文档中:https://github.com/Baseflow/flutter-permission-handler

c9qzyr3d

c9qzyr3d2#

他们还可以删除的另一个权限(文档中没有)是:

## dart: PermissionGroup.photosAddOnly
'PERMISSION_PHOTOS_ADD_ONLY = 0',

字符串

ohfgkhjo

ohfgkhjo3#

我会用我的例子来解释。我遇到了不需要的NSMicrophoneUsageDescription权限问题。
在Xcode(ios文件夹)中打开iOS项目。使用全局搜索查找具有用于请求该权限的函数调用的pod。在我的例子中,它是由“audio_session”pod调用的AVAudioApplication.requestRecordPermission
x1c 0d1x的数据
如果它是一个直接依赖项,那么这是非常简单的,但是如果它是一个传递依赖项,那么运行flutter pub deps并找出使用它的直接依赖项。在我的例子中,它是“package X -> just_audio -> audio_session”:

├── X 1.0.0
│   ├── just_audio 0.9.34
│   │   ├── audio_session 0.1.16

字符串
通常,包提供了一个选项来添加预处理器宏,以便在编译期间排除这些调用。你也可以在插件的源代码中看到它。这里使用了AUDIO_SESSION_MICROPHONE宏:

- (void)requestRecordPermission:(NSArray *)args result:(FlutterResult)result {
#if AUDIO_SESSION_MICROPHONE
    [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
        result(@(granted));
    }];
#else
    result(FlutterMethodNotImplemented);
#endif
}


使用permission_handler,它是PERMISSION_...。在我的just_audio示例中,它是AUDIO_SESSION_MICROPHONE。将所需的宏添加到项目的Podfile中:

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)',
        'AUDIO_SESSION_MICROPHONE=0',
      ]
    end
  end
end


如果没有办法提供一个预处理器宏来排除对该包的调用,请让维护人员实现它。

相关问题