gpt4 book ai didi

ios - iPhone私有(private)API编译

转载 作者:可可西里 更新时间:2023-11-01 03:27:16 24 4
gpt4 key购买 nike

几个小时以来,我一直在搜索整个互联网,但我就是找不到我要找的信息。我想弄乱私有(private) api,看看有什么可能等等,但我什至无法编译一些东西。

所以我有几个非常基本的问题:

  • 我必须转储 header 吗?因为我下载了一个sample,这里的API是用
  • 加载的
char *framework = "/System/Library/PrivateFrameworks/...";
dlopen(...);

如果有任何机会,我想使用 objc-syntax(如果可能)而不是使用 C(如上所述)。

  • 如果导入私有(private) API,如何编译 Xcode?我是否必须添加其他链接标志? (因为我读到了两种不同的观点)我添加了一个私有(private)框架并创建了一个新文件夹“Headers”并将所有头文件放在那里,因此该框架在 Xcode 中正确显示。我必须导入整个 .framework,还是只导入我想使用的框架中的 header ?导入框架后,我收到 20 多个错误、未知的类型名称等等。

最后,我读到了权利(这在 iOS 7 中似乎是新的)。我如何使用这些权利以及何时使用它们?

有人可以输入几行作为示例吗?

最佳答案

背景

为了在任何 框架中使用方法,您可以选择静态或动态地引用这些框架。我没有在您的问题中看到任何建议您需要使用动态 链接的内容,因此我将避免这种情况(对于初学者来说稍微复杂一些)。 (‡)

要在框架中静态引用 API,您需要导入相关 header ,然后配置您的 Xcode 项目以链接到框架。对于私有(private) API,这两个步骤略微改变。

私有(private) API 通常不会为您提供描述 API 的 header (*.h)。我说“通常”,因为有时,在 iOS 上私有(private)的 API 实际上在 Mac OS X 上是公开的,因此要使用它,您只需将 OS X 版本的 header 复制到您的项目中。

生成标题

不过,可能更常见的是,您必须自己生成 header 。如果您知道需要哪个 header ,通常可以找到它发布的 online under someone's github account .如果没有,您需要一个像 class-dump 这样的工具, 或 class-dump-z .通过在您的 Mac 上找到它,在私有(private)框架上运行类转储工具:

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/ 并找到许多转储的头文件。将(仅)您需要的 header 复制到您的 Xcode iOS 项目目录中。然后,在 Xcode 中,右键单击 Project Navigator View 中的源文件夹,选择 "Add files to ..." 。选择您需要包含在项目中的转储头文件。

链接

为了成功链接到 API,您还需要将框架添加到您的 Xcode Build Phases。从您的项目Target 设置中,选择Build Phases,然后选择Link Binary with Libraries。您通常会从 iOS SDK 为您提供的默认列表中选择一个公共(public)框架。但是,您也可以选择浏览 Mac 以查找第 3 方框架或私有(private)框架。对于私有(private)框架,您只需导航到这样的文件夹位置

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/PrivateFrameworks/

然后选择*.framework目录。

然后,只需像使用任何公共(public)/私有(private) API 一样使用这些 API。 #import 头文件、调用API、实例化类等。

这段代码的使用:

char *framework = "/System/Library/PrivateFrameworks/...";
dlopen(...);

是尝试动态打开私有(private)框架。如果您在编译时就知道要使用哪个框架,并且将其呈现在您的 Mac 上以让 Xcode 链接,则没有必要这样做。

权利

权利对于 iOS 7 来说并不是新的。它们已经存在了相当长的一段时间,并且是 iOS 用来防止未经授权使用某些私有(private) API 的一种技术。 iOS 将检查您的应用程序是否已被授予特定权利(按名称),如果它没有该权利,则调用 protected API 将失败(通常静默,尽管有时您会在控制台日志中看到一条消息)。

See here for an example of granting your (jailbreak) app an entitlement .


(‡) 更新:iOS 9.3 对私有(private) API 以及静态与动态链接进行了一些更改。请see this Stack Overflow question here for more .

关于ios - iPhone私有(private)API编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21970650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com