2013-09-23 30 views
8

在我们企业的iOS应用程序,我们使用iOS 7替代CTCall?

CTCallRef CTCallDial(CFStringRef number); 

做从应用程序调用(并且能够隐藏主叫方ID

这似乎并不在iOS的7工作改变了API在那里?

(我深知,这是一个私人的API调用,它可以随时改变,但我仍然希望能找到一种替代方法。不幸的是我没有足够精明,知道如何找到所有私人API是可用的)

+0

下载'class-dump'或'class-dump-z'来检查私有Obj-C API。 – Nate

回答

2

我问了这里计算器同样的问题,你的帖子后2小时...... 初识类转储(https://github.com/EthanArbuckle/IOS-7-Headers/blob/master/Frameworks/CoreTelephony.framework/CTCall.h)所示,这个函数是缺少...

+0

在TUCallCenter的头文件(https://github.com/EthanArbuckle/IOS-7-Headers/blob/master/PrivateFrameworks/TelephonyUtilities.framework/TUCallCenter.h)中,有一个名为“ - (id)dial: (id)arg1服务:(int)arg2“但我不能得到TUCallcenter的实例,因为sharedInstance返回null。 – ErdyMurphy

+0

我犯了一个错误... sharedInstance doest return nil ... – ErdyMurphy

+0

但是当我打电话[TUCallCenter sharedInstance]拨号:@“123”service:0];我得到了和调用CTCallDial()一样的行为() – ErdyMurphy

-1

可以使用

[UIApplication的sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@“tel:%@”,num]]];

但是你可以在通话结束后

+0

中的方法,正如@ErdyMurphy在其他答案中提到的,此方法不允许将控制序列发送到电话应用程序。你需要隐藏caller-id。 – clows

0

不千钧一发屏幕其实我已经试过一样vualoaithu并没有得到运气。但我也尝试过使用TUCallCenter对象的其他方法,看起来效果很好。例如下面的方法的工作原理:

TUCallCenter *callCenter = [TUCallCenter sharedInstance]; 
if(callCenter) { 
    NSLog(@"callCenter is created!"); 
    //Working part 
    if([callCenter inCall]){ 
     NSLog(@"IN CALL"); // when you press answer button and can talk 
    }else{ 
     NSLog(@"NOT IN CALL"); // other cases 
    } 
} 

而且我已经试过以下:

TUPhoneNumber* phoneNumber = 
    [TUPhoneNumber phoneNumberWithDigits:@"55555555" 
          countryCode:@"1"]; 
if(phoneNumber) { 
    NSLog(@"Phone Number obj = %@",phoneNumber); 
    NSLog(@"Phone Number = %@",phoneNumber.digits); 
    NSLog(@"Country Code = %@",phoneNumber.countryCode); 
} 
[callCenter dial:phoneNumber service:0]; 

但我得到异常:

[TUPhoneNumber长]:无法识别的选择发送到实例0x14dcefd0

看起来就像我们在路上。如果有人会找到解决办法。请在这里发布。 谢谢。

3

我认为它需要你用com.apple.coretelephony.Calls.allow权利签署你的应用程序。我在SpringBoard二进制文件中找到它。苹果增加了一大堆新的权利。所以我们应该期待没有它们的许多API都无法正常工作。仅针对CoreTelephony,SpringBoard中有四项权利。

+0

我可以确认'com.apple.coretelephony.Calls.allow'是解决方案。如果没有此权利,您无法使用“CTCallDial”拨打电话。 – creker

+0

我被用于SpringBoardServices,SpringBoardFoundation,SpringBoardUI,SpringBoardUIServices的类转储。**但没有看到com.apple.coretelephony.Calls.allow **它在哪里?帮我 – vualoaithu

+1

我在说'SpringBoard.app/SpringBoard'二进制文件。你可以在你的设备上的'/ System/Library/CoreServices/SpringBoard.app/SpringBoard'或iOS模拟器找到它'Xcode.app/Content/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0。 sdk/System/Library/CoreServices/SpringBoard.app/SpringBoard'。用任何文本编辑器打开二进制文件并滚动到结尾。你会发现许多权利,其中将'com.apple.coretelephony.Calls.allow' – creker