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中调 ...
随机推荐
- 详解Tomcat线程池原理及参数释义
omcat线程池有如下参数: maxThreads, 最大线程数,tomcat能创建来处理请求的最大线程数 maxSpareTHreads, 最大空闲线程数,在最大空闲时间内活跃过,但现在处于空闲,若 ...
- 网络通信 --> 互联网协议(一)
互联网协议 一.概述 如何分层有不同的模型,有的模型分七层,有的分四层.这里介绍把互联网分成五层. 最底下的一层叫做"实体层"(Physical Layer),最上面的一层叫做&q ...
- 00_Linux介绍_我的Linux之路
原文章发布于特克斯博客www.susmote.com 什么是操作系统 操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在"裸机& ...
- Java几种建立实例的方法
1.new something obj=new something(); 2.clone 根据现有的对象实例来建立里一个新对象实例. 只限于实现了java.lang.Cloneable接口的类.否 ...
- hibernate学习之持久化对象
Hibernate对其持久化对象实现了缓存管理,来提高系统性能,Hibernate支持两级缓存管理,一级缓存 是由Session提供的,因此它只存在于Session的生命周期中,是Session所内置 ...
- JVM学习八:常用JVM配置参数
前面学习的都是和类加载相关的知识,接下来学习的则和GC相关的知识,都是JVM的几个重点块. 零.在IDE的后台打印GC日志: 既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技能,它只是 ...
- 小程序之Tab切换
小程序越来越火了,作为一名,额 有理想的攻城狮,当然要紧跟互联网时代的步伐啦,于是我赶紧抽时间学习了一下小程序的开发,顺便把经验分享给大家. 对于申请账号以及安装开发工具等,大家可以看官网:http ...
- 火狐浏览器中如何删除保存的cookie
大致分为三步即可: 打开浏览器并查看图示,按照图示操作即可完成:
- MySQL的学习记录(3.31更新)
MySQL的学习记录(3.31更新) 0x00 安装及配置 Windows 1.首先官网下载(https://dev.mysql.com/downloads/mysql/) ps:不想官网下载的可以到 ...
- 初学MySQL基础知识笔记--02
查询部分 1> 查询数据中所有数据:select * from 表名 2> 查询数据中某项的数据:eg:select id,name from students; 3> 消除重复行: ...