如何在iOS中加载新生成的私有API头文件?

7

我不懂iOS,特别是私有API。

我有一个测试应用程序,现在我需要使用私有API(这个应用程序不是为App Store设计的)。

我从iOS-Runtime-Headers下载了生成的头文件,接下来怎么做呢?

/System/Library/ 下,我有包含Frameworks、...、PrivateFrameworks的库列表。

我需要用从复制的框架替换原始框架吗?

因为我还有其他只使用公共API的应用程序,我不想损坏它们。

根据发布的链接中所说,他们建议验证库,例如:

NSBundle *b = [NSBundle 
        bundleWithPath:@"/System/Library/PrivateFrameworks/GAIA.framework"];
BOOL success = [b load];

但这里的路径指向原始路径。

或者我漏掉了什么,

谢谢。

2个回答

6

首先,不要替换苹果提供的任何标题。

通常有两种方法:

1)您可以将其中一些标题复制到您的项目中,并像包含其他任何标题一样包含这些文件。

#import "SomeHeader.h"

2) 有时您需要对它们进行一些适当的清理(编辑)。很多情况下,这些标题中会包含类似于 "in" 的内容:

#import "NSObject.h"

编译器找不到它,因为NSObject是内置类。所以,你需要删除这个类。

3)如果你只需要其中的几个方法,那么Tuukka Nori的解决方案是正确的。

除此之外,你还需要链接(静态或动态地)适当的私有框架(仅包含头文件是不够的)。


通常我想通过使用私有API让设备进入睡眠状态。我知道这与我的问题无关,但我看到你在大多数问题的答案中都提到了私有API。你有没有想过在哪里查找适当的头文件?因为今天大多数答案都不相关(我使用6.1)。无论如何,谢谢你。 - snaggs
@fessy:我甚至找不到一个完全在iOS 6.x上运行的解决方案。所有这些DimScreen和BlankScreen只是部分地调暗屏幕(没有一个完全关闭屏幕)。所以,我不确定。你可以尝试反向工程Springboard并在其中搜索。但是,它可能受到某些权限的保护。 - Victor Ronin

4

不要替换任何文件。相反,编写一个标头文件,并使用您打算使用的符号。如果需要Objective-C方法,请添加一个具有唯一名称的类别,例如。

@interface NSString (MyOwnPrivateCategory)
- (void) privateMethodDeclaredInRuntimeHeaders;
@end

导入它并按照您喜欢的方式使用该方法。

示例代码展示了如何在运行时加载框架,以防您不想链接到它。由于某些框架是私有的,它们可能不会在所有版本的iOS中提供。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接