这是否被认为是在iPhone开发中使用私有函数,因此是非法的?

问题描述 投票:0回答:7

我正在尝试禁用

UIWebView
的滚动,我发现的唯一方法就是使用这种方式:

#import <objc/runtime.h>

id scroller = [[Webview subviews] lastObject];
int count;
Method *method = class_copyMethodList([scroller class], &count);
int i;
for (i=0; i<count; i++) {
    if (strcmp(method_getName(method[i]), "setScrollingEnabled:") == 0)
        break;
}
IMP test = method_getImplementation(method[i]);
test(scroller, @selector(setScrollingEnabled:), NO);

这是否被认为是使用iPhone SDK的非法方式?这会导致我的应用程序被 App Store 拒绝吗?

ios scroll uiwebview iphone-privateapi
7个回答
4
投票

这样做不是更简单吗:


if ([scroller respondsToSelector: @selector(setScrollingEnabled:)]) [scroller setScrollingEnabled: NO]

这可以避免他们可能扫描您的二进制文件的任何潜在方法调用(不确定他们如何验证“合法性”)。它仍然不是 100% 犹太洁食,但绝对更安全。


2
投票

我的应用程序因使用 setScrollingEnabled 而被拒绝,所以要小心!

他们的消息:“您的应用程序中包含的非公共 API 是 setScrollingEnabled”


2
投票

如果该方法不在 .h 文件中,则它是私有的。这是一个非常简单的规则。事实上,您需要为简单的消息发送执行任何运行时“恶作剧”,这一事实应该很能说明问题。


1
投票

是的,这被认为是非法的。我实际上收到了一个“警告”,说 setSCrollingEnabled 是私有框架的一部分。他们批准了该应用程序,但表示我需要在提交的下一次更新中删除此调用。


1
投票

这有效 –

UIScrollView *scrollView = [[myWebView subviews] lastObject];
scrollView.scrollEnabled = FALSE;

这解决了问题,同时还保持链接可点击、嵌入可滚动的任何滚动视图,并且仅使用公共 API。

我发现,如果将 WebView 嵌入到

UIScrollView
中,并且将
userInteractionEnabled
设置为 false,则 JavaScript 解决方案会阻止 WebView 正常工作,从而阻止 WebView 中的链接可点击。


0
投票

这可能是有问题的,但只要当/如果找不到该方法时您有后备行为,就不会成为拒绝的原因。还有更严重的虐待行为已经过去了。


0
投票

好吧,也许他们认为您采用了另一种方式,例如获取屏幕外 UIWebView 的内容并将其显示在普通 UIIMage 视图中,或者获取页面的 HTML 内容限制其大小并将其呈现在 UIWebView 中。

© www.soinside.com 2019 - 2024. All rights reserved.