今天我们收到了有关提交内容的反馈,但我们不了解所报告的问题:“不允许应用访问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 ??是什么决议?
答案 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 - 即使我实际上没有在我的代码中使用它,它仍然被引用我的项目因此被添加到构建中。
答案 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)接缝来解决这个问题。