如何处理 AppStore 警告 - 由于第三方库而缺少目的字符串?

How to handle AppStore Warning - Missing Purpose String, because of third party library?

我已经上传了在 App Store 中存在多年的应用程序的新版本。

收到来自 iTunes Connect 的以下电子邮件:

您的交付成功,但您可能希望在下次交付时更正以下问题:ITMS-90683:Info.plist - [= 中缺少目的字符串15=]

NSLocationAlwaysUsageDescription NSLocationWhenInUseUsageDescription

该应用程序未将位置信息用于任何目的。

可能是由于:

我在项目中查找了 Location 和 CoreLocation 的东西,但没有结果。它可能是使用它编译的二进制文件。 但是如何知道哪个以及用于什么目的?

如果是使用该权限的某些第 3 方库,开发人员应该在目的字符串中写什么?

PD:根据我对 AdMob 的了解,至少在 Android 上,它从很久以前就开始使用位置信息了。 https://developers.google.com/admob/ios/targeting#location https://support.google.com/admob/answer/6373176?hl=en

PD2:刚找到这个

7.8.1 2016-05-11 添加了 SDK 支持,以便在用户明确启用应用的位置权限时自动使用位置数据。

在发行说明中:https://developers.google.com/admob/ios/rel-notes

PD3:刚刚在 AdMob 的 Google Groups 论坛上发现了这个问题: https://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/ios/byShbNTrumk

But how to know which and for what purpose?

您可以使用 nm 查看您要链接的 libraries/frameworks 的符号。尝试

nm <frameworkname> | grep CoreLocation

要在您的 Pods 文件夹中查找所有二进制档案,运行

find . -type file | xargs file | grep "Mach-O.*ar archive" | 
  awk '{print }' | tr -d : | xargs nm | grep CoreLocation

一旦找到有问题的库,您可以尝试找出位置数据的用途,然后决定是否可以删除它,或者继续使用它并添加所需的权限字符串,如@Rob 解释的那样。

What is the developer supposed to write in the purpose string if it's some 3rd party lib using that permission?”

我会建议一些能够准确捕获第三方库对位置数据所做的事情的东西,例如“用于展示您当前位置独有的优惠和广告”或“这样我们的公司霸主就可以跟踪您的一举一动”(开玩笑……有点)。

如果您从未真正请求过位置服务,则这可能永远不会呈现给用户(大概 AdMob 实际上并未请求位置服务,只是在可用时利用它们),因此,来自 end-user 的观点,你在这里使用什么文本可能并不重要。

但我仍然鼓励在这里使用一些字符串来捕获位置数据的所有使用方式。如果您稍后添加自己的位置服务功能(触发此披露),这将提醒您(或某些未来的开发人员)不仅要披露该应用程序对位置数据的预期用途,还要披露位置数据可能被使用的所有方式用过的。我们希望我们的客户能够做出明智的隐私决定。通过现在填写这些使用字符串,它可以最大限度地减少我们以后忘记 AdMob(或其他)如何使用数据的可能性。

另一个有相关问题的地方: https://github.com/OneSignal/OneSignal-iOS-SDK/issues/368

尝试删除 OneSignal pod 并上传新版本。这次所有工作都没有来自苹果的任何电子邮件。