iOS如何使用私有API?

7

我不想将这个应用提交到AppStore。我尝试了很多次,但遇到了很多问题 :(

我使用class-dump获取了UIKit.framework的所有头文件。在由class-dump生成的UIApplication.h中,我看到了我想使用的方法——launchApplicationWithIdentifier。

然后我将UIApplication.h放入我的项目并导入它。编译后,我得到了许多"Redefinition of enumerator...."错误,因为在我先前使用的UIKit.framework中,还有另一个UIApplication.h。但是这个文件没有launchApplicationWithIdentifier方法。

如果我删除之前的UIKit.framework并导入class-dump生成的文件夹。那么这看起来像一个框架,但如果我展开它,它是空的。

然后我想将所有生成的头文件制作成框架文件,并替换先前的UIKit.framework。但我不知道如何做。正如我们所看到的,在系统框架目录下,有一个与框架同名且具有'executed shell script'图标的文件。我如何制作这个文件?

我真的很困惑。有人可以帮帮我吗?谢谢。


天啊,我刚刚在你的另一个问题中添加了答案:https://dev59.com/UGXWa4cB1Zd3GeqPIwII - Oleg Trakhman
1个回答

8

只需在类实现之前的分类接口中指定私有方法,例如:

@interface UIApplication (Private)

- (BOOL)launchApplicationWithIdentifier:(id)identifier suspended:(BOOL)suspended;

@end

不要导入整个class-dump文件并链接原始的UIKit框架。
在使用私有API时一定要非常小心。这些方法可能会在未来的iOS版本中更改或删除!
在运行时使用respondsToSelector:检查方法是否真的存在,并准备好它不存在的情况。
我在自己的应用程序中使用了一个秘密的MapKit功能,我知道这些私有方法只存在于iOS 5中。因此,我的应用程序在所有iOS版本上仍然可以工作,但是这个功能只在iOS 5中可用(苹果在iOS 6 beta 1中删除或更改了它)。

1
它可以工作。非常感谢 :-) 此外,我必须使用 dpkg 工具将我的应用程序制作成 deb 文件,然后安装它。只有这样,我的应用程序才能启动另一个应用程序。 - wyp

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