我的应用刚刚被拒绝使用广告支持框架。 哪个库负责?
这只是一个更新,并没有改变任何与拒绝的理由。 这是parsing中心的回应:
原因程序许可协议PLA 3.3.12
我们发现您的应用使用iOS广告标识符,但不包含广告function。 这不符合App Store评论指南要求的iOS开发者计划许可协议的条款。
具体来说,iOS开发者计划许可协议第3.3.12节规定:
“您和您的应用程序(以及您与之签约的任何第三方广告)可以使用广告标识符以及通过使用广告标识符获得的任何信息,仅用于广告服务。广告标识符,则您同意不直接或间接地将先前的广告标识符和任何派生的信息与重置的广告标识符进行组合,关联,链接或以其他方式关联。
请检查您的代码(包括任何第三方库)以删除以下任何实例:
类: ASIdentifierManager
select器: advertisingIdentifier
框架: AdSupport.framework如果您打算在将来的版本中join广告,请在您的应用中删除广告标识符,直到包含广告function为止。
要帮助find广告标识符,请使用“nm”工具。 有关“nm”工具的信息,请打开一个terminal窗口并input“man nm”。
如果您无法访问库源,则可以使用“strings”或“otool”命令行工具search编译的二进制文件。 “串”工具列出了库调用的方法,“otool -ov”将列出Objective-C类结构及其定义的方法。 这些技术可以帮助您缩小问题代码所在的范围。
我使用的第三方库是parse.com sdk, latest version of flurry analytics, and version 2.2 of test flight
的最新版本,最新版本的parse.com sdk, latest version of flurry analytics, and version 2.2 of test flight
。 有谁知道哪个库是问题? 谢谢
在docker:
- 转到您的项目的根文件夹
- types:
grep -r advertisingIdentifier .
(最后的点很关键)
这将recursion地检查每个文件,并给你的名字的违规图书馆。
(在我的情况下,这是乱舞)
更新
Google发布了Google Analytics服务iOS SDK v3.03c,默认情况下会删除AdSupport.framework依赖项。
发行版本3.03c(2014年2月19日)的完整更新日志条目: https : //developers.google.com/analytics/devguides/collection/ios/changelog
老Awnser
我的问题是Google Analytics和TestFlight。
对于TestFlight,我只是将库更新到版本2.2.1( https://www.testflightapp.com/sdk/ios/release_notes/2.2.1/ )。
但是,为了更新Google Analytics(分析),我必须删除-ObjC标志。 但是,当我使用Cocoapods来pipe理一些第三个库时,我不能删除它。 所以我做了以下事情:
1 – 开始将libGoogleAnalytics.a更新至版本3.03a(2014年2月5日)
2 – 然后删除AdSupport.framework
3 – 在“目标 – >生成设置 – >其他链接器标志”下添加“-force_load \”$ {PROJECT_DIR} /Source/Library/GoogleAnalyticsServicesiOS_3.03a“”(注意,在我的项目中,GoogleAnalytics是在/ Source /库/文件夹,你必须configuration你自己的)
但是我没有删除-ObjC标志,我search了如何使用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标志。
但是,当我试图发布我的应用程序时,我得到一个错误告诉我,编译器没有findlibPods.a,所以我去了“目标 – >生成设置 – >其他链接器标志 – ”发布“和将此string$(TARGET_BUILD_DIR)更改为$ {BUILT_PRODUCTS_DIR}。
所以我的其他链接标志成为像下面的图像。
希望能帮助别人。
对不起我的英语不好。 =]
对我来说,Flurry Analytics和TestFlight都是问题所在。
对于TestFlight来说,就像更新它一样简单。 2.2.1版本不会引起任何问题(我使用string进行检查,正如苹果公司所build议的那样)
对于Flurry而言,目前除了去除Flurry之外没有任何修复,与Lou Weed的build议相反,即使AdSupport.framework没有链接,您的应用也将被拒绝。
这里是乱七八糟的支持回答:
“感谢您接触到Flurry,最近我们了解到苹果已经拒绝了一些它认为使用广告标识符(IDFA)的应用程序,但不包括广告function。请注意,Flurry不收集IDFA,除非应用程序包含AdSupport广告function框架,我们正在寻求澄清与苹果,我们将更新我们的受影响的客户,因为我们在未来几天了解更多。
Flurry刚发布了SDK的4.3.2版本,专门解决了这个问题。
原来Testflight v2.2.0是冲突。 他们已经根据他们的更新日志对其进行了修正:将Consolidate both SDK versions into one which removes all access to ASIdentifierManager
Crashlytics是问题所在。 我们有一些应用程序因为它而被拒绝。 但是我已经和Crashlytics谈过了,他们今天发布了一个新的更新(版本2.1.6)来解决这个问题。
几个图书馆都有AdSupport.framework,但除非专门调用,否则不会使用它。 Crashlytics正在调用这个框架,因为它必须检查应用程序是否支持广告。 而这个改变是在2.1.5版本上实现的
所以如果你使用的是crashlytics,这是最可能的原因。 要解决这个问题,只需重新存档您的应用程序,以便crashlytics可以使用此修补程序的新版本。
来自Crashlytics团队的回应:“我们只是推出了一个更新 – 你可以在Mac应用程序打开的情况下再次构build和运行你的应用程序,以便它可以更新你的SDK?你会很好的去追求!你重新提交:)“
PS:这是开始发生,因为苹果似乎已经改变了他们的ADSupport使用政策。
我之前在评论中写了以下内容,指导人们使用“string”或“otool”terminal命令。 不过,我真的很喜欢使用grep的build议答案。 所以你可以先尝试一下。 我的build议是在该命令前面加上“git”,因为速度要快得多:
git grep advertisingIdentifier
如果这不起作用,那么尝试(如前所述):
grep -r advertisingIdentifier .
以下是我之前在上面评论中写的,作为terminal命令的操作方法:
您可以在Xcode中search项目文件,也可以尝试删除AdSupport框架,以查看构build/运行时失败的内容。
要使用terminal,请单击Spotlight(search)并键入terminal。 等待它在search结果中显示为应用程序。
一旦进入terminal,键入“cd”后跟一个空格,然后将您的Xcode生成文件夹从Finder拖放到terminal中。 这应该自动键入该文件夹的名称。按回车,它会改变目录(CD)你到该文件夹。
从那里inputstrings
然后input一个空格,然后input文件名或者otool
,空格以及库的文件名。 你应该能够打TAB来自动完成文件名。
我的应用程序也被拒绝了同样的错误! 我在最新的Facebook SDK(3.12)中发现了一个advertisingIdentifier事件。 也许你可以使用下面的方法检查你的图书馆的发生:
我在terminal打开了FacebookSDK.framework作为一个库,然后input以下命令
otool -v -s __TEXT __objc_methname FacebookSDK | grep advertisingIdentifier
但我不知道该怎么做。 我的应用程序是否因此引用而被拒绝? 如果是,如果我想在我的应用程序中使用Facebookfunction,该怎么办?
这比表面上看起来要复杂一点。 经过一番实验后,我发现即使只是直接访问AdSupport框架中引用的类,AdSupport框架也是链接的。 具有讽刺意味的是,在许多第三方库中使用的[AsIdentifierManager class]
来检查AdSupport框架是否被链接,实际上会导致 AdSupport框架被链接。 使用NSClassFromString(@"AsIdentfierManager")
对类进行模糊处理不会导致AdSupport框架自动链接。 当然,这段代码大部分时间都在第三方库中,所以你不会对它有太多的控制,但是,这是发生了什么事情。
我在GitHub上构build了一个使用Segment.io框架来演示这种行为的示例项目。 https://github.com/distefam/AdSupportDemo
Flurry Analytics也使用这个API。
terminal输出:
Binary file ./Lib/Flurry/libFlurry_4.3.0.a matches
Flurry说,如果AdSupport框架没有链接,则不会调用select器。
所以我删除了框架,并尝试再次提交。