В зрелом iOS-проекте автоматизированные тесты — давно не экзотика. Unit-тесты проверяют отдельные компоненты, интеграционные тесты контролируют взаимодействие между слоями, а XCUITest проходит критичные пользовательские маршруты. Проблема начинается не с отсутствия автоматизации, а с её масштабирования.
Рубрика «iOS»
Как мы построили систему регрессионного UI-тестирования для iOS-приложения: XCUITest, mock backend и XcodeBuildMCP
2026-08-07 в 8:48, admin, рубрики: iOS, ios simulator, mock backend, swift, UI-тестирование, XcodeBuildMCP, xcuitest, автоматизация тестирования, ии-агенты, регрессионное тестированиеПубликуем iOS‑приложение без Мака и без Visa: пошаговый разбор
2026-07-28 в 17:03, admin, рубрики: flutter, iOS, ios app, ios development, iOS SDK, iOS разработка, xcode, мобильная разработка, мобильные приложения, мобильный платежДисклеймер: я делаю сервис аренды Mac mini (ссылка в профиле), поэтому тема мне близка профессионально. В статье нет ссылок на него и не будет рекомендаций его выбрать — только разбор всех путей, которыми пользуюсь сам и которые видел у коллег.
Проблема, знакомая каждому, кто пробовал
Собрать и опубликовать iOS‑приложение без macOS нельзя — точка. Xcode, подпись, нотарификация, выгрузка в App Store Connect — всё это живёт только на маке. Флаттерщики и React Native‑разработчики упираются в это на последнем шаге: код пишется где угодно, а .ipa собирается только на технике Apple.
Как пройти App Review, если ваше приложение требует регистрации
2026-07-27 в 12:16, admin, рубрики: app review, App Store, App Store Connect, apple, iOS, push, sms, авторизация, мобильная разработка, регистрацияПеред первой публикацией разработанного мной приложения WeCount я был уверен, что главная причина возможного отказа — ошибки в коде или проблемы в пользовательских сценариях. На практике оказалось наоборот: за всё время App Review к функциональности приложения не возникло ни одного вопроса. Почти все замечания касались исключительно регистрации пользователя.
За два месяца переписки, нескольких отказов подряд и телефонных разговоров с командой App Review, этап регистрации был полностью переписан. В этой статье я расскажу, какие выводы сделал, и почему первоначальная архитектура оказалась ошибочной.
Opaque types vs Existential Types vs Generics
2026-06-25 в 11:56, admin, рубрики: existencial container, iOS, mobile development, opaque, swift, swiftUI, xcodeПривет! Сегодня хочу поделиться, как мне кажется, очень полезной информацией о такой важной теме, как Opaque types vs Existensial Types vs Generics — что это такое, в чём разница и что выбрать. Я действительно считаю эту тему важной, поскольку это мощнейшие инструменты, которые нам даёт swift, чтобы сделать код более гибким, поддерживаемым, универсальным и без лишнего дублирования. Погнали.
Opaque types
Заглянем в официальную документацию:
Hide implementation details about a value’s type.
Скрыть детали реализации типа значения.
A function or method that returns an opaque type hides its return value’s type information. Instead of providing a concrete typeЧитать полностью »
Я перестал доверять стримингам. Поэтому написал свой iOS-плеер — с CarPlay и без вранья про звук
2026-06-04 в 13:42, admin, рубрики: avfoundation, CarPlay, dsp, hi-res, iOS, ShazamKit, swift, swiftUI, инди-разработкаЯ перестал верить стримингам. Не философски, а практически. Половина любимых альбомов либо ушла из каталогов, либо вернулась пересведенной так, что слушать тошно. Концертные записи, винил‑рипы, региональные релизы — их там и не было. А моя коллекция в FLAC просто лежит на диске и никуда не девается.
Для своей коллекции я написал плеер. Для себя. Через полгода это превратилось в нишевое приложение для iOS на 11 языках: с собственным DSP, распознаванием музыки и CarPlay.
Что в итоге внутри и где было не очевидно. Места, в которых документация молчит, а ты сидишь и гадаешь, почему оно вообще так себя ведет.
Читать полностью »
Как я избавился от тысяч строк валидации в Swift
2026-06-04 в 9:10, admin, рубрики: composition, generics, iOS, validation, wrappersКаждый раз, когда нужно добавить новую модель в проект, приходится писать буквально одинаковый код: с одинаковыми проверками, с одинаковыми корректировками, с одинаковыми Codable, с одинаковыми тестами.
Полагаю, вы тоже постоянно с этим сталкиваетесь, особенно при работе с текстом, например, вот типичный код:
Читать полностью »
Год разработки iOS-игры, 266 тысяч показов и $33: как я делал Vault и почти ничего не заработал
2026-05-25 в 9:13, admin, рубрики: App Store, Gamedev, indie development, iOS, monetization, swiftUIЯ сделал мобильную настольную игру Vault: the board game.
Это игра для компании: апокалипсис уже случился, есть бункер, мест на всех не хватает, а игрокам нужно спорить, убеждать друг друга, блефовать и голосовать, кто заслуживает спасения.
Я люблю такие игры. В них половина удовольствия не в правилах, а в людях за столом: кто-то доказывает, что его персонаж обязательно нужен человечеству, кто-то притворяется полезнее, чем есть на самом деле, кто-то просто красиво разваливает чужую аргументацию.
Обход блокировок внутри iOS-приложения: VLESS + Reality через sing-box, и грабли по дороге
2026-05-23 в 8:31, admin, рубрики: gomobile, iOS, reality, sing-box, swift, vless, xtls, обход блокировок, прокси, цензураМы делаем мессенджер. Весной 2026 наш бэкенд начал отваливаться у части пользователей из России: HTTPS-запросы к API таймаутятся, WebSocket не поднимается. Картина знакомая всем, кто держит сервис с одним доменом и одним IP.
Для мессенджера это приговор. Не «неудобно», а именно приговор: приложение, которое не может даже подключиться, бесполезно. И вариант «попросите пользователя сначала включить VPN» нас не устраивал совсем. Ниже разберу, почему мы в итоге встроили обход прямо в приложение, на чём он работает и на какие грабли мы наступили. Без маркетинга, по делу.
Почему не «просто VPN»
Почему custom URI schemes в Telegram Mini Apps ведут себя по-разному на Android, iOS и Desktop
2026-05-23 в 7:56, admin, рубрики: cross-platform, custom uri schemes, deep linking, deeplink, iOS, javascript, mobile onboarding, telegram mini apps, telegram webview, vueРазбираю неожиданные проблемы cross-platform onboarding между Telegram Mini Apps и native apps.
Недавно я столкнулся с неожиданной проблемой при разработке Telegram Mini App onboarding flow для native networking клиента.
На старте мне казалось, что весь onboarding займет буквально пару часов:
открыть deeplink → импортировать подписку → подключиться.
Но на практике именно эта часть оказалась самой нестабильной во всем проекте.
На первый взгляд задача выглядела довольно простой:
Telegram Mini App
↓
happ://...
↓
native app
↓
import subscription
↓
connect
Но на практике оказалось, что custom URI schemes внутри Telegram Mini Apps ведут себя совершенно по-разному:
