На конференции разработчиков WWDC 2025 Apple представили Foundation Models framework — встроенную в устройства LLM, работающую локально и без доступа к интернету. Модель не увеличивает размер приложения, имеет три миллиона параметров и, по словам Apple, оптимизирована для выполнения специфических задач, таких как обобщение, информирование и классификация, однако не подходит для продвинутых рассуждений. У модели также есть ограничения на контент, описанные на сайте Apple.

Swift *
Открытый объектно-ориентированный язык
Новости
Поведенческие паттерны проектирования в примерах на Swift для самых маленьких

Всем привет! Зачастую чтобы в чем то разобраться полезнее один раз увидеть конкретный пример чем несколько раз прочитать заумное описание.Решил написать ряд небольших статей для начинающих, в которых дать краткое описание основных паттернов проектирования и привести лаконичные примеры их использования. Данная статья, как можно догадаться из названия =), посвящена поведенческим паттернам.
Публикация приложения в AppStore

Вы упорно занимались, трудились, и вот наконец настал день, когда вы готовы выложить ваше первое приложение в AppStore. Вы правильно делаете, что читаете эту статью с шампанским 🍾, а на вечер у вас забронирован бар, однако не спешите, придётся ещё немного попотеть.
Давайте разберемся, как опубликовать наше первое приложение в AppStore.
Порождающие паттерны проектирования в примерах на Swift для самых маленьких

Всем привет! Зачастую чтобы в чем то разобраться полезнее один раз увидеть конкретный пример чем несколько раз прочитать заумное описание.Решил написать ряд небольших статей для начинающих, в которых дать краткое описание основных паттернов проектирования и привести лаконичные примеры их использования.Данная статья, как можно догадаться из названия =), посвящена порождающим паттернам.
Структурные паттерны проектирования в примерах на Swift для самых маленьких

Всем привет! Зачастую чтобы в чем то разобраться полезнее один раз увидеть конкретный пример чем несколько раз прочитать заумное описание.
Решил написать ряд небольших статей для начинающих, в которых дать краткое описание основных паттернов проектирования и привести лаконичные примеры их использования.
Данная статья, как можно догадаться из названия =), посвящена структурным паттернам.
Приступим.
Адаптер / Adapter
Адаптер — это структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе.
Представим у нас есть класс, единственная цель которого "говорить" Hello world!
Notepad.exe: Легкий редактор Swift-кода

В настоящее время Xcode Playgrounds, похоже, отклонился от своего первоначального назначения, а настройка VSCode может быть слишком сложной для начинающих. В этих условиях как можно легко настроить среду, подходящую для изучения и тестирования Swift? Возможно, Notepad.exe, представленный в этой статье, станет удовлетворительным решением.
Самое большое препятствие в изучении программирования
Когда я в 2019 году вернулся к программированию, самой большой проблемой было понять, как быстро запустить свой код. Столкнувшись с огромной сложностью Xcode, я почувствовал себя подавленным. Хотя Swift Playgrounds уже существовал на iPad в то время, я все же предпочитал учиться и тестировать прямо на своем компьютере.
Вспоминая свои первые опыты программирования на Apple II, я помню, как он сразу же переходил в режим редактирования кода при запуске. Хотя по сегодняшним меркам аппаратное обеспечение было примитивным, простота и плавность обучения были беспрецедентными.
Даже сейчас, будучи знакомым с различными инструментами программирования, я по-прежнему нуждаюсь в тихой и легкой среде, чтобы быстро погрузиться в изучение новых функций языка или творческие эксперименты. Недавно ситуация значительно улучшилась, когда я обнаружил Notepad.exe, разработанный Марцином Кшижановски.
Запуск «exe» на macOS
Название этого приложения Notepad.exe — явная шутка разработчика. Однако с другой стороны, оно точно отражает философию приложения: сделать программирование таким же простым и понятным, как использование Блокнота Windows.
Swift в Apple: перенос службы мониторинга паролей с Java

Swift активно используется в производстве для создания облачных сервисов в Apple и приносит невероятные результаты. В прошлом году на Swift был переписан сервис Password Monitoring, который обрабатывает несколько миллиардов запросов в день с устройств по всему миру. По сравнению с предыдущим сервисом на Java, обновлённый бэкэнд обеспечивает 40-процентный рост производительности, а также улучшенную масштабируемость, безопасность и доступность.
Приложение «Пароли», представленное осенью 2024 года, помогает пользователям управлять своими паролями, ключами и проверочными кодами. Оно позволяет хранить, автоматически заполнять и генерировать надёжные пароли, которые можно использовать на всех устройствах, а также делиться паролями с доверенными лицами. Одна из функций безопасности приложения - «Мониторинг паролей», которая предупреждает пользователей, если один из сохраненных ими паролей попадает в утечку данных. Эта функция имеет серверный компонент, поддерживаемый Apple.
Регулярно Password Monitoring сверяет пароли пользователя с постоянно обновляемым и контролируемым списком паролей, которые, как известно, были раскрыты в результате утечки. Важно отметить, что эта задача решается продуманно, с сохранением конфиденциальности, и Apple никогда не раскрывает пароли пользователей. Подробное обсуждение того, как это делается с помощью протокола пересечения криптографических частных множеств, находится в разделе «Мониторинг паролей» руководства по безопасности платформы Apple.
Переход с Java на Swift был обусловлен необходимостью масштабирования сервиса Password Monitoring с высокой производительностью. Модуль многоуровневого шифрования, используемый в Password Monitoring, требует значительного объёма вычислений для каждого запроса, при этом общий сервис должен быстро реагировать даже при высокой нагрузке.
Tuist. Как перенести проект
Если решили разбить свой проект на модули, это можно сделать при помощи Tuist. В этой статье покажу базовые настройки для старта вашего проекта.
Для чего я написал собственный аудиопроигрыватель

Как и у многих, у меня накопилось слишком много подписок: некоторые у Apple (iCloud, Apple Music), другие потерялись на разных платформах (например, на Netflix — я и забыл, что всё ещё плачу за него). На самом деле, я регулярно пользовался Apple Music (а ранее Spotify), но потоковая музыка оказалась больше удобством, чем необходимостью. При наличии тщательно подобранной локальной библиотеки я ничего особо не потерял.
Поначалу я думал, что просто продолжу использовать iCloud Music Library для синхронизации музыки между устройствами, но после отмены подписки на Apple Music синхронизация перестала работать. Оказалось, за эту функцию нужно платить. Строго говоря, её можно вернуть при помощи iTunes Match (24,99 $ в год). Match просто хранит AAC-копии с битрейтом 256 кбит/с; ваши исходные файлы остаются на месте, если вы не захотите удалить их. На современных Mac всё это делается в приложении Music. При отсутствии подписок синхронизация с облаком отключается и остаётся лишь синхронизация по кабелю/Wi-Fi.
Раздосадованный ограниченностью возможностей, я решил взяться за разработку. Если уж я купил вычислительное устройство (в данном случае iPhone), то что мешает мне просто создать необходимое мне при помощи кода? В этой статье я расскажу о своих разочарованиях по пути к реализации базовой функциональности музыкального плеера: загрузки аудиофайлов, их упорядочивания и воспроизведения. Но больше всего мне хотелось напомнить себе, что это просто компьютер, и у меня должна быть возможность заставить его выполнять нужные мне задачи.
Rafinad: сахар для UI-тестирования iOS-приложений

Мы в hh очень любим UI-тесты, ими покрывается практически вся функциональность наших приложений, и даже backend-разработчики прогоняют тесты мобильных платформ перед развертыванием своих фич. Однако наши механизмы UI-тестирования разрабатывались более 8 лет назад и с тех пор почти не изменились.
Кто-то скажет, что старые решения прошли проверку временем и что «работает — не трогай»... Возможно, и так. Но сейчас мы внедряем новую дизайн-систему, а новые компоненты требуют адаптации всех тестов — не лучшее ли время для перемен?
Поэтому мы пересмотрели наши подходы к UI-тестированию и теперь готовы поделиться наработками с сообществом в виде open-source проекта — Rafinad. В этой статье расскажем, что он умеет и как им пользоваться.
Подключение белорусской криптографии в Swift

Часто при разработке на языке Swift мы сталкиваемся с отсутствием необходимых инструментов, которые давно стали привычными в других языках. В частности, чувствуется нехватка криптографических инструментов с хорошей историей и репутацией. В таком случае нам приходит на помощь возможность подключать и использовать в Swift библиотеки, написанные на языках Си и С++.
XCUITest для начинающих: как сделать тестирование iOS красивым с Allure

Привет!
Меня зовут Антон, и я занимаюсь автоматизацией тестирования Web и Mobile приложений.
Если вы начинаете автоматизировать UI-тесты под iOS, то наверняка заметили, что информации по фреймворку XCUITest в сети не так много, особенно на русском языке.
Эта статья — краткое руководство по основам автоматизации на XCUITest. Здесь я постарался собрать ключевые моменты, которые помогут вам сделать первые шаги в UI тестировании iOS-приложений.
Внешние платежи в App Store: что изменилось с выходом iOS 17.4

В рамках исполнения законодательства ЕС о цифровых рынках (DMA) Apple с марта 2024 года обязана предоставлять «альтернативные каналы» дистрибуции и оплаты для «читательских» приложений и ряда других категорий. Для этого разработчики в Европе заключают отдельное дополнение к договору (Alternative Terms Addendum) и получают специальные права на использование внешних платежей
Ближайшие события
GPT, DeepSeek и Qwen: идеальные unit-тесты в эхо-камере

Появление unit- и UI-тестов неизбежно в крупных мобильных приложениях: появляется новая функциональность, старая расширяется, изменяются существующие элементы. Для стабильной работы команда вынуждена внедрять автотесты, что требует инфраструктуры, инструментов, а также времени и внимания для их реализации.
Размышляя над этим, пришла идея использовать LLM для автоматической генерации тестов. Это могло бы снизить нагрузку на разработчиков и минимизировать влияние автотестов на time to market новых фич. Меня зовут Марк, я iOS-разработчик Lamoda Tech. Ранее я рассказывал о своем опыте поиска решений с использованием GPT и Copilot в UI-тестах.
Изоляция с помощью глобальных акторов в Swift Concurrency: варианты на примере @MainActor

Привет, Хабр! Меня зовут Алексей Григорьев, я техлид iOS-разработки продукта Membrana в МТС. Это тариф с приложением для управления приватностью в сети и окружением.
Swift Concurrency принесла множество инструментов для управления многопоточностью. Среди них глобальные акторы, которые помогают обеспечивать безопасность данных и контролировать потоки выполнения.
Один из самых распространенных и полезных глобальных акторов — это @MainActor, который гарантирует выполнение операций в главном потоке приложения. В этом посте я на его примере покажу все варианты, как можно реализовать изоляцию и что в итоге выведет код: на каком потоке будут выполнены update, internal update и set в property.
Укрощаем асинхронный код с помощью async/await

Привет! Меня зовут Андрей Максимкин, я iOS-разработчик в hh. Мы в команде активно используем async/await подход при написании нового кода, а также активно применяем при переписывании старого. В процессе работы сталкивались с некоторыми интересными и не самыми очевидными моментами — их и рассмотрим в статье.
Работа с различными потоками — очень важная часть разработки мобильных приложений под iOS. Грамотное распределение нагрузки положительно влияет на скорость работы приложения, а значит, и на пользовательский опыт. До Swift 5.5 для работы с многопоточностью в основном использовали фреймворки GCD и NSOperation. Начиная с версии Swift 5.5 стал доступен функционал async/await. В статье мы кратко расскажем о базовых принципах данного подхода и сделаем акцент на проблемах и особенностях, которые необходимо знать при написании кода. Информация будет полезна тем, кто уже знаком с функционалом async/await, а некоторые примеры могут быть интересны и более продвинутым разработчикам.
Отлаживаем приложение вместе со SwiftUI Instruments

Apple по доброте душевной поделилась с разработчиками инструментом отладки SwiftUI. Удобный он или не очень — разберёмся вместе с Surf iOS Team.
Swift: шаблонный бэкенд с использованием Vapor

В мобильную разработку приходят различными путями. Некоторые рождаются с девайсом в руках, других ведет извилистая дорога вдоль серверов, майнфреймов, дестопных приложений. Но каждый кто в нее попадает ощущает свою незащищенность с тыла, если нет надежного партнера в лице бэкенд ‑разработчика. И, буквально, каждый мобильщик ожидает, что необходимый API будет готов хотя бы за один спринт, до того, как в нем возникнет необходимость. Конечно же, мир IT разработки редко допускает такую роскошь — за нее требуется бороться с ПМ и бизнес‑аналитиком. К тому же не редки ситуации, когда то, что должно быть сделано «на вчера», будет готово «на послезавтра». Те кто имеют достаточно опыта как в наземном, так и подземном мире — берут инициативу с свои руки, и сами предлагают клиент‑серверный интерфейс.
Для мобильного мира C# и Java — падения из рая в ад — это довольно естественный процесс, поскольку присущие им платформы изначально целились на поддержку темных сил бэкенда. То ли дело Swift — познавшему небо — не легко дается жизнь на льдине, вместе с ластоногими.
Получить лучшее из обоих миров, и не потерять темп позволяют некоторые экзотические решения, наподобие Perfect и Vapor. Однако, они в большей степени отвечают на вопрос «Как?» вместо того, чтоб предложить какое‑нибудь удовлетворительное минимальное решение. С другой стороны, как правило, исходные требования мобильной команды довольно умерены и стереотипны от одного приложения к другому. Обычно требуется поддержка и управления такими сущностями как аккаунт пользователя, профиль, продукт и изображения.
SwiftUI: Реализация разделенного координатора совместно с DeepLink (Universal link)

Навигация при помощи текстовой строки внутри приложения может и не быть самым удобным способом для разработчика, но когда строковое значение приходит из вне приложения — это едва ли не самый надежный вариант переместить пользователя внутрь вложенной системы иерархии экранов. Вместе с тем, довольно часты ситуации, когда вместе с путем навигации передаются еще и параметры, с которыми экран должен быть отображен. Если схема координатора задана через перечисление, то возникает неоднозначность — либо координатор не может быть развернут исходя из названий элементов перечисления, либо, конкретные координаторы будут унаследованы от типа String, но параметры не могут быть переданы как ассоциированные значения.
Использование концепции MVVM порождает еще один философский вопрос: может ли один и тот же экран с одной и той же viewmodel иметь различные типы входных параметров. Конечно, для идеологии чистого кода — ответ однозначен. Но ведь если нет нужды в создании нового вида или новой view model, то подавляющее количество разработчиков предпочтет переиспользовать один и тот же экран и для отображения десериализированного объекта, и для сериализированных параметров, передаваемых строкой в пути навигации.
Воспроизведение и редактирование видео с AVFoundation. Часть 2. Ассеты продвинутые

Вторая статья из цикла об идеях воспроизведения и редаĸтирования медиа с
использованием AVFoundation. В ней разберём тему сложных ассетов.
Вклад авторов
WildGreyPlus 232.0miden16 170.0yeswolf 153.0illusionofchaos 140.0MaxRokatansky 135.0kuradnaths 131.0nsurl-dev 121.0yarmolchuk 119.8niklnd 112.0freetonik 112.0