Все потоки
Поиск
Написать публикацию
Обновить
22.43

Swift *

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

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

Миграция на SPM: что мы выиграли и что потеряли

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

Спойлер: сократили размер приложений на 44% и ускорили их запуск в среднем на 51%.

Привет, Хабр! Меня зовут Владислав Сединкин, я занимаюсь iOS 10 лет и последние 2 года работаю в мобильной Core-команде Туту. В этом году мы решили сменить менеджер зависимостей и мигрировать с CocoaPods на SPM. Результаты оправдали ожидания, хотя и сложности на этом пути, конечно, были. В статье расскажу про проблемы, с которыми мы столкнулись в процессе, и предупрежу, на что стоит обратить внимание, чтобы не повторить наши ошибки.

Читать далее

Новости

Разбираемся с existential container в Swift

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

Existential container — это структура данных в рантайме, которая хранит значение типа скрытого за протоколом. Он появляется там, где мы используем название протокола в качестве типа переменной или аргумента функции. С помощью existential container реализован динамический вызов методов протокола, а также управление жизненным циклом внутренного значения типа.

Читать далее

Новые подходы в Swift для тестирования: разбор технологии Swift Testing

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

Тестирование на Swift долгие годы держалось на трех китах: XCTest, сторонние библиотеки и собственная смекалка. Но на WWDC 24 Apple представила новый, современный фреймворк — Swift Testing, который предлагает концептуально новый подход к тестированию.

Меня зовут Кирилл Гусев. Я мобильный разработчик в ОК. В этой статье я расскажу о том, какие возможности предоставляет Swift Testing и как мы планируем их применять в ОК.

Читать далее

Строки в Swift

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

Привет, Хабр! Сегодня поговорим о теме, которая вроде бы знакома каждому разработчику, но при этом часто остаётся в тени. Речь пойдёт о строках в Swift.

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

Читать далее

Как Swift Runtime влияет на производительность iOS-приложений

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

Привет, Хабр! Я Кристиан Бенуа, iOS-разработчиĸ в Т-Банĸе. В современном мире производительность приложения — ĸритичесĸи важный фаĸтор, определяющий его успех. Пользователи ожидают мгновенного отĸлиĸа и плавной работы, даже небольшие задержĸи могут негативно сĸазаться на восприятии приложения.  

Для больших iOS-приложений, написанных на Swift, понимание работы Swift Runtime и его влияния на производительность — важный навыĸ разработчиĸов. Swift Runtime при исполнении ĸода отвечает за фундаментальные вещи языĸа Swift: управление памятью и систему типов в рантайме.

В статье сосредоточимся на механизмах приведения типов и создания generic-типов внутри Swift Runtime и рассмотрим один ĸонĸретный метод, ĸоторый является узĸим местом в производительности приложения. Разберем примеры ĸода, демонстрирующие, ĸогда и почему этот метод вызывается, ĸаĸово его влияние на отзывчивость приложения и ĸаĸие стратегии использовать для смягчения негативного воздействия. 

Читать далее

Generic'и и protocol'ы в Swift

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

Привет, Хабр! В прошлых статьях мы говорили про ARC и управление памятью в Swift, но обошли стороной ещё одну сильную сторону языка. Речь идёт о generic'ах и протоколах - именно они делают Swift таким чистым и мощным. В этой статье мы разберёмся, как они работают и почему без них невозможно представить современный Swift.

Читать далее

Swift на Android: создаём библиотеку

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

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

Поддержка Android в Swift 6 и swift-android-sdk от finagolfin это настоящий прорыв, который наконец-то позволил мне выпустить JNIKit, который я разрабатывал для проекта SwifDroid ещё со времён Swift 5. Теперь мы можем просто import Android, вместо того чтобы возиться с ручным импортом NDK header'ов, а сборка конечных бинарников теперь обеспечивается не отдельным тулчейном, а минималистичной SDK, которую в скором времени сделают официальной на Swift.org.

Читать далее

Swift Concurrency и CoreBluetooth: как построить современный BLE-сервис

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

На случай проблем с сетью в Ситидрайве есть оффлайн-сценарий — управление дверьми машины через Bluetooth. Недавно мы с командой обновили этот механизм и значительно улучшили интеграцию различных модулей телеметрии.

Я взял на себя часть по iOS и попробовал применить новый Swift Concurrency поверх старого CoreBluetooth. В этой статье расскажу, какие подводные камни вылезли при совмещении structured concurrency и callback-ориентированного API, как их обойти и на что стоит обратить внимание, если вы тоже решите «прикрутить» современные async/await к старому API.

Читать далее

ARC в Swift

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

Привет, Хабр! Это вторая статья из цикла моих заметок. В прошлый раз мы затронули тему ARC и а также такие понятия, как weak и unowned ссылки. Сегодня разберёмся, что такое ARC на самом деле, посмотрим, как он работает на уровне SIL, и заглянем немного в историю управления памятью в iOS.

Читать далее

Жизненный цикл UIViewController в 2025 году: что изменилось и что устарело

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

В 2022 году я написал статью «Жизненный цикл UIViewController», где подробно разобрал порядок вызова методов и основные сценарии работы с ними.

С тех пор прошло больше трёх лет, и в iOS появилось несколько изменений, которые делают старую статью уже не до конца актуальной.

Читать далее

Память в Swift

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

Привет, Хабр! Меня зовут Егор, и это моя первая статья на этой платформе. Я занимаюсь iOS-разработкой, и за время работы я прочитал множество статей и документаций. Для того чтобы не теряться в этом потоке информации, я стал делать для себя короткие шпаргалки — они помогали закрепить изученное и готовиться к собеседованиям. В этой статье я решил собрать часть таких заметок в один материал, посвящённый работе с памятью в Swift. Надеюсь, он поможет кому-то освежить знания или узнать что-то новое.

Читать далее

Flutter + нативные iOS виджеты: любовь с первого Method Channel

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

Как создать нативные iOS виджеты для Flutter приложения: Widget Extension, Method Channel для обмена данными, Timeline Provider для обновлений и SwiftUI верстка.

Пошаговый гайд с примерами кода на русском языке. Рассматриваем настройку App Groups, работу с UserDefaults и стратегии обновления виджетов.

Без лишних библиотек, только нативные возможности iOS и стандартные механизмы Flutter.

Читать далее

Спайковые нейросети на Swift, часть II: Синапсы

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

Всем привет! Это продолжение серии статей про моделирование спайковых нейросетей на Swift. В первой части мы обсудили концепцию SNN в общих чертах, выбрали модель Ижикевича для нейрона и реализовали её. Теперь рассмотрим другу важную часть таких сетей — искусственные синапсы. Как и в первой части, сначала будет формальное описание динамики, а потом код.

Читать далее

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

Как я сделал универсальный Skeleton‑View с shimmer‑эффектом в SwiftUI

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

Привет! Я — iOS‑разработчик, и недавно в своём приложении столкнулся с задачей: нужно было красиво показывать placeholder‑загрузку интерфейса. Думал использовать стандартный .redacted — но он неудобен: нет анимации, мало кастомизации. Либо подгружать тяжелую библиотеку вроде SwiftUI‑Shimmer. Решил: сделаю свой легковесный и гибкий подход — и расскажу вам, как это получилось.

Читать далее

Move-only типы и ключевое слово move в Swift

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

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

Сегодня рассмотрим интересную вещь из из стека Swift 6 — move-only типы, ключевое слово move и всё, что с ними связано.

Читать далее

Игра в SPM

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

Привет, хабражители!

На Хабре уже немало статей об опыте перехода на Swift Package Manager — успешных и не очень. В моем случае переезд прошел удачно, но на каждом шагу возникали проблемы, которые было сложно нагуглить или вообще найти решения. Поэтому я решил собрать все накопленные знания и поделиться ими в этой статье, надеясь, что другие разработчики сэкономят кучу времени.

Читать далее

Спайковые нейросети на Swift, часть I: Принципы и модель

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

Всем привет! В этой статье поговорим о спайковых нейронных сетях (SNN). Сначала обсудим концепцию в целом. Потом формально опишем искусственный нейрон SNN, применяя модель Ижикевича. А в конце напишем простую реализацию этой модели на Swift. Статья содержит вводную часть любительской работы, которую я проделывал некоторое время назад для разминки и развлечения. Прочие части буду публиковать постепенно.

Читать далее

Покажу вам фокус: настраиваем property wrapper @FocusState — короткая инструкция

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

Всем привет! Меня зовут Дмитрий Демми, компания AGIMA. Мы часто разрабатываем приложения для банков или еком-продуктов. И в большинстве из них нужно заполнять поля: вписывать имя, контакты, адрес, номера документов, банковских карт или реквизиты. Иногда таких граф бывает много, и чтобы пользователям было удобно переключаться между ними, в iOS-разработке используется property wrapper @FocusState. Если вы пока не сталкивались с таким, то ниже всё объясняю и показываю.

Читать далее

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

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

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

Читать далее

async let vs Task group

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

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

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