iOS私有API

IOS的API分为四种:

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

还有两类:私有API:Private API和未公开API:UnPublished API(或者Undocumented API)。

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

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

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

示例一:

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

步骤如下:

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

#import "xxx.h"

extern NSString
*CTSettingCopyMyPhoneNumber();

@implementation
+(NSString *)myNumber{
return CTSettingCopyMyPhoneNumber();
}
@end

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

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

其他资料:

call
blocking on iPhone4

//using private API
//CoreTelephony framework is needed

extern NSString* const kCTSMSMessageReceivedNotification;
extern NSString* const
kCTSMSMessageReplaceReceivedNotification;
extern NSString* const kCTSIMSupportSIMStatusNotInserted;
extern NSString* const kCTSIMSupportSIMStatusReady;

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 CTSMSMessageGetRecordIdentifier(void * msg);
NSString * CTSIMSupportGetSIMStatus();
NSString * CTSIMSupportCopyMobileSubscriberIdentity();

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

id CTTelephonyCenterGetDefault(void);
void
CTTelephonyCenterAddObserver(id,id,CFNotificationCallback,NSString*,void*,int);

void CTTelephonyCenterRemoveObserver(id,id,NSString*,void*);
int CTSMSMessageGetUnreadCount(void);

static void callback(CFNotificationCenterRef center, void
*observer, CFStringRef name, const void *object, CFDictionaryRef
userInfo)
{
NSString *notifyname=(NSString *)name;
if ([notifyname
isEqualToString:@"kCTCallStatusChangeNotification"])//phone
call
{
NSDictionary *info = (NSDictionary*)userInfo;

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

}
else if ([notifyname
isEqualToString:@"kCTCallIdentificationChangeNotification"])
{
// CTCallCenter *center = [[CTCallCenter alloc] init];
// center.callEventHandler = ^(CTCall *call) {
// NSLog(@”call:%@”, [call description]);
// };

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

}
else if ([notifyname
isEqualToString:@"kCTRegistrationDataStatusChangedNotification"])

{

}
else if ([notifyname
isEqualToString:@"kCTSMSMessageReceivedNotification"])
{//api expired
if ([[(NSDictionary *)userInfo allKeys]
containsObject:@”kCTSMSMessage”]) // SMS Message
{
CTSMSMessage *message = (CTSMSMessage *)
[(NSDictionary *)userInfo objectForKey:@"kCTSMSMessage"];
NSString *address = CTSMSMessageCopyAddress(NULL, message);
NSString *text = CTSMSMessageCopyText(NULL, message);
//NSArray *lines = [text componentsSeparatedByString:@"\n"];

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

}
}
else if ([notifyname
isEqualToString:@"kCTMessageReceivedNotification"])//received
SMS
{

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

}
else if ([notifyname
isEqualToString:@"kCTIndicatorsSignalStrengthNotification"])//signal

{

}
else if ([notifyname
isEqualToString:@"kCTRegistrationStatusChangedNotification"])//network
registration status
{

}
else if ([notifyname
isEqualToString:@"kCTRegistrationDataStatusChangedNotification"])

{

}
else if ([notifyname
isEqualToString:@"kCTRegistrationCellChangedNotification"])
{

}
else if ([notifyname
isEqualToString:@"kCTIndicatorRadioTransmitNotification"])
{

}
//int unread=CTSMSMessageGetUnreadCount();
//if (unread>0)
//NSLog(@”unread SMS:%d”,unread);

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

}

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

//—————–

id ct = CTTelephonyCenterGetDefault();
CTTelephonyCenterAddObserver(ct, NULL, callback, NULL, NULL,
CFNotificationSuspensionBehaviorHold);
// Handle Interrupts
sig_t oldHandler = signal(SIGINT, signalHandler);
if (oldHandler == SIG_ERR)
{
printf(“Could not establish new signal handler”);
exit(1);
}
// Run loop lets me catch notifications
printf(“Starting run loop and watching for notification.\n”);
//CFRunLoopRun();

时间: 2024-10-14 00:31:30

iOS私有API的相关文章

class-dump获取iOS私有api

转自:http://blog.csdn.net/sunyuanyang625/article/details/41440167 获取各类iOS私有api 安装工具class-dump 资源地址http://download.csdn.net/detail/map625/8191343 运行class-dump并编译src项目 编译之后在produce中找到编译好的class-dump将其拷贝到/usr/local/bin下 将xcode下的framwork导出.h文件 例,我导出的是coreTe

IOS私有API的使用

首先要使用class-dump 和dumpFrameworks.pl 工具 将ios的framework导出来. 以下是工具的下载地址: class-dump下载地址http://www.codethecode.com/projects/class-dump/ DumpFrameworks.pl原来的下载地址不能用了,我在github上的别人的越狱程序里面找到的. 将下载好的 class-dump 放入usr/local/bin 下. 如果 '/usr/local/bin' 不知道在哪里,可以在

iOS私有API 以及api与sdk的解释

IOS的API分为四种: Published API(公开的API)(或者Documented API) 还有两类:私有API:Private API和未公开API:UnPublished API(或者Undocumented API). 私有API是指放在PrivateFrameworks框架中的API,未公开的API是指虽然放在Frameworks框架中,但是却没有在苹果的官方文档中有使用说明.代码介绍等记录的API. 按苹果的说法,未公开的API是还不够成熟,可能还会变动的API,等完全成

ios私有API各种坑

发现我一直在踩坑,可能像我这么小白的人太少了.估计是因为一般人不会犯这种低级错误,嘤嘤嘤... 1.class-dump 这个坑还没有完全摸索出来,总之可以看看以下这个链接: http://www.yifeiyang.net/iphone-development-techniques-of-environmental-chapter-8-the-use-of-non-public-api/ 各种路径写的太不详细了,Headers不知道导出哪里去了,也许完全没导出,坑坑坑... 总之网上也能搜到这

ios中通过调试来使用私有api

转自:http://blog.csdn.net/cubepeng/article/details/11284173 OS不允许使用ios私有api,使用私有api可以获得意想不到的效果 ,同时使用私有api是一个程序员的技术体现之一.至于怎么通过apple的审核,其实是有些办法的,但是不属于今天讨论的范围.私有api可以通过 dump头文件获得,也可以去github clone一份现成的,但是还是推荐自己去dump.但是我们今天不是讨论,如何使用dump到的api,而是通过一个例子来讨论如何通过

怎么获取iOS的私有API

前言 作为iOS开发人员,相信大多数伙伴都对怎么获取iOS的私有API很有兴趣,最近通过查找资料,总结了以下三种方法,希望对你有用. 第一种(class-dump) 不得不说这是一个很棒的工具,安装和使用都很方便. 安装 去nygard/class-dump下载工程,编译之后就会获得class-dump,把它放到 "/usr/bin" 文件夹里,注意,这个地址根据系统的不同有所差别,我的系统是 10.10.5 ,低版本的系统有些是 "/usr/local/bin"

iOS 百度地图报私有api的解决方案

1.Build Settings-->搜索other linker Flags-->将other linker Flags设置为-objc 2.用2.1.1的版本的百度地图 3.换高德地图 iOS 百度地图报私有api的解决方案

iOS - APP审核Guideline 2.5.1被拒,使用了私有API

最近iOS 审核被拒,说是使用了私有API:com.apple.springboard.lockcomplete 具体内容如下: 发件人 Apple 2. 5 Performance: Software Requirements Guideline 2.5.1 - Performance - Software Requirements Your app uses or references the following non-public APIs: com.apple.springboard.

关于Apple的私有API

介绍 一.基本知识 iPhone中的API除了公开的 API:Published API外(或者叫文档中记录的API:Documented API),还有两类API:私有API:Private API和未公开的API:UnPublished API(或者叫文档中未记录的API:Undocumented API).其中私有API是指放在PrivateFrameworks框架中的API,未公开的API是指虽然放在Frameworks框架中,但是却没有在苹果的官方文档中有使用说明.代码介绍等记录的AP