Обновить
64K+

iOS *

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

49,81
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности
Формат публикации

Duck: DuckDB для Swift. Мощный SQL прямо в iOS и macOS приложениях

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

Уже много лет я занимаюсь Swift-разработкой, причем довольно значительная часть моих open-source проектов выросла из желания сделать повседневную работу с кодом максимально простой, красивой и приятной.

За время работы на серверной стороне я привык к Postgres, к его мощному SQL и к тому, что с данными можно делать практически всё необходимое на уровне самой базы. Благодаря своим библиотекам я уже мог описывать таблицы обычными Swift-моделями, строить SQL с помощью type-safe key paths и пользоваться декларативным синтаксисом с result builders, который мне особенно нравится в современном Swift. У меня получился такой способ работы с БД, от которого мне совершенно не хотелось отказываться при переключении на iOS и macOS разработку.

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

Заглянуть

Как наш плеер на 196 МБ за ночь раздулся до 450 МБ при нуле утечек: 168 забытых вебсокетов и налог SwiftUI

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

В первой части истории про Kinrox мы радовались как дети: написали открытый нативный видео- и Spotify-плеер для macOS на Swift 6 и SwiftUI (kinrox.app, GitHub), закрыли двухгигабайтный Electron-клиент Spotify.app, прикрутили консольный бинарник Spotify Soloist (который ест скромные 27 МиБ), починили жадный VStack в боковой панели и с гордостью показали скриншот Activity Monitor на 196 МБ оперативки. А во второй серии собрали собственный движок поиска редкой музыки Similar & Discovery в обход закрытых эндпоинтов Spotify.

Вечером я подключил MacBook к проектору, включил музыку, вдоволь нащёлкался по новому трёхколоночному интерфейсу, пораскрывал альбомы, покопался в андеграунде через tag:hipster и оставил плеер играть на ночь.

Проходит 17,5 часов. Утром я подхожу к ноутбуку, открываю Activity Monitor и вспоминаю бессмертный диалог про суслика: «Ты видишь экономию памяти? Нет. А она есть».

В мониторинге висят 450,75 МиБ, а пик за сессию (lifetime peak) доходил до 743,1 МиБ.

Читать далее

Matter over Wi-Fi и iOS: легко ли внедрить протокол в iOS-приложение?

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

Салют, Хабр! 

Я Владислав — iOS-разработчик. Ранее мы рассказывали, как реализовали Matter over Wi-Fi в умном доме Сбер, изменили флоу подключения для более удобного пользовательского пути и интегрировали его в приложение Салют (Android). А параллельно мы ради эксперимента протестировали, насколько сложно интегрировать Matter в iOS. Это был интересный опыт. Спойлер: мы сделали процесс подключения с отображением статусов в реальном времени, который работал идеально... но только у разработчиков. А потом пришлось всё переписать.

Читать далее

Как устроена головоломка про логические схемы, в которую играют не только инженеры

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

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

Читать далее

Исследование производительности механизмов синхронизации в Swift

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

За время работы iOS-разработчиком я не раз встречал те или иные рекомендации по выбору быстрого механизма синхронизации. Если нужна высокая производительность, то используйте os_unfair_lock. Если чтений гораздо больше, чем записей, то присмотритесь к read-write lock или concurrent queue с barrier-записью. А когда речь заходит о Swift Concurrency, нередко можно услышать, что actors работают медленно и проигрывают обычным блокировкам.

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

Читать далее

Мобильный Kmp клиент для Ollama server

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

#OLLAMA_HOST=0.0.0.0:11434 ollama serve

В этой статье я хочу зафиксировать практический опыт настройки локального сервера Ollama для работы с мобильным клиентом под Android и iOS. Это своего рода заметки на память, чтобы не забыть ход мысли при развёртывании ИИ-сервера и проектировании KMP-приложения.

Мы разберём, как скачать модели, как запустить их локально, а также упомянем, как подключить Ollama в качестве Model Provider для ИИ-помощника прямо в Android Studio. Основной упор сделан на создание простого ИИ-чат-бота с общим UI на Compose Multiplatform и решение неочевидных проблем, возникших в процессе разработки.

Ollama — это бесплатная программа, которая позволяет запускать большие языковые модели (LLM) локально на вашем компьютере. Это как «Docker для нейросетей»: вы одной командой скачиваете модель и общаетесь с ней — без интернета, без подписок и без отправки данных в облако

Читать далее

Настройка Android и iOS для перехвата интернет‑трафика

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

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

1. Как разрабатывать фронтенд без готового бэкенда: инструменты перехвата трафика, мокирования и принцип их работы.

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

В этой статье разберем, как настраивать Android- и iOS-устройства и эмуляторы для перехвата интернет-трафика сниффером, на примере сниффера OWASP ZAP.

Читать далее

Поиск похожих песен в Spotify скатился в день сурка: как мы собрали свой Similar + Discovery в плеере Kinrox

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

В прошлой статье мы рассказывали, к чему приводят неистраченные токены в конце месяца: мы собрали открытый Mac-плеер Kinrox (GitHub), который жрёт 196 МБ оперативки вместо 2 ГБ у официального клиента Spotify, крутит фильмы с управлением через пульт на iPhone и включает скринсейвер «Матрицы» с дивана.

Казалось бы, память спасена, процессор в простое показывает 0%, можно спокойно слушать музыку. Но стоило попользоваться собственным плеером пару вечеров подряд, как вылезла проблема, знакомая почти каждому подписчику стримингов в 2026 году.

Включаешь любимый трек на стыке psybient, organic electronic или downtempo, хочешь найти что-то в том же духе, чего ты ещё не слышал, - а штатные алгоритмы Spotify радостно подсовывают тебе твои же собственные залайканные песни трёхлетней давности вперемешку с попсовыми сборниками для кофеен.

Мы посмотрели на верхнюю панель нашего плеера, переименовали скромную вкладку Music прямо в Spotify, добавили в левую колонку раздел Similar & discovery и решили разобраться: почему родной поиск похожей музыки в Spotify стал таким унылым и КАК собрать собственный прозрачный движок дискавери, если сама Spotify в 2025-2026 годах демонстративно отрубила разработчикам старые рекомендательные API?

Поехали.

Читать далее

Как разработчику из РФ начать принимать платежи через App Store без ВНЖ

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

Всем привет! Хочу поделиться личным опытом того, как после переезда из России мне удалось начать принимать оплату в своих iOS приложениях, будучи гражданином РФ без ВНЖ. Расскажу, как менял регион аккаунта с России на Армению через саппорт Apple, как заполнял W-8BEN и что нужно, чтобы зарегистрировать аккаунт на юрлицо.

Читать далее

Мобильная разработка за неделю #652 (2 октября — 8 ноября)

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

В этом выпуске компиляция и запуск SwiftUI-приложения на iOS без MacBook, блокировщик, который нельзя смахнуть, и iOS-инфраструктура hh.ru, как заставить Unity‑игру печатать деньги, китайская сеть из 444 ИИ-приложений для создания дипфейков, локализация на open source и LLM и многое другое. Заходите!

Читать далее

В iOS нашли список фраз, которые встроенная клавиатура не подсказывает во время набора

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

Исследователь Дерик Кауфман (Derik Kauffman) нашёл в iOS списки слов и выражений на разных языках, которые встроенная клавиатура не подсказывает во время набора. Ограничения охватывают около 100 тыс. слов без учёта китайского языка, а среди слов в основном оскорбления, выражения на политические и чувствительные темы.

Читать далее

Представлен открытый проект Henge — бесплатный эмулятор, позволяющий установить полноценную операционную систему...

Охват и читатели5.1K

Представлен открытый проект Henge — бесплатный эмулятор, позволяющий установить полноценную операционную систему macOS прямо на iPhone.

iOS не предоставляет приложениям доступа к гипервизору, поэтому Henge выполняет ARM64-код macOS через собственный JIT-компилятор, используя собственные механизмы управления памятью (MMU) и эмулируемые устройства. QEMU или Virtualization.framework здесь не задействованы.

macOS отрисовывает изображение через виртуальный графический процессор (GPU), а Henge транслирует эти команды в API Metal. Это позволяет работать таким приложениям, как Safari или программы на базе Electron (например, Discord).

На iPhone 17 Pro загрузка macOS до экрана блокировки занимает около 15 секунд. Приложение Discord устанавливается и запускается примерно за 15 секунд, после чего в нём можно авторизоваться и отправлять сообщения.

Читать дальше →

Apple: анатомия корпоративной власти. Как продают не устройства, а зависимость

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

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

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

Вы отдали полную рыночную стоимость за устройство, в котором вам не принадлежит право свободно ставить софт в обход хозяйской таможни. Вы не имеете права сами починить его оригинальной деталью от точно такого же телефона без высочайшего разрешения серверов Купертино. Каждый ваш шаг обложен комиссией, в облаке вам оставили издевательские 5 гигабайт из 2011 года, а выход из «бесшовной экосистемы» спроектирован так, чтобы причинить вам максимум бытовой и финансовой боли.

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

Спойлер: это не очередной холивар в духе «Android против iOS». Мы заглянем в финансовые отчёты SEC, судебные тома антимонопольных дел и препарируем бизнес-модель Apple через оптику товарного фетишизма и экономики симулякров. Разбираемся, как продают не гаджеты, а пожизненную зависимость.

Читать далее

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

Как я разработал Geo Collector: бесплатная мобильная ГИС для iPhone без рекламы и обязательных подписок

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

React Native, Expo, GPS-трекинг, геоданные и немного размышлений о том, какой должна быть модель распространения небольшого независимого приложения.

Привет, Хабр!

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

Одним из результатов стал Geo Collector – мобильное приложение для iPhone, предназначенное для сбора географических данных непосредственно на местности.

Недавно приложение прошло проверку Apple и стало доступно в App Store.

Скачать Geo Collector: https://apps.apple.com/tr/app/geo-collector/id6822998937

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

Сразу оговорюсь: Geo Collector не претендует на замену QGIS или профессиональных геодезических комплексов. Это инструмент для другого сценария – когда нужно быстро собрать пространственные данные, имея под рукой только смартфон.

Читать далее

Делаем освещение умным: полный гайд от Zigbee лампочек и выключателей до цифровых трековых шин на DALI

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

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

Под катом разбираемся как это сделать правильно >..

Читать далее

Spotify на 196 МБ вместо 2 ГБ, видеоплеер с пультом на iPhone и скринсейвер «Матрица»: что бывает, когда остались токены

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

Знаете этот опасный момент в конце расчётного периода, когда задачи по основным проектам закрыты, а на балансе остались неистраченные токены? Нормальный человек ложится спать. Разработчик с остатком лимитов начинает творить всякую дичь.

Проект Kinrox (GitHub) родился ровно из этого состояния, когда в одной точке сошлись две бытовые боли и одно вечное эстетическое требование: сделать удобный видеоплеер с пультом на iPhone, лёгкий проигрыватель Spotify и, самое главное, встроить туда скринсейвер «Матрицы».

Первая боль - диван и проектор. MacBook подключён по HDMI к HD-проектору, ты лежишь под пледом, смотришь кино, и тут нужно поставить на паузу, убавить звук, переключить звуковую дорожку из вложенной папки или включить следующую серию. Вставать с дивана и идти к ноутбуку каждый раз - преступление против лени.

Вторая боль - цены на память у Apple. На моём MacBook Pro (MacBookPro18,2, Apple Silicon) всего 32 ГБ оперативки, и официальный клиент Spotify.app с удовольствием отъедает от них около 2 ГБ просто за право крутить музыку в фоне.

Читать далее

Как устроен.task в SwiftUI

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

Вы задумывались, что такое модификатор .task {..} в SwiftUI?

Со стороны это просто особый Task {..} для вью. Он и выглядит как Task {..} с точкой спереди, и это сходство сбивает с толку. Я так к нему и относился: асинхронный блок, который SwiftUI запускает при появлении вью. Документация Apple говорит, что задача живет, пока вью сохраняет идентичность (identity), и SwiftUI отменяет ее, когда вью идентичность теряет, а про появление упоминает вскользь, одной фразой «Adds an asynchronous task to perform before this view appears». Выходит, запуск при каждом появлении вью, отмена при исчезновении. Где лежит сама задача и кто держит на нее ссылку, документация не говорит.

А держать задачу негде. Структура вью — это значение, SwiftUI пересоздает его при каждом пересчете body, и ссылка на Task внутри структуры умрет вместе с ней.

Проверьте себя. В каких из трех случаев задача внутри .task еще работает?

Читать далее

Вот как выглядит опция iPhone Mirroring на новом сенсорном MacBook Pro.

Охват и читатели3.1K

Вот как выглядит опция iPhone Mirroring на новом сенсорном MacBook Pro.

Читать дальше →

Apple будет проверять передаваемые по ссылкам файлы в iCloud

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

Начиная с версии iOS 27.3, Apple начнёт проверять на наличие «вредного контента» файлы в iCloud, доступ к которым открыт для любого пользователя, имеющего соответствующую ссылку.

Читать далее

Мобильный Vivaldi 8.3: быстрый и чистый интернет в кармане

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

Сегодня мы одновременно выпускаем Vivaldi 8.3 для Android, iOS и настольных компьютеров. Главная новинка — переработанный блокировщик рекламы и слежки. На Android пользователи получают более удобные группы вкладок, улучшенное управление мультимедиа и возможность быстро перейти к приложению на сайте. На iOS страницы с включенным блокировщиком загружаются заметно живее, батарея не разряжается так быстро, и вы сами выбираете, где открывать новые вкладки.

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