【发布时间】:2017-11-13 12:41:18
【问题描述】:
我正在尝试将呼叫目录扩展添加到现有的 Objective-C iOS 应用程序。
使用Xcode -> File -> New -> Target 直接创建扩展,选择Call Directory Extension 并为Objective-C 和现有项目配置它。新的扩展方案也已成功创建。
扩展程序的CallDirectoryHandler.h 和CallDirectoryHandler.m 文件已自动创建,目前我只想通过将真实设备中的电话号码硬编码到其中来测试一般概念。
那个真实的设备有一个数字,格式如下:
+49 176 12345678
到目前为止,我只注释掉了自动生成的涉及阻塞号码的代码(我不想这样做),并更改了代码中用于识别号码的电话号码和字符串。
代码如下所示:
- (void)addAllIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context {
CXCallDirectoryPhoneNumber allPhoneNumbers[] = { 4917612345678, 4917612345679 };
NSArray<NSString *> *labels = @[ @"XYZ Dev-Test", @"Test Number" ];
NSUInteger count = (sizeof(allPhoneNumbers) / sizeof(CXCallDirectoryPhoneNumber));
for (NSUInteger i = 0; i < count; i += 1) {
CXCallDirectoryPhoneNumber phoneNumber = allPhoneNumbers[i];
NSString *label = labels[i];
[context addIdentificationEntryWithNextSequentialPhoneNumber:phoneNumber label:label];
}
}
- (void)addOrRemoveIncrementalIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context {
CXCallDirectoryPhoneNumber phoneNumbersToAdd[] = { 4917612345678 };
NSArray<NSString *> *labelsToAdd = @[ @"XYZ Dev-Test Inc" ];
NSUInteger countOfPhoneNumbersToAdd = (sizeof(phoneNumbersToAdd) / sizeof(CXCallDirectoryPhoneNumber));
for (NSUInteger i = 0; i < countOfPhoneNumbersToAdd; i += 1) {
CXCallDirectoryPhoneNumber phoneNumber = phoneNumbersToAdd[i];
NSString *label = labelsToAdd[i];
[context addIdentificationEntryWithNextSequentialPhoneNumber:phoneNumber label:label];
}
}
同样,这是自动生成的代码,我只更改了其中的电话号码和字符串。
我已经启用了Settings -> Phone -> Call blocking & identification 下的扩展,并且已经多次切换开关。
但是,当我从该号码拨打电话时,它从未被识别出来。我已经在代码中尝试了以下数字格式:
+4917612345678
4917612345678
017612345678
17612345678
我注意到我用于测试的带有 iOS 11.1 的 iPhone 6 plus 显示来电号码为0176 12345678。
我还尝试了以下方法:
- 重置手机上的所有设置
- 从设备中删除应用程序
- 使用主应用程序的方案从 Xcode 运行应用程序
- 使用扩展方案再次运行应用程序
- 在要求选择应用的对话框中选择我的主应用
但是号码识别不起作用。我什至不确定应用程序扩展是否已执行,因为我无法使用断点对其进行调试,而且我为测试添加的 NSLog 条目没有出现在控制台中。
这里有没有我遗漏的重要步骤?
【问题讨论】:
-
您将数字作为 64 位整数提供;所以只是一个值为 4917612345678 的 Int64。调试扩展很棘手。你需要在 Xcode 中使用“attach to process”选项,指定你的 callkit 扩展名。
标签: ios objective-c iphone callkit