【问题标题】:How to make a phone call programmatically on iPhone 5S (iOS 7.0.4)如何在 iPhone 5S (iOS 7.0.4) 上以编程方式拨打电话
【发布时间】:2014-05-24 08:12:46
【问题描述】:

我正在使用未越狱的 iOS 7 iPhone 5S,我想拨打电话并以编程方式断开通话。

我知道 api CTCall 适用于 iOS 6,但现在不适用于 iOS 7。 在this post 中有人给出了解决方案——为应用添加权利。

如何在 iOS 7 上使用 CTCall?

注意:我的应用不会出现在 AppStore 上。

【问题讨论】:

  • 是的,要在 iOS 7 上使用CTCallDial,您需要使用授权签署您的应用程序。要做到这一点,请阅读此stackoverflow.com/questions/14871748/… 您不需要像下面的答案那样挂钩 - 只需使用权利签署您的应用程序。
  • @creker 我试过你的解决方案,它真的成功了。非常感谢。
  • @creker 是的,效果很好。
  • 是否只适用于越狱手机?

标签: ios7 jailbreak phone-call core-telephony


【解决方案1】:

Apple 为许多私有 API 添加了新权利 因此,对于您的调整,您必须使用 com.apple.coretelephony.Calls.allow 权利签名

下面的代码取自 @b3ll MessageBox 并对其进行编辑以使其与 CTCallDial 一起使用

#define XPCObjects "/System/Library/PrivateFrameworks/XPCObjects.framework/XPCObjects"

%config(generator=MobileSubstrate);

%group backboarddHooks

static int (*orig_XPConnectionHasEntitlement)(id connection, NSString *entitlement);

static int tw_XPConnectionHasEntitlement(id connection, NSString *entitlement) {
    DebugLog(@"XPCConnectionHasEntitlement... no u");

    //Only grant the required entitlement
    if (xpc_connection_get_pid(connection) == PIDForProcessNamed(@"SpringBoard") && [entitlement isEqualToString:@"com.apple.coretelephony.Calls.allow"])
        return true;

    return orig_XPConnectionHasEntitlement(connection, entitlement);
}

%end

%ctor {

    if ([bundleIdentifier isEqualToString:@"com.apple.backboardd"]) {
        %init(backboarddHooks);

        dlopen(XPCObjects, RTLD_LAZY);

        void *xpcFunction = MSFindSymbol(NULL, "_XPCConnectionHasEntitlement");

        MSHookFunction(xpcFunction, (void *)tw_XPConnectionHasEntitlement, (void **)&orig_XPConnectionHasEntitlement);
    }

}

如果我没记错的话,现在你可以再次使用 CTCallDial ;) 从这里开始,你就可以玩它了 ;)

在编译检查时出现任何错误@b3ll MessageBox 祝你好运

【讨论】:

  • 首先,这不是必需的,只需使用权利签署您的应用程序就容易多了。其次,SpringBoard 已经用com.apple.coretelephony.Calls.allow 签名。如果是 SpringBoard 调整,则无需执行任何操作。
  • 我不认为backboardd 守护进程与 CoreTelephony XPC 调用有任何关系——它是 SpringBoard 的辅助守护进程,它处理触摸事件、接近传感器、显示亮度和其他东西SpringBoard过去做过。 CoreTelephony XPC 呼叫被转发到CommCenter daemon,检查权限的是他。我检查了反汇编,com.apple.coretelephony.Calls.allow 授权由CommCenter 守护进程检查。
  • 如果他想把它放在一个调整而不是一个应用程序中? :D
  • 然后您需要选择一个使用您需要的权利签名的进程,或者编写一个您的调整将使用的守护进程。无论哪种方式,您的代码在 CTCall 的情况下都无济于事。 Backboardd 与 CoreTelephony API 无关。
  • 你的代码是多余的,应该在没有其他帮助的情况下使用。问题显然不是这样的。这是关于应用程序,而不是调整。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多