Обновить
5.28

Swift *

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

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

Погружение в автотестирование на iOS. Часть 1. Как работать с accessibilityidentifier объектов

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

Всем привет!

Меня зовут Борис. Я AQA iOS-engineer в Vivid Money.

Это вступительная статья, в цикле статей по iOS-автоматизации, в которых хочется рассказать о пользе ui-тестов на проекте, их эффективном использовании и написании.

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

Читать далее

AppCode 2020.3: локализация для Swift, переход к определению до индексации, улучшенные рефакторинги и многое другое

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

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


КПДВ


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

Чаты на вебсокетах в iOS, если у вас WAMP

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


Разработка заняла примерно 9 месяцев, а я занимался реализацией клиент-серверного общения по сокету для iOS. Особенности нашей ситуации:

  1. Поддержка старых версий iOS, где нативных методов для общения по сокетам ещё не было — пришлось искать рабочую библиотеку и фиксить баги.
  2. Протокол WAMP на бэкенде — предстояло научить клиент декодировать any, декодировать протоколы и создать объект, который отвечает за отправку и приём сообщений.

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

Как Uber переписал приложение iOS на Swift

Время на прочтение9 мин
Охват и читатели15K
Итак, друзья, садитесь в кружок и послушайте историю самой большой инженерной катастрофы, в которой я участвовал. Это история о политике, архитектуре и логической ошибке невозвратных затрат (вы уж извините, просто сейчас пью Aberlour Cask Strength Single Malt Scotch).


Шёл 2016 год. Трампа ещё не избрали президентом, поэтому движение #DeleteUber пока не началось. Трэвис Каланик оставался гендиром, мы переживали фазу гиперактивного роста с открытием филиалов в других странах, общественные настроения в целом позитивные, все довольны, Uber на высоте.

Библиотека для работы с iOS-пермишенами, от идеи до релиза (часть 1)

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

• Каĸ унаследовать Swift-ĸласс не целиĸом, а лишь то в нём, что тебе нужно?

• Каĸ позволить юзеру твоей CocoaPods- или Carthage-библиотеĸи ĸомпилировать лишь те её части, что он действительно использует?

• Каĸ раздербанить ресурсы iOS, чтобы достать оттуда ĸонĸретные системные иĸонĸи и лоĸализованные строĸи?

• Каĸ поддержать completion blocks даже там, где это не предусмотрено дефолтным API системных разрешений?

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

Модуляризация iOS-приложения: зачем и как мы разбиваем Badoo на модули

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

В iOS-разработке Badoo мы уже несколько лет занимаемся созданием модулей, и большая часть нового кода разрабатывается вне кодовой базы приложений. Сейчас у нас более 100 модулей для Badoo и Bumble. В этой статье я расскажу о нашем опыте и отвечу на самые популярные вопросы о модуляризации: 

— по какому принципу выделять модули; 

— как организовать связи между ними; 

— достаточно ли для фичи одного фреймворка; 

— как сократить время запуска многомодульного приложения; 

— зачем в этом процессе мониторинг;

— можно ли автоматизировать создание новых модулей и так далее. 

Мой коллега, лид команды iOS-разработки и Core-команды Артем Лоенко, в начале года говорил об этом на митапе FunCorp в докладе «Катастрофически полезные последствия модуляризации». Я приведу более подробный разбор процесса модуляризации и некоторых опущенных в его рассказе деталей.

Читать далее

Как мы стартовали Vivid Money для iOS

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

Всем привет! Меня зовут Илья. Я - iOS техлид в Vivid Money. Мы больше года занимались разработкой нашего финтех-продукта и теперь готовы поделиться с сообществом приобретенным опытом и знаниями.
Это вступительная статья, в которой я поверхностно затрону несколько технических решений, которые мы сделали на старте, а позже будут опубликованы статьи с детальным разбором самых интересных из них.

Читать далее

Как добавить 3D в iOS приложение c помощью SceneKit

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


Одна из запоминающихся частей приложения «Кошелёк» — 3D-изображение карт и купонов с источниками света, бликами на поверхности и возможностью вращения. На собеседованиях кандидаты часто спрашивают, как мы это реализовали, и так как тема многим интересна, расскажем об этом подробнее. Результат нашей работы не является сверхсложным самописным 3D-движком, но в целом что-то подобное редко встречается в бизнесовых приложениях. И если у вас есть задачи, подобные этой, но они кажутся непонятными — давайте продолжим.

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

SwiftUI 2.0: будущее декларативно

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

Фреймворк SwiftUI появился в прошлом году, и реализованный в нем подход «один раз выучить и применять на всех платформах» сразу же заинтересовал многих разработчиков ПО для Apple. Немного позанимавшись им, мы написали обзор самого SwiftUI, а также оценили возможности его использования совместно с Combine.

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

Читать далее

MMORPG больше не в Telegram — Swift и Kotlin — Первый большой проект — Часть 1

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

Прошло полгода с выпуска пробной статьи про создание MMORPG в телеграме. Изменился мир, изменились и планы по игре.

Почему больше не в Telegram

После выпуска первой статьи, энтузиазма писать игру хватило еще на неделю. Прилетели проблемы по работе, поиски новой, да и вообще лето. Проект был отброшен на задний план. В процессе поиска будущего работодателя возникла мысль попробовать себя в разработчиках. Спустя несколько часов диалогов с разными ребятами из IT, выбор пал на iOS-разработку. Благо, на Udemy курсы уже куплены, поэтому из летнего режима переходим в режим разработчика на 1.5

Читать далее

Keychain API в iOS

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

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

Я нашел много хороших статей по этой теме, но в основном там описываются сторонние фреймворки, упрощающие жизнь, а было интересно посмотреть, как работать с API напрямую. В этой статье я попытался объединить документацию Apple с практикой на простом примере.

Начнем с небольших определений


Keychain — зашифрованная база данных, куда сохраняются небольшие объемы пользовательской информации (см. документацию Apple).

Общая схема работы продемонстрирована на рисунке.

image

Keychain API Services в свои очередь являются часть фреймворка Security, но его рассмотрение требует отдельной статьи.

Добавление элемента


let keychainItemQuery = [
     kSecValueData: pass.data(using: .utf8)!,
     kSecClass: kSecClassGenericPassword
 ] as CFDictionary

 let status = SecItemAdd(keychainItemQuery, nil)
 print("Operation finished with status: \(status)")

Выше приведен пример сохранения пароля в Keychain.
Читать дальше →

Впечатление от Стэнфордских курсов CS193P Весна 2020 г.: Разработка iOS приложений с помощью SwiftUI

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


Стэнфордский университет, США — один из лучших в мире в области информатики (Computer Science). Он щедро делится своими курсами, и одним из самых популярных и успешных курсов является курс CS193P по разработке приложений на iOS, который читает профессор Пол Хэгерти.
Предложенные в весеннем семестре 2020 года лекции Стэнфордского курса CS193P «Developing  Application for iOS with SwiftUI» («Разработка приложений для iOS с использованием SwiftUI») были прочитаны студентам Стэнфорда с ориентацией на новый продукт, предоставленный Apple разработчикам в 2019 г, — фреймворк SwiftUI для разработки реактивного пользовательского интерфейса (UI). На сайте курса вы найдете материалы, которые были предоставлены студентам Стэнфорда в течение весеннего семестра 2020 г.: ссылки на видео, слайды, домашние задания и код демонстрационных примеров. Русскоязычный конспект курса представлен здесь.

SwiftUI — это совершенно новая вещь, которой было всего несколько месяцев от роду на момент прочтения лекций. Но это самый передовой край технологий, которые, наконец, добрались до разработки приложений на iOS. В июне 2020 г. состоялась международная конференция разработчиков Apple WWDC и там была представлена следующая версия SwiftUI 2.0. Изменения в версии SwiftUI 2.0 отражены на сайте курса на закладке WWDC.
Читать дальше →

Разница между @StateObject, @EnvironmentObject и @ObservedObject в SwiftUI

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

Эту неделю я решил посвятить потокам данных в SwiftUI. В этой статье мы обсудим разницу между обертками свойств (property wrappers) @StateObject, @EnvironmentObject, и @ObservedObject, поскольку я знаю, что это самая запутанная тема для новичков в SwiftUI.

Зачем нужны обертки свойств в SwiftUI?

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

Читать далее

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

Материалы для обучения разработке iOS приложений и составления учебных планов junior, middle и senior iOS разработчиков

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

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

Читать далее

Использование Enum + Associated Values при навигации и передаче данных между экранами в IOS приложениях

Время на прочтение5 мин
Охват и читатели3.1K
В этом посте мне бы хотелось затронуть извечный вопрос об организации навигации и передачи данных между экранами в IOS приложениях. В первую очередь, я хотел бы донести концепт своего подхода, а не убедить вас использовать его как волшебную таблетку. Тут не будут рассматриваться различные архитектурные подходы или возможность использования UlStoryboard с segues, в целом я опишу еще один возможный способ достигнуть желаемого со своими плюсами и минусами. И так, начнем!

Предыстория:

Безусловно, на реализацию навигации и организацию транспорта данных в проекте влияет выбор архитектурного подхода, однако и сам подход складывается из ряда обстоятельств: состав команды, time to market, состояние ТЗ, масштабируемость проекта и многое др., определяющими факторами для меня стали:

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

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

Single source of truth (SSOT) on MVVM with RxSwift & CoreData

Время на прочтение10 мин
Охват и читатели4.1K
Часто в мобильном приложении необходимо реализовать следующий функционал:

  1. Выполнить асинхронный запрос
  2. Забиндить результат в главном потоке на различные view
  3. Если нужно, то асинхронно обновить базу данных на устройстве в фоновом потоке
  4. Если возникают ошибки при выполнении этих операций, то показать уведомление
  5. Соблюсти принцип SSOT для актуальности данных
  6. Всё это протестировать

Решить эту задачу сильно упрощает архитектурный подход MVVM и фреймворки RxSwift, CoreData.

Описанный ниже подход использует принципы реактивного программирования и не привязан исключительно к RxSwift и CoreData. И при желании может быть реализован с помощью других инструментов.
Читать дальше →

Назад к BLE или способ автоматизировать рутинные операции

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

Кадр из фильма «Назад в будущее» (1985 год)

Стандарт Bluetooth 5.0 вышел в 2016 году, 2019-м появилась версия 5.2. За последнее время Apple провела две конференции WWDC 2017, WWDC 2019 посвященных CoreBluetooth. Активно развивается технология построения mesh сетей. Все стало еще лучше, быстрее и эффективнее.  Интерес к этому направлению только растет. Выстроены целые системы управления на этой технологии.

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

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

Мой Covid-19 lockdown проект, или, как я полез в кастомный UICollectionViewLayout и получил ChatLayout

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

image


Да, да. Я понимаю, что на дворе 2020 год, что все хардкорные IOS разработчики пишут исключительно на SwiftUI и Combine, и писать статьи про UIKit как-то “не айс”. Тем не менее, 2020 год выдался не таким, как все предыдущие года. Совсем не таким.


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

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

Action и BindingTarget в ReactiveSwift

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

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

Меня зовут Игорь, я руковожу отделом мобайла в агиме. Еще не все перешли с ReactiveSwift/Rxswift на Combine? Тогда сегодня я расскажу про опыт использования таких концептов из ReactiveSwift как Action и BindingTarget и какие задачи можно решить с их помощью. Сразу отмечу, что для RxSwift эти же концепции существует в виде RxAction и Binder. В статье рассмотрим, примеры на ReactiveSwift и в конце я покажу, как все то же самое выглядит на RxSwift

Read more

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

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

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

Читать далее