Как стать автором
Обновить
-4.6
Рейтинг

Swift *

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

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

[Async/await] Проблемы Swift 5.4

Разработка под iOS *Разработка мобильных приложений *Swift *
Recovery mode

Всем привет! Меня зовут Никита, я работаю в компании Технократия и занимаюсь iOS-разработкой. С сегодняшнего дня мы начинаем регулярный выпуск статей, в которых я буду рассказывать о современном подходе к написанию асинхронного кода в Swift. 

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

Читать далее
Всего голосов 5: ↑0 и ↓5 -5
Просмотры 1.3K
Комментарии 0

Новости

Золотые правила “weak self”

Блог компании OTUS Разработка под iOS *Swift *
Перевод

Захват self в замыкании — обычная вещь в Swift, которая скрывает множество нюансов. Нужно ли делать его weak, чтобы избежать цикла ссылок? И является ли проблемой сделать его weak постоянно?

Читать далее
Всего голосов 5: ↑4 и ↓1 +3
Просмотры 2.3K
Комментарии 2

Pull to refresh в SwiftUI

Разработка под iOS *Swift *
Из песочницы

На момент публикации - 10 мая 2022, SwiftUI имеет всего лишь refreshable(action:) модификатор для List компонента, чтобы пользователь имел возможность обновить контент на экране (так называемый pull to refresh). Очевидно, что если разработчику потребуется отобразить список в виде отличном, от того, который предоставляет List (например, в несколько колон), то, к сожалению, придется смириться с тем, что контент на экране обновить с помощью pull to refresh будет нельзя. Или же все-таки можно?...

Читать далее
Всего голосов 2: ↑2 и ↓0 +2
Просмотры 735
Комментарии 2

Темный путь

Блог компании OTUS Программирование *Swift *Kotlin *
Перевод

За последние несколько месяцев я попробовал два новых языка. Swift и Kotlin. Они имеют ряд общих черт. Действительно, сходство настолько разительное, что я задаюсь вопросом, не является ли это новой тенденцией в нашей лингвистической текучке. Если да, то это темный путь.

Читать далее
Всего голосов 8: ↑4 и ↓4 0
Просмотры 2K
Комментарии 3

Регулировка contentOffset с помощью UICollectionViewLayout

Разработка под iOS *Swift *
Из песочницы

Один из распространенных UI элементов в iOS является UICollectionView.

Часто при построении таких коллекций возникает необходимость обновления данных, например добавления новых ячеек в коллекцию.

Рассмотрим простой пример - список новостей, вертикальный UICollectionView. При пролистывании списка вниз, необходимо подгружать старые новости. В данном случае все просто - нужно обновить данные и выполнить один из методов:

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 509
Комментарии 2

Асинхронный код синхронно: как устроено юнит-тестирование в СберМаркете

Блог компании СберМаркет Разработка под iOS *TDD *Swift *

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

Я выступал с этим докладом на iOS Meetup | СберМаркет Tech, здесь его сжатая версия.

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 2K
Комментарии 2

Правильно подключаем тяжелые зависимости к Xcode проекту через Swift Package Manager

Разработка под iOS *Xcode *Swift *

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

Читать далее
Всего голосов 6: ↑6 и ↓0 +6
Просмотры 1.8K
Комментарии 4

Особенности разработки для WatchOS приложений для здоровья

Разработка под iOS *Xcode *Swift *Носимая электроника

Достаточно плотно разработкой программного обеспечения для часов я занимаюсь с 2017 года. За этот период сменилось 4 версии WatchOS (5, 6, 7, 8). Появилось больше функционала и исправлено множество баг с внедрением каждой новой версии Swift. Complications стали более самостоятельной частью приложения.

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

Читать далее
Всего голосов 1: ↑1 и ↓0 +1
Просмотры 1.8K
Комментарии 6

Заполнители типа в Swift: что это такое и когда их следует использовать

Блог компании OTUS Разработка под iOS *Swift *
Перевод

Заполнители типа (type placeholders) — это новая языковая фича, представленная в Swift 5.6 (Xcode 13.3).

Сама концепция очень проста - вместо указания конкретного типа мы можем поставить _ (заполнитель типа), который предписывает компилятору самому определить заполняемый тип.

В следующем примере я использую заполнитель типа для name, который впоследствии разрешается в String.

Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Просмотры 1.7K
Комментарии 4

Как работает массив в Swift

Swift *

В прошлой статье мы поговорили про оценку относительной производительности структуры данных или алгоритма(Big O), теперь я предлагаю взглянуть на самый популярный тип данных - Массив и оценить производительность основных методов взаимодействия с ним, а также ответить на самые популярные вопросы на собеседовании про эту часть Swift.

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

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 1.2K
Комментарии 11

Round Table: архитектурный UI паттерн для iOS платформы

Разработка под iOS *Swift *

На связи Станислав Потемкин, iOS Tech Lead в компании Jivo.

Большой популярностью вполне заслуженно пользуются некоторые известные архитектурные паттерны, например универсальные MVC, MVP, MVVM, VIPER, и слегка платформенный Clean Swift (VIP).

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

На хабре уже была статья многолетней давности с неплохим разбором особенностей большинства этих архитектур, а именно: MVC, MVP, MVVM, VIPER. Плюс также есть статья отдельно про Clean Swift (VIP).

Мы в Jivo сначала пользовались подобием MVP, но затем со временем (и по мере роста) нам начали открываться некоторые не очень комфортные особенности этой архитектуры для наших условий. Соответственно, была произведена попытка выбрать наиболее комфортную из других популярных, но везде встречались те или иные не очень приятные нюансы.

В итоге мы решили изобрести свой велосипед исследовать область архитектурного вопроса с нового ракурса, и в последствии пришли к паттерну, который получил наименование Round Table.

Читать далее
Рейтинг 0
Просмотры 1.7K
Комментарии 4

Почему программистам нужно знать структуры данных и как я сэкономил компании $22 000 в год

Разработка под iOS *Алгоритмы *Swift *Аналитика мобильных приложений *

Как я оптимизировал аналитику используя структуры данных. Что в итоге сэкономило $22 000

Читать далее
Всего голосов 116: ↑5 и ↓111 -106
Просмотры 18K
Комментарии 59

Как использовать Kotlin Multiplatform ViewModel в SwiftUI и Jetpack Compose

Разработка мобильных приложений *Swift *Kotlin *
Tutorial

Мы в IceRock Development уже много лет пользуемся подходом MVVM, а последние 4 года наши ViewModel расположены в общем коде, за счет использования нашей библиотеки moko-mvvm. В последний год мы активно переходим на использование Jetpack Compose и SwiftUI для построения UI в наших проектах. И это потребовало улучшения MOKO MVVM, чтобы разработчикам на обеих платформах было удобно работать с таким подходом.

30 апреля 2022 вышла новая версия MOKO MVVM - 0.13.0. В этой версии появилась полноценная поддержка Jetpack Compose и SwiftUI. Разберем на примере как можно использовать ViewModel из общего кода с данными фреймворками.

Пример будет простой - приложение с экраном авторизации. Два поля ввода - логин и пароль, кнопка Войти и сообщение о успешном входе после секунды ожидания (во время ожидания крутим прогресс бар).

Читать далее
Всего голосов 6: ↑6 и ↓0 +6
Просмотры 2.1K
Комментарии 0

Как работает Backend-Driven UI на мобильном клиенте

Блог компании Ozon Tech Программирование *Разработка под iOS *Разработка мобильных приложений *Swift *

Привет всем, кто хочет изменять интерфейс мобильного приложения до выхода нового релиза, всем, кто хочет без лишних доработок на клиенте проводить А/B-тестирование, и всем, кто хочет забыть о срочных «новых пятничных промоакциях», которые нужны уже в понедельник. В этой статье мы поговорим об основах Backend-Driven UI: рассмотрим абстрактно, как всё работает на бэкенде и на клиенте. 

Читать далее
Всего голосов 17: ↑17 и ↓0 +17
Просмотры 5K
Комментарии 1

Простой способ обнаружить retain cycle в UIViewController

Разработка под iOS *Objective C *Отладка *Swift *
Tutorial

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

Apple предлагает отличный инструмент для отладки утечек памяти. Часто для этого используется метод print в deinit.

Читать далее
Всего голосов 1: ↑1 и ↓0 +1
Просмотры 1.1K
Комментарии 3

Structured concurrency в Swift

Блог компании KTS Разработка под iOS *Разработка мобильных приложений *Swift *
Перевод

Примечание переводчиков: В Swift 5.5 появилась новая концепция языка async/await. Мы решили опубликовать перевод статьи, чтобы разобраться с structured concurrency.

За время подготовки перевода оригинал успели переписать, и в статье ниже мы совместили обе версии: сначала идет развернутая версия, а в конце — краткие чек-листы с избранной информацией.

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

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

Читать далее
Всего голосов 13: ↑13 и ↓0 +13
Просмотры 2.2K
Комментарии 4

Как мы в QIWI внедряли Kotlin Multiplatform Mobile Часть 2: Смотрим шире

Блог компании QIWI Разработка мобильных приложений *Разработка под Android *Swift *Kotlin *

Это продолжение нашего рассказа о внедрении Kotlin Multiplatform Mobile в QIWI. Если хотите узнать больше про технику, посмотреть на код, переходите в первую часть. В этой статье будет больше контекста про то, как мы принимали решение, готовили прототип и внедряли технологию в команды. Наш опыт может помочь вам “продать” KMM в вашей компании и вашим стейкхолдерам. Я расскажу о плюсах и сложностях, с которыми мы столкнулись на нашем пути.

Немного истории

В QIWI мы часто пробуем что-то новое в наших процессах и в разработке. За последние 5 лет мы создали несколько приложений с нуля, используя разнообразные подходы. Например, мы впервые попробовали кросс-платформу, когда делали приложение QIWI Инвестор. Мы использовали инструмент J2ObjC, чтобы конвертировать общий модуль с кодом на Java на Objective-c для iOS. Это решение было смелым, но не самым надежным. По ходу использования было много проблем, самые большие — с конвертацией кода сторонних библиотек. В итоге проект закрылся, как и этот эксперимент. Кросс-платформенный подход оказался рабочим, но мы отложили его в сторону пока не появился более надежный инструмент.

В 2018 году мы перешли от платформенных команд к кросс-функциональным. Это стало самым большим изменением в процессе разработки c внедрения скрама. “Совместное владение кодом” стало нашей новой ценностью. Границы между платформами начали размываться, мы стали внимательнее изучать код на других платформах, вместе принимали решения и делились лучшими практиками.

Читать далее
Всего голосов 14: ↑14 и ↓0 +14
Просмотры 1.5K
Комментарии 0

Movika приглашает на стажировку начинающих разработчиков для работы с интерактивными фильмами

Разработка под Android *Swift *ReactJS *Kotlin *
Recovery mode

Казанская IT-компания объявила набор стажёров, которым предстоит заниматься сборкой интерактивных фильмов. Работать нужно будет удалённо, так что рассматриваются кандидаты со всей России и других стран. Основное требование - знание одного из языков: Kotlin, Android SDK / Swift, iOS SDK, UIKit / JavaScript, React. Рассматривают студентов и выпускников IT-направлений, которые находятся в поисках интересного опыта.

Почитать подробности и подать заявку до 21 апреля можно здесь: hr.movika.com

Movika разрабатывает IT-решения для интерактивного видео: инструменты для его создания, просмотра, монетизации и экспорта. Цель компании - сделать так, чтобы формат интерактивного контента становился повсеместным и популярным.

Читать далее
Всего голосов 4: ↑0 и ↓4 -4
Просмотры 454
Комментарии 1

Как отследить состояние сетевого соединения в Swift? Привет, нативная реализация, пока, Reachability

Разработка под iOS *Swift *
Перевод
Tutorial

Рассмотрим нативное решение для мониторинга сетевого подключения на iOS с помощью Swift 5 и использования Network Link Conditioner.

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 1.7K
Комментарии 2

Производительность встроенных функций высшего порядка в сравнении с циклом for-in в Swift

Разработка под iOS *Разработка мобильных приложений *Алгоритмы *Swift *
Перевод

Самые популярные функции высшего порядка - это map, filter и reduce. Мы все используем их, так как думаем, что синтаксис намного лучше, и писать их даже быстрее, чем старый способ for-in loop. Но так ли это на самом деле? Задумывались ли вы когда-нибудь о производительности этих встроенных функций? Они встроенные, поэтому, естественно, они должны быть лучше, не правда ли? Давайте погрузимся в эти функции вместе, чтобы выяснить, так ли это на самом деле.

Спойлер — не всё так однозначно!
Всего голосов 7: ↑5 и ↓2 +3
Просмотры 2.1K
Комментарии 5

Вклад авторов

Работа

iOS разработчик
84 вакансии
Swift разработчик
115 вакансий