iphone开发中使用动态库(dylib)和动态加载framework(iphone获取IMSI和设置飞行模式)

简介:

 iphone 上使用动态库的多为 dylib 文件,这些文件使用标准的 dlopen 方式来使用是可以的。那相同的在使用 framework 文件也可以当做动态库的方式来动态加载,这样就可以比较自由的使用 apple 私有的 framework 了。

dlopen 是打开库文件

dlsym 是获取函数地址

dlclose 是关闭。

 

当然,要使用这种方式也是有明显缺陷的,那就是你要知道函数名和参数,否则无法继续。

私有库的头文件可以使用 class dump 的方式导出来,这个详细的就需要 google 了。

下面是两个使用的例子

1: 这是使用 coreTelephony.framework 获取 ims i

#define PRIVATE_PATH  "/System/Library/PrivateFrameworks/CoreTelephony.framework/CoreTelephony" 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
#if !TARGET_IPHONE_SIMULATOR 
    void *kit = dlopen(PRIVATE_PATH,RTLD_LAZY);    
    NSString *imsi = nil; 
    int (*CTSIMSupportCopyMobileSubscriberIdentity)() = dlsym(kit, "CTSIMSupportCopyMobileSubscriberIdentity"); 
    imsi = (NSString*)CTSIMSupportCopyMobileSubscriberIdentity(nil); 
    dlclose(kit);    

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"IMSI" 
                                                    message:imsi 
                                                   delegate:self 
                                          cancelButtonTitle:@"OK" 
                                          otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
#endif 
}


 

2 :这是使用 SpringBoardServices.framework 来设置飞行模式开关

#ifdef SUPPORTS_UNDOCUMENTED_API 
#define SBSERVPATH  "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices" 
#define UIKITPATH "/System/Library/Framework/UIKit.framework/UIKit" 

// Don't use this code in real life, boys and girls. It is not App Store friendly. 
// It is, however, really nice for testing callbacks 
+ (void) setAirplaneMode: (BOOL)status; 

    mach_port_t *thePort; 
    void *uikit = dlopen(UIKITPATH, RTLD_LAZY); 
    int (*SBSSpringBoardServerPort)() = dlsym(uikit, "SBSSpringBoardServerPort"); 
    thePort = (mach_port_t *)SBSSpringBoardServerPort(); 
    dlclose(uikit); 
    
    // Link to SBSetAirplaneModeEnabled 
    void *sbserv = dlopen(SBSERVPATH, RTLD_LAZY); 
    int (*setAPMode)(mach_port_t* port, BOOL status) = dlsym(sbserv, "SBSetAirplaneModeEnabled"); 
    setAPMode(thePort, status); 
    dlclose(sbserv); 

#endif 










本文转自 arthurchen 51CTO博客,原文链接:http://blog.51cto.com/arthurchen/577932,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
数据采集 iOS开发 Python
Chatgpt教你开发iPhone风格计算器,Python代码实现
Chatgpt教你开发iPhone风格计算器,Python代码实现
|
5月前
|
存储 数据安全/隐私保护
苹果手机如何设置邮箱
苹果手机如何设置邮箱
84 0
|
iOS开发
IPhone 获取IMSI序列号
IPhone 获取IMSI序列号
253 0
|
编解码 安全 Android开发
iPhone苹果手机如何设置使用非系统自带铃声
自从开始使用苹果手机,如何设置自定义的手机铃声成了困扰我的难题,每次听着系统自带的铃声响起都很不喜,拿到iPhone plus我就开始研究怎么设置自定义的铃声,试了很多办法,都不行。电脑是win10系统,查了很多方法,下了各种软件,都没解决这问题。网上讲的最多的是下载iTunes云云,我卸了装,装了卸的,反复各种试都行不通;就卡在win10环境下的iTunes与iPhone手机连接不上,提示如图的问题:
404 0
iPhone苹果手机如何设置使用非系统自带铃声
|
Shell iOS开发
iOS逆向:tweak开发教程(iPhone/tool)
iOS逆向:tweak开发教程(iPhone/tool)
1032 0
iOS逆向:tweak开发教程(iPhone/tool)
|
编解码 iOS开发
iphone 开发的基本入门知识
iphone 开发的基本入门知识
212 0
「镁客早报」iPhone或将在今年采用三摄;传Facebook致力于开发语音助力服务与亚马逊、苹果竞争
亚马逊向美国Alexa设备推免费音乐服务;视频会议软件开发商Zoom纳斯达克上市。
259 0
苹果手机提醒事项怎么设置农历生日提醒?
阿芳的麻麻生日快到了,因为刚开始上班,身为一个初入社会的菜鸟,工作很忙碌。阿芳害怕自己会忘记麻麻的农历生日,就打开手机的提醒事项,把生日日期记录进去。
2433 0
|
Web App开发 缓存 开发工具