45

今天我们收到了关于我们提交的反馈,我们不理解报告的问题:“应用程序不允许访问 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?? 分辨率是多少?

4

14 回答 14

86

就我而言,它是 ibGoogleAnalytics_debug.a 库。

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

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

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

于 2013-05-08T00:39:14.710 回答
7

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

在 SEARCH PATH Framework Search Paths Library Search Paths 的构建属性中修复它

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

清理所有项目的文件:Window->Organizer->Project - 删除你的项目 Product->Clean

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

享受 :)

于 2013-05-07T19:37:23.807 回答
5

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

$ strings YOUR_BINARY | grep uniqueIdentifier

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

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

就我而言,罪魁祸首是libspotify

于 2013-05-07T15:08:14.683 回答
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

于 2013-05-07T23:38:16.870 回答
3

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

于 2013-05-07T19:24:33.180 回答
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

于 2013-05-17T13:02:56.517 回答
2

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

根据 Google 的公告,AdMob SDK 6.4 及以上版本不再访问 UDID。显然,苹果不这么认为。

于 2013-05-07T05:41:17.993 回答
2

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

于 2013-05-07T05:42:56.810 回答
1

我昨天更新我的应用程序时遇到了同样的问题。
在使用 UDID 搜索第三方库后,我意识到我正在使用iOS 转换跟踪。该库使用了 UDID,但 4 月 10 日发布了修复此问题的更新:

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

我希望它有所帮助。

于 2013-05-08T10:20:29.283 回答
1

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

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

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

只需在有效负载目录中运行该命令。您可以通过使用您使用的已知方法来进行测试。

如果要搜索为其构建的所有架构,可以将armv7替换为all 。

于 2013-05-30T15:50:34.357 回答
1

我试了一整天,我的应用程序总是被拒绝。

首先,我尝试了 find 。| grep -v .svn | grep ".a" | grep -v ".app" | xargs grep uniqueIdentifier 在我的项目文件夹中。

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

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

编辑:我发现这一行:

IDEWorkspaceWindowController***UniqueIdentifier***_IDEActiveWorkspaceTabController_IDE

在这个文件中:

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

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

于 2013-05-08T23:08:22.130 回答
1

我不认为 Facebook IOS SDK 本身使用已弃用的“uniqueIdentifier”。我查看了https://github.com/facebook/facebook-ios-sdk的来源。

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

所以看起来苹果已经踢了自己的脚!

编辑: 埃里克给出了正确的答案。UIDevice 在 facebook-ios-sdk/src/FBSession.m 中使用。Accounts.framework 不是问题。

于 2013-05-15T18:32:17.040 回答
0

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

于 2013-05-07T13:56:21.557 回答
0

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

于 2013-06-06T20:06:40.977 回答