Обновить
64K+

iOS *

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

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

Вари меня нежно: какой смартфон будет работать нормально, пока Google и Apple душат установку приложений

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

Скажу честно, я сама не до конца верила, что это произойдет, но мировые гиганты продолжают медленно но верно затягивать гайки. Наверное, только ленивый не видел новостей о том, что в Android появляется замечательная функция (Developer Verification), которая заставляет 24 часа ждать перед установкой стороннего приложения через APK. Не прошло и недели, как новостные ленты наводнили сообщения о запрете iMazing и других сервисов для устройств Apple — а именно они позволяли устанавливать запрещенные американцами программы, которыми пользуются у нас в стране. Меня эта новость зацепила, как говорится, "по живому", потом что я как раз решила переустановить приложение Сбера...и не смогла! Поэтому я, скрепя зубами, все-таки решила слезать с iOS и попыталась выяснить, какой смартфон можно купить, чтобы в ближайшем будущем он не превратились в тыкву. Под катом делюсь всей информацией, какую нашла.

Читать далее

Новости

Продуктовая гипотеза или баг фронтенда: как перестать угадывать почему пользователи не дошли до цели

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

Возьмём типичный отчёт воронки интернет‑магазина: «Каталог → Товар → Корзина → Оформление заказа → Оплата». До последнего шага дошло 38% сессий, остальные 62% потерялись между «Оформлением» и «Оплатой». Для продуктовой аналитики эти 62% — повод для гипотезы «форма оформления слишком длинная» и задачи на редизайн. Для команды разработки те же 62% — конкретная JavaScript ошибка. Но пока данные о конверсии и данные об ошибках лежат в разных системах, выбор между ними происходит наугад. Как перестать «угадывать» почему отвалились пользователи и какую в этом роль играет Customer Journey Map разберу в статье.

Читать далее

Миллион частиц на iPhone: строим аттрактор Лоренца на GPU с Metal

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

Привет! Я Максим Савченко, iOS-разработчик. Эта история началась с вопроса, как сделать живую форму в духе иконки Siri — и довольно быстро уехала в другую сторону: аттрактор Лоренца на сотнях тысяч, а потом и на миллионе частиц, где и расчёт, и отрисовка живут на GPU.

Вся схема держится на одной идее: состояние частиц на CPU больше не возвращается. Compute-шейдер читает один буфер, пишет в другой, render-pass сразу рисует результат, на следующем кадре буферы меняются местами.

В статье разбираю это по шагам: математика и выбор интегратора, ping-pong-буферы, compute/render-пайплайн, point primitives и additive blending. А в конце — GPU Frame Capture и замеры на физическом iPhone. Спойлер, который я сам не ожидал: RK4 в этой конфигурации оказался далеко не самым дорогим местом. Основная цена ушла в отрисовку и overdraw.

Если коротко: это не гайд «как нарисовать красивую картинку», а разбор того, зачем вообще лезть в Metal и где кадр упирается на реальном устройстве.

Читать далее

Мобильная разработка за неделю #645 (24 — 30 августа)

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

В этом дайджесте надежное выполнение фоновых задач в iOS и детекция лица в реалтайме для биометрии в Android, забавные анимации с меш-градиентами в Jetpack Compose и кастомизация пейволов с Apple Foundation Models, Kotlin Coroutines Channels и Actor‑модель, фоновые задачи в KMP с API как у WorkManager, разработка на Авроре под Аврору, двуногий робот в форме утёнка от Hugging Face и многое другое. Заходите!

Читать далее

Apple меняет домен Private Relay: почему Sign in with Apple нельзя строить вокруг email

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

Apple меняет домен новых Private Relay адресов для Sign in with Apple. Внешне это похоже на небольшую правку allowlist, но на практике быстро выявляет хрупкую архитектуру, где email участвует в поиске аккаунта.

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

Читать далее

Обзор MWS SunQ: ферма устройств на iOS и Android

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

Тут должна быть картинка

Привет, Хабр! Когда-то я пять лет проработал в отделе тестирования, а последние шесть занимаюсь разработкой под iOS и Android. На одном из первых проектов в мобилке я на Java под Android создал пирамиду тестирования: больше тысячи unit-тестов, больше ста интеграционных и с десяток UI и End‑to‑End. На текущей работе сделал то же самое с нуля, но уже под iOS на Swift.

Но не все сценарии можно покрыть автотестами. Многое все еще тестируется вручную. Например, на текущем проекте мне нужно проверять работу звонков. И для этого не подходят симуляторы/эмуляторы, так как часть функций звонков в них недоступна. Единственная возможность проверить - это взять два физических телефона и протыкать все руками. Обычно я так и делаю при разработке. А потом готовые фичи передают ручным тестировщикам, которые это проверяют на своих телефонах. 

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

Начал разбираться и узнал, что есть множество мировых ферм устройств: BrowserStack, Sauce Labs, LambdaTest, AWS Device Farm, Firebase Test Lab и другие. Но все они зарубежные. С текущими перебоями интернета в РФ — ненадежный вариант. Оказалось, что в России, кроме приватных ферм у корпораций, есть MWS SunQ. Можно развернуть STF и Appium самому — но это больше задача для DevOps. И ограничена теми устройствами, что есть у фирмы. У нас их штук десять — для полноценного тестирования мало. Поэтому я решил разобраться с MWS SunQ.

Читать далее

Как я заставил HTML из ChatGPT будить телефон: песочница, точные будильники и мост из пяти методов

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

Попросил Claude написать таймер одним HTML-файлом — а телефон его не будит: вкладка спит, будильник не звонит. Сделал Kapsula: приложение для Android и iOS, которое запускает такой файл как проект с настоящими будильниками ОС через мост из пяти методов. Внутри — iframe без same-origin, postMessage-RPC, три грабли Android-уведомлений, звук на iOS, правило состояния для ИИ-кода и промпт вместо SDK. Без сервера, без аккаунта, без аналитики.

Читать далее

Jabbit — фоновые задачи в KMP с API как у WorkManager (почти)

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

Привет!

Представьте, что вы с удовольствием пишите один код на все платформы на Kotlin Multiplatform, и вдруг приходит задача «синкать данные раз в час, только по вайфаю и когда телефон на зарядке».

Под Android вы берёте WorkManager и за пятнадцать минут закрываете тикет. Потом яблочный смежник открывает документацию по BGTaskScheduler и обнаруживает, что модель там вообще другая и работает всё по-другому: нет очереди задач, есть окна, которые система выдаёт по своему усмотрению и т. д.

В итоге в проекте появляется expect fun scheduleSync() с разными реализациями, которые ведут себя по-разному, и никто в команде через год не сможет сказать, что именно произойдёт на iOS, если приложение свернули посреди загрузки.

Так как я андроидер с альтернативным мышлением, мне нравится API WorkManager'а. Я захотел его скопировать под KMP, породив так называемый Kotlin Multiplatform Work Manager или же Jabbit (job + rabbit, да, я знаю) — планировщик фоновых задач для KMP.

Таргеты: Android, iOS, js и wasmJs. Как будет время и желание, появится ещё и декстоп.

Читать далее

Мобильная разработка за неделю #644 (17 — 23 августа)

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

В новом выпуске 136 уровней вложенности XCUITest и Android Runtime под капотом, как Tinder сократил холодные старты на 47% и новые условия распространения приложений в Евросоюзе, от Event-Driven UI к State-Driven UI, что нового в Dart, как сделать MCP удобными и действительно полезными, уменьшение трения в приложениях и многое другое. Заходите!

Читать далее

React Native в 2026 году: New Architecture, нативный код и AI в реальном проекте

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

React Native по-прежнему часто описывают формулой «один код для iOS и Android». В 2026 году она звучит слишком просто. Современное приложение на React Native — это общий продуктовый слой на TypeScript, нативный интерфейс, Hermes, Fabric, JSI, фоновые процессы, platform-specific код и довольно много решений о том, где именно должна выполняться каждая задача.

Мы столкнулись с этим в Synchra.24 — мобильном приложении для линейных и распределённых команд. В проекте больше тысячи TS/TSX-файлов и свыше ста экранов, но рядом с ними живут Kotlin и Swift: геопозиция, push-уведомления, биометрия, системные виджеты и работа с медиа. Это не история о функциях нашего продукта и не попытка его рекламировать. Это разбор того, чем на практике стала разработка на React Native к 2026 году — и какую часть этой работы действительно можно поручить нейросетям.

Читать далее

История создания звонилки без номера: месяц, миллионы токенов и грабли, которые легли в основу этого цикла статей

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

В октябре прошлого года на Хабре вышла статья «Как я писал свою звонилку для видеозвонков» — автор под ником CEOCTO за несколько вечеров написал P2P-видеозвонилку на WebRTC, потому что его достали обрывающиеся созвоны в мессенджерах. Я прочитал, улыбнулся, полез смотреть исходники на GitHub — и на этом всё. Как обычно бывает с чужими pet-проектами: оценил, закрыл вкладку, забыл

Читать далее

JS-инъекция для iOS-тестов: как подружить WKWebView и XCTest

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

Мы хотели, чтобы iOS-тесты видели внутри WebView те же data-testid, что и фронтенд. Вроде бы простая задача. Но iOS устроена хитрее: WKWebView запускает веб-контент в отдельном процессе — тестовый раннер туда не достучится. А UI-автоматизация на Android умеет залезать в WebView «из коробки», а на iOS — нет. Как решать? Не писать же тесты по пикселям. Спойлер: пришлось написать JS-скрипт, который сам проставляет aria-label на основе data-testid. Под катом — как это работает и почему без MutationObserver никуда.

Читать далее

Паничный PIN, который отдавал ключ от всего: разбор ошибок

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

Мы делаем мессенджер RCQ (rcq.app, исходники клиентов на github.com/rcq-messenger). В нём есть штука, которую в разных приложениях называют по-разному: паничный PIN, duress PIN, подставной код. Смысл один. У вас просят разблокировать телефон, вы вводите второй PIN, и человек напротив видит приложение, в котором ничего интересного нет.

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

Читать далее

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

Мобильная разработка за неделю #643 (10 — 16 августа)

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

В этом дайджесте Android-приложение Polymarket на Swift, Structured Concurrency и отмена корутин, что нового во Flutter 3.47 и разработка мобильного приложения с помощью Claude Code, конкурирующие магазины приложений в Play Store, ИИ, парализовавший принятие решений и многое другое. Заходите!

Читать далее

Как работали три уязвимости IOS которые apple залатали в новом beta обновлении IOS 27

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

Привет Хабр! На момент написание данной статьи три уязвимости о котрых пойдет речь уже залатали в IOS 27 beta 5 для разработчиков а сами уязвимости уже слиты разработчиком johnny (@0xjohnny в X). всего вышло четыре уязвимости о которых пойдет речь

Читать далее

Мобильная разработка за неделю #642 (3 — 9 августа)

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

В новом выпуске применение для .fixedSize и (не)слежка в приложениях Яндекс для Android, погружение в One‑Time Events в Android и регрессионное UI-тестирование для iOS, Shipaton 2026 от JetBrains, offline‑first PWA, сканер для слабых смартфонов, идеальный телефон для цифрового детокса и многое другое. Заходите!

Читать далее

AI и склонение немецких прилагательных

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

Всю свою сознательную жизнь я «учил» немецкий: в школе, универе, на внутренних курсах IT-компании и самостоятельно. Слово «учил» я поставил в кавычки, потому что на самом деле я ничего никогда нигде не учил, ну разве что зазубрил немецкий алфавит в школе. Всё как-то училось само, слова запоминались после нескольких повторений, грамматика – после нескольких упражнений. Слава Богу, память всегда была хорошая. Но во-первых, если в будущем эти слова и грамматика не использовались, всё это вскорости выветривалось из головы, а во-вторых, так это не работает со сложными темами. Такими, как, например, склонение немецких прилагательных.

Тем, кто учит английский, повезло: прилагательные там не склоняются вовсе, но в немецком (как и в русском) всё совсем не так:

Читать далее

Как мы построили систему регрессионного UI-тестирования для iOS-приложения: XCUITest, mock backend и XcodeBuildMCP

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

По мере роста UI-регрессии сложнее всего становится управлять не тестами, а их окружением: состоянием приложения, ответами backend и воспроизводимостью сценариев. В статье разбираю архитектуру, которая связывает тест-кейсы QA, mock-профили, XCUITest и XcodeBuildMCP в единый процесс — от подготовки сценария до запуска в CI.

Читать далее

SayFable — офлайн-библиотека с NLP-разметкой, синтезом на 68 языков и чатом по книге

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

Привет, Хабр! В прошлых статьях я рассказывал про локальный переводчик с синтезом голоса на кабардинском и про то, как собрать полный NLP-стек для «финального босса лингвистики» из старых словарей. За прошедшие месяцы весь этот стек - лемматизация, POS, NER, тональность, эмбеддинги, синтез - переехал с Python/Flask на десктопе в Swift-приложение на iOS и заодно перерос сам себя: начиналось всё как синтезатор речи для одного языка, а выросло в персональную библиотеку для любого контента - книги, статьи, подкасты, видео, музыка, файлами или ссылками. Полгода на голом Swift 6, вечерами и выходными.

Приложение уже можно ставить и ломать - оно в бете, включая рабочий CarPlay. Под катом: что оно умеет, как устроено внутри и какие цифры получились на реальном железе.

Читать далее

Picture-in-Picture в iOS: от запуска до переключения контента

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

С системной функцией Picture-in-Picture (PiP) сталкивались, пожалуй, все владельцы iPhone: кто-то смотрит видео на фоне переписки, кто-то общается по видеосвязи в любимых мессенджерах. Для пользователя это просто удобство, а для разработчика видеосервиса — отдельный механизм со своей инфраструктурой, жизненным циклом и набором ограничений. В этой статье я разберу интеграцию PiP как встроенного плеера: от первого запуска до переключения контента. Поделюсь нюансами, с которыми вы точно столкнётесь на практике, и покажу, как обойти типовые грабли.

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