`
ydbc
  • 浏览: 766580 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

IOS私有API的了解

 
阅读更多

IOS的API分为四种:

PublishedAPI(公开的API)(或者Documented API

还有两类:私有APIPrivateAPI和未公开APIUnPublished API(或者UndocumentedAPI)

私有API是指放在PrivateFrameworks框架中的API,未公开的API是指虽然放在Frameworks框架中,但是却没有在苹果的官方文档中有使用说明、代码介绍等记录的API

按苹果的说法,未公开的API是还不够成熟,可能还会变动的API,等完全成型了后会变成公开的API,但是目前不对其提供承诺,就是系统版本升级后可能会失效。而私有API是苹果明确不能使用的API。虽然两者有所区别,但是在具体使用方法上是类似的。

私有API会面临审核通不过然后不能上线,但是也有使用私有API通过审核的比如谷歌的“GoogleVoice”,所以具体审核的详情不得而知。

<wbr></wbr>

示例一:

使用私有API——CoreTelephony获取本机号码

步骤如下:
1)导入CoreTelephony这个private framework
2)在xxx.m中加入红字部分:

#import "xxx.h"

extern NSString*CTSettingCopyMyPhoneNumb<wbr>er();<br></wbr>

@implementation
+(NSString *)myNumber{
return CTSettingCopyMyPhoneNumb<wbr>er();<br> }</wbr>

@end

3)在其它地方调用NSLog(@"myNumber=%@",[xxxmyNumber]);即是本机号码

另外机子的唯一标识码等一些信息可以用[UIDevice currentDevice]的uniqueIdentifier,name等属性来获取

<wbr></wbr>

其他资料:

callblocking on iPhone4

//using private API
//CoreTelephony framework is needed

extern NSString* const kCTSMSMessageReceivedNot<wbr>ification;<br> extern NSString* constkCTSMSMessageReplaceRece<wbr>ivedNotification;<br> extern NSString* const kCTSIMSupportSIMStatusNo<wbr>tInserted;<br> extern NSString* const kCTSIMSupportSIMStatusRe<wbr>ady;</wbr></wbr></wbr></wbr>

typedef struct __CTCall CTCall;
extern NSString *CTCallCopyAddress(void*, CTCall *);

void* CTSMSMessageSend(id server,id msg);
typedef struct __CTSMSMessage CTSMSMessage;
NSString *CTSMSMessageCopyAddress(void *, CTSMSMessage *);
NSString *CTSMSMessageCopyText(void *, CTSMSMessage *);

int CTSMSMessageGetRecordIde<wbr>ntifier(void * msg);<br> NSString * CTSIMSupportGetSIMStatus<wbr>();<br> NSString * CTSIMSupportCopyMobileSu<wbr>bscriberIdentity();</wbr></wbr></wbr>

id CTSMSMessageCreate(void* unknow,NSString* number,NSString*text);
void * CTSMSMessageCreateReply(void* unknow,void *forwardTo,NSString* text);

id CTTelephonyCenterGetDefa<wbr>ult(void);<br> voidCTTelephonyCenterAddObse<wbr>rver(id,id,CFNotificationCallback,NSString*,void*,int);<br> void CTTelephonyCenterRemoveO<wbr>bserver(id,id,NSString*,void*);<br> int CTSMSMessageGetUnreadCou<wbr>nt(void);</wbr></wbr></wbr></wbr>

static void callback(CFNotificationCenterRef center, void*observer, CFStringRef name, const void *object, CFDictionaryRefuserInfo)
{
NSString *notifyname=(NSString *)name;
if ([notifynameisEqualToString:@"kCTCallStatusChangeNotif<wbr>ication"])//phonecall<br> {<br> NSDictionary *info = (NSDictionary*)userInfo;</wbr>

NSString *state=[[info objectForKey:@"kCTCallStatus"]stringValue];
if ([state isEqualToString:@"5"])//disconnect
NSLog(@”unanswered:%@”,state);

}
else if ([notifynameisEqualToString:@"kCTCallIdentificationCha<wbr>ngeNotification"])<br> {<br> // CTCallCenter *center = [[CTCallCenter alloc] init];<br> // center.callEventHandler = ^(CTCall *call) {<br> // NSLog(@”call:%@”, [call description]);<br> // };</wbr>

NSDictionary *info = (NSDictionary *)userInfo;
CTCall *call = (CTCall *)[info objectForKey:@"kCTCall"];
NSString *caller = CTCallCopyAddress(NULL, call);
NSLog(@”电话号码:%@”,caller);
//CTCallDisconnect(call);

}
else if ([notifynameisEqualToString:@"kCTRegistrationDataStatu<wbr>sChangedNotification"])<br> {</wbr>

}
else if ([notifynameisEqualToString:@"kCTSMSMessageReceivedNot<wbr>ification"])<br> {//api expired<br> if ([[(NSDictionary *)userInfo allKeys]<br> containsObject:@”kCTSMSMessage”]) // SMS Message<br> {<br> CTSMSMessage *message = (CTSMSMessage *)<br> [(NSDictionary *)userInfo objectForKey:@"kCTSMSMessage"];<br> NSString *address = CTSMSMessageCopyAddress(NULL, message);<br> NSString *text = CTSMSMessageCopyText(NULL, message);<br> //NSArray *lines = [text componentsSeparatedByStr<wbr>ing:@"\n"];</wbr></wbr>

//printf(” %s %d\n”, [address cString], [lines count]);
//printf(” %s\n”, [text cString]);
fflush(stdout);

}
}
else if ([notifynameisEqualToString:@"kCTMessageReceivedNotifi<wbr>cation"])//receivedSMS<br> {<br></wbr>

NSDictionary *info = (NSDictionary *)userInfo;
CFNumberRef msgID = (CFNumberRef)[infoobjectForKey:@"kCTMessageIdKey"];
int result;
CFNumberGetValue((CFNumberRef)msgID, kCFNumberSInt32Type,&result);


}
else if ([notifynameisEqualToString:@"kCTIndicatorsSignalStren<wbr>gthNotification"])//signal<br> {<br></wbr>

}
else if ([notifynameisEqualToString:@"kCTRegistrationStatusCha<wbr>ngedNotification"])//networkregistration status<br> {<br></wbr>

}
else if ([notifynameisEqualToString:@"kCTRegistrationDataStatu<wbr>sChangedNotification"])<br> {<br><br> }<br> else if ([notifynameisEqualToString:@"kCTRegistrationCellChang<wbr>edNotification"])<br> {<br><br> }<br> else if ([notifynameisEqualToString:@"kCTIndicatorRadioTransmi<wbr>tNotification"])<br> {<br><br> }<br> //int unread=CTSMSMessageGetUnreadCou<wbr>nt();<br> //if (unread&gt;0)<br> //NSLog(@”unread SMS:%d”,unread);</wbr></wbr></wbr></wbr>

NSLog(@”name:%@-detail:%@”,notifyname,userInfo);

}

static void signalHandler(int sigraised)
{
printf(“\nInterrupted.\n”);
exit(0);
}

//—————–

id ct = CTTelephonyCenterGetDefa<wbr>ult();<br> CTTelephonyCenterAddObse<wbr>rver(ct, NULL, callback, NULL, NULL,CFNotificationSuspension<wbr>BehaviorHold);<br> // Handle Interrupts<br> sig_t oldHandler = signal(SIGINT, signalHandler);<br> if (oldHandler == SIG_ERR)<br> {<br> printf(“Could not establish new signal handler”);<br> exit(1);<br> }<br> // Run loop lets me catch notifications<br> printf(“Starting run loop and watching for notification.\n”);<br> //CFRunLoopRun();</wbr></wbr></wbr>

分享到:
评论

相关推荐

    iOS私有API检查工具

    **iOS私有API检查工具详解** 在iOS应用开发过程中,苹果公司对开发者有着严格的规则,其中一条就是禁止使用私有API。私有API指的是苹果未公开、未在官方SDK文档中列出的API,使用这些API可能导致应用被App Store...

    IOS私有API头文件导出

    总之,导出iOS私有API头文件是一项技术性较强的操作,需要对Mac OS的文件系统和命令行工具有一定的了解。完成这个过程后,开发者可以进一步研究这些私有API,但必须谨慎处理,避免因此带来的潜在风险。

    IOS 私有API

    iOS私有API是指苹果未公开、未在官方文档中声明,但存在于系统内部的一系列框架和函数调用。这些API通常用于系统内部功能,而苹果并不推荐或允许开发者在App Store上发布的应用中使用它们。因为私有API的使用可能会...

    IOS_使用私有API实现蓝牙功能

    使用私有API实现蓝牙功能 实现打开关闭,给出提示,如果需要搜索周边蓝牙等可以跟到程序里看相关API。 不过是私有API,请慎用噢,使用了私有API的IOS APP是不能通过APP store审核的。

    AppScanner私有API扫描器

    因此,了解和检测私有API的使用至关重要。 **私有API的危害** 1. **违反Apple政策**:Apple对使用私有API的行为有明确的规定,禁止开发者在App Store上提交含有私有API的App,因为这可能破坏系统的稳定性或安全性...

    ios的私有的api

    下面我们将深入探讨iOS私有API的相关知识点。 1. **为什么存在私有API:** - 苹果为了保持其设备的稳定性和安全性,通常会将一些关键功能的实现细节隐藏起来,防止开发者误用或滥用。 - 有些私有API是为特定内部...

    ios 6私有api头文件

    然而,了解私有API可以帮助开发者深入理解iOS系统的工作原理,甚至在某些特定情况下解决特定问题。 标题"ios 6私有api头文件"指的是iOS 6版本中的一些私有框架的头文件集合。这些头文件包含了iOS 6私有框架中的类...

    IOS-7-Headers-master ios7 私有API

    然而,对于开发者来说,了解和研究私有API可以拓宽对iOS系统底层运作的理解,有时也用于探索创新的功能实现。 标题"IOS-7-Headers-master ios7 私有API"指出这是一个关于iOS 7私有API的项目,包含了iOS 7版本下的...

    IOS7最新私有API

    在这个阶段,iOS 7是相对较旧的版本,但对开发者来说,了解过去版本的私有API有助于理解iOS系统的发展历程以及不同版本之间的变化。 描述中的“object-c全”表明这份资料可能是Objective-C语言的全面集合,可能包含...

    iOS查找私有API的方法示例

    otool工具的优点是可以快速查找私有API,缺点是需要了解命令的使用方法。 方法3:全局搜索 全局搜索是一个非常直接有效的方法,可以快速查找私有API。使用全局搜索需要首先cd到工程目录,然后使用grep命令进行查找...

    swift-两种利用私有api实现打开目标应用的方法

    然而,有些特殊情况下,开发者可能需要利用私有API来实现跨应用的功能,比如打开特定的目标应用。本文将深入探讨两种利用Swift私有API实现打开目标应用的方法。 方法一:使用`openURL:options:completionHandler:` ...

    RuntimeBrowser查看iOS系统私有API-附件资源

    RuntimeBrowser查看iOS系统私有API-附件资源

    iOS-private-api-checker-master.zip

    《iOS私有API检查工具详解:结合Python、Flask与SQLite》 在iOS应用开发中,遵循Apple的App Store审核指南至关重要,其中一项要求就是不得使用私有API。私有API指的是苹果未公开的API,使用它们可能导致应用被拒绝...

    swift-使用私有API将触摸栏按钮添加到控制条

    首先,让我们明确一点:私有API是苹果未公开的接口,它们未在Apple的官方SDK文档中声明,因此使用它们的风险在于,未来版本的iOS更新可能会改变或移除这些API,导致应用程序出现兼容性问题。但是,为了理论上的讨论...

    iOS开发:Private Contacts源代码

    iOS中的联系人管理API是Core Contacts框架,它允许开发者读取、写入和管理用户的联系人信息。为了创建私有通讯录,你需要获取权限访问用户的联系人库,使用`CNContactStore`类请求授权,并在得到用户许可后,可以...

    ios_private.db.zip

    在iOS开发中,私有API是指苹果未公开的API接口,这些接口并未包含在官方的开发者文档或SDK中。使用私有API可能会导致应用程序被App Store拒绝,因为苹果公司严格限制了对私有API的使用,以保持其平台的稳定性和安全...

    ios_private_database.zip

    本文将详细讲解如何使用Python和Flask框架,结合sqlite数据库,进行iOS私有API的检查。我们将围绕"ios_private_database.zip"这个压缩包中的内容,探讨这个过程。 首先,我们需要了解私有API的概念。私有API是指...

    iOS Runtime Private Frameworks 私有框架

    在"iOS-Runtime-Headers-master"这个压缩包中,很可能包含了对这些私有框架头文件的逆向工程,提供了对私有API的访问。这些头文件可以用来分析私有框架的功能,但需要注意的是,直接使用这些信息进行开发可能存在...

    iphone 系统api录音功能实现(支持ios7)

    首先,我们需要了解iOS中的核心音频框架(Core Audio)。这是一个底层的音频处理框架,其中包含了多个子框架,如AudioToolbox和AVFoundation。对于录音功能,我们主要关注AVFoundation框架,它提供了录制、播放、处理...

Global site tag (gtag.js) - Google Analytics