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中调 ...
随机推荐
- WebPack介绍
一.Webpack 是什么 Webpack 是德国开发者 Tobias Koppers 开发的模块加载器,Instagram 工程师认为这个方案很棒, 似乎还把作者招过去了.在 Webpack 当中, ...
- Oracle 12c(12.1.0.5) oem agent silent install(静默安装agent)
注释: 文章自oracle support 文档 ID 1360083.1,静默安装agent采用的是把OMS服务端(即oem server端)的agent用压缩包download,远程传到agent ...
- JDBC(通俗易懂)简单的操作(增、删、改、查)
项目所写的类: 说明:①.DButil 动态加载数据库驱动,以及获取java.sql.Connection的对象. ②.Personmodel 数据库列(栏位)所对应的字段,定义了相应的set和get ...
- mybatis代码生成器
mybatis代码生成器 1.pom.xml文件添加依赖 <build> <finalName>mybatis</finalName> <pluginMana ...
- HA集群heartbeat配置--Nginx
HA即(high available)高可用,又被叫做双机热备,用于关键性业务.简单理解就是,两台机器A和B,正常是A提供服务,B待命限制,当A宕机或服务宕掉,会切换至B机器继续提供服务.常用实现高可 ...
- Intellij Idea下tomcat设置自动编译
*eclipse默认tomcat下是自动完成编译:而Intellij Idea默认tomcat下不是自动完成编译,从如下开始设置: 进入"settings",如下图找到" ...
- sphinx的安装
1.下载sphinx 没想到sphinx3解压后即可: wget http://sphinxsearch.com/files/sphinx-3.0.2-2592786-linux-amd64.tar. ...
- python实现k-近邻算法
参考:<机器学习实战>- Machine Learning in Action 一. 必备的包 实现此算法需要准备以下的包: • matplotlib,用于绘图 • numpy,数组处理库 ...
- VS2005 与虚拟机的那点事
好不容易把VS2008装上了,每次F5编译的时候,程序自动退出,意外的是VS2005也是同样的结果.好在有像我一样的好心人,愿意把解决的方法与大家共享. 经过搜索找到了答案,原来是VMwa ...
- 十款不容错过的Swift iOS开源项目及介绍
1.十款不容错过的Swift iOS开源项目. http://www.csdn.net/article/2014-10-16/2822083-swift-ios-open-source-project ...