Обновить
128K+

iOS *

Мобильная ОС компании Apple

43,33
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Как я создал аккаунт Apple Developer (Apple разработчика) на юридическое лицо после 1 апреля 2026 года

Время на прочтение6 мин
Охват и читатели4.9K

Друзья, всем привет. Это моя проба пера на Хабре. Меня зовут Максим Талалаев, я достаточно давно управляю людьми. Вот теперь занимаюсь этим в сфере IT. Делаю с командой проект по созданию и развитию платформы временной (гибкой) занятости.

Пишем на PHP. Используем Laravel и Lifewire с Filament. Базы на PostgreSQL. Приложения писали на Flutter, хотя в первое время нас здорово выручал самописный mini‑App в телеграм. В общем все, как у всех.

И вот недавно встал вопрос в загрузке приложений на известные всем площадки: GooglePlay, RuStore. На «десерт» мы оставили AppStore, так как мифов о нем ходило гораздо больше, чем о двух вышеупомянутых источниках. Я не буду подробно останавливаться на самой процедуре, по которой написано немыслимое количество статей и материалов,а сразу перейду к моментам, на которые лично у меня ушло больше всего душевных и временных терзаний, а также управленчески неэффективно потраченного времени (ну, это уже по завершении всех этапов так можно сказать. Конечно, когда я был в процессе, мне так не казалось.). Естественно, я прошел все стадии, начиная от «Создать аккаунт разработчика на организацию в России сейчас невозможно» до «А ты попробуй найти специализированное бюро, которое тебе для Apple корректно сделает перевод на иностранный язык».

Читать далее

Новости

Как мы выбирали стек для PWA после блокировки в App Store: от Swift к React за считанные месяцы

Время на прочтение14 мин
Охват и читатели7.7K

Привет, Хабр! Меня зовут Константин Шкурко, я ведущий разработчик мобильных приложений в РСХБ. Сегодня хочу рассказать историю о том, как всем известные обстоятельства заставили нас в сжатые сроки искать альтернат­ивные пути доставки нашего инвестиционного приложения «Свои инвестиции» пользователям iOS - и как это изменило наш технологический стек.

Когда Apple заблокировала российские банковские приложения в App Store, перед нами встала непростая задача. У нас были десятки тысяч активных пользователей на iOS, которые пользовались брокерским приложением для управления своими инвестициями. Торговля акциями, облигациями, аналитика портфеля, выставление заявок - всё это внезапно стало недоступно для значительной части клиентской базы.

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

Читать далее

Потоко-защищённая шина событий в Swift

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели5.2K

В крупных приложениях для iOS взаимодействие между компонентами зачастую оказывается сложнее, чем сам компонент. Сервис завершает операцию, координатор должен отреагировать, возможно, потребуется обновить несколько экранов, и передача каждой зависимости по всему дереву навигации быстро начинает казаться излишней «рутинной» работой. Внедрение зависимостей и управление состоянием по-прежнему имеют своё место. Шина (данных) событий предоставляет нам ещё один инструмент для слабосвязанных уведомлений, где прямое управление добавило бы ненужную сложность. Цель этого компонента проста: позволить одной части приложения публиковать событие, а другим частям приложения — подписываться на события определенного типа. Реализация сосредоточена на типовой безопасности, потокобезопасном хранении, автоматической очистке при деаллокации владельца, явной отмене отдельных подписок, доставке MainActor для кода пользовательского интерфейса и поддержке AsyncStream для потребителей async/await.

Читать далее

React Native iOS Push Notifications: почему push не сохраняются в background/killed state

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели5.2K

Разбираем очень неприятный баг в React Native + iOS: почему push-уведомления сохраняются на Android, но теряются на iOS в background/killed state. В статье обсудим как на самом деле устроены APNS, Notification Service Extension, App Groups и почему проблема вообще не в React Native. Будет интересно…

Читать далее

Мобильная разработка за неделю #632 (25 — 31 мая)

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели9.1K

В этом выпуске продолжаем исследовать новинки I/O 2026 и переводить пользователей, прекращаем использовать .onAppear и лезем Gradle под капот, делаем приватность частью архитектуры, создаем систему привлечения пользователей, поднимаем Llama 3 в облаке и многое другое. Заходите!

Читать далее

Живые обои на Mac своими руками: Metal, окна на уровне рабочего стола и немного математики

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели7.9K

Я сделал приложение NeonDrift — живые обои для macOS на основе Metal-шейдеров. Для базовой работы не нужны сторонние библиотеки, Screen Recording или Accessibility-доступ. Только AppKit, MetalKit и SwiftUI.

В статье разберу как это устроено изнутри: от трюка с уровнями окон до шейдеров и упаковки в .app. Попутно расскажу про баги, которые я поймал в процессе — растянутую плазму на Retina, крэш при первом же запуске упакованного приложения, анимацию, которая сбрасывалась при каждом переключении Space, и фризы на втором мониторе при смене Space на основном.

Главная идея статьи не в том, чтобы сделать ещё один wallpaper app, а в том, чтобы показать как на macOS можно аккуратно совместить AppKit window management, Metal render loop и SwiftUI-настройки без приватных API — и где именно этот подход начинает трещать по швам.

Читать далее

Мобильный Vivaldi 8.0 — Лучший браузер для лета

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели6.8K

Люди по-разному готовятся к лету. Кто-то ищет место для отпуска и бронирует отели, кто-то старательно худеет, чтобы предстать на пляже в лучшем виде, а кто-то проводит весеннюю уборку, чтобы летом не отвлекаться на рутину, а получать удовольствие от жизни. Мы также провели определённую работу этой весной, чтобы предложить вам новые версии мобильных браузеров, такой своего рода летний вариант с новыми удобными функциями и исправленными недочётами.

Читать далее

Когда Reality не хватает: добавляем Hysteria2 + Salamander в iOS-мессенджер, и как всегда грабли по дороге (ч.2)

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели9.3K

В прошлой статье я рассказывал, как мы встроили VLESS + Reality прямо в наше iOS-приложение через sing-box, чтобы обход блокировок был не задачей пользователя, а деталью реализации. Если коротко: TLS-рукопожатие проксируется на посторонний крупный сайт, активный пробинг упирается в этот сайт, IP относимся как к расходнику, конфиг доставляется отдельно от сборки. Подход работает, и для подавляющего большинства соединений из России работает прямо сейчас.

Кроме одного класса сетей, в которых не работал.

Внутри этого класса оказались, в том числе, корпоративные подсети, гостевой Wi-Fi в некоторых аэропортах и часть регионального покрытия одного из операторов. Картина в логах одна и та же. Туннель поднимается, TCP-соединение на relay открывается, TLS-рукопожатие начинается, и через секунду sing-box на сервере пишет в журнал: REALITY: processed invalid connection. Сразу обрыв, нет ретраев которые что-то меняют.

Эта статья про то, что мы увидели в этих сетях, почему Reality в одиночку их не пробивает, и что мы поставили рядом, чтобы пробивал. Если читали предыдущую часть, продолжайте отсюда. Если не читали, важен один тезис: туннель у нас живёт внутри приложения, через sing-box, скомпилированный в нативный фреймворк, без системного VPN.

Дальше про Hysteria2

iPad как инструмент разработчика в эпоху агентного программирования

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели8.4K

Ещё несколько лет назад разговоры об iPad как полноценном инструменте разработчика воспринимались скептически. Машинка для Netflix, блокнот для набросков, планшет для презентаций — но только не рабочая среда для написания и деплоя кода. У этого скептицизма были основания: iPadOS долго не имела нормальной многозадачности, инструментов для работы с серверами почти не существовало, а необходимость постоянно переключаться между приложениями делала любой серьёзный рабочий процесс мучительным.

Сегодня картина изменилась кардинально, и сразу по двум причинам, которые усиливают друг друга.

Читать далее

Как мы переводим миллионы iOS-пользователей на новое приложение каждые несколько месяцев

Время на прочтение9 мин
Охват и читатели11K

Всем привет! Apple удалила «РСХБ Онлайн» из App Store в 2022 году. С тех пор мы выпустили пять новых iOS-приложений — «Учёт надоя», «Ягодный фест», «АгроСкан», «PRO Зерно» и «ПРО Жарка». Каждое рано или поздно удаляли. И каждый раз перед нами вставала одна и та же задача: перевести клиентскую базу со старого приложения на новое. Без App Store. Без возможности обновить бинарник. Без push-уведомлений в устаревшем клиенте.

Я Кирилл Адещенко, в прошлой статье я делился кейсом публикации мобильного банковского приложения РСХБ в условиях ужесточения правил магазинов приложений и санкционных ограничений. В этой статье буду говорить про миграцию: как технически и организационно переселять людей, когда главный канал дистрибуции у тебя отобрали, а клиенты цепляются за привычное.

Читать далее

Capacitor: от веба к мобильным приложениям. Часть 4. Интегрируем локальный LLM в проект

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели11K

В этой уже 5 по счету статье мы поговорим про актуальность локального AI в мобильных приложениях а также займемся интеграцией плагина для локальных LLM в Capacitor приложение.

Читать далее

Год разработки iOS-игры, 266 тысяч показов и $33: как я делал Vault и почти ничего не заработал

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели8.4K

Я год делал iOS-игру Vault: the board game: онлайн, профили, друзья, локализация, сезонные ивенты, премиум-паки и нормальная страница в App Store. За последние 90 дней App Store Connect показал 266 тысяч показов, 6 тысяч первых загрузок и $33 proceeds. Это честный рассказ о том, почему хороший инди-проект сам по себе не становится бизнесом.

Читать далее

Мобильная разработка за неделю #631 (18 — 24 мая)

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели11K

В новом дайджесте лаги Телеграм на флагманах и анонсы Google I/O 2026, переезд с XML на Jetpack Compose и новый Flutter с Dart-ом, счет на €3167от ошибки в Firebase двухлетней давности, как Apple боролась с мошенничеством в App Store в 2025, ИИ-система code-review от DoorDash, которая действительно работает, и многое другое. Заходите!

Читать далее

Ближайшие события

Обход блокировок внутри iOS-приложения: VLESS + Reality через sing-box, и грабли по дороге

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели15K

Мы делаем мессенджер. Весной 2026 наш бэкенд начал отваливаться у части пользователей из России: HTTPS‑запросы к API таймаутятся, WebSocket не поднимается. Картина знакомая всем, кто держит сервис с одним доменом и одним IP.

Для мессенджера это приговор. Не «неудобно», а именно приговор: приложение, которое не может даже подключиться, бесполезно. И вариант «попросите пользователя сначала включить VPN» нас не устраивал совсем. Ниже разберу, почему мы в итоге встроили обход прямо в приложение, на чём он работает и на какие грабли мы наступили. Без маркетинга, по делу.

Читать далее

Как я делал ping и traceroute на iOS без entitlements — и почему это оказалось проще, чем UMP-консент для AdMob

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели7.3K

Я выпустил небольшое iOS-приложение — NetDiag+. Это набор сетевых утилит: ping, traceroute, DNS lookup, whois, LAN-сканер, port scanner, проверка SSL-сертификатов, BGP/ASN lookup, Wi-Fi info и фоновый мониторинг хостов с пушами при падении. Я начинал его как пет-проект для собственных нужд, потому что на iOS приходилось переключаться между четырьмя разными приложениями для базовой диагностики, и в трёх из четырёх была реклама.

Хочу поделиться тем, что мне самому хотелось бы прочитать в начале — почему некоторые вещи на iOS работают не так, как ожидаешь от Unix-фона, и где грабли лежат не там, где кажется.

Сразу спойлер по выводам: самым болезненным оказалось не сетевое программирование, а интеграция UMP-консента для AdMob.

Читать далее

Flutter 3.44 Конец эпохи CocoaPods и начало расцвета Swift Package Manager

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели8.6K

Экосистема Flutter совершила один из самых значительных скачков вперед. С выходом Flutter 3.44 команда официально сделала Swift Package Manager (SwiftPM) менеджером зависимостей по умолчанию для iOS и macOS, ознаменовав начало конца эпохи CocoaPods.

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

Читать далее

Код Telegram iOS — лучший в индустрии. Почему же он так лагает на флагманах?

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели22K

Telegram — технически самый сложных мессенджер в мире. В iOS приложении 2.1M+ строк, 700+ модулей, 86% Swift, 13 лет кодовой базы, и мало ObjC — это колоссальный труд.

Но при этом приложение лагает на флагманах, AsyncDisplayKit открывает по 10 дублей окон разом(а это явно тормозит ARC), крэши на редактировании изображений стабильны годами.

Почему?

Потому что 86% кода написаны на Swift, но разработчики мыслят все еще в парадигме ООП.

ООП в Swift — это не просто устаревший стиль, это потерянная производительность.

Читать далее

Мобильная разработка за неделю #630 (11 — 17 мая)

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели9.7K

Возвращаемся после небольшого майского перерыва с новым дайджестом - советы и хитрости Xcode 16 и как добиться 0 рекомпозиций в сложном кастомном UI, три раунда войны с Android-клавиатурой в WebView и обновление без разрешения пользователя, 10 оптимизаций Swift, которые улучшат производительность, тестирование Compose по-новому, декларативная навигация для Flutter, под капотом перезапуска приложения Бургер Кинг и многое другое. Заходите!

Читать далее

Push-уведомления в мессенджере: production-грабли которых нет в туториалах

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели13K

Это девятая статья про инженерные решения в ONEMIX. Тема узкая, push-уведомления. Но я её давно хотел разобрать, потому что туториалов в интернете много, а production-граблей в них почти нет.

Если коротко, туториал по push выглядит так. Регистрируешь токен через Notifications.getExpoPushTokenAsync(). Отправляешь на бэкенд. Когда приходит пуш — addNotificationResponseReceivedListener ловит тап, навигируешь в нужный экран. Всё.

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

Читать далее

Синергия E2E и скриншотных тестов: создание надежной системы тестирования iOS с помощью XCTest

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели6.7K

Всем привет! Меня зовут Артур Поляков, я инженер по тестированию в отделе мобильной разработки в компании iSpring. Наша команда работает над iSpring LMS — мобильным приложением для дистанционного обучения сотрудников.

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

Читать далее
1
23 ...