iOS 私有API调用
最近自己在做一个小程序,想实现一个一键设置手机壁纸的功能。但在iOS公开的API里找不到相关的方法,只能从私有API入手。
网上有不少教程,不过都不是很详细。从google和https://stackoverflow.com能找到比较详细的描述。
想要使用私有API首先需要知道相关API的声明,可以知己搜索,也可以使用class-dump自己搞定。下面说下详细过程。
首先下载class-dump。直接放到usr/local/bin文件夹中就可以使用。
xcode 8.3.2下私有API路径在
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.3.sdk/System/Library/PrivateFrameworks
直接使用class-dump导出
sudo class-dump -H /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.3.sdk/System/Library/PrivateFrameworks/UIFoundation.framework -o /Users/xxxx/Desktop/Frameworks
导出后是一堆.h文件。
导出后就是怎么使用的问题了。搜索到不少都说将这些.h封装成framework来使用,然后设置search path 为 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.3.sdk/System/Library/PrivateFrameworks。
试过之后并不太好用,因为有些类的声明定义在公开的API都是没有的,也可能是我用的不对,有了解的朋友请多指教。
有些头文件可以直接拖入到工程就可以使用了,一般来说是一些category. 更通用的方法是直接自己写一个,然后声明私有API的方法。
具体如下:
#import <UIKit/UIKit.h> @interface UIFont (Private) - (_Bool)isVertical;
- (double)_bodyLeading; @end
这样可以直接用UIFont来调用这两个方法了。
还有一种是使用runtime的方式,应该说这是一个更加通用的方法。
下面以设置手机壁纸的例子来讲解(iOS 10以下有效)
直接class-dump photoKit的framework。查看相关的头文件,可以看到 PLWallpaperImageViewController.h 和 PLStaticWallpaperImageViewController.h。
查看相关的方法,可以猜到和设置壁纸有关的几个方法。
- (id)initWithUIImage:(id)arg1;
- (void)setImageAsHomeScreenAndLockScreenClicked:(id)arg1;
- (void)setImageAsLockScreenClicked:(id)arg1;
- (void)setImageAsHomeScreenClicked:(id)arg1;
使用runtime初始化并调用方法
_image = [UIImage imageNamed:@"1.jpg"]; Class class = NSClassFromString(@"PLStaticWallpaperImageViewController"); _wallPaper = [[class alloc] performSelector:NSSelectorFromString(@"initWithUIImage:") withObject:_image]; [_wallPaper setValue:@(YES) forKeyPath:@"allowsEditing"]; [_wallPaper setValue:@(YES) forKeyPath:@"saveWallpaperData"]; // [_wallPaper performSelector:NSSelectorFromString(@"setImageAsHomeScreenClicked:") withObject:nil]; //也可以使用
//[_wallPaper performSelector:@selector(setImageAsHomeScreenClicked:) withObject:nil];
这样就完成了壁纸的设置 。
iOS 私有API调用的更多相关文章
- class-dump获取iOS私有api
转自:http://blog.csdn.net/sunyuanyang625/article/details/41440167 获取各类iOS私有api 安装工具class-dump 资源地址http ...
- (iOS)私有API的使用(原创)
最近在做企业级程序,需要搞设备的udid等信息,但是ios7把udid私有化了,不公开使用.所以研究了一下ios的私有api. 调查了一下文章,发现这方面的文章不多,国内更是不全,高手们都懒得写基础教 ...
- IOS私有API的使用(转)
最近在做企业级程序,需要搞设备的udid等信息,但是ios7把udid私有化了,不公开使用.所以研究了一下ios的私有api. 调查了一下文章,发现这方面的文章不多,国内更是不全,高手们都懒得写基 ...
- iOS私有api检测工具使用
背景:这两天提审了一款新的APP,由于项目中使用了老版本的TZImagePicker中访问了私有API,导致提审失败. 预审经验分享: https://baijiahao.baidu.com/s?id ...
- //暴力打开某个APP iOS 私有API LSApplicationWorkspace
//暴力打开某个APP = .= 如果可以打开.直接打开不解释 +(BOOL)isOpenApp:(NSString*)appIdentifierName { Class LSApplicationW ...
- ios中通过调试来使用私有api
转自:http://blog.csdn.net/cubepeng/article/details/11284173 OS不允许使用ios私有api,使用私有api可以获得意想不到的效果 ,同时使用私有 ...
- 坑爹的私有API
iOS私有API扫描工作总结 背景 苹果提供的iOS开发框架分PrivateFramework和Framework,PrivateFramework下的库是绝对不允许在提交的iOS应用中使用的,只允许 ...
- iOS - APP审核Guideline 2.5.1被拒,使用了私有API
最近iOS 审核被拒,说是使用了私有API:com.apple.springboard.lockcomplete 具体内容如下: 发件人 Apple . Performance: Software R ...
- Unity在Android和iOS中如何调用Native API
本文主要是对unity中如何在Android和iOS中调用Native API进行介绍. 首先unity支持在C#中调用C++ dll,这样可以在Android和iOS中提供C++接口在unity中调 ...
随机推荐
- IT连创业系列:产品设计之答题模块
前言: 距上篇写完:IT连创业系列:新的一年,先淫文一篇! 转眼又两个星期了,今天不写文,估计大伙又得等两周了. 所以啊~~ 只能再努力一点了,花一天半天的,继续和大伙分享这让人心碎的创业历程. 这两 ...
- Spring事务管理—aop:pointcut expression解析(转)
本文转载自: http://hane00.blog.163.com/blog/static/160061522011427473965/ 先来看看这个spring的配置文件的配置: <!-- 事 ...
- java数组排序,并将数组内的数据求和
java数据编列并求和,江湖我狼哥,人狠话不多,直接上代码! import java.util.Arrays; public class Intarry { public static void ma ...
- Struts2学习笔记四 OGNL
OGNL,全称为Object-Graph Navigation Language(对象图表达语言),它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,调用java对象的方法,同时能够自动 ...
- 指令-arModal-点击提示框模板
html 使用<ar-modal></ar-modal>: <ar-modal modal-obj="modalObj" ok="newAl ...
- pip安装selenium报错:Read timed out
今天打算把selenium降级重新安装,发现安装时总是失败,报如下错误: raise ReadTimeoutError(self._pool, None, 'Read timed out.') pip ...
- C作业--初步
第一周: 知识点:第一个c程序 练习:printf 第二周: 知识点:常量变量,数据类型和运算符 练习:数学公式的求解:比如重力加速度,华氏温度与摄氏温度的转换,汇率等. 第三周: 知识点:print ...
- C语言第十次作业
一.PTA实验作业 题目1:按等级统计学生成绩 1. 本题PTA提交列表 2.设计思路 int i,count =0 用来计未及格数 for i =0 to n if 指针p+i 指向的成绩score ...
- QTableView
QTableView常用于实现数据的表格显示.下面我们如何按步骤实现学生信息表格: 一 添加表头 //准备数据模型 QStandardItemModel *student_model = ne ...
- verilog学习笔记(0)
assign赋值语句根本不允许出现在always语句块中 位于begin/end块内的多条阻塞赋值语句是串行执行的; 但是多条非阻塞赋值语句却是并行执行的,这些非阻塞赋值语句都会在其中任何一条语句执行 ...