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,如需转载请自行联系原作者
目录
相关文章
|
8月前
|
编解码 iOS开发 UED
响应式设计在 iPhone 开发适配中的具体应用
【10月更文挑战第23天】响应式设计在 iPhone 开发适配中扮演着至关重要的角色,它能够帮助我们打造出适应不同屏幕尺寸和用户需求的高质量应用。通过合理运用响应式设计的原则和方法,我们可以在提供良好用户体验的同时,提高开发效率和应用的可维护性。
|
8月前
|
编解码 测试技术 iOS开发
iPhone 屏幕尺寸和开发适配
【10月更文挑战第23天】iPhone 的屏幕尺寸变化给开发者带来了一定的挑战,但也为创新提供了机遇。通过深入了解不同屏幕尺寸的特点,遵循适配原则和策略,运用合适的技巧和方法,我们能够为用户提供在不同 iPhone 机型上都具有良好体验的应用。在未来,随着技术的不断进步,我们还需要持续学习和适应,以满足用户对优质应用体验的不断追求。
|
11月前
|
数据采集 iOS开发 Python
Chatgpt教你开发iPhone风格计算器,Python代码实现
Chatgpt教你开发iPhone风格计算器,Python代码实现
103 1
|
iOS开发
IPhone 获取IMSI序列号
IPhone 获取IMSI序列号
308 0
|
编解码 iOS开发
iphone 开发的基本入门知识
iphone 开发的基本入门知识
294 0
|
Shell iOS开发
iOS逆向:tweak开发教程(iPhone/tool)
iOS逆向:tweak开发教程(iPhone/tool)
1342 0
iOS逆向:tweak开发教程(iPhone/tool)
「镁客早报」iPhone或将在今年采用三摄;传Facebook致力于开发语音助力服务与亚马逊、苹果竞争
亚马逊向美国Alexa设备推免费音乐服务;视频会议软件开发商Zoom纳斯达克上市。
309 0
|
Web App开发 前端开发 JavaScript
|
存储 iOS开发 计算机视觉