Pull to refresh
2
0
Виталий Подольский @DevlabStudio

iOS software engineer

Send message

Privacy Manifest: что нужно о нём знать для внедрения в проект

Level of difficultyMedium
Reading time11 min
Views3.8K

На работе я столкнулся с задачей внедрения Privacy Manifest в проект. Изучение вопроса началось с прочтения документации Apple, а продолжилось просмотром WWDC-сессии на тему конфиденциальности. После внедрения оказалось, что для корректной работы над задачей нужно изучить больше информации. Поэтому я решил поделиться опытом в формате инструкции. Покажу, как внедрять Privacy Manifest на примере вымышленного проекта, и дам практические советы по внедрению манифеста конфиденциальности.

Читать далее
Total votes 19: ↑19 and ↓0+19
Comments8

Пишем интерактивный виджет

Level of difficultyMedium
Reading time12 min
Views3.7K

Виджеты в новом обличии появились в 2020 году вместе с выходом iOS 14 (HomeScreen widgets). За это время Apple выпустила больше семейств виджетов, а также добавила их на LockScreen в iPhone и iPad. Но интерактивность появилась впервые в iOS 17.

В этой статье разберёмся из чего состоит интерактивный виджет: формирование Timeline, как работает интерактивность через библиотеку AppIntents, а затем напишем свой первый интерактивный виджет.

Читать далее
Total votes 20: ↑20 and ↓0+20
Comments6

Интерактивные виджет-подборки в Иви (iOS)

Level of difficultyMedium
Reading time16 min
Views812

И снова здравствуйте! В 2022 году у нас появились первые HomeScreen виджеты, это был первый опыт работы с библиотекой WidgetKit. Затем появились LockScreen виджеты и мы их тоже добавили. А выход iOS 17 и поддержка библиотеки AppIntents в виджетах, знаменовал новый этап в эволюции виджетов.

В этой статье поговорим о том, как мы зарелизили интерактивные виджеты и из чего они состоят: разделение логических слоёв на SPM пакеты, обеспечение качества (unit, snapshot тесты), accessibility и с каким нюансами столкнулись, о которых Apple не рассказывала на WWDC23.

Читать далее
Total votes 2: ↑2 and ↓0+2
Comments3

По граблям, по граблям. Пишем отзывчивый интерактивный виджет IOS 17

Level of difficultyMedium
Reading time9 min
Views2.6K
image

Всем привет! На связи Анна Жаркова, руководитель группы мобильной разработки в компании Usetech. В 2023 году на WWDC Apple представили много нового и интересного API, среди которого были долгожданные интерактивные виджеты, реагирующие с помощью механизма AppIntent на нажатия и запускающие логику без переключения в основное приложение. Однако, как показывает практика, не все так просто и красиво, как Apple показывают на демонстрационных сессиях, а от беты до релиза что-то в API обязательно ломается или внезапно меняется.

Поэтому сегодня мы поговорим, как с помощью Widget Kit iOS 17 и AppIntent сделать виджет не только интерактивным, но и рабочим и отзывчивым в моменте, и обойти подводные камушки, оставленные разработчиками API. Рассматривать будем на примере самописного приложения для заметок TODO.



Для тех, кому не терпится, или кто хочет читать и смотреть код одновременно, сам код

Помимо обработки событий из самого виджета в таких приложениях также важно синхронизировать состояние между таргетами без потерь и задержек. Данные (наши тудушки и их состояние) мы сохраняем локально. Для этого используем инструмент для хранения данных SwiftData. Данный фреймворк также был представлен на WWDC 2023, и при его использовании в разных таргетах можно встретить тоже много подводных камней.
Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments4

Тестируем инфраструктуру и приложение на устойчивость к DDoS-атакам

Level of difficultyEasy
Reading time5 min
Views4.1K

Сегодня расскажу, как можно протестировать свою ИТ-инфраструктуру или приложение на предмет устойчивости к DDoS-атакам на уровнях L4 и L7. Сразу скажу, что это нельзя назвать серьезным нагрузочным тестированием, это простой и бесплатный метод теста. У него две задачи:

1. Узнать, какой минимальной мощности достаточно, чтобы инфраструктура начала испытывать проблемы или легла вовсе. Это то, что тестировали мы.

2. Эту же методику можно использовать, чтобы оценить скорость реакции используемого сервиса защиты от DDoS-атак. Мы конечно же не будем пытаться заддосить с одной машины мощные узлы фильтрации anti-ddos-сервисов. Но посмотрим, как быстро срабатывает защита и начинает блокировать зловредный трафик, для всех ли типов атак это происходит одинаково быстро и происходит ли вообще?

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments0

Кто ты, SwiftData

Level of difficultyMedium
Reading time15 min
Views3.5K

Привет! Я Андрей Зонов, стафф-инженер в Тинькофф и большой фанат CoreData. Моя любовь в CoreData началась на старте карьеры, когда я попал в первый Enterprise-проект. Это были времена iOS 4.3., CoreData не имела parent-контекстов и методов perform. Как-то так сложилось, что за свою карьеру я много фиксил классические проблемы в CoreData, и с появлением SwiftData мне стало интересно, остались ли проблемы в SwiftData и что нам дает этот фреймворк. 

В статье разберем основные концепции и киллер-фичи по SwiftData. Пройдемся по основным отличиям и тому, как можно мигрировать с CoreData на актуальную SwiftData. Копнем внутрь SwiftData, узнаем, как она устроена под капотом, и подведем итоги стоит ли вообще переезжать на новый фреймворк Apple. 

Читать далее
Total votes 15: ↑14 and ↓1+13
Comments8

Современные технологии обхода блокировок: V2Ray, XRay, XTLS, Hysteria, Cloak и все-все-все

Reading time20 min
Views317K

Три месяца назад здесь на Хабре была опубликована статья “Интернет-цензура и обход блокировок: не время расслабляться”, в которой простыми примерами показывалось, что практически все популярные у нас для обхода блокировок VPN- и прокси-протоколы, такие как Wireguard, L2TP/IPSec, и даже SoftEther VPN, SSTP и туннель-через-SSH, могут быть довольно легко детектированы цензорами и заблокированы при должном желании. На фоне слухов о том, что Роскомнадзор активно обменивается опытом блокировок с коллегами из Китая и блокировках популярных VPN-сервисов, у многих людей стали возникать вопросы, что же делать и какие технологии использовать для получения надежного нефильтрованного доступа в глобальный интернет.

Мировым лидером в области интернет-цензуры является Китай, поэтому имеет смысл обратить на технологии, которые разработали энтузиасты из Китая и других стран для борьбы с GFW (“великим китайским файрволом”). Правда, для неподготовленного пользователя это может оказаться нетривиальной задачей: существует огромное количество программ и протоколов с похожими названиями и с разными не всегда совместимыми между собой версиями, огромное количество опций, плагинов, серверов и клиентов для них, хоть какая-то нормальная документация существует нередко только на китайском языке, на английском - куцая и устаревшая, а на русском ее нет вообще.

Поэтому сейчас мы попробуем разобраться, что же это все такое и как это использовать и не сойти с ума.

Читать далее
Total votes 157: ↑155 and ↓2+153
Comments136

Иностранные хостеры с возможностью оплаты из России

Reading time4 min
Views92K

Всем привет! Меня зовут Леонид, я владелец сервиса Поиск VPS. В последнее время мне в обратную связь начало поступать очень много вопросов, каким образом можно оплачивать зарубежный хостинг, так как Visa и MasterCard Российских банков перестали работать не в России.

Есть всякие обходные пути в виде получения карты иностранного банка, которая пополняется криптовалютой, использования QIWI-кошелька и прочих костылей, однако на мой взгляд самым простым способом является международный валютный банковский перевод, который в данный момент отлично работает для всех банков, за исключением нескольких попавших под санкции.

Сразу хочу предупредить, что SWIFT-перевод будет идти несколько дней, за отправку платежа ваш банк может брать комиссию, плюс по дороге что-то могут "откусить" банки-посредники, однако чаще всего это будут незначительные суммы. Однозначным плюсом в этом случае является отсутствие конвертации: если у вас на счету есть доллары, то вы можете отправить платеж прямо в этой валюте, и получатель получит тоже доллары.

Ниже я подготовил список зарубежных хостеров, которые принимают оплату на банковский счет. Прошу учесть, что оплата банковским переводом чаще всего не автоматизирована, для этого может понадобится написать в техподдержку.

Читать далее
Total votes 52: ↑52 and ↓0+52
Comments75

Как работает SberPay под капотом

Level of difficultyEasy
Reading time6 min
Views14K

Как вы думаете, когда и чем впервые оплатил человек?

Вряд ли это была знакомая всем карта с чипом и магнитной полосой во времена до нашей эры…

Конечно, альтернатива наличке появилась еще за пару тысяч лет до этого…

О том, как бартер превратился в оплату телефоном, вы узнаете из этой статьи.

Читать далее
Total votes 24: ↑23 and ↓1+22
Comments20

Пэйволлы: прокачиваем насмотренность

Level of difficultyMedium
Reading time23 min
Views4.1K

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

3000+ просмотренных мной пэйволлов превратились в статью с 200+ гайдлайнами и идеями по их улучшению. Всё во благо прокачки вашей насмотренности.

P.S. Материал доступен без пэйволла😊

Читать далее
Total votes 7: ↑4 and ↓3+1
Comments6

Swift Concurrency Instrument: чем он полезен iOS-разработчику

Level of difficultyMedium
Reading time5 min
Views2.7K

Swift Concurrency Instrument помогает наглядно увидеть, что происходит в приложении с асинхронным кодом. Пошагово рассказываем, как устроен этот инструмент, и на примерах показываем, чем он может быть полезен.

Читать далее
Total votes 2: ↑2 and ↓0+2
Comments0

Локализация игр при помощи ChatGPT — недорого и качественно. Гайд

Level of difficultyEasy
Reading time5 min
Views9K

Не каждый инди-разработчик может позволить себе перевод игры у профессиональной студии, но упускать аудиторию - нельзя. А машинный перевод игры хоть и делается недорого и быстро - также он почти всегда неточен, прямолинеен и просто некрасив.

Однако, при помощи ChatGPT мы можем сильно улучшить его качество, сделав перевод действительно похожим на работу человека!

В статье мы подключим ChatGPT к вашей таблице локализации, укажем контекст перевода, и немного поговорим о стоимости.

Читать далее
Total votes 13: ↑12 and ↓1+11
Comments6

SOLID в Swift. Простое объяснение с примерами для начинающих

Level of difficultyMedium
Reading time3 min
Views10K

Принципы SOLID — это набор пяти основных принципов, которые помогают разработчикам создавать более понятный, гибкий и поддерживаемый код. Так же знание этих принципов довольно часто спрашивают на собеседованиях.

Давайте рассмотрим каждый из этих принципов с примерами нарушения и соблюдения на языке Swift.

Читать далее
Total votes 16: ↑15 and ↓1+14
Comments20

Как попасть в фичеринг

Level of difficultyEasy
Reading time6 min
Views2.3K

Попадание в подборки App Store и Google Play, которое называется фичеринг, не самый простой способ увеличить популярность вашего приложения, но крайне эффективный — по подсчетам участников рынка, это увеличивает число загрузок на 800%. Купить место в подборках не получится — туда попадают самые лучшие, или, как минимум, те, кто соответствует всем критериям стора. Как же попасть в фичеринг? Рассказываем!

Читать далее
Total votes 5: ↑4 and ↓1+3
Comments5

Многопоточность в iOS-разработке

Level of difficultyMedium
Reading time15 min
Views15K

Здравствуйте, уважаемые читатели Хабра!

Меня зовут Кирилл, я iOS-разработчик приложений Сбера в Студии Олега Чулакова.

Сегодня я хочу поговорить о важной теме, которая стоит в центре многих дискуссий в сообществе разработчиков, — многопоточности в Swift. Эта тема может казаться сложной и запутанной, но я уверен, что с правильным подходом и набором инструментов она станет более доступной.

В этой статье мы разберемся с основами многопоточности и познакомимся с такими инструментами Swift, как Grand Central Dispatch (GCD), OperationQueues, NSLock. А также существующими низкоуровневыми технологиями, такими как pthread и NSThread. Бонусом я расскажу про async/await. Мы обсудим, как эти инструменты помогают управлять асинхронными и параллельными операциями, и посмотрим на некоторые примеры их использования.

Приятного чтения, и давайте начнем наше путешествие в мир многопоточности Swift!

Читать далее
Total votes 4: ↑3 and ↓1+2
Comments5

Короче, Proxyman: краткий обзор самого яблочного сниффера

Level of difficultyMedium
Reading time9 min
Views16K

Всем привет, я Света, тимлид команды тестирования мобильных приложений в Emerging Travel Group :) В своей предыдущей статье я рассказала про любимый и родной Charles, а в этой я решила немного выйти из зоны комфорта и рассказать про один из главных его конкурентов — Proxyman. Будем играть по-честному, и рассмотрим на реальных примерах те же, на мой взгляд, основные и самые ходовые функции сниффера, которые используют QA и разработчики на почти ежедневной основе. Поехали!

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments5

Делаем OpenVPN клиент для iOS

Reading time5 min
Views11K
Привет всем!
Давайте рассмотрим как создать собственное приложение, поддерживающее OpenVPN-протокол. Для тех, кто об этом слышит впервые ссылки на обзорные материалы, помимо Википедии, приведены ниже.

С чего начать?


Начнем с фреймворка OpenVPNAdapter — написан на Objective-C, ставится с помощью Pods, Carthage, SPM. Минимальная поддерживаемая версия ОС — 9.0.
После установки необходимо будет добавить Network Extensions для таргета основного приложения, в данном случае нам понадобится пока Packet tunnel опция.

image

Network Extension


Затем добавляем новый таргет — Network Extension.
Сгенерированный после этого класс PacketTunnelProvider приведем к следующему виду:
Читать дальше →
Total votes 3: ↑3 and ↓0+3
Comments5

Использование Command Line Tool на Swift в iOS проекте

Level of difficultyMedium
Reading time8 min
Views1.8K

Не так давно на проекте возникла необходимость настроить периодическое обновления информации со стороннего сервиса. В моем случае это был файл‑справочник в формате JSON, хранящийся в Bundle приложения, и ещё Info.plist в придачу. Отмечу, что такие файлы нельзя изменять в запущенном iOS приложении. Да и вообще, вызовы напрямую в сторонний сервис уже в рантайме меня не сильно радовали — в случае сбоя загрузки данных у приложения отваливался кусок функциональности.

Как бы вы поступили в этом случае? Вынесли бы кэширование таких файлов на ваш бэк? Таким образом мы бы решили проблему со сторонним нестабильным сервисом, но что делать с Info.plist?

Первое, что приходит в голову — написать Shell‑скрипт. Но это могло привести к проблемам с поддержкой другими iOS разработчиками. Поэтому было принято решение создать утилиту на Swift.

В сети много материала по созданию Command Line Tool на Swift, но мы разберем абстрактный пример создания такой утилиты сразу в связке с iOS проектом.

Читать далее
Total votes 2: ↑1 and ↓10
Comments28

CoreData для базовых задач одним методом

Level of difficultyMedium
Reading time10 min
Views3K

Когда на iOS возникает вопрос о какой-то оффлайн работе, часто разработчики обращают свой взор на CoreData — фреймворк, который управляет хранением данных в приложении. В идеальном мире использование CoreData сводилось бы к нахождению необходимых объектов, их изменению и вызову метода сохранения без головной боли. 
Однако, фреймворк имеет высокий порог входа и много неочевидных моментов, которые обязательно всплывут при масштабировании приложения. Но насколько можно приблизиться к тому идеальному миру, обрисованному ранее? В этой статье я поделюсь своим опытом работы с CoreData, и предложу решение, упрощающее работу с ней практически до вызова одного универсального метода для базовых нужд изменения и сохранения данных, попутно рассказав, какие фишки CoreData рассматривались как вариант достижения этой цели.

Читать далее
Total votes 7: ↑6 and ↓1+5
Comments3

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Software Developer, Mobile Application Developer
Lead