Как стать автором
Обновить
2.52

Swift *

Открытый объектно-ориентированный язык

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

Apple Foundation Models Framework: обзор и первые шаги

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров476

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

Читать далее

Новости

Поведенческие паттерны проектирования в примерах на Swift для самых маленьких

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров348

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

Читать далее

Публикация приложения в AppStore

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

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

Давайте разберемся, как опубликовать наше первое приложение в AppStore. 

Читать далее

Порождающие паттерны проектирования в примерах на Swift для самых маленьких

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

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

Читать далее

Структурные паттерны проектирования в примерах на Swift для самых маленьких

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

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

Приступим.

Адаптер / Adapter

Адаптер — это структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе.

Представим у нас есть класс, единственная цель которого "говорить" Hello world!

Читать далее

Notepad.exe: Легкий редактор Swift-кода

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров914

В настоящее время Xcode Playgrounds, похоже, отклонился от своего первоначального назначения, а настройка VSCode может быть слишком сложной для начинающих. В этих условиях как можно легко настроить среду, подходящую для изучения и тестирования Swift? Возможно, Notepad.exe, представленный в этой статье, станет удовлетворительным решением.

Самое большое препятствие в изучении программирования

Когда я в 2019 году вернулся к программированию, самой большой проблемой было понять, как быстро запустить свой код. Столкнувшись с огромной сложностью Xcode, я почувствовал себя подавленным. Хотя Swift Playgrounds уже существовал на iPad в то время, я все же предпочитал учиться и тестировать прямо на своем компьютере.

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

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

Запуск «exe» на macOS

Название этого приложения Notepad.exe — явная шутка разработчика. Однако с другой стороны, оно точно отражает философию приложения: сделать программирование таким же простым и понятным, как использование Блокнота Windows.

Читать далее

Swift в Apple: перенос службы мониторинга паролей с Java

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров300

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

Приложение «Пароли», представленное осенью 2024 года, помогает пользователям управлять своими паролями, ключами и проверочными кодами. Оно позволяет хранить, автоматически заполнять и генерировать надёжные пароли, которые можно использовать на всех устройствах, а также делиться паролями с доверенными лицами. Одна из функций безопасности приложения - «Мониторинг паролей», которая предупреждает пользователей, если один из сохраненных ими паролей попадает в утечку данных. Эта функция имеет серверный компонент, поддерживаемый Apple.

Регулярно Password Monitoring сверяет пароли пользователя с постоянно обновляемым и контролируемым списком паролей, которые, как известно, были раскрыты в результате утечки. Важно отметить, что эта задача решается продуманно, с сохранением конфиденциальности, и Apple никогда не раскрывает пароли пользователей. Подробное обсуждение того, как это делается с помощью протокола пересечения криптографических частных множеств, находится в разделе «Мониторинг паролей» руководства по безопасности платформы Apple.

Переход с Java на Swift был обусловлен необходимостью масштабирования сервиса Password Monitoring с высокой производительностью. Модуль многоуровневого шифрования, используемый в Password Monitoring, требует значительного объёма вычислений для каждого запроса, при этом общий сервис должен быстро реагировать даже при высокой нагрузке.

Читать далее

Tuist. Как перенести проект

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

Если решили разбить свой проект на модули, это можно сделать при помощи Tuist. В этой статье покажу базовые настройки для старта вашего проекта.

Читать далее

Для чего я написал собственный аудиопроигрыватель

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

Как и у многих, у меня накопилось слишком много подписок: некоторые у 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-приложений

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

Мы в hh очень любим UI-тесты, ими покрывается практически вся функциональность наших приложений, и даже backend-разработчики прогоняют тесты мобильных платформ перед развертыванием своих фич. Однако наши механизмы UI-тестирования разрабатывались более 8 лет назад и с тех пор почти не изменились.

Кто-то скажет, что старые решения прошли проверку временем и что «работает — не трогай»... Возможно, и так. Но сейчас мы внедряем новую дизайн-систему, а новые компоненты требуют адаптации всех тестов — не лучшее ли время для перемен?

Поэтому мы пересмотрели наши подходы к UI-тестированию и теперь готовы поделиться наработками с сообществом в виде open-source проекта — Rafinad. В этой статье расскажем, что он умеет и как им пользоваться.

Читать далее

Подключение белорусской криптографии в Swift

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

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

Читать далее

XCUITest для начинающих: как сделать тестирование iOS красивым с Allure

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

Привет!

Меня зовут Антон, и я занимаюсь автоматизацией тестирования Web и Mobile приложений.

Если вы начинаете автоматизировать UI-тесты под iOS, то наверняка заметили, что информации по фреймворку XCUITest в сети не так много, особенно на русском языке.

Эта статья — краткое руководство по основам автоматизации на XCUITest. Здесь я постарался собрать ключевые моменты, которые помогут вам сделать первые шаги в UI тестировании iOS-приложений.

Читать далее

Внешние платежи в App Store: что изменилось с выходом iOS 17.4

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров983

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

Читать далее

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

GPT, DeepSeek и Qwen: идеальные unit-тесты в эхо-камере

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

Появление unit- и UI-тестов неизбежно в крупных мобильных приложениях: появляется новая функциональность, старая расширяется, изменяются существующие элементы. Для стабильной работы команда вынуждена внедрять автотесты, что требует инфраструктуры, инструментов, а также времени и внимания для их реализации.

Размышляя над этим, пришла идея использовать LLM для автоматической генерации тестов. Это могло бы снизить нагрузку на разработчиков и минимизировать влияние автотестов на time to market новых фич. Меня зовут Марк, я iOS-разработчик Lamoda Tech. Ранее я рассказывал о своем опыте поиска решений с использованием GPT и Copilot в UI-тестах.

Читать далее

Изоляция с помощью глобальных акторов в Swift Concurrency: варианты на примере @MainActor

Время на прочтение7 мин
Количество просмотров819

Привет, Хабр! Меня зовут Алексей Григорьев, я техлид iOS-разработки продукта Membrana в МТС. Это тариф с приложением для управления приватностью в сети и окружением.

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

Один из самых распространенных и полезных глобальных акторов — это @MainActor, который гарантирует выполнение операций в главном потоке приложения. В этом посте я на его примере покажу все варианты, как можно реализовать изоляцию и что в итоге выведет код: на каком потоке будут выполнены update, internal update и set в property.

Читать далее

Укрощаем асинхронный код с помощью async/await

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

Привет! Меня зовут Андрей Максимкин, я iOS-разработчик в hh. Мы в команде активно используем async/await подход при написании нового кода, а также активно применяем при переписывании старого. В процессе работы сталкивались с некоторыми интересными и не самыми очевидными моментами — их и рассмотрим в статье.

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

Поехали!

Отлаживаем приложение вместе со SwiftUI Instruments

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

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

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

Swift: шаблонный бэкенд с использованием Vapor

Уровень сложностиСредний
Время на прочтение20 мин
Количество просмотров624

В мобильную разработку приходят различными путями. Некоторые рождаются с девайсом в руках, других ведет извилистая дорога вдоль серверов, майнфреймов, дестопных приложений. Но каждый кто в нее попадает ощущает свою незащищенность с тыла, если нет надежного партнера в лице бэкенд ‑разработчика. И, буквально, каждый мобильщик ожидает, что необходимый API будет готов хотя бы за один спринт, до того, как в нем возникнет необходимость. Конечно же, мир IT разработки редко допускает такую роскошь — за нее требуется бороться с ПМ и бизнес‑аналитиком. К тому же не редки ситуации, когда то, что должно быть сделано «на вчера», будет готово «на послезавтра». Те кто имеют достаточно опыта как в наземном, так и подземном мире — берут инициативу с свои руки, и сами предлагают клиент‑серверный интерфейс.

Для мобильного мира C# и Java — падения из рая в ад — это довольно естественный процесс, поскольку присущие им платформы изначально целились на поддержку темных сил бэкенда. То ли дело Swift — познавшему небо — не легко дается жизнь на льдине, вместе с ластоногими.

Получить лучшее из обоих миров, и не потерять темп позволяют некоторые экзотические решения, наподобие Perfect и Vapor. Однако, они в большей степени отвечают на вопрос «Как?» вместо того, чтоб предложить какое‑нибудь удовлетворительное минимальное решение. С другой стороны, как правило, исходные требования мобильной команды довольно умерены и стереотипны от одного приложения к другому. Обычно требуется поддержка и управления такими сущностями как аккаунт пользователя, профиль, продукт и изображения.

Читать далее

SwiftUI: Реализация разделенного координатора совместно с DeepLink (Universal link)

Уровень сложностиПростой
Время на прочтение15 мин
Количество просмотров766

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

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

Читать далее

Воспроизведение и редактирование видео с AVFoundation. Часть 2. Ассеты продвинутые

Уровень сложностиСредний
Время на прочтение21 мин
Количество просмотров658

Вторая статья из цикла об идеях воспроизведения и редаĸтирования медиа с
использованием AVFoundation. В ней разберём тему сложных ассетов.

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