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

Swift *

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

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

Камера как сканер штрих-кодов: проблемы, инструменты и эксперименты

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

Всем привет, меня зовут Никита, я старший разработчик в компании Озон и работаю над iOS-приложением «Пункт Озон».

«Пункт Озон» — это мобильное приложение для работников и менеджеров пункта выдачи заказов (далее просто ПВЗ). В приложении множество различных разделов для повседневной работы. Самые популярные разделы — это «Приёмка», «Выдача» и «Инвентаризация», что в мобильной, что в web-версии. Именно они помогают выполнить главные задачи работников ПВЗ — принять заказы на баланс и позже выдать их клиентам.

Для скорости работы и защиты от ошибок работники ПВЗ производят эти действия через сканирование штрих-кодов, расположенных на самих заказах или на тарах, в которых они приезжают. Если брать web-версию, то там «все просто»: покупается нормальный/качественный отдельный сканер, подключается к ПК — и проблем, считай, нет. А вот с мобильным приложением дела обстоят немного не так. У смартфона есть только камера, и она явно не проектировалась под задачу «сканируем только штрих-коды». Но с другой стороны, камера делает фотографию, а раз у нас есть фотография, то можно там найти штрих-код. К счастью, Apple и Google предоставляют нам инструментарий для этого.

А раз я iOS-разработчик, то и рассказывать я вам буду о нашем iOS-приложении. И сегодня у нас в меню: 

с какими проблемами столкнулись пользователи при использовании мобильного сканера, и почему мы стали искать возможность его улучшения;

сравнение инструментов, которые предлагает Apple;

технический обзор одного из них;

история его внедрения в наше приложение и конечные результаты.

Читать далее

Стеки и Очереди в Swift

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

В этой статье мы исследуем две фундаментальные структуры данных, которые являются неотъемлемой частью программирования на Swift: стеки и очереди. Они представляют собой коллекции элементов с особыми правилами для добавления и удаления элементов. Стеки работают по принципу "последним пришел, первым ушел" (LIFO), что делает их идеальными для задач, связанных с обратной навигацией или отменой действий. Очереди, следуя принципу "первым пришел, первым ушел" (FIFO), идеально подходят для задач, требующих обработки элементов в порядке их поступления, например, в управлении задачами или потоками данных.

Читать далее

Ранний взгляд на будущее тестирования с swift-testing

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

Пару месяцев назад Стюарт Монтгомери, программист из команды XCTest в Apple, поделился новой библиотекой тестирования Swift с открытым исходным кодом на основе макросов.

Библиотека называется Swift-testing, и, как указано в ее документации, она предназначена для проверки концепции нового API тестирования для Swift, основанного на макросах и интегрированного в Swift так же, как и XCTest.

По этой причине предполагается, что библиотека будет недолговечной и не предназначенной для использования на продакшене или миграции из XCTest. Тем не менее, это отличный способ получить представление о том, как может выглядеть будущее тестирования в Swift, что я и сделал.

Читать далее

Уменьшаем boilerplate с помощью Swift Macros

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

Сегодня с вами Никита Коробейников, iOS Team Lead в Surf. Никита объяснит, что такое Swift Macros, сравнит кодогенерацию от Apple со сторонними решениями: Liquid, Generamba, Sourcery и расскажет, как создать собственный Swift Macros. 

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

Кто ты, SwiftData

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

Привет! Я Андрей Зонов, стафф-инженер в Тинькофф и большой фанат CoreData. Моя любовь в CoreData началась на старте карьеры, когда я попал в первый Enterprise-проект. Это были времена iOS 4.3., CoreData не имела parent-контекстов и методов perform. Как-то так сложилось, что за свою карьеру я много фиксил классические проблемы в CoreData, и с появлением SwiftData мне стало интересно, остались ли проблемы в SwiftData и что нам дает этот фреймворк. 

В статье разберем основные концепции и киллер-фичи по SwiftData. Пройдемся по основным отличиям и тому, как можно мигрировать с CoreData на актуальную SwiftData. Копнем внутрь SwiftData, узнаем, как она устроена под капотом, и подведем итоги стоит ли вообще переезжать на новый фреймворк Apple. 

Читать далее

Step by step: интегрируем интерактивные 2D/3D-объекты в iOS-приложение

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

Привет, Хабр! Меня зовут Степан, я iOS-разработчик SimbirSoft.

В очередной раз открыв одно из ежедневных приложений, я обнаружил любопытную фичу: интерактивный 3D-элемент в виде звездочки. Казалось бы, ничего необычного, но это сделало взаимодействие с приложением немного приятнее. Так появилась идея для пет-проекта — нативно создать MVP интерактивного 3D-объекта.

Данная статья — step by step от интерактивных 2D-объектов к 3D. В конце статьи вы найдете ссылку на репозиторий.

Читать далее

Приложения для Vision Pro выглядят скучно

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

Apple вложила массу усилий в разработку правил, советов и руководств по проектированию элементов интерфейса, чтобы не столкнуться с подводными камнями, связанными с созданием 3D-интерфейсов. Это помогло избежать обилия подвижных элементов и визуального беспорядка, которые могут запутать пользователя или даже повлиять на его самочувствие.

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

Читать далее

Заводим Яндекс Карты в Compose Multiplatform

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

Привет! Это мой первый пост на Хабре, буду рад услышать профессиональное и не очень мнение по поводу этой статьи.

Реализуем Яндекс Карты в KMP проекте с использованием Compose Multiplatform. Нестандартное решение с интерфейсом на Swift и передачей кода через DI.

Читать далее

Пишем интерактивный виджет

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

Виджеты в новом обличии появились в 2020 году вместе с выходом iOS 14 (HomeScreen widgets). За это время Apple выпустила больше семейств виджетов, а также добавила их на LockScreen в iPhone и iPad. Но интерактивность появилась впервые в iOS 17.

В этой статье разберёмся из чего состоит интерактивный виджет: формирование Timeline, как работает интерактивность через библиотеку AppIntents, а затем напишем свой первый интерактивный виджет.

Читать далее

Адаптируем иконку вашего приложения для visionOS

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

Иконки — визитные карточки для любого приложения в App Store. Наличие кроссплатформенного приложения подразумевает понимание контекста, в котором будет отображаться иконка.

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

Читать далее

Функции высшего порядка. Кастомная реализация. (Custom implementation of higher-order functions.)

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

Всем привет!

На интервью иногда просят реализовать одну из функций высшего порядка. Решил потренироваться в их самостоятельной реализации. Ниже представлен результат моих тренировок =)

Иногда бывает легче реализовать функцию конкретного типа, а затем сделать её универсальной (Generic). Такого подхода я и буду придерживаться в примерах, приведенных ниже.

Читать далее

Разборы важных новинок для iOS-разработки с WWDC 2023

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

Привет, Хабр! На связи Александр, iOS‑эксперт компании KTS.

В это время мы обычно строим планы на будущее, и я уверен, что лучшее начало нового года — обучение новому и развитие навыков. Надеюсь, что в этом вам помогут видео докладов с осенних митапов, которые мы провели с командой iOS-разработки и на которых разобрали темы с последней конференции Apple: WWDC 2023.

Собрал в одной статье все вебинары и их краткое содержание.

Читать далее

ScrollView с прилипающим выделенным элементом на SwiftUI

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

Привет! Меня зовут Юля, я iOS-разработчик и накануне Нового года дизайнеры подарили мне макеты к новой фиче, посмотрев на которые я облегченно вздохнула: просто ScrollView, в котором есть просто один выделенный элемент, который при скролле вверх просто приклеивается к верхней границе этого самого ScrollView. Делов-то…

А делов оказалось на полтора дня. Потому что примерно на десятой ссылке всемогущий Гугл возмущенно развел руками: “На SwiftUI все порядочные люди делают ScrollView с приклеивающимся хедером. А чтобы какой ни попадя элемент прилеплять - это вы безобразие какое-то придумали…”.

Вообщем, стало понятно, что списать эту домашку не получится. Поэтому пришлось делать самой. И теперь хочу ей поделиться - чтобы ваши домашки готовились быстрее.

Читать далее

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

Как и зачем мы внедрили Snapshot Testing

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

Привет, Хабр!
Меня зовут Никита. Я iOS Teamlead в Московском кредитном банке.

В этой статье расскажу про то, как мы пришли к snapshot-тестам и теперь их используем на своем проекте. 
Статья будет полезна как для iOS-разработчиков, так и для iOS-автоматизаторов. 

Здесь мы разберем:

- Что такое, как работает и для чего нужно snapshot-тестирование

- Какие цели мы преследовали

- Как внедрить snapshot-тестирование к себе в проект

Читать далее

Абстрактность в Swift

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

Абстракция, Инкапсуляция, Наследованное, Полиморфизм.

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

В процессе разработки 11 экранов я обнаружил слишком много повторяющегося кода, не говоря о том, что со временем вьюмодели стали расширяться, где-то были реализованы блоки кода с Combine паблишерами, а в каждой вьюмодели реализовывался один и тот же метод observe для StateFlow из KMP. В этот момент и вступает в игру первый принцип ООП - Абстракция, где повторяющийся код объединяется в один общий модуль, откуда наследники могут брать реализацию.

В данной статье мы рассмотрим способы создания абстракции в iOS проекте на языке Swift, а также сравним методы с реализацией на языке Kotlin и узнаем, с какими подводными камнями можно столкнуться.

Узнать!

Разбор задачи D отборочного этапа Yandex Cup 2023 — iOS

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

Это статья из серии с разбором задач отборочного этапа Yandex Cup 2023 по направлению iOS-разработка с призовым фондом почти в 9 000 000 рублей. Повторюсь, правильных ответов у меня не было, и решал я уже после окончания отборочного этапа. Если заметите какие-либо неточности в формулировках, в размышлениях, в ответах, буду рад обсудить это в комментариях.

Начнем!)

Читать далее

How to add drag and drop to your app

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

Данная статья является переводом оригинальной статьи Пола Хансена How to add drag and drop to your app.

Перетаскивание - это чрезвычайно полезная функция, поэтому не удивляйтесь, если ваши пользователи отправят вам электронное письмо с просьбой добавить ее. Несмотря на то, что и UITableView, и UICollectionView поддерживают перетаскивание, для настройки все равно требуется изрядный объем работы.

Чтобы опробовать это сейчас, давайте создадим новое приложение в Xcode. Нам нужно поместить во ViewController две TableView, оба заполненные примерами данных.

Для этого нам нужно:

Читать далее

SwiftUI: Разбираемся с identity на примере переходов

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

Концепция идентификации (identity) в SwiftUI не так проста, как могло бы показаться на первый взгляд. Один из лучших способов разобраться в ней — понять роль идентичности в переходах (transitions).

В SwiftUI идентификация является ключом к пониманию работы системы рендеринга. Идентификатор View говорит SwiftUI о том, какие из значений этого View соответствуют одному и тому же отрисованному представлению на протяжении его жизненного цикла. Поэтому идентификация сильно влияет на корректность, производительность и, как мы увидим, на переходы.

Читать далее

Swift Utilities — Работа со SwiftData в Background

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

За годы работы разработчиком iOS, я собрал множество инструментов и полезных штук, которые облегчают процесс разработки. В этой статье, я хочу поделиться одним из таких инструментов. Это будет не большая статья. Я покажу, как пользоваться этой утилитой, продемонстрирую её в действии. Надеюсь, что статья окажется полезной для вас.

SwiftData отлично функционирует внутри View: достаточно добавить декоратор @Query к свойству, и все будет работать 'из коробки'. Однако, когда возникает желание вынести работу со SwiftData в отдельный модуль, начинают появляться сложности, особенно касаемо выполнения операций в фоновом режиме.

Читать далее

Идеальный REST-клиент для iOS

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

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

Читать далее