我正在为越狱的iPhone进行调整。我正在尝试拦截呼叫添加到呼叫历史记录的过程。通过一点点搜索,我在CoreTelephony框架found here中找到了CTCallHistoryStoreAddCall
函数。当我尝试使用它时,我收到一个错误:
Undefined symbols for architecture armv7: "_CTCallHistoryStoreAddCall"
我链接了CoreTelephony框架,我在代码中使用它的方式是:
typedef struct __CTCall * CTCallRef;
extern "C" void CTCallHistoryStoreAddCall(CTCallRef call);
我想这意味着这个功能不再存在,或者它确实存在,我没有以正确的方式使用它。 如何找到负责将来电添加到通话记录中的正确功能?
先谢谢。
我在Xcode 5上使用iOSOpenDev。
答案 0 :(得分:1)
没有这样的功能。至少在iOS7中。
我在这里发布了iOS7的解决方案Hide a phone call completely in iOS (jailbreak device)
以下是代码:
//Private API from CoreTelephony.framework
void CTCallDeleteFromCallHistory(CTCallRef call);
%hook PHRecentCall
-(id)initWithCTCall:(CTCallRef)call
{
if (IsCallShouldBeDeleted(call) == YES)
{
//Delete call from call history
CTCallDeleteFromCallHistory(call);
//Update MobilePhone app UI
id PHRecentsViewController = [[[[[UIApplication sharedApplication] delegate] rootViewController] tabBarViewController] recentsViewController];
if ([PHRecentsViewController isViewLoaded])
{
[PHRecentsViewController resetCachedIndexes];
[PHRecentsViewController _reloadTableViewAndNavigationBar];
}
//Try uncommenting this, may be it will work. Should make the code faster.
//return nil;
}
return %orig;
}
%end
在MobilePhone应用内部调整钩子类,因此束过滤器为com.apple.mobilephone
。
IsCallShouldBeDeleted
是伪函数,用于确定是否应删除呼叫。您可以删除它或实现自己的。它只是为了使代码更清晰。
在iOS6上,类名不同,但代码完全相同 - Apple只是重命名了类。我从iOS4开始使用该解决方案。同样在iOS4上,它需要更多代码,因为没有CTCallDeleteFromCallHistory
函数。
答案 1 :(得分:0)
您遇到此错误,因为CoreTelephony框架未链接到您的程序。要解决此问题,请将以下内容添加到makefile中:
PROJECT_NAME_PRIVATE_FRAMEWORKS = CoreTelephony
请注意,您必须将PROJECT_NAME
替换为您自己的项目名称。