Mac App因使用非公共API而被拒绝

时间:2011-05-24 18:19:31

标签: macos appstore-approval

Mac应用程序最近因使用非公共API而被拒绝(见下文),我不确定如何解决问题 - 主要是因为我不完全了解问题本身。 / p>

我尝试过使用otool -L和nm -u来更好地了解问题,但我在终端中收到了“无法映射文件”的警告。

同样重要的是要注意我在应用程序中使用PyObjC,我有一种感觉是这个问题的根源。

有人知道如何解决这个问题吗?

  

2.5

     

使用非公共API可能导致   这些用户体验不佳   API将来会发生变化,而且是   因此不允许。下列   非公开API包含在您的   应用程序:

     

'pthread_key_init_np',框架:   '/usr/lib/libSystem.B.dylib'   'auto_assign_weak_reference',   框架:'/ usr / lib / libauto.dylib'   'auto_collect',框架:   '/usr/lib/libauto.dylib'   'auto_collect_multithreaded',   框架:'/ usr / lib / libauto.dylib'   'auto_collection_parameters',   框架:'/ usr / lib / libauto.dylib'   'auto_read_weak_reference',框架:   '/usr/lib/libauto.dylib'   'auto_zone_add_root',框架:   '/usr/lib/libauto.dylib'   'auto_zone_allocate_object',   框架:'/ usr / lib / libauto.dylib'   'auto_zone_assert_thread_registered',   框架:'/ usr / lib / libauto.dylib'   'auto_zone_atomicCompareAndSwap',   框架:'/ usr / lib / libauto.dylib'   'auto_zone_atomicCompareAndSwapPtr',   框架:'/ usr / lib / libauto.dylib'   'auto_zone_clear_stack',框架:   '/usr/lib/libauto.dylib'   'auto_zone_create',框架:   '/usr/lib/libauto.dylib'   'auto_zone_dump',框架:   '/usr/lib/libauto.dylib'   'auto_zone_erase_associative_refs',   框架:'/ usr / lib / libauto.dylib'   'auto_zone_get_associative_ref',   框架:'/ usr / lib / libauto.dylib'   'auto_zone_get_layout_type',   框架:'/ usr / lib / libauto.dylib'   'auto_zone_is_collecting',框架:   '/usr/lib/libauto.dylib'   'auto_zone_is_finalized',框架:   '/usr/lib/libauto.dylib'   'auto_zone_is_valid_pointer',   框架:'/ usr / lib / libauto.dylib'   'auto_zone_register_datasegment',   框架:'/ usr / lib / libauto.dylib'   'auto_zone_register_thread',   框架:'/ usr / lib / libauto.dylib'   'auto_zone_release',框架:   '/usr/lib/libauto.dylib'   'auto_zone_retain',框架:   '/usr/lib/libauto.dylib'   'auto_zone_retain_count',框架:   '/usr/lib/libauto.dylib'   'auto_zone_root_write_barrier',   框架:'/ usr / lib / libauto.dylib'   'auto_zone_set_associative_ref',   框架:'/ usr / lib / libauto.dylib'   'auto_zone_set_class_list',框架:   '/usr/lib/libauto.dylib'   'auto_zone_set_write_barrier',   框架:'/ usr / lib / libauto.dylib'   'auto_zone_size',框架:   '/usr/lib/libauto.dylib'   'auto_zone_start_monitor',框架:   '/usr/lib/libauto.dylib'   'auto_zone_unregister_datasegment',   框架:'/ usr / lib / libauto.dylib'   'auto_zone_unregister_thread',   框架:'/ usr / lib / libauto.dylib'   'auto_zone_write_barrier_memmove',   框架:'/ usr / lib / libauto.dylib'

     

如果您已经定义了方法   源代码与。的名称相同   我们建议,上述API   改变你的方法名称,以便   他们不再与苹果公司发生冲突   私有API,以避免您的应用程序   在未来的提交中被标记。

     

另外,一个或多个   上述API可能存在于   图书馆附带你的   应用。如果您没有访问权限   到图书馆的来源,你可能是   能够搜索已编译的二进制文件   使用“strings”或“otool”命令   线工具。 “字符串”工具可以   输出一个方法列表   库调用和“otool -ov”会   输出Objective-C类   结构及其定义的方法。   这些技巧可以帮助您缩小范围   在哪里有问题的代码   驻留。

1 个答案:

答案 0 :(得分:1)

PyObjC框架正在导入(直接或通过另一个正在使用的库)这些库“/usr/lib/libSystem.B.dylib”和“/usr/lib/libauto.dylib”,如消息中所述。这两个库包含某些方法(也在消息中提到)

  

与Apple的私有API冲突

我猜这些方法会与QTKit框架发生冲突(参见API notes for QTKit)。现在有两种可能性:

  1. 如果可以在构建时删除有问题的库
  2. 与PyObjC的人讨论是否需要更改他们的API