Я не особо следил за обновлениями в iOS 11 с момента, когда он был представлен в начале лета. Не собирался ставить беты. Но мне случайно попалась заметка о том, что в новой версии появилась возможность фильтровать SMS. Раньше это можно было сделать только для iMessages.

SMS-спам меня сильно выводит из себя. Не самим фактом прихода, дебилов-маркетологов, считающих, что для повышения продаж какого-то говна можно проспамить по всей доступной базе номеров или даже всем диапазонам оператора хватает. А полнейшей невозможностью с этим как-то бороться. Спам в почте понятен — он быстро исчезает. И почтовые системы развиваются, и фильтры самому можно поставить. SMS-спам же неотвратим. Ты всегда будешь его видеть. Функции, аналогичные почтовым, отсутствуют.

В приведённой выше заметке даже задумался об экстремальном решении:

Я очень хотел бы иметь возможность вообще отключить SMS. Кстати, это ещё одна возможность, по которой мне очень нравится Android. Вариант решения — перейти на альтернативный IM-клиент (Telegram), перестать пользоваться iMessage/SMS и отключить нотификации в Messages.app.

Вариант вполне, кстати, рабочий. Не всем он подходит, конечно же.

И как только я увидел сессию WWDC “Filtering Unwanted Messages with Identity Lookup”, сразу поставил бету (это было недели две назад).

Под iOS не писал с iOS 7, да и то это было “казуальное” программирование. Поставил Xcode, создал проект, добавил Message Filter Extension, как было сказано в “Creating a Message Filter App Extension”.

Изначально идея была стянуть адресную книгу и загонять в Junk все SMS, приходящие с номеров, отсутствующих в адресатах. Всё оказалось гораздо проще. Номера из адресной книги и так не попадают в Message Filter App Extension.

Поменял все вхождения return .none на return .filter. Скомпилировал, заслал на телефон (платной подписки уже давно для этого не нужно иметь). Подключил SMS Filter.

Было

Стало

И все тестовые SMS пошли именно туда, куда им предназначено — в гетто. Без вываливания нотификаций на экран. А все нормальные обработались как нужно.

Обрадовался, даже воспел хвалу Apple, офигенная компания, думают о своих пользователях, осанна и алилуйя.

А потом увидел вот это:

Если вы не поняли моего чувства, объясню. Очередной мудак присылает мне SMS. Я, конечно, не вижу сообщение, если не использую телефон. Нотификации на lock screen’е у меня для Messages не включены. Но я разблокирую телефон, вижу информацию, что есть непрочитанные SMS, запускаю Messages, вижу, что в “нормальных” ничего нет. И мне по-любому нужно идти в Junk и видеть этот галимый спам.

В чём смысл этой “фильтрации”? Лично я не понимаю.

Начал изучать тему. Увидел сообщение про beta2:

in Beta 2, when using the identityLookup extension and filtering an SMS as junk. iOS 11 will silence the notifications to the user but it will still increment the messages app badge. Is that a bug or an intended behaviour?

Потом наткнулся на давнее описание фильтрации iMessages ещё для iOS 8 на Mac Observer:

You also won’t receive notifications when an unknown person sends you an iMessage—but you will see the red number badge appear on the Messages app icon, so you’ll still know when something new has arrived.

Убедился, что вопрос фильтрации для Apple слабо интересен, у них свои представления, как должна работать такая функция. Я могу их понять, здесь работает перестраховка. Но почему нельзя добавить опцию “не видеть сообщения из Junk”?

Мда. Захотелось снова на Android. А пока огорчённо поставил как было — полностью отключенные нотификации в Messages.app, отключенный iMessage (по другим причинам), Telegram.app.

Сейчас напишу вторую заметку — там будет небольшое продолжение про iOS 11.

P.S. Если вы не хотите сами возиться с Xcode, поставьте SMS Filter By Iurii Mozharovskyi — в этом приложении в отличие от других просмотренных мною как раз есть возможность выставить поведение “по умолчанию” и отправить все сообщения от неизвестных в Junk.