Tat*_*tat 109 iphone objective-c appstore-approval
我向Apple提交了一个没有任何源代码的二进制文件.
除了手动检查源代码外,Apple如何知道使用了什么以及您调用了哪些API?
ken*_*ytm 171
我知道有三种方法.这些只是一些猜测,因为我不在Apple审核小组工作.
otool -L这将列出应用已链接到的所有库.你不应该使用的东西,比如IOKit和WebKit都可以被这个检测到.
nm -u这将列出所有链接的符号.这可以检测到
UITouch._phase(这可能是几个月来拒绝基于Three20的应用程序的原因.)stringsObjective-C选择器存储在二进制文件的特殊区域中,因此Apple可以从那里提取内容,并检查是否使用了一些未记录的Objective-C方法,例如-[UIDevice setOrientation:].
由于选择器独立于您正在发送的类,即使您的自定义类定义-setOrientation:与UIDevice无关,也有可能被拒绝.
您可以使用Erica Sadun的APIKit来检测由于(错误警报)私有API而导致的潜在拒绝.
(如果你真的真的想要解决这些检查,你可以使用运行时功能,如
-valueForKey:; object_getInstanceVariable,object_getIvar等.获得那些私有库,类,方法和ivars.)
Rob*_*ond 26
您可以在终端中使用以下单行程列出Mach-O程序中的选择器:
otool -s __TEXT __objc_methname "$1" |expand -8 | cut -c17- | sed -n '3,$p' | perl -n -e 'print join("\n",split(/\x00/,scalar reverse (reverse unpack("(a4)*",pack("(H8)*",split(/\s/,$_))))))'
Run Code Online (Sandbox Code Playgroud)
小智 12
假设你想使用一些私有API; objective C允许您从字符串构造任何SEL:
SEL my_sel = NSSelectorFromString([NSString stringWithFormat:\
@"%@%@%@", "se","tOr","ientation:"]);
[UIDevice performSelector:my_sel ...];
Run Code Online (Sandbox Code Playgroud)
机器人或图书馆扫描怎么能抓住这个?他们必须使用一些在运行时监视私有访问的工具来捕获它.即使他们构造了这样的运行时工具,也很难捕获,因为这个调用可能隐藏在一些很少运行的路径中.
我想他们会查看你的二进制文件试图导入的所有符号(毫无疑问,这些符号在符号表中很容易获得),并且如果在"私有API列表"中找到任何这些符号,则会命令你.事实上,很容易实现自动化.
| 归档时间: |
|
| 查看次数: |
42713 次 |
| 最近记录: |