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

Swift *

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

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

iOS-разработчики игнорируют важную системную фичу, и это ломает их приложения

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

Как минимум одна из фич iOS реализована действительно хорошо — это системное резервное копирование, и всё, что связано с автоматическим переносом данных при переезде с одного iPhone на другой.

Однако в случае с некоторыми iOS-приложениями старания Apple внезапно разбиваются о небрежность их разработчиков. Именно с этим я недавно столкнулся, выполнив перенос данных со своего старого iPhone на новый, и много где результаты оказались довольно печальными. Полностью упоролось, например, приложение Тинькофф Банка.

И тут возникает закономерный вопрос — почему так получается, что с этим делать?

Читать полностью

Как заставить крутиться таймер –  инструкция для iOS-разработчиков

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

Привет, Хабр! На связи Андрей –  iOS разработчик из ecom.tech. Моя команда помогает различным маркетплейсам делать крутые вещи для их приложений. 

В этой статье я поделюсь своим опытом работы с обратным отсчётом времени (на примере Мегамаркета) и расскажу, как поставить таймер самостоятельно. 

Кажется, что таймер – простая для реализации вещь. Но если добавить сюда сжатые сроки, код (рефакторинг которого часто откладывается по разным причинам), пласты бизнес-логики и UI-элементы – получим нетривиальную задачу. 

Читать далее

Business Process Notation как подход к организации кода в проекте по разработке мобильного iOS приложения

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

Постановка проблемы

На сегодняшний день наиболее известны такие архитектурные паттерны как MVC, MVVM, MVP, Viper, Clean Code.

Все они в той или иной мере работают с тремя основными сущностями - Модель, Вью, Контроллер, добавляя время от времени некоторые дополнительные, например, Presenter.

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

Но эти характеристики не отражают сущности приложения в целом. Это как если бы мы разделили воду на водород и кислород и пытались бы из их особенностей понять сущность воды.

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

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

Именно в такие моменты приходится переосмысливать общую архитектуру проекта и отвечать на вопросы “Зачем нужен тот или иной код, какую задачу он решает?”, “Где расположен код, реализующий ту или иную функциональность и как он работает?”. И т.д.

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

В программе такой мельчайшей и одновременно целостной единицей является задача, которую решает тот или иной блок кода.

Отсюда, возникла идея использовать в качестве отправного пункта для организации кода именно те задачи, которые этот код решает.

При этом, задача понимается как бизнес-процесс.

Читать далее

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

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

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

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

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

Apple убивает Swift

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

Я хочу поделиться с вами опытом создания "с нуля" 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.5K

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее