Про отношения Apple и антивирусов вам, наверное, известно, так что вы понимаете, что наша задача создания security-решения для iOS изначально была нетривиальной. Ну, а вкупе с нашей новой фичей по фильтрации фишинг- / malware-трафика, мы, пожалуй, собрали комбо по числу набитых шишек.
Зато сейчас у нас внушительные 4,7 звезды в App Store и в среднем около 100 тыс. скачиваний в месяц. И это число постоянно растёт! Мы хотим рассказать нашу непростую success-story — заглядывайте под кат.
И ещё: поскольку iOS достаточно закрыта, то в ней есть серые зоны, и мы столкнулись с ними в рамках разработки антифишинга: на что-то потратили слишком много ресурсов, а какие-то технические решения делали экспериментальным путём на основе нашего опыта. Итак…
С чем мы ожидали столкнуться
Сложная архитектура
Legacy-код
- В предыдущих версиях была достаточно высокая связность кода. Соответственно, в рамках рефакторинга нам потребовалось перегруппировать объекты и делать их более самостоятельными.
- За время жизни продукта накопились разные нюансы. Например, были вызовы частей кода, закрытых флагами компиляции. При этом, как позже выяснилось, фактически эти части не должны были вызываться. Поэтому в рамках рефакторинга также «причёсывали» код, чтобы избежать лишнего мусора.
- Было дублирование кода в разных местах. Например, это касалось логики показа нотификации при включении безопасного соединения. В рамках рефакторинга также делали более универсальную логику и исключали дублирование.
- Был файл, в котором было около 50 % кода (а это несколько тысяч строк!), god object. По итогам рефакторинга его распилили примерно на 200 файлов и привели в соответствие с SOLID.
- Было небольшое покрытие автотестами core-части безопасного соединения. Изначально это затрудняло процесс рефакторинга и отладки. Вместе с рефакторингом мы решили и эту задачу, что позволило в дальнейшем упростить развитие и поддержку этой части продукта.
- Возвращаясь к антифишингу: поскольку его реализация связана с работой локального безопасного соединения, перед нами встала задача, связанная с масштабированием работы extension, так как раньше он был полностью завязан на состояние безопасности туннеля. В случае с антифишингом мы решали задачу, как сохранить extension в живых при выключенном безопасном соединении.
С чем мы НЕ ожидали столкнуться
Неуниверсальность
Performance
Что мы хотим доработать
ссылка на оригинал статьи https://habr.com/ru/articles/531866/
Добавить комментарий