我如何使用这个私人 API?

How do I use this private API?

我找到了 class PSCellularDataSettingsDetail 及其方法 +(void)setEnabled:(BOOL)enabled;,我认为它可以满足我的需求,即访问移动数据设置。

我通过使用class-dump-z打开编译好的Preferences.framework找到了这个方法。

现在我找到 this answer 并尝试以这种方式访问​​ class 和方法,但是 class 也是私有的。我怎样才能打开这个 class 到 Xcode?

你试过调用performSelector吗?这通常是调用私有方法的技巧。请记住,在 Objective-C 中使方法私有的所有原因是它没有在 h 文件中公布。但是,如果您向对象发送消息并且对象可以响应该消息,则无论头文件中的内容如何。

如果它是一个像 +(void)setEnabled 这样的 class 方法,你只需调用 [MyClass performSelector(@selector(myMethod)],如果它是一个实例方法,你将在一个变量上调用它,该变量是 class: MyClass *c = [[MyClass alloc] init];

[c performSelector: @selector(myMethod)]

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

网上有大量资料解释这两者的工作原理。无论哪种方式,尝试调用私有方法都很麻烦,而且风险很大。