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

Swift *

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

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

Отбираем хлеб у нативных разработчиков: миграция с Kotlin/Swift на RN

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

Меня зовут Александр Чернов, я фронтенд-разработчик в KODE и я использую React Native в разработке мобильных приложений уже более семи лет. Сейчас расскажу вам, как мы у нативных разработчиков хлеб отбирали.

Читать, как «перевозили» приложение

Как собрать и внедрить высоконагруженный модуль. Опыт Звука

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

Привет, Хабр! На связи Ринат Кутуев, iOS-разработчик в платформенной команде HiFi-стриминга Звук. В iOS-разработке уже 5 лет. Успел заложить архитектуру для 3 высоконагруженных приложений, которые стабильно расширяют свой функционал.

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

Читать далее

Cursor AI в iOS-разработке. Приложение «Фото с Flickr.com»

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

Мне хотелось посмотреть, как работает ИИ Редактор кода Cursor AI на примере создания iOS приложения с выборкой данных с ресурса, который не требует API key и платной подписки. И этим ресурсом оказались публичные фотографии с Flickr.com.

Необходимо создать UI iOS приложения со строкой поиска вверху и сеткой Grid под ней для отображения миниатюр фотографий.

Пользователь должен иметь возможность вводить текст в строку поиска и видеть набор фотографий, теги которых tags соответствуют строке поиска. Строка поиска может содержать одно слово (например, «rose») или разделенные пробелами слова(например, «forest bird» (лес птица)).

Читать далее

Как освоить Swift Concurrency и остаться в здравом уме: подробный гид

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

Асинхронность — не враг, если знаешь, как с ней работать 😉.

Асинхронный код — это двигатель современных приложений. 

Он даёт возможность загружать данные с сервера, обновлять интерфейс и выполнять сложные вычисления в фоне, оставляя пользователя в полной уверенности, что всё работает плавно. Звучит здорово, правда? 

Вот только раньше это всё превращало жизнь iOS разработчика в ад: громоздкие замыкания, GCD с его бесконечными очередями и "пирамида смерти" из вложенных вызовов. 😵

Но теперь у нас есть Swift Concurrency. Это как освежающий глоток воды после долгого забега. Код становится читаемым, понятным и безопасным. Если вы хотите понять, как этим пользоваться, читайте дальше — объясню всё максимально просто и доступно.

Читать далее

Асинхронность в iOS: как ускорить корпоративные приложения и не сломать мозг разработчика

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

Когда все процессы в приложении работают как часы, это не магия, а правильно настроенная асинхронность.

Если ваше приложение не отвечает мгновенно на действия пользователя, то в голове у него сразу зажигается красный флаг: «Это медленно. Это неудобно. Может, удалить?». В корпоративных приложениях, где важна каждая секунда, это недопустимо.

В этой статье мы поговорим о том, как организовать асинхронную работу в iOS‑приложениях. Разберём подходы от старой доброй GCD до современной магии Swift Concurrency и покажем, как они помогают ускорить приложение без лишнего хаоса в коде.

Читать далее

Дебаг на максимум: секретные настройки Xcode, которые должен знать каждый разработчик

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

Проблемы с графикой на iOS? Скрытые дебаг-фишки Xcode спасут вас!

Я прошёл через множество проектов — от стартапов до крупных компаний, и каждый раз графические глюки заставляли меня искать эффективные решения. Теперь я знаю, как пофиксить отрисовку. Вам понадобятся знания основ Swift, CPU, GPU и немного юмора.

Я расскажу, как исправить поехавшие пиксели с мощными дебаг-инструментами, и приведу примеры багов отображения на iPhone 16 Pro. Мой гайд поможет вам оптимизировать графику и сохранить пользователей, которых бесят тормозящие приложения.

Читать далее

Apple убивает Swift

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

Swift был прекрасным языком, но он далеко отошел от своего первоначального видения.

Очень далеко.

В этой статье мы рассмотрим различные виды управления современными языками программирования. Я объясню, в чем именно заключается уникальность диктаторской структуры Swift, и продемонстрирую вам, насколько плохи стали дела.

Читать далее

История одного модального окна или переходим с UIKit на SwiftUI. Часть 3. ProgressView vs SkeletonView

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

Продолжаю эпопею с модальными экранами на SwiftUI. Но сегодня больше кода. Была задача, сделать ProgressView и SkeletonView. Вдруг кому-то пригодится, показываю.

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

Читать далее

8 инструментов для разработчиков, которые стоит попробовать

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

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

Читать далее

Малоизвестные фичи SwiftUI

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

Я уже 2 месяца прохожу обучение в онлайн‑школе и у нас на этой неделе был открытый урок, нужно было подготовить доклад на тему «Малоизвестные фичи или особенности языка Swift»

Так вот — я решила погуглить этот вопрос, подготовилась, написала код. Но когда дело дошло до самого выступления, оказалось, что говорить ртом — это не так‑то и просто. Да и в целом выступать, даже в Zoom.

Тем не менее, поделюсь с вами маленькими фишечками, которые я нашла. Уровень легкий, в отличие от меня там ребята подготовили нормальные доклады про SPM и пр. Я же решила начать с простых вещей, которые, тем не менее, мне были неизвестны. Надеюсь кому‑то тоже окажется полезным.

Читать далее

Swift TaskGroup на примерах

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

В данной части из серии swift concurrency мы продолжим исследовать structured concurrency. В этот раз остановимся на сущности под названием TaskGroup. Узнаем как с ней работать и чем она отличается от Task и async let. На примере сравним аналогичные реализации с и без TaskGroup и разберем некоторые (не для всех очевидные) моменты при работе с данной сущностью.

Читать далее

Азартная разработка iOS приложения игры 2048 с ChatGPT

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

Я хочу поделиться с вами опытом создания "с нуля" iOS приложения известной игры 2048 с элементами ИИ (искусственного интеллекта) в SwiftUI с помощью ChatGPT .

Мне хотелось написать игру 2048 именно на SwiftUI, пользуясь его прекрасной и мощной анимацией и приличным быстродействием , a также  предоставить в распоряжения пользователя не только “ручной” способ игры, когда Вы руководите тем, каким должен быть следующий ход: вверх, вниз, влево и вправо, но и ряд алгоритмов с оптимальной стратегией (метода Монте-Карлостратегий поиска по деревьям (Minimax, Expectimax) ), позволяющих АВТОМАТИЧЕСКИ выполнять ходы - вверх, вниз, влево и вправо - и добиться  плитки с числом 2048 и более (эти алгоритмы и называют алгоритмами “искусственного интеллекта” (ИИ). 

2048 - это очень известная игра, и мне не нужно было объяснять ChatGPT ее правила, он сам всё про неё знает. Кроме того, оказалось, что ChatGPT прекрасно осведомлен об ИИ алгоритмах для игры 2048, так что мне вообще не пришлось описывать ChatGPT контекст решаемой задачи. И он предлагал мне множество таких неординарных решений, которые мне пришлось бы долго выискивать в научных журналах.

Полный протокол взаимодействия с ChatGPT при создании iOS приложения игры 2048 представлен в 3-х постах на моем сайте: 

iOS приложения игры 2048 в SwiftUI  с ChatGPT 4-o. Часть 1. Введение. Логика игры 2048.

iOS приложения игры 2048 в SwiftUI  с ChatGPT 4-o. Часть 2. Анимация и UI.

iOS приложение игры 2048 в SwiftUI с ChatGPT. Часть 3. ИИ (AI) для игры 2048.

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

Читать далее

iOS 18 для разработчиков: Ключевые изменения в UIKit

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

Привет! Меня зовут Лена, я работаю iOS-разработчиком в KTS. Недавно вышла новая версия iOS 18, и я решила подробно изучить все нововведения, чтобы понять, какие новые возможности она предлагает разработчикам.

В этой статье расскажу о самых интересных обновлениях в UIKit — новый TabBar, анимации, совместимость UIKit/SwiftUI и многое другое, а также поделюсь своими впечатлениями от их практического применения.

Читать далее

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

Изменение модели данных CoreData для iOs приложения с iCloud синхронизацией

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

Казалось бы простая задача добавления атрибута(ов) в модель данных CoreData может обернуться проблемами если в приложении используется синхронизация между устройствами через iCloud. В этом случае необходимо провести так называемую lightweight миграцию прежней базы данных в базу данных с новой моделью иначе синхронизация перестанет работать, что чревато в дальнейшем потерей данных при их восстановлении из iCloud. Здесь предлагается пошаговая инструкция как это сделать легко и безопасно на примере моего приложения для учета финансов, которым ежедневно пользуется несколько тысяч пользователей, поэтому к сохранности данных подход должен быть серьезный

Итак, поехали!

Читать далее

Области тьмы: разбираем неочевидные моменты при использовании памяти в Swift

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

Привет, Хабр! Это Александр, iOS Developer из Clevertec. Об управлении памятью в Swift написано уже много и хорошо. Но я предлагаю копнуть с другой стороны и попытаться собрать недостающие детали пазла.

Читать далее

Objective-C не кусается: как перестать бояться Legacy и стать настоящим iOS-ниндзя

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

Всем привет! Меня зовут Сергей, и я работаю разработчиком мобильных приложений. Также мы с ребятами развиваем международное комьюнити Coffee&Code, а сам я частый гость на встречах в Санкт-Петербурге.

Хочу поговорить о теме, которая волнует многих разработчиков: использование старых технологий в iOS-разработке, таких как Objective-C. Тут возникает очень насущный вопрос, являются ли он легаси?

Читать далее

Внедряем снепшот-тестирование, или пять стадий принятия неизбежного

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

Привет, Хабр! Меня зовут Дмитрий Сурков, я iOS-разработчик приложения для среднего и малого бизнеса ПСБ. У нас есть практика проводить технические дни, на которых мы вносим улучшения в наше приложение. Одним из таких улучшений оказалось внедрение снепшот-тестов для компонентов дизайн-системы. В статье расскажу, как мы прошли все стадии принятия и обрели покой и умиротворение.

Читать далее

Макросы в Swift: Практическое руководство по использованию

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

Недавно я столкнулся с задачей, которая требовала написания большого объема шаблонного кода. Вспомнив, что в Swift 5.9 появились макросы, созданные специально для генерации шаблонного кода, я решил попробовать их в действии. Ранее я работал с макросами в Objective-C и C++, поэтому ожидал увидеть нечто похожее. Однако, поискав информацию, я понял, что макросы в Swift — это совсем другое, не похожее на то, что я встречал в других языках.

В отличие от макросов в C++ или Objective-C, в Swift нужно писать гораздо больше кода, соблюдая при этом строгие правила оформления. Иначе можно столкнуться с загадочными ошибками компиляции, решение которых не всегда очевидно. Дополнительные трудности возникают из-за того, что многие статьи и видео просто повторяют официальную документацию, не объясняя понятным языком, как именно использовать макросы. Часто вместо этого начинаются сложные рассуждения о структуре AST (Abstract Syntax Tree) или приводятся примеры кода, которые демонстрируют результат работы макроса, но не показывают, как его создать и отладить.

Именно из-за таких трудностей я решил написать эту статью. Её цель — максимально просто, без углубления в теорию, объяснить, как можно уже сегодня начать использовать макросы в Swift. Если вам захочется изучить эту тему подробнее, вы всегда сможете обратиться к официальной документации или материалам с WWDC, где этот вопрос разобран более детально. А если вам понравится моя подача, пишите в комментариях — я постараюсь объяснить сложные моменты в отдельных статьях.

Читать далее

Осторожно, Combine! Откуда берутся утечки памяти, потеря эвентов, нестабильность операторов и что с этим всем делать

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

Привет, меня зовут Никита, я iOS‑разработчик в Яндекс Диске. В прошлый раз я рассказывал, как мы начали свой путь в SwiftUI. Теперь настало время рассказать ещё об одном фреймворке, который мы затащили в свой проект параллельно со SwiftUI, — Combine.

В этой статье разберу проблемы, с которыми столкнулась наша команда, расскажу, как их исправили, а также к каким выводам после этого пришли. А ещё поделюсь библиотекой с фиксами и экстеншенами к Combine.

Читать далее

История одного модального окна или переходим с UIKit на SwiftUI. Часть 2.1. Неожиданный баг Combine

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

В этой статье изначально планировала написать продолжение первой части статьи. А именно показать обещанные ProgressView и SkeletonView. Но тут на моём пути возникло неожиданное препятствие.

Обо всём по порядку.

Мы же понимаем, что просто так оставить View со всем функционалом внутри нельзя. Обычно я накидываю быстрый функционал и UI в одном классе, а затем уже разделяю. Использую MVVM архитектуру. И модальное окно не стало исключением. Проверив, что всё работает во View, я создала ViewModel, сделала её ObservableObject

Читать далее