背景
为了在任何框架中使用方法,您可以选择静态或动态引用这些框架。根据您的问题,我没有看到任何需要使用动态链接的迹象,因此我将避免这样做(对于初学者来说稍微复杂一些)。(‡)
要在框架中静态引用API,请导入相关标题,然后配置Xcode项目以链接到该框架。这两个步骤对于私有 API 仅有轻微变化。
私有API通常不会向您提供描述API的头文件(*.h)。 我说“通常”,因为有时,在iOS上私有的API实际上在Mac OS X上是公共的,因此要使用它,您只需将OS X版本的头文件复制到项目中即可。
生成头文件
但更常见的情况是,您必须自己生成头文件。 如果您知道所需的标题,通常可以在某人的GitHub帐户下在线找到它们。如果没有,您需要像class-dump或class-dump-z这样的工具。通过在Mac上找到私有框架,运行类转储工具:
cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/PrivateFrameworks/
class-dump -H -o ~/Headers/7.0/MusicLibrary/ MusicLibrary
然后,进入
~/Headers/7.0/MusicLibrary/
,找到许多转储的头文件。只复制您需要的头文件到Xcode iOS项目目录中。然后在Xcode中,在项目导航器视图中的源文件夹上右键单击,选择“添加文件到<Project Name> …”。选择需要包含在项目中的已转储头文件。
链接
为了成功地针对API进行链接,您还需要将框架添加到Xcode构建阶段。从您的项目“目标”设置中,选择“构建阶段”,然后选择“链接二进制文件库”。通常,您可以从iOS SDK提供的默认列表中选择一个公共框架。但是,您也可以选择浏览Mac中的第三方框架或私有框架。对于私有框架,您只需要导航到类似以下位置的文件夹即可。
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/PrivateFrameworks/
然后选择*.framework
目录。
接下来,像使用任何公共/私有API一样简单地使用API。导入头文件#import
,调用API,实例化类等。
这段代码的用法:
char *framework = "/System/Library/PrivateFrameworks/...";
dlopen(...);
尝试动态打开私有框架。如果您在编译时知道要使用哪个框架,并且已经将其放置在Mac上以便Xcode链接,那么这不是必需的。
授权
授权对于iOS 7并不新鲜。它们存在已经有一段时间了,并且是iOS用于防止某些私有API未经授权使用的一种技术。iOS会检查您的应用程序是否被授予特定的授权(按名称),如果没有该授权,则调用受保护的API将失败(通常情况下是静默地,但有时您会在Console日志中看到一条消息)。
在此处查看授予您(越狱)应用程序授权的示例。
(‡) 更新:iOS 9.3在私有API和静态与动态链接方面带来了一些变化。请在此处查看此Stack Overflow问题以获取更多信息。