背景
为了在 any 框架中使用方法,您可以选择静态或动态引用这些框架。我没有在您的问题中看到任何暗示您需要使用 dynamic 链接的内容,因此我将避免这种情况(对于初学者来说稍微复杂一些)。 (‡)
要在框架中静态引用 API,您需要导入相关的标头,然后配置您的 Xcode 项目以链接到框架。对于 Private API,这两个步骤略有变化。
私有 API 通常不向您提供描述 API 的标头 (*.h)。我说“通常”,因为有时,iOS 上的私有 API 实际上在 Mac OS X 上是公开的,所以要使用它,只需将 OS X 版本的标头复制到项目中即可。
生成标题
不过,可能更常见的是您必须自己生成标头。如果你知道你需要哪个标题,通常你可以找到它发布在online under someone's github account。如果没有,您需要像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 Navigator 视图中的源文件夹,选择 "Add files to ..."。选择需要包含在项目中的转储头文件。
链接
为了成功链接 API,您还需要将框架添加到 Xcode 构建阶段。从您的项目Target设置中,选择Build Phases,然后选择Link Binary with Libraries。您通常从 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 将失败(通常静默,尽管有时您会在控制台日志中查看消息)。
See here for an example of granting your (jailbreak) app an entitlement.
(‡) 更新: iOS 9.3 在私有 API 以及静态与动态链接方面带来了一些变化。请see this Stack Overflow question here for more。