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

Posted

技术标签:

【中文标题】由于第三方库,如何处理 AppStore 警告 - 缺少目的字符串?【英文标题】:How to handle AppStore Warning - Missing Purpose String, because of third party library? 【发布时间】:2019-06-26 17:08:53 【问题描述】:

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

从 iTunes Connect 收到以下电子邮件:

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

NSLocationAlwaysUsageDescription NSLocationWhenInUseUsageDescription

应用程序没有出于任何目的使用位置。

可能是因为:

我更新的一个 pod 增加了 Location 的使用(admob?) Apple 最近开始执行此检查

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

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

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

【问题讨论】:

【参考方案1】:

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

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

如果您从未实际请求过位置服务,则很可能永远不会向用户显示(推测 AdMob 不会实际请求位置服务,而是在可用时利用它们),因此,从最终用户的角度来看,您在这里使用什么文本可能并不重要。

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

【讨论】:

【参考方案2】:

但是如何知道是什么以及出于什么目的呢?

您可以使用nm 查看您要链接的库/框架的符号。试试

nm <frameworkname> | grep CoreLocation

要在 Pods 文件夹中查找所有二进制存档,请运行

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

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

【讨论】:

谢谢。我得到 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm: nanopb: No such file or directory。 然后不要运行nm nanopb :) 说真的,你必须弄清楚你所包含的每个库的各个文件名,例如通过在 Pods 目录中运行 find . -type file | xargs file | grep "ar archive" 是的,我现在想通了。如果我将 .dylib 作为输入传递,它会起作用。谢谢。会检查 无法找出 nm + grep + find 的单行。请问大家可以一起加入吗? 谢谢!虽然结果是“没有使用 CoreLocation”【参考方案3】:

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

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

【讨论】:

以上是关于由于第三方库,如何处理 AppStore 警告 - 缺少目的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理具有完全不同构建系统的第三方库?

如何处理 C++ 内联 + 模板上下文中的警告?

我应该如何处理在我的 setup.py 脚本中导入第三方库?

我该如何处理这个警告:哈希不匹配?

如何处理 Xcode 故事板中的错位视图警告?

我应该如何处理这个 gsutil“并行复合上传”警告?