【问题标题】:Ionic v3 Remove Specific Keys from PLISTIonic v3 从 PLIST 中删除特定键
【发布时间】:2019-06-02 18:03:32
【问题描述】:

我正在开发一个使用地理定位的 Ionic 应用程序,它基于我的 config.xml 和一个额外的 edit-config 元素,我在 info.plist 文件中获得了以下三个键:

  • NSLocationWhenInUseUsageDescription :在使用应用时将使用位置。
  • NSLocationAlwaysUsageDescription :此应用需要不断访问您的位置以跟踪您的位置,即使屏幕关闭或应用处于后台也是如此。
  • NSLocationAlwaysAndWhenInUseUsageDescription :此应用需要不断访问您的位置以跟踪您的位置,即使屏幕关闭或应用处于后台也是如此。

LocationWhenInUse 键是我要添加的,但其他两个键是从其他地方进来的。这是我的相关 config.xml:

    ...
    <platform name="ios">
        <edit-config file="*-Info.plist" mode="merge" target="NSLocationWhenInUseUsageDescription">
            <string>Location will be used while app is in use.</string>
        </edit-config>
        ...
    </platform>
    ...
    <plugin name="cordova-plugin-geolocation" spec="^4.0.1">
        <variable name="GEOLOCATION_USAGE_DESCRIPTION" value="Geolocation will be used to determine your location" />
    </plugin>

我想做的是删除两个“始终”权限。我唯一想问用户的是从不/何时使用。

有什么方法可以使用 config.xml 删除两个“always”元素?我不想在每次进行生产 iOS 构建时都记得删除这两个键。

【问题讨论】:

    标签: ios cordova ionic3 cordova-ios


    【解决方案1】:

    这些键是placeholders added by cordova-diagnostic-plugin

    NSLocationAlwaysUsageDescriptionNSLocationAlwaysAndWhenInUseUsageDescription 中包含的字符串只有在您请求在运行时使用“始终”位置时才会显示。

    更新

    要从.plist 中删除这些密钥,您可以使用cordova-custom-config。首先安装它:

    cordova plugin add cordova-custom-config
    

    然后在&lt;platform name="ios"&gt; 下添加&lt;custom-config-file&gt; 块以删除不需要的键:

    <platform name="ios">
        <custom-config-file parent="NSLocationAlwaysUsageDescription" target="*-Info.plist" mode="delete"/>
        <custom-config-file parent="NSLocationAlwaysAndWhenInUseUsageDescription" target="*-Info.plist" mode="delete"/>
    

    【讨论】:

    • 我了解,但客户的要求是在应用程序的 iOS 设置中仅显示从不/使用中选项。我能够让它工作的唯一方法是手动修改 XCode 中的 plist 文件并删除这两个键。当我这样做时,始终选项不再出现。因此,如果我能找到一种方法让 config.xml 自动修改 plist (即使这意味着不将始终键放在那里),那将是可能的。
    • 如果您在运行时使用requestLocationAuthorization()请求位置权限,您可以在使用模式下显式请求并且不会显示Always选项,即使plist键存在:cordova.plugins.diagnostic.requestLocationAuthorization(success, error, cordova.plugins.diagnostic.locationAuthorizationMode.WHEN_IN_USE);跨度>
    • 是的,我就是这样做的。所以在请求权限时,它只显示使用时选项。所以这部分很好地满足了要求。当他们进入设置 -> 应用程序名称 -> 位置时,他们会看到三个选项,从不、使用时、始终。他们只想在选项中看到从不和何时使用。如果我从 plist 中删除这两个键,这就是应用程序位置设置页面上显示的内容。这有意义吗?
    • 所以您想阻止用户手动进入“设置”并将位置模式从“使用时”更改为“始终”?似乎是一个出路的边缘情况,但您可以在使用 cordova-custom-config 添加这些 plist 键后删除它们 - 我将更新答案以说明如何。
    • 是的,相信我;我知道当我在谷歌上搜索时,我处于危险之中,我找不到任何例子!大声笑,谢谢您,先生;欣赏它。
    猜你喜欢
    • 1970-01-01
    • 2017-06-22
    • 2014-07-07
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2014-03-21
    相关资源
    最近更新 更多