• iphone 中使用苹果禁用的私有Framework


    一.基本知识


    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


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


    使用方法:


    为了能在任意目录下使用class-dump命令,首先建议把class-dump文件拷贝到/user/local/bin/目录下,然后就可以在任意目录下执行以下命令:


    class-dump /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/UIKit.framework/ >UIKit.h


    以上命令就可以把iPhoneSimulator3.0.Sdk中Frameworks框架 里的UIKit.Framework框架的数据结构及函数声明等给提取出来,并且放在UIKit.h这个文件中,之后你就可以在这个头文件中找你需要 API的声明及其使用方式。以同样的方法,就可以挨个导出你需要那个框架中的API声明。


    也可以用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的主意了。



    首先介绍下private API 它共分为两类:
    1 在官方文档中没有呈现的API(在frameworks 下隐藏)
    2 苹果明确申明不能使用的API ,在privateFrameworks 下
    然后我们用到的工具是class-dump+DumpFrameworks.pl
    class-dump可以从编译后的Objective-C的二进制文件中提取对应的数据结构及函数等声明
    DumpFrameworks.pl是一个脚本,会在你的主目录下生成private的.h文件
    DumpFrameworks.pl下载地址:http://ericasadun.com/HeaderDumpKit/
    pl脚本需要简单的修改一下路径。
    用法:
    1 将下载好的 class-dump 放入usr/local/bin 下. 
       如果 ‘/usr/local/bin’ 不知道在哪里,可以在terminal 下输入 ‘open -a Finder /usr/local/bin’ 以便打开目录.
       记着 class-dump 要 使用 chmod 修改下执行权限.   例如:在usr/local/bin 对 class-dump 修改,可以这    样在terminal 切换到 usr/local/bin 目录下: chmod 777 class-dump .
    2 将DumpFrameworks.pl 放入任意目录下.同样需要修改执行权限.
    3. OK..现在所有的准备工作作好了. 我们在 terminal 的任意目录下 输入 : ./DumpFrameworks.pl
       等待…
       会有一个Heards 文件夹在你的主目录下. 里面包含了 Frmeworks 和 privateFrameworks 下所有的私有 API
    这里说明一下,我在使用的时候有时候会报错,class-dump报错:Warning: This file does not contain any Objective-C runtime information. 目前还没有找到解决方案,估计是有些Frmeworks是用C写的,所以没法导出来。

    注意:1.下载下来的class-dump  是把dmg文件夹中的那个exec文件放放到bin目录中,不是把
    class-dump.dmg放到bin目录
              2.
    chmod 777 class-dump 修改权限的 直接鼠标右键 get info 将所有属性设为read&write就行
                 3.https://github.com/kennytm/iphone-private-frameworks 这个地方有已经导好的某些私有framework的.h文件
  • 相关阅读:
    84. Largest Rectangle in Histogram (Solution 2)
    84. Largest Rectangle in Histogram (Solution 1)
    73. Set Matrix Zeroes
    【JavaScript】Symbol 静态方法
    【JavaScript】Date
    【JavaScript】Math
    725. Split Linked List in Parts把链表分成长度不超过1的若干部分
    791. Custom Sort String字符串保持字母一样,位置可以变
    508. Most Frequent Subtree Sum 最频繁的子树和
    762. Prime Number of Set Bits in Binary Representation二进制中有质数个1的数量
  • 原文地址:https://www.cnblogs.com/cnsec/p/11515860.html
Copyright © 2020-2023  润新知