Обновить
64K+

iOS *

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

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

YPtun — клиент, который сам поднимает себе сервер

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

В YPtun появилась автоустановка серверов: вводите IP и пароль от VPS, нажимаете кнопку, и приложение само ставит сервер и заполняет поля подключения. Работает для семи движков на Android и ПК. Рассказываем, что происходит внутри и на чём мы спотыкались.

Как это устроено

Новости

KassiOS: слой в стиле Kaspresso поверх XCUITest, проверенный на сломанном банке

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

Я пришёл в нативное iOS-тестирование из Appium, и простой логин на XCUITest раз за разом обрастал waitForExistence, ретраями и самописными хелперами. Так появился KassiOS — слой в стиле Kaspresso поверх XCUITest: тап с общим бюджетом ожидания, который не повторяется после отправки, перечитывание поля после ввода, понятные сообщения о падениях, параметризованные тесты.

Чтобы проверить, ловят ли тесты баги, я прогнал их против ChaosBank — приложения с включаемыми дефектами — и написал утилиту, которая включает дефекты по одному и показывает, какой из них прошёл незамеченным. Рассказываю, что из этого вышло, какие баги нашлись в самом фреймворке и кому он подойдёт, а кому нет.

Читать далее

Я вернулся на Android, и мне не понравилось

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

Под конец 2025 года мой iPhone 11 стал всеми силами показывать, как ему тяжело в современных реалиях, когда приложения повышают свои системные требования, а сама обновлённая iOS на старых девайсах выглядит хуже, чем на тех, что поновее, — всё же 4 гигабайта ОЗУ играют свою роль. До iPhone 11 у меня была «лопата» Xiaomi Mi Max (не самый плохой смартфон, кстати!) и другие бюджетники, так что «андроиды» для меня были не в новинку. Но, глядя на цены на новые айфоны и конкурентов в лице Samsung, возник вопрос: а что, собственно, я потеряю, вернувшись сейчас на Android в лице Galaxy S25 Plus? Ох, с чего бы начать…

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

Читать далее

.NET MAUI-приложение падает после сборки в Xcode 27: UIScene, плавающая панель iOS 26 и что ещё пришлось поправить

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

Собрала .NET MAUI-приложение в Xcode 27, поставила на iPad — и оно упало сразу при запуске. А после того как я это починила, оказалось, что интерфейс не дружит с плавающей панелью вкладок из iOS 26: под ней пустая полоса, линия-разделитель висит в воздухе, карта обрезается.

В этой статье — что именно сломалось и как я это исправила: переход на UIScene, без которого приложение не запускается, и адаптация страниц под плавающую панель через SafeAreaEdges. Весь код — из рабочего приложения для торговых представителей, о котором я писала в первой и второй статьях.

Спойлер: платформенного кода получилось немного — один класс на 60 строк, один стиль и пара файлов для запуска. А ушло на всё два с половиной дня

Узнать, как это задизайнено

PyLab — 2 года: как пользователи превращают пет-проект в продукт

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

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

Читать далее

От 798 до 16 нс: как оптимизация debounce привела меня в Swift Runtime

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

Все началось с простой идеи: перестать создавать новую Task для каждого значения. Уже это сократило среднее время вызова с 798 до 216 нс.

Но мне стало интересно, куда уходят оставшиеся наносекунды. Так оптимизация debounce превратилась в исследование Swift Runtime, работы компилятора и влияния расположения блокировки в памяти.

В статье расскажу, какие предположения подтвердились, что меня удивило и как в итоге удалось дойти до 16 нс на вызов.

Читать далее

Приоритеты и прогнозные даты нескольких целей: что я бы не стал строить второй раз

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

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

Читать далее

Веб-разработка на iPad: живой предпросмотр сайта и AI-агент в Remote IDE

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

Веб-разработка требует постоянной обратной связи: написал - посмотрел в браузере - поправил. На iPad это всегда было самым слабым звеном: код можно было редактировать, но увидеть, как он выглядит в браузере именно в процессе работы, без разрыва между терминалом, редактором и отдельным приложением - почти никогда. Ниже - рабочий процесс, в котором эта проблема снята: dev-сервер крутится на удалённом физическом или виртуальном хосте, AI-агент (Claude Code) пишет код и правит его по месту, а Remote IDE показывает живой результат во встроенном браузере рядом с редактором, терминалом и Git-диффом - на iPad со Stage Manager.

Читать далее

# Capacitor: от веба к мобильным приложениям. Часть 6. Встраиваем Capacitor в native-приложение

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

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

Читать далее

Я вам сборку принёс, но я вам ее не отдам: как установить тестовое приложение на iOS

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

Привет, Хабр! На связи Максим, я QA и рассказываю про мобильное тестирование.

Ручные проверки, поиск логов, разбор крешей, автотесты — с чего бы ни начиналась работа тестировщика, первым делом приложение нужно установить на устройство. Звучит как самая простая часть работы, правда?

На Android так и есть: скачал APK, разрешил установку из неизвестных источников — готово. С iOS такой номер не прокатит. Во многих компаниях в качестве сервиса для распространения сборок используется Firebase AppDistribution. В связи с этим часто возникает вопрос от мобильных QA, у которых мало опыта — «Почему вместо кнопки „Скачать“ отображается „Зарегистрировать устройство“? Почти все сложности с установкой объясняются одним механизмом — подписью приложения. Если понять, как она устроена, то любой способ установки перестает быть набором инструкций. С подписи и начнем разбираться в способах установить тестовую сборку на iPhone.

Читать далее

Личный опыт публикации в магазинах приложений в России в 2026 году

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

Доброго времени суток! Меня зовут Кирилл Андреев. Я занимаюсь разработкой мобильного приложения Aisha, ИИ-репетитора английского языка для разговорной практики. Мы --российская компания, поэтому нам приходится иметь дело со всеми ограничениями российской юрисдикции. Некоторые магазины применяют ограничения для компаний из России. Российские Visa и Mastercard не работают за рубежом. 

По данным Mediascope за декабрь 2024 года, которые приводят «Ведомости», месячная аудитория Google Play составляла 80 млн человек, RuStore — 50 млн, Xiaomi Mi Store — 19 млн, Samsung Galaxy Store — 14 млн, Huawei AppGallery — 10 млн. По более свежим данным Mediascope, опубликованным RuStore, в июле 2026 года аудитория RuStore достигла 68,4 млн человек. На мой взгляд эти цифры полезны как ориентир по охвату, а регулярный поиск и скачивание приложений они описывают слабо.

У нас сейчас работают приложения в RuStore, Google Play, App Store и Huawei AppGallery. Мы неудачно пробовали разместиться в Samsung Galaxy Store. Эта статья про наш личный опыт.

Читать далее

Как один UI‑баг заставил меня разбираться с графом зависимостей целого приложения

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

Есть такая категория задач, которые поначалу выглядят настолько безобидно, что ты даже не закладываешь на них много времени. Ну не обновился какой-то элемент интерфейса после авторизации, бывает. Скорее всего, где-нибудь потерялось событие, не обновилось состояние или кто-то забыл вызвать нужный метод. Открываешь проект, ставишь пару брейкпоинтов и рассчитываешь довольно быстро во всём разобраться.

Примерно с таким настроением я и взялся за очередной UI-баг, а спустя какое-то время обнаружил себя уже совсем не там, где планировал. Вместо экрана, ради которого всё затевалось, передо мной были несколько репозиториев, менеджеры, сервисы, фабрики, DI-контейнеры и довольно запутанная цепочка создания объектов. Причём чем дальше я по ней продвигался, тем меньше понимал, почему вообще что-то не работает, потому что каждый отдельный компонент выглядел совершенно исправным.

Методы вызывались, события приходили, состояние обновлялось, никаких ошибок в консоли не было. Даже данные, которые я видел в отладчике, на первый взгляд выглядели вполне корректно. И вот это, пожалуй, раздражало больше всего: приложение вроде бы делало всё, что от него требовалось, но интерфейс упорно продолжал жить своей жизнью.

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

Но обо всём по порядку.

Распутаем вместе?

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

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

В этом дайджесте Metal без магии и лечение телевизоров, Suspend на пальцах и Warcraft II на «Авроре», ИИ для расшифровки языка растений, крупнейшее изменение Xcode за 30 лет, как устроен IDL, отказ от «ненастоящих» градиентов и многое другое. Заходите!

Читать далее

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

ChaosBank — 131 переключаемый баг для тренировки мобильного тестирования

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

Я экспериментирую с подходами к автоматизации UI-тестов мобильных приложений: XCUITest, Espresso/Compose, Appium, Maestro. Быстро выяснилось, что гонять всё это не на чем: опенсорсные демо-приложения либо только под Android, либо слишком простые, и реальных багов в них почти нет.

Поэтому я сделал ChaosBank — два зеркальных финтех-приложения, под iOS и Android, где баги — это фича: 131 дефект, от убытка, показанного как прибыль, до двойного списания при быстром тапе. Каждый включается и выключается конфигурацией. Рассказываю, как это устроено и как это можно использовать для тренировки, сравнения фреймворков и тестовых заданий.

Читать далее

Suspend на пальцах. Ещё одна статья про корутины, ч.0

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

Всем привет! Я Дима, Android-разработчик в KTS, и я большой фанат языка Kotlin и библиотеки kotlinx.coroutines.

Здоровый человек может задать справедливый вопрос: зачем нужна очередная статья про корутины, когда есть ИИ? Любая модель моментально расскажет, как написать код с корутинами: где поставить suspend, что передать в launch, какой диспатчер выбрать.

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

У меня на это ушло много времени. Я писал рабочий код с корутинами, он работал, и всё это время я не до конца понимал, что происходит под капотом. Понимание пришло, когда я наконец сел и разобрал одну-единственную функцию: suspendCoroutine.

Так что я решил написать цикл статей про корутины, чтобы читателям Хабра было проще прийти к этому пониманию, чем мне. Думаю, он будет полезен и Android-разработчикам, и бэкендерам-котлинистам, и iOS-ерам, причём как начинающим, так и матерым сеньорам.

Читать далее

Dark Souls на iPhone: что пришлось починить в Madeira, чтобы игра с ПК вообще запустилась

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

Я с конца сентября запускал PC‑версии Dark Souls на iPhone Air через эмулятор Madeira. Remastered теперь играется с экранным геймпадом, у Dark Souls III в тяжёлых сценах медиана выросла с примерно 20 до 36,7 FPS на экспериментальной сборке. По дороге набралось 5 принятых и 11 открытых PR в Madeira, Wine, FEX и DXMT и репозиторий со скриптами, который я теперь выкладываю.

Оговорка сразу: у меня один телефон (iPhone Air на бета‑версии iOS 27.2), один тестер, то есть я, и все цифры ниже снимались на этом устройстве. Игры у меня свои, купленные. В репозитории нет ни игровых файлов, ни сейв‑редакторов, ни обхода защиты, и принимать такое я не буду.

Читать далее

Делаю «Вия» в вашей квартире: AR-хоррор на iPhone, Unity и реле кооператива на Cloudflare

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

Привет, Хабр. Я делаю AR-хоррор для iPhone, называется Home Haunt. Сюжет — «Вий» Гоголя: бурсак Хома Брут три ночи читает над мёртвой панночкой в старой деревянной церкви. Только церковь вырастает не где-то на экране, а у вас в комнате. Ваши стены, ваш пол, ваш диван.

Игра сейчас в закрытом тесте в TestFlight. В статье — что получилось технически, где споткнулись и какие цифры намерили. Всё, что на гифках — реальная запись экрана iPhone, без вставок.

Читать далее

UIKit говорит, что интерфейс уже RTL. Почему тогда половина экрана осталась LTR?

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

Вместо заголовка, пожалуй, лучше всего описать мои впечатления одной известной фразой: «Переключить LTR на RTL в рантайме? Приключение на пять минут. Зашли и вышли». Но, как вы уже догадались, всё оказалось да‑а-алеко не так просто

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

Но затем открываешь следующий экран и замечаешь, что стрелка Back смотрит не туда. Возвращаешься назад, открываешь форму, а текстовое поле ведёт себя странно при вводе латиницы. Ещё одно переключение языка, и часть интерфейса снова оказывается в LTR.

При этом UIKit совершенно спокойно сообщает:

Ну что на 5 минут?

PyLab: учим Python и пишем код прямо на смартфоне

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

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

Читать далее

Настройка инструмента OWASP ZAP для перехвата интернет‑трафика

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

Всем привет, на связи Дима Котиков. Продолжаем рассматривать инструменты перехвата и подмены интернет-трафика при разработке. 

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

В этой статье разберем настройку сниффера для прослушивания интернет-трафика.

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