为什么Flutter Run无法识别iOS目标?

时间:2020-04-19 21:42:50

标签: ios flutter

我的拍子正在iPhone 11(13.4)模拟器上编译并运行。我正在像这样调用geolocator:

geolocator
         .getCurrentPosition(desiredAccuracy: LocationAccuracy.best)
         .then((Position position) {
       setState(() {
         _currentPosition = LGPSHelper.gpsToString(
             new GeoPoint( position.latitude, position.longitude ) );
       });
     }).catchError((e) {
       print(e);
     });

它正在捕获以下错误:

flutter: PlatformException(ERROR_MISSING_PROPERTYKEY, To use location in iOS8 you need to define either NSLocationWhenInUseUsageDescriptionor NSLocationAlwaysUsageDescription in the app bundle's Info.plist file, null)

我能想到的所有地方都将目标iOS设置为13.0,但iOS8错误仍然存​​在。我知道我可以添加该参数,但令我感到紧张的是,该版本认为我针对的是iOS8。我已经清理,重建等了。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您需要在iOS项目的Info.plist文件中添加所需的密钥,因为在没有这些必需的权限密钥的情况下发布到应用商店时会遇到问题。至于为什么它仍以iOS 8为目标,您需要在xcode内而不是在构建文件内更改目标,因为在构建过程中很多文件是由xcode生成的。

为此,请打开ios/Runner/Info.plist并添加以下内容:

<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>

如果您计划支持iOS 10或更早版本,请添加:

<key>NSLocationAlwaysUsageDescription</key>
<string>This app needs access to location when in the background.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app needs access to location when open and in the background.</string>

您可以自定义字符串以更好地适合您的应用程序。 我还建议将构建目标设置回iOS 9.0,因为您希望支持尽可能多的设备,并且我发现9在大多数超过8的flutter软件包中都更稳定。