我的应用因使用广告支持框架而被拒绝。哪个图书馆负责?


81

这只是一个更新,与拒绝原因没有任何关系。以下是解决中心的回复:

计划许可协议PLA 3.3.12的原因

我们发现您的应用使用了iOS广告标识符,但不包含广告功能。这不符合App Store审查指南要求的iOS开发者计划许可协议的条款。

具体来说,iOS开发者计划许可协议的第3.3.12节规定:

“您和您的应用程序(以及您与之签约提供广告的任何第三方)只能将广告标识符以及通过使用广告标识符获得的任何信息仅用于投放广告。如果用户重置了广告标识符,那么您同意不将先前的广告标识符和任何派生的信息与重置的广告标识符直接,间接地结合,关联,链接或以其他方式关联。”

请检查您的代码-包括所有第三方库-以删除以下任何实例:

类:ASIdentifierManager
选择器:advertiseIdentifier
框架:AdSupport.framework

如果您打算在以后的版本中加入广告,请从您的应用程序中删除广告标识符,直到包含广告功能为止。

为了帮助找到广告标识符,请使用“ nm”工具。有关“ nm”工具的信息,请打开一个终端窗口,然后输入“ man nm”。

如果您无权访问库源,则可以使用“字符串”或“ otool”命令行工具来搜索已编译的二进制文件。“字符串”工具列出了库调用的方法,“ otool -ov”列出了Objective-C类结构及其定义的方法。这些技术可以帮助您缩小有问题的代码所在的位置。

我使用的第三方库是的最新版本parse.com sdk, latest version of flurry analytics, and version 2.2 of test flight。有人知道哪个库是问题吗?谢谢


IMO他们提供了很多提示来让您自己进行搜索...您尝试过但没有找到吗?
Adriano Repetti 2014年

10
我见过有人在使用Google Analytics(分析)时遇到此问题
jcesarmobile,2014年

1
但是,您被标记的最大原因是TestFlight,该ID必不可少:testflightapp.com/sdk/ios/doc/2.0.0- “ iOS 6.0+需要AdSupport.framework才能唯一标识用户,以便我们估算您的应用拥有的用户数量(使用ASIdentifierManager)。您可能会弱链接应用中的框架。如果您的应用未与AdSupport.framework链接,则TestFlight SDK会自动为运行在iOS 6.0以上版本。”
Louis St-Amour 2014年

5
原来是Testflight v2.2.0发生了冲突。此后,他们根据更改日志对其进行了修复:将两个SDK版本合并为一个,从而删除了对ASIdentifierManager的所有访问权限
user2844801 2014年

5
如果将AdSupport.framework链接为可选链接,是否可以解决App Store的问题?
Legoless

Answers:


113

在终端:

  1. 转到项目的根文件夹
  2. 类型:(grep -r advertisingIdentifier . 末尾的点很关键)

这将递归检查每个文件,并为您提供违规库的名称。

(就我而言,是乱舞)


1
我也受到同样的打击。libFlurry_4.3.1.a和libGoogleAnalyticsServices.a都具有adsIdentifier。不知道何时更新这些内容或是否有任何解决方法。
Vidal Graupera 2014年

2
我们该怎么做?我们不能完全删除我们的分析…
Nir Golan 2014年

@RedYeti-感谢您修正我的错字!抱歉-复制/粘贴错误:(
亚当

1
@LouWeed-发生这种情况时,您必须从应用程序中删除Flurry,并假设Flurry处于恐慌状态,并将很快提供新的更新。使用免费的3rdparty分析的缺点是,有时它们会像这样搞砸了。过去,我在Flurry,TestFlight,Facebook,Parse和其他一些地方也有类似的经历。它发生了。但是,如果您不支付服务费用,那么您就不会抱怨太多了:)
亚当(Adam)

2
使用上述命令时,可以确认Flurry 4.3.2与adsIdentifier不匹配。
arterm 2014年

17

更新资料

Google发布了Google Analytics Services iOS SDK v3.03c,默认情况下删除了AdSupport.framework依赖项。

发布版本3.03c(2014年2月19日)的完整变更日志条目:https : //developers.google.com/analytics/devguides/collection/ios/changelog

老艾恩泽

我的问题是Google Analytics(分析)和TestFlight。

对于TestFlight,我只是将库更新为版本2.2.1(https://www.testflightapp.com/sdk/ios/release_notes/2.2.1/)。

但是,要更新Google Analytics(分析),我必须删除-ObjC标志。但是当我使用Cocoapods管理第三个库时,我不能仅仅删除它。所以我做了以下事情:

1-开始将libGoogleAnalytics.a更新到版本3.03a(2014年2月5日)

2-然后也删除了AdSupport.framework

3-在“目标->构建设置->其他链接器标志”下添加了“ -force_load \” $ {PROJECT_DIR} /Source/Library/GoogleAnalyticsServicesiOS_3.03a”(请注意,在我的项目中,GoogleAnalytics位于/ Source /库/文件夹,您必须配置自己的库)

但是由于我无法删除-ObjC标志,所以我搜索了如何在Cocoapods中使用-force_load标志,然后发现了两个有用的链接:

1- https://github.com/CocoaPods/CocoaPods/issues/712

2- http://www.deanmao.com/2012/12/31/linker-error-using-cocoapods/

总而言之,我还在“目标->构建设置->其他链接器标志”下更改了“ -force_load $(TARGET_BUILD_DIR)/libPods.a”的-ObjC标志。

但是再次,当我尝试发布我的应用程序时,出现了一个错误消息,告诉我编译器找不到libPods.a,因此我转到“目标->构建设置->其他链接器标志->发布”,然后将此字符串$(TARGET_BUILD_DIR)更改为$ {BUILT_PRODUCTS_DIR}。

因此,我的其他链接器标记如下图所示。 其他链接器标志

希望能帮助到别人。

对不起我的英语不好。=]


如果没有AdSupport框架,我仍然无法构建自己的应用。我得到了未定义的符号ASIIdentifierManager
andygeers 2014年

您在使用Google跟踪代码管理器吗?因为如果那样的话,此解决方案将无法工作。
Glauco Neves

并不是我所知道的(标记管理器甚至能做什么?)尽管是GA /标记管理器的组合库文件
andygeers 2014年

您也可以OTHER_LDFLAGS直接手动编辑Pods / Pods.xcconfig 。
Rivera 2014年

Google今天发布了Google Analytics Services iOS SDK v3.03c。我更新了答案。=]
Glauco Neves

13

对我来说,Flurry Analytics和TestFlight都是问题。

对于TestFlight,它就像更新它一样容易。2.2.1版本不会造成任何问题(正如苹果建议的那样,我使用字符串进行了检查)

对于Flurry,除删除Flurry之外,目前没有其他解决方法,这与Lou Weed的建议相反,即使未链接AdSupport.framework,也会拒绝您的应用程序。

这是Flurry支持的答案:

“感谢您与Flurry接触。我们最近了解到Apple拒绝了一些他们认为使用广告标识符(IDFA)且未包含广告功能的应用程序。请注意,除非应用程序包含AdSupport,否则Flurry不会收集IDFA用于广告功能的.framework。我们正在寻求与Apple进行澄清,我们将在接下来的几天里了解更多信息,以更新受影响的客户。”

Flurry刚刚发布了其SDK的4.3.2版本,专门解决了该问题。


4

原来是Testflight v2.2.0发生了冲突。此后,他们根据更改日志对其进行了修复:Consolidate both SDK versions into one which removes all access to ASIdentifierManager


4

问题在于解决问题。我们因此拒绝了一些应用程序。但是我已经与Crashlytics进行了交谈,他们今天发布了新的更新(版本2.1.6),该更新解决了此问题。

几个库具有AdSupport.framework,但除非明确调用,否则它们将不使用它。Crashlytics之所以调用该框架是因为它必须检查该应用程序是否支持广告。该更改是在版本2.1.5上实现的

因此,如果您使用的是crashlytics,那是最可能的原因。要解决此问题,只需重新存档您的应用程序,以便crashlytics可以在此修复程序中使用新版本。

Crashlytics团队的回应:“我们刚刚为此发布了一个更新-您可以在Mac应用打开的情况下再次构建并运行您的应用,以便它可以更新您的SDK吗?之后一切都会好的!在此之后让我发布您重新提交:)“

PS:之所以开始发生这种情况,是因为Apple似乎已经更改了其关于ADSupport使用的政策。


3

我以前在注释中写了以下内容,将人们引导到“字符串”或“ otool”终端命令。但是,我真的很喜欢使用grep的建议答案。因此,您可以先尝试一下。我的建议是在命令前加上“ git”,因为它快得多:

git grep advertisingIdentifier

如果这不起作用,请尝试(如先前所述):

grep -r advertisingIdentifier . 

接下来是我之前在上面的注释中写的内容,作为终端命令的方法:

您可以在Xcode中搜索项目的文件,也可以尝试删除AdSupport框架以查看在构建/运行时失败的原因。

要使用终端,请单击Spotlight(搜索),然后键入Terminal。等待它在搜索结果中显示为“应用程序”。

在终端中,键入“ cd”,后跟一个空格,然后将Xcode构建文件夹从Finder拖放到终端中。这将自动输入该文件夹的名称。按Enter,它将把您的目录(cd)更改为该文件夹。

在此处,键入strings一个空格,然后输入库的文件名,或otool,输入一个空格和库的文件名。您应该可以单击TAB来自动完成文件名。


1

我的应用也被拒绝,并出现相同的错误!我在最新的Facebook SDK(3.12)中发现了adsingIdentifier。也许您可以使用以下方法检查您图书馆的事件:

我在终端中将FacebookSDK.framework作为一个库打开,并键入以下命令

otool -v -s __TEXT __objc_methname FacebookSDK | grep advertisingIdentifier

但是我不知道该怎么办。我的应用是否因为此参考而被拒绝?如果是,如果我想在我的应用程序中使用Facebook功能怎么办?



谢谢您的回答!我进行了更改,然后重新提交了我的应用程序,希望它不会再次被拒绝:)
bolonn 2014年

@bolonn-进行上述更改后,您的应用是否已被Apple批准?
RoHaN 2014年

是的,它被批准了!
bolonn 2014年

1

这比表面上看起来要复杂一些。经过一些试验,我发现即使仅直接访问AdSupport框架中引用的类,也可以链接AdSupport框架。具有讽刺意味的是,[AsIdentifierManager class]许多第三方库中使用来检查AdSupport框架是否已链接,实际上会导致AdSupport框架被链接。使用混淆类NSClassFromString(@"AsIdentfierManager")不会导致AdSupport框架自动链接。当然,大多数情况下,此代码将位于第三方库中,因此您对此没有太多控制权,但是这就是发生了什么。

我在GitHub上构建了一个示例项目,该示例使用Segment.io的框架说明了这种行为。 https://github.com/distefam/AdSupportDemo


感谢您的有用帖子。因此,当我提交应用程序时,即使我的应用程序未显示任何内容,当我们弱链接(可选)与该项目的框架(在我的情况下,该框架为内部包含AdSupport.framework的Google广告框架)时,广告(具有完全不显示任何广告的付费版本),会被Apple拒绝吗?
C0D3

0

Flurry Analytics也使用此API。
终端输出:

Binary file ./Lib/Flurry/libFlurry_4.3.0.a matches

Flurry说,如果未链接AdSupport框架,则不会调用选择器。
因此,我删除了框架并尝试再次提交。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.