Для передачи информации я использовал App Group.Оставалось проверить два направления передачи данных:
Перенос данных из основной части проекта в MessageFilterExtension.
Перенос данныхот MessageFilterExtension до основной части проекта.
Первый способ работал без проблем.Но второе никак не получилось.Вот часть кода, в которую я записываю информацию из MessageFilterExtension.
extension UserDefaults {
var sender: String? {
get { return self.string(forKey: #function) }
set { self.set(newValue, forKey: #function) }
}
var messageBody: String? {
get { return string(forKey: #function) }
set { set(newValue, forKey: #function) }
}
var blockedNumber: String? {
get { return string(forKey: #function) }
set { set(newValue, forKey: #function) }
}
}
extension MessageFilterExtension: ILMessageFilterQueryHandling {
// ...
private func offlineAction(for queryRequest: ILMessageFilterQueryRequest)
-> ILMessageFilterAction {
if let userDefaults = UserDefaults(suiteName: "group.GUI.TestExtSms2") {
userDefaults.sender = queryRequest.sender ?? "No sender"
userDefaults.messageBody = queryRequest.messageBody ?? "No body"
if let sender = queryRequest.sender,
let blockedNumber = userDefaults.blockedNumber {
return (sender == blockedNumber) ? .filter : .none
}
}
return .none
}
Когда я ввел нужный номер телефона (blockNumber), блокировка сработала.Но я не смог получить данные о SMS (отправитель и messageBody) в основной части проекта.