我如何使用这个私有API?

时间:2015-04-22 20:14:31

标签: ios iphone-privateapi

我找到了课程PSCellularDataSettingsDetail及其方法+(void)setEnabled:(BOOL)enabled;,我认为这会为我提供所需内容,即访问移动数据设置。

我通过使用Preferences.framework打开已编译的class-dump-z来找到此方法。

现在我找到this answer并尝试以这种方式访问​​类和方法,但该类也是私有的。如何将此课程打开到Xcode?

2 个答案:

答案 0 :(得分:5)

您是否尝试过调用performSelector?这通常是调用私有方法的技巧。记住所有使Objective-C中的方法变为私有的事实是它不会在h文件中公布。但是,如果您向对象发送消息并且该对象可以响应该消息,则无论头文件中的内容是什么。

答案 1 :(得分:3)

如果它是像+(void)setEnabled这样的类方法,你只需要调用[MyClass performSelector(@selector(myMethod)],如果是实例方法,你可以在作为类实例的变量上调用它: MyClass * c = [[MyClass alloc] init];

[c performSelector: @selector(myMethod)]

当你需要传递参数时会很棘手,就像在这种情况下一样,因为performSelector传递参数的唯一方法就是它们是对象而不是基元。您还可以查看使用objc_msgSend。

网上有很多东西可以解释这两者是如何运作的。无论哪种方式,尝试调用私有方法都很麻烦,风险很大。