当前位置: 首页 > news >正文

iPhone私有API学习笔记

转自:http://bbs.51cto.com/archiver/tid-846159.html


一.基本知识

iPhone中的API除了公开的 API:Published API外(或者叫文档中记录的API:Documented API),还有两类API:私有API:Private API和未公开的API:UnPublished API(或者叫文档中未记录的API:Undocumented API)。其中私有API是指放在PrivateFrameworks框架中的API,未公开的API是指虽然放在Frameworks框架中,但是却没有在苹果的官方文档中有使用说明、代码介绍等记录的API。后两种API是有区别的,按苹果的说法,未公开的API是还不够成熟,可能还会变动的API,等完全成型了后会变成公开的API,但是目前不对其提供承诺,就是系统版本升级后可能会失效。而私有API是苹果明确不能使用的API。虽然两者有所区别,但是在具体使用方法上是类似的。

二.具体介绍

1.导出生成私有API的头文件声明

使用私有或未公开的API,首先需要导出其对应的头文件,在头文件里有相关函数的声明。

工具:

class-dump 

到此处下载最新的版本:http://stevenygard.com/projects/class-dump/

class-dump可以从编译后的Objective-C的二进制文件中提取对应的数据结构及函数等声明。

使用方法:

先把class-dump编译后,在product里找到那个class-dump文件,拖入到/usr/bin目录下,

这样我们就可以在任意目录下输出API的列表了,也就是.h头文件例如,如果要在桌面上输出UIKit框架里所有的API,

就需要打开终端,cd Desktop,然后class-dump 

 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/

Developer/SDKs/iPhoneSimulator5.1.sdk/System/Library/Frameworks/UIKit.framework/ >UIKit_5.1.h  

这样就会在桌面生成一个UIKit_5.1的h文件,里面有UIKit里的各种API,你可以在项目框架里查看UIKit.h比较一下,

多出来的API声明就是所谓的private API了,这后面的路径是新版本Xcode的路径,以前的老版本的应该在/Developer目录下。


也可以用ericasadun写的DumpFrameworks.pl(文件中有部分注释说明)这个文件把私有框架下的API头文件全部提取出来。

使用方法也是首先把class-dump文件拷贝到/user/local/bin/目录下,然后在任意一个目录下执行./DumpFrameworks.pl,

然后就会在你的家目录下产生一个Headers文件夹,里面罗列了私有框架下的API头文件。



2.使用私有API

导出了私有API的头文件声明后,使用方法就比较简单了,首先在你的工程中包含进头文件,然后导入对应的框架,

之后就可以类似提供了静态库的方式在我们的代码中使用这些私有API函数。


三.附加说明

iPhone编程中一些非常精致好玩的API都包含在私有API或未公开的API中,虽然我们可以以这种方式使用这些非常好的API,

但是这样做是存在一定风险的,首先为公开的API有变更的可能,这样在每个固件版本中,你的代码都有可能中断。同时,

最大的问题是使用了私有API的程序是不能放在App Store上销售的。因此如果我们只是为了好玩体验iPhone中这些精彩的API,

那没关系。如果是为了做出程序放在App Store上销售的,那就不要动私有API的主意了。

转载于:https://www.cnblogs.com/jiangshiyong/archive/2013/05/06/3062330.html

相关文章:

  • NS2源码图示---物理层 (转帖)
  • 火狐浏览器的一些常用设置
  • 代码行统计脚本.
  • Python property
  • 图的遍历(深度优先遍历)- 数据结构和算法59
  • 网页剪辑有道云笔记、印象笔记(evernote)哪个更好?
  • 定义类C++ primer目录
  • office365组同步问题
  • Tomcat配置数据池
  • 分享:avhttp简介
  • 基本输入输出函数以及其格式.
  • 由装箱引发的——Integer比较的来龙去脉
  • CIO管理札记
  • Centos6.0系统drbd+heartbeat+nfs实现高可用文件存储
  • NO.82 为需求分解任务
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 345-反转字符串中的元音字母
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • java中的hashCode
  • Logstash 参考指南(目录)
  • maven工程打包jar以及java jar命令的classpath使用
  • PHP面试之三:MySQL数据库
  • vuex 笔记整理
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 基于Android乐音识别(2)
  • 如何设计一个比特币钱包服务
  • 算法-图和图算法
  • 算法之不定期更新(一)(2018-04-12)
  • ​Python 3 新特性:类型注解
  • #考研#计算机文化知识1(局域网及网络互联)
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (1)(1.13) SiK无线电高级配置(五)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (zhuan) 一些RL的文献(及笔记)
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (过滤器)Filter和(监听器)listener
  • (三)elasticsearch 源码之启动流程分析
  • **PHP分步表单提交思路(分页表单提交)
  • .“空心村”成因分析及解决对策122344
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .Net 代码性能 - (1)
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NetCore部署微服务(二)
  • .net打印*三角形
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .Net下的签名与混淆
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @ModelAttribute 注解
  • [ JavaScript ] JSON方法
  • [BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn
  • [BZOJ2208][Jsoi2010]连通数