Как стать автором
Поиск
Написать публикацию
Обновить
6.14

Swift *

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

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

Решение ошибки unsupported option '-G' for target 'arm64-apple-ios' при сборке проекта с Firebase и BoringSSL-GRPC

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

После добавления зависимостей Firebase через CocoaPods в iOS-проект, при сборке я столкнуться с не приятной ошибкой:

Читать далее

Новости

async let vs Task group

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

В Swift для структурированной конкуренции используются async let и группы задач (task group). Хотя обе конструкции позволяют запускать параллельные операции, они по-разному управляют жизненным циклом задач. Сегодня мы разберём эти различия на примерах.

Читать далее

Функциональный стиль: объясняю как другу

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

«Функциональное программирование», «Immutable значения», «Pure функции».
Тоже слышал эти умные слова?

И ты такой: «Что? Можно просто for написать?»

Спокойно. Сейчас все разложим по полочкам. Даже если ты пишешь var a = 1 и гордишься этим — ты свой. Погнали.

Читать далее

Swift concurrency. Executors, Actors и их связь с потоками

Время на прочтение17 мин
Количество просмотров1.7K

В данной части из серии статей мы погрузимся чуть глубже в недра Swift Concurrency. Как определяется поток, на котором будет выполняться Task? Почему в рамках одной Task поток может меняться? Что такое Executor и на какие типы он делится? За что отвечает TaskExecutor, а за что SerialExecutor? Как определить текущий Executor по коду? Как использовать свой самописный Executor? В этой статье ответим на эти (и многие другие) вопросы.

Читать далее

Отревьюируй себя сам! (памятка начинающим)

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

«Работает - не трогай» - самый опасный принцип, который передается между разработчиками быстрее, чем баги через копипасту.
Да, код может запускаться. Да, он даже может делать то, что нужно. Но вопрос в другом - можно ли с ним работать? Понять, поправить, развить, не впадая в экзистенциальный кризис.
Эта памятка не про чистоту ради чистоты. Она про то, чтобы через неделю ты сам себе не писал комменты со словами «кто это вообще придумал». "Отревьюируй" себя пока это не сделал кто-то другой.

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Приступим.

Адаптер / Adapter

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

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

Читать далее

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

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

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

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

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

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

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

Привет!

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

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