加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – iPhone私有API编译

发布时间:2020-12-15 01:45:05 所属栏目:百科 来源:网络整理
导读:我几个小时后在整个互联网上搜索,我找不到我正在寻找的信息. 我想搞乱私人api,看看什么可能,等等,但我甚至无法编译. 所以我有几个非常基本的问题: 我必须转储标头吗?因为我下载了一个加载API的示例 char *framework = "/System/Library/PrivateFrameworks/
我几个小时后在整个互联网上搜索,我找不到我正在寻找的信息.
我想搞乱私人api,看看什么可能,等等,但我甚至无法编译.

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

>我必须转储标头吗?因为我下载了一个加载API的示例

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

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

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

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

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

解决方法

背景

为了在任何框架中使用方法,您可以选择静态或动态地引用这些框架.我没有在你的问题中看到任何暗示你需要使用动态链接的东西,所以我会避免这种情况(初学者会稍微复杂一些). (安培; ddagger)

要静态引用框架中的API,您需要导入相关的头文件,然后配置Xcode项目以链接到框架.这两个步骤仅对私有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视图中的源文件夹,选择“将文件添加到< Project Name> …”.选择您需要包含在项目中的转储头文件.

链接

为了成功链接API,您还需要将框架添加到Xcode构建阶段.从项目目标设置中,选择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.

(& ddagger;)更新:iOS 9.3带来了一些私有API和静态与动态链接的变化.请see this Stack Overflow question here for more.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读