Как стать автором
Обновить
62.63

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

Популярная мобильная ОС

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

Архитектурные паттерны в iOS: страх и ненависть в диаграммах. MV(X)

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

Каждый iOS разработчик в своей жизни уходил с собеседования в расстроенных чувствах и мыслью “это что еще за новая аббревиатура?” Архитектурами пугают и джунов, и миддлов, и синьоров (и наверное даже синьорит). Важно не просто знать что стоит за названием, но ещё и в каком случае какую использовать. Литературы по этому вопросу преступно мало, редкие обсуждения в интернете ограничиваются собственным опытом и какими-то поделками на гитхабе.

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

Первая часть посвящена MV(X) паттернам: самым известным и распространенным практикам в индустрии.

Читать далее
Всего голосов 39: ↑39 и ↓0+39
Комментарии12

Compositional Layout: стоит ли игра свеч?

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


Всем привет! Меня зовут Алексей Скоробогатов, я ведущий iOS-разработчик в Delivery Club. Сегодня я хотел бы рассказать про вёрстку в нашем приложении на примере использования Compositional Layout. В конце прошлого года волевым решением iOS-команды и апрувом руководства мы перешли на iOS 13+. Этот манёвр позволил нам начать использовать новые нативные инструменты, в том числе и новый декларативный подход к описанию layout-коллекций. Расскажу о переводе нашего экрана поиска и его компонентов на Compositional Layout, а также о проблемах, с которыми я столкнулся.

Для полноценного представления о Compositional Layout предлагаю прочитать вот эту статью и ознакомиться с примерами Apple.
Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии2

7 Кругов SPM или как сделать модульное приложение на Swift Package Manager

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

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

Возможно, у многих возникнет вопрос:  “Зачем разбивать с помощью SPM?”. Ведь можно просто создавать подпроекты. Можно, но в использовании SPM для разбиения есть несколько преимуществ:

Читать далее
Всего голосов 14: ↑13 и ↓1+12
Комментарии1

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

Время на прочтение3 мин
Количество просмотров3K
В нашем новом дайджесте PWA как альтернатива App Store и легкий DataBinding, Jetpack Compose Canvas и шейдеры в Android View, юзабилити-тестирование и страх и ненависть локализации, тепловые карты и самый быстрый миллиард Genshin Impact.

Читать дальше →
Всего голосов 4: ↑4 и ↓0+4
Комментарии0

Истории

iOS. UI. Приëмы. Часть 1

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

Привет читателям Хабра!

Я iOS-разработчик, и так случилось, что мне приходилось много делать в ui: кастомные view, тени, layout-ы, кнопки и вот это всё. В этой и паре следующих статей хочу поделиться некоторыми приёмами, которые помогали мне добиваться весьма красивых и интересных эффектов в плане рисования компонентов ui. Надеюсь, кому-нибудь это будет полезно. Ну или просто интересно.

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

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

Время на прочтение4 мин
Количество просмотров3K
В нашей новой подборке троя в библиотеке, автотестирование и полезные протоколы, уязвимости Android и снижение комиссии Google Play, борьба с читерами, человеческое общение, цена покупок, Nest с радаром и многое другое. Подключайтесь!

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

Работа со сложными JSON-объектами в Swift (Codable)

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

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

Почему вообще возникли проблемы с такой простой задачей?

Чтобы понять, откуда проблемы, нужно сначала рассказать об инструментарии, которым я пользовался. Для декодирования JSON-объектов я использовал относительно новый синтезированный (synthesized) протокол библиотеки Foundation - Сodable.

Codable - это встроенный протокол, позволяющий заниматься кодированием в объект текстового формата и декодированием из текстового формата. Codable - это протокол-сумма двух других протоколов: Decodable и Encodable.

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

Еще такие протоколы позволяют работать с композицией, а не наследованием!

Вот теперь поговорим о проблемах:

Читать далее
Всего голосов 8: ↑6 и ↓2+4
Комментарии6

Погружение в автотестирование на iOS. Часть 4. Ожидания в XCUITest

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

Привет, Хабр!

В UI тестах не все события происходят синхронно друг за другом. Сетевые запросы, анимации, чтение файлов – все это требует времени. Встает вопрос – как заставить тест ждать наступления определенного события?

В этой статье мы разберем:

- Что такое ожидание и для чего они используются в тестах;

- Рассмотрим какие бывают ожидания;

- Разберем из чего состоят ожидания;

- Рассмотрим пример эффективных ожиданий в тестах.

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

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

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

Меня зовут Дмитрий Макаренко, я Mobile QA Engineer в Badoo и Bumble: занимаюсь тестированием новой функциональности в наших приложениях вручную и покрытием её автотестами. 

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

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

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

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

Есть ли жизнь без WebGL 2.0?

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

WebGL 2.0 вышел в далёком 2017ом году, принёс графический стек OpenGL ES 3.0 (2012го года), и, казалось бы, все современные браузеры давно должны были его поддерживать. Однако, среди лидеров затесались отстающие, и пользователи Safari до сих пор (начало 2021го) вынуждены ограничиваться возможностями WebGL 1.0, опубликованным в 2011ом году на основе OpenGL ES 2.0.

PBR освещение достаточно требовательно к вычислительным ресурсам графического процессора и обычно реализуется средствами WebGL 2.0. Возможно ли адаптировать PBR рендерер графического движка для работы в условиях ограничений WebGL 1.0 на iPad? В этой статье описывается опыт такой адаптации для графического движка открытого C++ фреймворка Open CASCADE Technology.

Читать далее
Всего голосов 20: ↑19 и ↓1+18
Комментарии17

Память в Swift от 0 до 1

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

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

Читать далее
Всего голосов 25: ↑24 и ↓1+23
Комментарии16

Исправляем Госуслуги малой кровью — добровольный редизайн мобильного приложения

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

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

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

Читать далее
Всего голосов 10: ↑5 и ↓50
Комментарии19

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

Время на прочтение3 мин
Количество просмотров3K
В этом дайджесте ускорение отладчика и увеличение размера приложений, увеличение скорости и автоматизация тестирования, координация релизов, объективно субъективный улучшатель, модальные окна и многое другое!

Читать дальше →
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

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

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн

Робопрактика в режиме онлайн для мобильных разработчиков в red_mad_robot

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

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

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

DI в iOS: Complete guide

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

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

Читать далее
Всего голосов 29: ↑29 и ↓0+29
Комментарии7

Запуск игры на Unity из приложения SwiftUI для iOS

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

С версии 2019.3 Unity поддерживает загрузку и выгрузку игры на Unity из нативного приложения для iOS или Android с помощью функции «Unity as a Library». Это удобный способ встроить игру в нативное мобильное приложение и отделить логику игры от логики iOS-приложения.

Unity дает инструменты, которые позволяют управлять загрузкой, активацией и выгрузкой библиотеки среды выполнения в нативном приложении. В остальном процесс сборки мобильного приложения остается в основном неизменным. Unity позволяет создавать проекты для Xcode (iOS) и Gradle (Android).

Однако сам процесс встраивания может быть довольно сложным, особенно если нужно интегрировать игру на Unity в приложение SwiftUI. Но не волнуйтесь: именно с этим вопросом мы сейчас и разберемся!

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

Как мы в 2 раза увеличили скорость формирования ленты в UGC-приложении

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

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

Ежедневно наши пользователи загружают десятки тысяч единиц контента. На таком объёме данных приходится применять ухищрения, чтобы сохранить приемлемое время ответа. Под катом расскажу, что именно мы делали, а в конце статьи поделюсь кодом на GitHub для ознакомления.

Читать далее
Всего голосов 47: ↑46 и ↓1+45
Комментарии6

Автоматизация тестирования мобильных приложений. Часть 1: проверки, модули и базовые действия

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

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

Читать далее
Всего голосов 28: ↑26 и ↓2+24
Комментарии1

Как выйти на китайский рынок с mini-app для WeChat, чтобы не прогореть

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

В Китае легко затеряться. Наши первые пиццерии там работали по привычной модели: точка «на доставку» с залом на второй линии не в людном месте. Но модель работала не так как мы хотели, потому что рядом с пиццерией десятки лавок со всеми видами еды, вроде боула с мидиями или хрустальной лапши, где клиент получит еду быстрее. Можно было бы сделать своё приложение с доставкой, но на китайских экранах сотни приложений, где можно заказать еду, и наше бы просто затерялось. Поэтому мы «пошли» в WeChat и его экосистему мини-приложений.

Почти нет примеров когда некитайская продуктовая компания вышла в WeChat с собственной мини-программой, да ещё с in-house разработкой вне Китая. Поэтому мы  познавали все нюансы разработки самостоятельно, от устройства китайской цифровой экосистемы и мини-приложений в WeChat, до вывода продукта на китайский рынок. Об этом и расскажем в этом большом «разборе» китайских приложений.

Читать далее
Всего голосов 25: ↑25 и ↓0+25
Комментарии15

Как мы ускоряли работу отладчика Swift

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

Привет! Меня зовут Александр Скворцов, я работаю в команде Яндекс.Браузера для iOS. Это очень большой проект, который насчитывает около тысячи clang-модулей и примерно 600 Swift-модулей. Наверное, из-за таких масштабов мы чаще других наталкиваемся на проблемы инструментов разработки, например, находим критические ошибки в компиляторе, неработающую подсветку и автодополнение. Это бывает неприятно, но жить можно. 

Самая серьёзная проблема возникла с отладкой. В худшем случае с момента запуска до остановки в отладчике на точке входа в приложение проходило больше 20 минут. И это на свежем MacBook Pro 16! С таким «быстродействием» инструментов разработки невозможно эффективно развивать проект, поэтому мы решили разобраться в причинах и поискать возможные решения.

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

Читать далее
Всего голосов 50: ↑49 и ↓1+48
Комментарии13