Обновить
65.59

iOS *

Мобильная ОС компании Apple

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

Responder Chain, или как правильно передавать действия пользователя между компонентами

Уровень сложностиПростой
Время на прочтение14 мин
Охват и читатели19K

Эту статью я решил написать под впечатлением от выступления Евгения Ртищева (@katleta) на конференции Mobius. Так же как и в его докладе, в этой статье я хочу показать, как можно, используя подзабытые нативные средства iOS, без труда выполнять простые и очень частые задачи.

Я расскажу о том, как предельно легко перенаправлять действия пользователя внутри приложения без ненужных усложнений — с помощью нативного инструмента под названием Responder Chain.

Читать далее

Вертел я ваши UIView

Время на прочтение10 мин
Охват и читатели18K

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

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

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

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

Читать далее

Дайджест интересных материалов для мобильного разработчика #424 (13 — 19 декабря)

Время на прочтение3 мин
Охват и читатели4.8K
В нашем новом дайджесте перевод C++ в Swift и модуляризация доменного слоя, разбор истории с невыполненным звонком в 911 и шаблонизация кода, инструменты для снятия логов, игры-миллиардеры 2021, курс “Введение в робототехнику” и многое другое!

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

Модуляризация доменного слоя в UDF. Часть I

Время на прочтение13 мин
Охват и читатели4K

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

Однако вопрос модуляризации доменной логики заслуживает отдельной статьи. Под катом я рассмотрю, как в UDF можно разбить доменный слой на небольшие независимые части и заставить их работать в рамках одного приложения. Но для начала немного определюсь с терминами. Прошу под кат!

Читать далее

Тащите меня семеро, или D'n'D в iOS

Время на прочтение10 мин
Охват и читатели5.3K

Привет, Хабр! Меня зовут Никитин Алексей, я iOS разработчик в компании 65apps. Хорошо было бы порассуждать о Dragon and Dangerous, но нет. Речь пойдет о перемещении объектов. Перетаскивание как внутри одного приложения, так и между разными — с точки зрения пользователя вещь обыденная. Но под капотом механизма D'n'D в современных приложениях могут скрываться разные варианты решения. О них и поговорим.

Читать далее

Делись и больше не дерись: ограничения и сложности в разработке Share Extension

Время на прочтение16 мин
Охват и читатели6.3K

Привет! На связи iOS-разработчик KODE — Семён Медведев. Наша команда разрабатывает крутые цифровые продукты для государства и бизнеса, в том числе мобильные приложения.

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

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

Читать далее

Опыт использования блиц-приложений для автоматизации подключения к Wi-Fi

Время на прочтение4 мин
Охват и читатели4K
Благодаря iOS 14 у мобильных разработчиков появился удобный инструмент блиц-приложения (App Clips). По своей сути это тизеры мобильных приложений, которые позволяют оценить сервис без необходимости его скачивания на устройство.

Мы решили протестировать App Clips в рамках своей работы, и убедились в том, что они открывают массу новых возможностей. К примеру, в приложении Quickin мы реализовали:

  • сохранение настроек доступа к закрытым локальным сетям при помощи одного касания;
  • регистрацию пользователей в системе Beacon-Connect без установки дополнительных приложений;
  • предоставление карточек визитниц сервисов через блиц-приложения.

История разработки приложения Quickin


В предыдущих публикациях мы рассказывали об основной пользе интеграции нашей разработки Beacon-Connect с чат-ботами и мобильными приложениями. Приложение Quickin это логическое продолжение данной идеи, которое представляет собой браузер разрозненных сервисов.
Читать дальше →

Как переиспользуемый провайдер данных помогает сократить код в iOS-приложении

Время на прочтение10 мин
Охват и читатели2.8K

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

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

Вне зависимости от того, какую архитектуру (MVC, MVVM, VIPER и др.) вы используете, компоненты из этой статьи помогут сократить время разработки, поиска и исправления ошибок и добавления нового функционала.

Читать далее

Дайджест интересных материалов для мобильного разработчика #423 (6 — 12 декабря)

Время на прочтение3 мин
Охват и читатели2.6K
В этой подборке протоколы Swift и дружба с Google Ассистентом, работа с цветами и изображениями, экспоненциальные навыки и годы тестирования, новый Flutter, доходы приложений, эмодзи 2021 и многое другое!

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

AppCode 2021.3: акторы, редактор plist-файлов, улучшенная поддержка документации и многое другое

Время на прочтение2 мин
Охват и читатели3K

Всем привет! 

Вышел AppCode 2021.3, а значит, пора о нем рассказать. 

Читать далее

Дайджест интересных материалов для мобильного разработчика #422 (30 ноября — 5 декабря)

Время на прочтение4 мин
Охват и читатели2.9K
В очередной нашей подборке — лучшие приложения 2021 от App Store и Google Play, управление памятью и дело об исчезнувшем покрытии кода, Unity со всех сторон, геймдизайн, адвент задачи для программистов и многое другое!

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

Swift. Сборка данных из разных запросов

Время на прочтение4 мин
Охват и читатели5.3K

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

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

Прочитать

Измеряем релизный цикл мобильных приложений

Время на прочтение8 мин
Охват и читатели5.9K

А давайте перенесем релиз на завтра? Мне тут один баг осталось пофиксить.

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

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

Давай уже!

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

Не пишем код целый месяц и нам нормально

Время на прочтение10 мин
Охват и читатели9.1K

Праздничные дни для Додо Пиццы — настоящий хайлоад. К ним мы готовимся заранее и заводим специальные правила.

Самое жаркое время — в декабре: много корпоративов, заказы становятся больше, прибыль выше. Во многих городах плохая погода — где-то выпал снег и дороги не расчищены, где-то очень холодно. Всё вместе это создаёт нагрузку и на IT, и на бизнес. От нагрузки может сломаться что угодно: то очередь задач переполнится, то печь выйдет из строя. Чтобы быть готовыми, мы регулярно проводим нагрузочные тестирования, повышаем закупки ингредиентов, распределяем заказы по пиццериям и много чего ещё.

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

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

Читать далее

Как устроен счетчик ссылок в Swift

Время на прочтение14 мин
Охват и читатели28K

Мы в iOS команде Vivid Money стремимся глубже понимать инструменты, которыми пользуемся каждый день. Один из таких – это язык программирования Swift. Он состоит из нескольких частей: компилятора, стандартной библиотеки и рантайма. Компилятор преобразует код понятный для человека в код понятный компьютеру. Стандартная библиотека предоставляет разработчикам готовые структуры данных, оптимизированные для применения в боевых проектах. А вот рантайм – это, поистине, сердце языка. В нем происходит выделение памяти, динамическое приведение типов и подсчет ссылок. И нам стало интересно, как реализован подсчет ссылок в рантайме. И  вот мы вдохновились публикациями легендарного Майка Эша (Mike Ash), собрали компилятор и начали исследовать. Посмотрели на работу алгоритма подсчета ссылок и в этой статье расскажем вам о нём.

Читать далее

BottomSheet в iOS 15: возможности ​​UISheetPresentationController

Время на прочтение6 мин
Охват и читатели13K

В iOS 15 наконец-то появился способ управления высотой модальных контроллеров. Но насколько гибкой и удобной получилась реализация от Apple? Чтобы разобраться, вспомним, как эта задача решалась раньше, рассмотрим возможности и поведение нового UISheetPresentationController, оценим перспективы его применения в реальных проектах.

Читать далее

Swift. Class && Struct (классы и структуры) ч.1

Время на прочтение14 мин
Охват и читатели17K

Обычно, в учебных пособиях, книгах и прочих источниках информации, class'ы объясняют примерно так «class это - описание объекта, а объект это экземпляр класса и бла бла бла», в принципе, это частично отражает суть конструкции, но называть class в рамках языка Swift, описанием объекта, будет не совсем корректно т.к. он же еще и представляет собой тип данных и вообще можно использовать классы как независимые, самодостаточные сущности, которые не требуют инициализации. Поэтому начинать со слов «Возьмем объект животного, пускай это будет кот...» я конечно же не буде. И вообще, давайте не будем о "сложном" т.к. материал рассчитан все же на новичков, а новички могут и не знать, что такое, эти ваши объекты и инициализации. В общем я считаю подобное (я про формулировку) не достаточно информативным, поэтому будем разбирать все на примерах с переходом от простого к более сложному. Попутно к ознакомлению с классами, мы будем так же рассматривать и другие возможности языка, но обо всем по порядку.

Наслаждаться чтивом

Бывших не бывает. Как опыт спортивного программирования влияет на работу с реальным кодом

Время на прочтение8 мин
Охват и читатели9.7K

Большинство соревнований для программистов требуют максимально быстрого решения и реализации алгоритмических задач на любом из языков программирования. Среди мобильных разработчиков популярны хакатоны, но сегодня речь пойдет о контестах. Наиболее известные из них – Codeforces Rounds, VK Cup Engine, ACM ICPC. Мы поговорим о том, как они устроены, какие плюсы и минусы есть у разработчиков с «олимпиадным» бэкграундом и как этот опыт влияет на работу с коммерческими задачами в мобильной разработке.

Читать далее

Управление памятью в Swift

Время на прочтение13 мин
Охват и читатели86K

Об управление памятью в iOS ходят много слухов, поэтому я собрал все самые интересные в интернете и попробовал их структурировать в один большой

Читать далее

Умный дом iOS разработчика

Время на прочтение6 мин
Охват и читатели19K

В свободное время (а иногда и в рабочее) я изучаю микроконтроллеры и собираю умный дом у себя в квартире, а так как по профессии я iOS-разработчик, то на умный дом я смотрю через призму iPhone и HomeKit. После сборки более-менее рабочего умного дома и, столкнувшись с кучей проблем, решил рассказать про свой опыт и устройства в цикле из 2 статей. Первая статья будет небольшим ликбезом в теорию микроконтроллеров и протоколов, а во второй уже поделюсь конкретным применением этих протоколов и фреймворков в моем умном доме.

Читать далее