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,如需转载请自行联系原作者
目录
相关文章
|
编解码 安全 Android开发
iPhone苹果手机如何设置使用非系统自带铃声
自从开始使用苹果手机,如何设置自定义的手机铃声成了困扰我的难题,每次听着系统自带的铃声响起都很不喜,拿到iPhone plus我就开始研究怎么设置自定义的铃声,试了很多办法,都不行。电脑是win10系统,查了很多方法,下了各种软件,都没解决这问题。网上讲的最多的是下载iTunes云云,我卸了装,装了卸的,反复各种试都行不通;就卡在win10环境下的iTunes与iPhone手机连接不上,提示如图的问题:
268 0
iPhone苹果手机如何设置使用非系统自带铃声
|
存储 弹性计算 数据安全/隐私保护
如何在iPhone(iOS13)上设置企业邮箱
阿里云官网的帮助文档中,有关于企业邮箱在iPhone6(ios8)上如何设置的详细介绍,然而最近有小伙伴提到,iOS8已经过时了,这篇帮助文档已经不适用当下最新的iOS版本。那么下面我们就以目前最新的系统版本iOS13为例,介绍一下如何设置iPhone自带的邮箱软件。
苹果手机提醒事项怎么设置农历生日提醒?
阿芳的麻麻生日快到了,因为刚开始上班,身为一个初入社会的菜鸟,工作很忙碌。阿芳害怕自己会忘记麻麻的农历生日,就打开手机的提醒事项,把生日日期记录进去。
2150 0
|
iOS开发
如何检测iPhone处于低电量模式
本文讲的是如何检测iPhone处于低电量模式,这个星期,我阅读了一篇关于Uber怎样检测手机处于省电模式的文章。 在人们手机快要关机时,使用Uber可能会面临更高的价格。
1917 0
|
iOS开发
Cocos2d-x 完美适配iphone、ipad(包括retina模式)
<div style="top: 0px;"></div> <span style="font-family:宋体;font-size:14px;"></span><p style="margin: 0cm 0cm 0pt;"><span lang="EN-US" style="color: black; font-family: 宋体; font-size: 12pt; mso-bidi
2204 0
|
iOS开发 Windows
iphone/ipad/itouch进入DFU模式最简单的操作办法
“正确进入DFU模式”对于果粉新手来说是一个很难掌握的技巧(越狱、降级都要用到它),特别是时间的把握上,多按一会儿不行,少按一会儿也不行,从网上看到这个办法,觉得不错,转载于此: 1、连接你的iphone到电脑2、先右击“我的电脑”—>属性—>硬件—>设备管理器—>通用串行总线控制器,你会看到...
1022 0
热门文章
最新文章
相关产品
云迁移中心
推荐文章
更多