ios 这被认为是在iPhone开发中使用私有功能,因此是非法的吗?

axkjgtzd  于 9个月前  发布在  iOS
关注(0)|答案(7)|浏览(129)

我试图禁用滚动的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拒绝吗?

sshcrbum

sshcrbum1#

这样做不是更简单吗
第一个月
这避免了他们可能会扫描你的二进制文件的任何潜在的方法调用(不知道他们如何验证“合法性”)。

o4tp2gmn

o4tp2gmn2#

我刚刚得到了我的应用程序拒绝,因为使用setScrollingEnabled,所以小心!
他们的消息:“应用程序中包含的非公共API是setScrollingEnabled”

4dc9hkyq

4dc9hkyq3#

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

yxyvkwin

yxyvkwin4#

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

smtd7mpg

smtd7mpg5#

这个管用

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

字符串
这解决了这个问题,同时也保持了链接的可点击性,它嵌入的任何滚动视图都是可滚动的,并且只使用公共API。
我发现JavaScript解决方案阻止WebView正常工作,如果它嵌入在UIScrollView中,并将userInteractionEnabled设置为false,则会阻止WebView中的链接可点击。

tyg4sfes

tyg4sfes6#

这可能是有问题的,但不是拒绝的原因,只要你有一个回退行为时/如果该方法无法找到。

xsuvu9jc

xsuvu9jc7#

好吧,也许他们认为你是用另一种方式做的,比如把一个屏幕外的UIWebView的内容显示在一个普通的UIIMage视图中,或者把一个页面的HTML内容限制它的大小,然后在一个UIWebView中呈现它。

相关问题