iOS 模拟器在麦克风权限请求时崩溃

Posted

技术标签:

【中文标题】iOS 模拟器在麦克风权限请求时崩溃【英文标题】:iOS Simulator crashes on microphone permission request 【发布时间】:2019-09-15 10:18:32 【问题描述】:

我的环境:

permission_handler 3.0.0 颤振 v1.2.1 OSX High Sierra 10.13.6 Xcode 10.1 版。

当我在 ios 模拟器中请求麦克风权限时,我的应用程序崩溃了。

PermissionStatus mic = await PermissionHandler()
    .checkPermissionStatus(PermissionGroup.microphone);
print('microphone permission? $mic.toString()');
try 
    if (mic != PermissionStatus.granted) 
        await PermissionHandler().requestPermissions([PermissionGroup.microphone]);
    
 catch (e) 
    print(e);

没有抛出或捕获错误,但在颤振调试控制台中,我看到了:

flutter: microphone permission? PermissionStatus.unknown
Lost connection to device.

这意味着checkPermissionStatus() 返回了unknown。但是当我请求许可时,应用程序崩溃了。我无法在真正的 iPhone 上尝试这个。一切都在 android 模拟器上完美运行。

我发现 Xcode 10.1 中的麦克风存在一些问题:

iOS Simulator would like to access microphone every time Repeated request for microphone permission on iOS Simulator

我的尝试

使用flutter clean 全新构建 在硬件 > 音频输入中更改模拟器麦克风输入

我可以尝试升级到 Xcode 10.2,但我需要先获得 mojave。如果可能的话,尽量避免这种情况,因为它甚至可能无法解决问题。我也可以尝试使用真正的 iPhone 设备而不是模拟器。不过,希望模拟器不会崩溃。

是否有人可以使用permission_handler: 3.0.0 在 Xcode 10.1/10.2 模拟器中授予麦克风权限?另一个flutter权限插件呢?

【问题讨论】:

我对 Flutter 一无所知,但我想你已经回答了你自己的问题。有很多东西不能在模拟器上运行,这很可能就是其中之一。 @matt 但看看我链接的堆栈溢出问题,似乎人们至少能够在应用程序崩溃的情况下授予麦克风权限 好吧,我建议也许颤振会改变等式 确保您可以在模拟器中使用麦克风(它将使用 mac mic)。尝试在主页按钮中单击 2 次(以调用 Siri)并检查 Siri 是否正常工作,以确保您的 Mac 一切正常。也许你的麦克风被屏蔽了。 你肯定会发现你的错误在于info.plist文件。打开 runner.xcworkspace 并导航到 info.plist 文件并添加麦克风权限。 【参考方案1】:

请确保您已将正确的条目添加到 Info.plist 文件中(对于 Flutter 项目,此文件位于 ios/Runner/ 文件夹中)。

要访问麦克风,您需要在<dict> 标签之间添加以下行:

<key>NSMicrophoneUsageDescription</key>
<string>this application needs access to the microphone</string>

更多信息可以找到here.

Info.plist 的完整示例可以在 here. 找到

【讨论】:

是的!就是这样。我添加了UIBackgroundModes-&gt;audio,但没有添加NSMicrophoneUsageDescription

以上是关于iOS 模拟器在麦克风权限请求时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

升级iOS10之后调用摄像头/麦克风等硬件程序崩溃闪退的问题

xcode8运行ios10 的版本模拟器会出现很多的崩溃现象,比如用到相机,麦克风,健康数据等

AudioKit 请求访问麦克风

在 info.plist iOS 10 中声明对麦克风的使用访问权限以进行隐私设置

删除 iOS7 麦克风权限以测试权限下降

Flutter插件开发和iOS原生代码:避免应用启动时的权限请求?