在向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版本中)
3条答案
按热度按时间dohp0rv51#
试试看
字符串
最近添加到permission_handler GitHub文档中:https://github.com/Baseflow/flutter-permission-handler
c9qzyr3d2#
他们还可以删除的另一个权限(文档中没有)是:
字符串
ohfgkhjo3#
我会用我的例子来解释。我遇到了不需要的
NSMicrophoneUsageDescription
权限问题。在Xcode(ios文件夹)中打开iOS项目。使用全局搜索查找具有用于请求该权限的函数调用的pod。在我的例子中,它是由“audio_session”pod调用的
AVAudioApplication.requestRecordPermission
:x1c 0d1x的数据
如果它是一个直接依赖项,那么这是非常简单的,但是如果它是一个传递依赖项,那么运行
flutter pub deps
并找出使用它的直接依赖项。在我的例子中,它是“package X -> just_audio -> audio_session”:字符串
通常,包提供了一个选项来添加预处理器宏,以便在编译期间排除这些调用。你也可以在插件的源代码中看到它。这里使用了
AUDIO_SESSION_MICROPHONE
宏:型
使用permission_handler,它是
PERMISSION_...
。在我的just_audio示例中,它是AUDIO_SESSION_MICROPHONE
。将所需的宏添加到项目的Podfile中:型
如果没有办法提供一个预处理器宏来排除对该包的调用,请让维护人员实现它。