【问题标题】:App rejected, but I don't use UDID应用被拒绝,但我不使用 UDID
【发布时间】:2013-04-30 20:53:54
【问题描述】:

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

【问题讨论】:

  • 您是否在使用可能包含 UDID 的第三方库或类?
  • 您是否将任何东西(可能是您正在构建的东西)从您的应用程序传递到您的服务器以识别 iPhone?
  • 也许是一些分析库?
  • 您的应用程序中还有其他名为uniqueIdentifier 的方法吗?有时,即使选择器不在 Apple 类上,Apple 也会错误地标记私有/不推荐使用的选择器。
  • 这个答案可能对你有帮助:stackoverflow.com/a/14448057/1431728.

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


【解决方案1】:

在我的例子中,它是 ibGoogleAnalytics_debug.a 库。

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

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

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

【讨论】:

  • 这应该是公认的答案,它会切入并锁定有问题的代码。
  • 有误报的余地吗? Millennial SDK (v5.0.1) 被抛出,即使他们声称不再使用。
  • 一些第 3 方库不使用“.a”扩展名,而是不使用扩展名。此命令还将在这些文件中查找 API 使用情况:grep -lr "uniqueIdentifier" * | grep -v .svn | grep -v .md
  • 完美!必须保留作为样本。
【解决方案2】:

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

在 SEARCH PATH 的构建属性中修复它 框架搜索路径 图书馆搜索路径

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

清理所有项目的文件: Window->Organizer->Project - 删除你的项目 产品->清洁

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

享受:)

【讨论】:

    【解决方案3】:

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

    $ strings YOUR_BINARY | grep uniqueIdentifier
    

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

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

    就我而言,罪魁祸首是libspotify

    【讨论】:

    • 如何使用字符串命令?那我有一个xyz.app ??我正在使用 $ 字符串 xyz.app | grep uniqueIdentifier 并获取无法映射文件:xyz.app(无效参数)。谢谢
    • 在“.app”目录中搜索与您的应用同名的文件。假设我的应用程序名为“Foo.app”运行“find Foo.app -type f -name Foo”,然后针对它运行字符串。
    • @Igor - 我似乎对 libspotify 也有同样的问题。它在我的源代码中的任何地方都不是纯文本,所以它似乎在 libspotify 二进制文件中。你找到解决办法了吗?
    • @Grav - 向 Apple 发送一封电子邮件,说明您没有使用 uniqueIdentifier 而是 libspotify 链接到已定义字符串的 OpenSSL。
    • +1 谢谢伊戈尔,但我仍然无法运行。我在桌面上有 xyz.app 文件,但它不工作:(
    【解决方案4】:

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

    【讨论】:

    • 感谢 Tomasz 的澄清。实际上插件的最新版本是 3.3.1 你可以下载它并在这里阅读发行说明bugsense.com/releases/ios/3.3.1
    • 非常感谢。这对我帮助很大。
    【解决方案5】:

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

    grep -Rnis 'uniqueIdentifier' *

    这在我的终端窗口中回显了一堆行,罪魁祸首是 libGoogleAdModAds.a - 尽管我实际上并没有在我的代码中使用它,但它仍然在我的项目,因此添加到构建中。

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

    【讨论】:

      【解决方案6】:

      我向 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

      【讨论】:

        【解决方案7】:

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

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

        【讨论】:

        • 升级 AdMob SDK 为我解决了这个问题。我认为您可能有另一个使用 uniqueIdentifier 的第三方库。
        • 我今天提交了几天前被拒绝的同一个二进制文件,但它没有被拒绝。我猜问题出在 iTunes 连接端,而不是在 admob 库中。
        • 我提交了具有相同 AdMob SDK 的新版本,并且 iTunes 连接没有抱怨。我认为问题出在 iTunes 连接中,他们已经按照其他人所说的那样修复了它。
        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

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

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

          希望对你有帮助。

          【讨论】:

            【解决方案10】:

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

            首先,我尝试了 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

            你认为问题可能出在这条线上吗?

            【讨论】:

              【解决方案11】:

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

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

              看来苹果自己的脚已经开枪了!

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

              【讨论】:

                【解决方案12】:

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

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

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

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

                如果您想搜索它所构建的所有架构,您可以将 armv7 替换为 all

                【讨论】:

                  【解决方案13】:

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

                  【讨论】:

                  • 您是否有机会使用 libspotify?我发现它是我今天提交的罪魁祸首。
                  【解决方案14】:

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

                  【讨论】:

                  • 嗨!这不是答案,请将其转换为评论。
                  猜你喜欢
                  • 2013-05-10
                  • 2013-05-09
                  • 2019-12-11
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-04-05
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多