应用程序被拒绝,但我不使用UDID

时间:2013-05-07 01:46:25

标签: ios app-store uniqueidentifier appstore-approval udid

今天我们收到了有关提交内容的反馈,但我们不了解所报告的问题:“不允许应用访问UDID,也不得使用UIDevice的uniqueIdentifier方法。请更新您的应用和服务器以将用户与iOS 6中引入的供应商或广告标识符。“。

我们知道关于udid的拒绝,但我们的应用程序不使用它!阅读本文后,我们的团队重新评估了应用程序,我们没有发现“UIDevice uniqueIdentifier”的出现。我们还修改了所有使用过的库,实际上我们找不到UDID的任何调用。

有人有想法吗?

经过研究,我执行了“greap”命令,我怀疑FacebookSDK:

my-app-directory $ grep -Rnis 'uniqueIdentifier' *
Binary file MyApp/FacebookSDK.framework/FacebookSDK matches
Binary file MyApp/FacebookSDK.framework/Versions/A/FacebookSDK matches
Binary file MyApp/FacebookSDK.framework/Versions/Current/FacebookSDK matches
Binary file MyApp/MyApp.xcodeproj/project.xcworkspace/xcuserdata/myuser.xcuserdatad/UserInterfaceState.xcuserstate matches

FacebookSDK使用uniqueIdentifier ??是什么决议?

14 个答案:

答案 0 :(得分:86)

在我的情况下,它是ibGoogleAnalytics_debug.a库。

要查找使用uniqueidentifier方法的库,请转到项目文件夹并输入:

$ find . | grep -v .svn  | grep "\.a" | grep -v "\.app" | xargs grep uniqueIdentifier

我得到了这个: 二进制文件./My_Project/libGoogleAnalytics_debug.a匹配

答案 1 :(得分:7)

解决了它: 问题是你的项目仍然引用旧的SDK,它用旧的sdk方法编译代码,包括苹果拒绝的UDID。

将其修复为SEARCH PATH的构建属性 框架搜索路径 图书馆搜索路径

删除不必要的值,例如旧的sdk路径,并将当前的sdk路径放在那里

清理所有项目的文件: Window-> Organizer->项目 - 删除您的项目 制品 - >清洁

现在重建它并重新提交给苹果。

享受:)

答案 2 :(得分:5)

使用strings命令检查您生成的二进制文件,然后查找uniqueIdentifier

$ strings YOUR_BINARY | grep uniqueIdentifier

很可能你会在那里找到它。

我发现OpenSSL在其标题中声明了一个字符串uniqueIdentifier,因此您的应用程序(或您提供的应用程序中提供的任何静态库)很可能已包含它。

就我而言,罪魁祸首是libspotify

答案 3 :(得分:3)

在我的情况下,这个问题是负责任的BugSense SDK(我使用过时的版本)。升级到最新版本(3.1.3)后一切正常。

答案 4 :(得分:3)

我遇到了同样的问题,但是能够在我的项目文件夹中使用终端中的以下命令精确定位包含uniqueIdentifier的文件。

grep -Rnis 'uniqueIdentifier' *

这在我的终端窗口中显示了很多行,罪魁祸首是 libGoogleAdModAds.a - 即使我实际上没有在我的代码中使用它,它仍然被引用我的项目因此被添加到构建中。

我的来源是:http://www.commandlinefu.com/commands/view/3573/search-for-a-string-inside-all-files-in-the-current-directory

答案 5 :(得分:3)

我向Facebook提交了一个错误,但这是一个解决方法:

https://developers.facebook.com/bugs/193119420841692

在sdk中,编辑facebook-ios-sdk / src / FBSession.m

注释掉

- (BOOL)isMultitaskingSupported {
/*
UIDevice *device = [UIDevice currentDevice];
return [device respondsToSelector:@selector(isMultitaskingSupported)] &&
[device isMultitaskingSupported];*/
return TRUE;
}

无论如何不需要IOS 4.0。

删除引用,并重新构建.a

答案 6 :(得分:2)

我今天也有同样的问题。我将AdMob SDK升级到6.4.1并再次提交但没有用。 但是在我禁用AdMob代码并且没有链接到其库之后它通过了上传检查。

根据谷歌的公告,AdMob SDK 6.4及更高版本不再访问UDID。显然,Apple并不这么认为。

答案 7 :(得分:2)

通常,用于分析和beta测试的第三方库使用uniqueIdentifier来跟踪用户(例如测试航班或旧版GA),检查您使用的任何第三方库是否使用此功能。如果不是这样,您可以在http://itunesconnect.apple.com要求澄清。

答案 8 :(得分:1)

我昨天更新了我的应用程序时遇到了同样的问题 在使用UDID搜索第三方库后,我发现我使用的是 Conversion Tracking for iOS 。这个库使用了UDID,但是4月10日发布了修复此问题的更新:

  

iOS转化跟踪SDK v1.2.0不再访问UDID(2013年4月10日发布)。

我希望它有所帮助。

答案 9 :(得分:1)

我整天都在尝试,我的应用程序总是被拒绝。

首先,我试着找。 | grep -v .svn | grep“.a”| grep -v“.app”|我的项目文件夹中的xargs grep uniqueIdentifier。

Google Analytics,AdMob和Wikitude SDK似乎使用了uniqueIdentifier。所以我删除了GA,并更新了AdMob和Wikitude。现在,不再需要对uniqueIdentifier方法进行调用。当我做grep时,结果什么都没有。我清理了项目中的所有内容,但我的应用程序总是被拒绝!

我现在能做什么?任何帮助将不胜感激......

编辑:我找到了这一行:

IDEWorkspaceWindowController***UniqueIdentifier***_IDEActiveWorkspaceTabController_IDE

在此文件中:

  

MYPROJECT.xcodeproj / project.xcworkspace / xcuserdata / MYUSERNAME.xcuserdatad / UserInterfaceState.xcuserstate

你认为问题可以来自这条线吗?

答案 10 :(得分:1)

我不认为Facebook IOS SDK本身使用不推荐使用的'uniqueIdentifier'。我查看了https://github.com/facebook/facebook-ios-sdk的消息来源。

但是当从这些源生成Facebook SDK时,创建的二进制文件包含字符串。 SDK使用的唯一库是 - > Accounts.framework< - 来自IOS本身!

看起来苹果已经开枪了!

编辑: Eric给出了正确的答案。 UIDevice用于facebook-ios-sdk / src / FBSession.m。 Accounts.framework不是问题。

答案 11 :(得分:1)

这就是Apple所做的一切,您需要做的就是:

strings - -a -arch armv7 "App.app/App" | grep uniqueIdentifier

App.app是在您解压缩App.ipa之后,它将在有效负载目录中。

只需在payload目录中运行该命令即可。你可以通过greping你使用的已知方法来进行测试。

如果您要搜索为其构建的所有体系结构,可以将 armv7 替换为所有

答案 12 :(得分:0)

我今天面临同样的问题。 openssl中有一个名为uniqueIdentifier的变量。也许它会导致问题。

答案 13 :(得分:0)

我有同样的问题。原来是RevMob sdk。最新的5.9.0(2013/05/30)接缝来解决这个问题。