【问题标题】:Detecting the use of private APIs检测私有 API 的使用
【发布时间】:2010-12-16 23:16:47
【问题描述】:

我在 App Store 上被拒绝在我的应用程序中使用私有实例变量。我应该使用的 ivars 绝对不会在我的代码中被访问,但我正在使用来自第三方的一两个静态库。我将如何测试这些是否真的是罪犯?

更新:

Apple 指责我(和第 3 方库)在 UITouch 类中使用私有实例变量,包括

  • _locationInWindow
  • _tapCount
  • _previousLocationInWindow
  • _timestamp
  • _touchFlags
  • _phase
  • _window

【问题讨论】:

  • 如何通过不冒犯存根来替换第三方库并测试它是否失败?
  • 如果我能一次性完成,我不想经历 2 个审查周期

标签: iphone objective-c cocoa-touch debugging


【解决方案1】:

我对检测问题一无所知,但是我们最近遇到了这个问题;在我们的例子中,它是由 Three20 库引起的。如果您正在使用它,请参阅http://groups.google.com/group/three20/browse_thread/thread/c442af6e39a918b0/2375e7a158ee9d1b 了解讨论/可能的解决方案。

【讨论】:

  • 我确实在使用 Three20,看起来这将解决我的问题。非常感谢
【解决方案2】:

您可以使用nm 来扫描哪个库使用了有问题的ivar

% nm static_lib.a | grep name_of_ivar

如果你得到一条线,我想用大写的U,用ivar的名字你可能有嫌疑。

【讨论】:

  • 正是我正在寻找的东西,会给它一个bash。谢谢
  • 好的,所以我运行了 nm -a static_lib.a,它看起来并没有显示对 UIKit 类的任何消息调用,它只显示如下内容:U .objc_class_name_NSCharacterSet
  • 我阅读了您的更新。这些变量可以以直接的结构方式访问,使它们成为编译器知道的偏移量......所以我认为你应该关注哪些部分使用 UITouch 的东西。即,谁使用/定义 touchesBegin:/touchesMove:/touchesEnd:
【解决方案3】:

我正在使用一两个静态库 来自第三方

联系第三方,要求解释,他们编写了代码,他们必须知道里面有什么。他们可能有一个论坛或 cmets 部分,其他用户可能已经表达了这些担忧,您可以寻找答案和替代方案。

【讨论】:

  • 我都做过,供应商拒绝使用私有 API,我没有发现任何类似的投诉,但我仍然想确定
【解决方案4】:

对于第三方库较多的朋友,可以在你的项目路径中这样查看你的项目,比如你想找到GraphicsService

$ find . |grep "\\.a" | xargs grep GraphicsService

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多