Абсолютное большинство мобильных приложений имеет интересный нюанс – «хвост» старых версий, которыми все еще продолжают пользоваться. В этой статье мы посмотрим, какие проблемы это приносит и как с этим бороться. Материал будет полезен и мобильным разработчикам, и тем, кто каким-либо образом связан с разработкой мобильных приложений, к примеру, разрабатывает backend сервисы, которые используются в приложениях.
С разработкой в голове и в сердце
Современный код для выполнения HTTP запросов в Swift 5 с помощью Combine и применение их в SwiftUI. Часть 1
Выполнение
HTTP
запросов — это один из самых важных навыков, которые необходимо получить при разработке iOS
приложений. В более ранних версиях Swift
(до версии 5) вне зависимости от того, формировали ли вы эти запросы «с нуля» или с использование известного фреймворка Alamofire, вы в конечном итоге получали сложный и запутанный код с callback
типа completionHandler: @escaping(Result<T, APIError>) -> Void
.Появление в
Swift 5
нового фреймворка функционального реактивного программирования Combine
в сочетании с уже существующими URLSession
и Codable
предоставляет вам все необходимые инструменты для самостоятельного написания очень компактного кода для выборки данных из интернета.В этой статье в соответствии с концепцией
Combine
мы будем создавать «издателей» Publisher
для выборки данных из интернета, на которые в дальнейшем сможем легко «подписаться» и использовать при проектировании UI
как с помощью UIKit
, так и с помощью SwiftUI
.В
SwiftUI
это выглядит более лаконично и более эффектно, так как действие «издателей» Publisher
не ограничивается просто выборкой данных, а простирается дальше, вплоть до управления пользовательским интерфейсом (UI
). Дело в том, что в SwiftUI
разделение данных и View
осуществляется с помощью ObservableObject
классов с @Published
свойствами, изменения которых SwiftUI
АВТОМАТИЧЕСКИ отслеживает и полностью «перерисовывает» свои View
. В эти
ObservableObject
классы можно очень просто заложить определенную бизнес-логику приложения, если некоторые из этих @Published
свойств являются результатом синхронных и/ или асинхронных преобразований других @Published
свойств, которые можно напрямую менять такими «активными» элементами пользовательского интерфейса (UI
) как текстовые поля TextField
, Picker
, Stepper
, Toggle
и т.д. MVVM на основе Combine в UIKit и SwiftUI приложениях для UIKit разработчиков
Мы знаем, что
ObservableObjec
t классы с его @Published
свойствами созданы в Combine
специально для View Model
в SwiftUI
. Но в точности ту же самую View Model
можно использовать и в UIKit
для реализации архитектуры MVVM
, хотя в этом случае нам придется вручную «привязать» (bind
) UI
элементы к @Published
свойствам View Mode
l. Вы удивитесь, но с помощью Combine
это делается парой строк кода. Кроме того, придерживаясь этой идеологии при проектировании UIKit
приложений, вы в дальнейшем безболезненно перейдете на SwiftUI
.Цель этой статьи состоит в том, чтобы на примитивно простом примере показать, как можно элегантно реализовать
MVVM
архитектуру в UIKit
с помощью Combine
. Для контраста покажем использование той же самой View Model
в SwiftUI
.В статье будут рассмотрены два простейших приложения, позволяющих выбирать с сайта OpenWeatherMap самую свежую информацию о погоде для определенного города. Но
UI
одного из них будет создан с применением SwiftUI
, а другого — с помощью UIKit
. Для пользователя эти приложения будут выглядеть почти одинаковыми. Код находится на Github.
Jenkins Pipeline. Что это и как использовать в тестировании
Меня зовут Александр Михайлов, я работаю в команде интеграционного тестирования компании ЮMoney.
Наша команда занимается приемочным тестированием. Оно включает в себя прогон и разбор автотестов на критичные бизнес-процессы в тестовой среде, приближенной по конфигурации к продакшену. Еще мы пишем фреймворк, заглушки, сервисы для тестирования — в целом, создаем экосистему для автоматизации тестирования и обучаем ручных тестировщиков автоматизации.
Надеюсь, что эта статья будет интересна как новичкам, так и тем, кто съел собаку в автоматизации тестирования. Мы рассмотрим базовый синтаксис Jenkins Pipeline, разберемся, как создать джобу на основе пайплайна, а также я расскажу про опыт внедрения неочевидной функциональности в CI — запуска и дожатия автотестов по условию.
11 направлений для роста и профессионального развития программиста
Несколько месяцев назад я неделю вёл коллективный твиттер аккаунт по мобильной разработке, и темой одного из дней был профессиональный рост. Так как тема вызвала интерес и отклик у аудитории, я решил собрать информацию в более подробный материал.
В этой заметке я не буду уговаривать программистов профессионально расти, зато я поделюсь своим мнением на этот счёт, а также приведу список направлений для роста, которые считаю актуальными.
Немного практики функционального программирования в Swift для начинающих
Я хотела бы представить концепцию Функционального Программирования новичкам самым простейшим образом, выделив некоторые его преимущества из множества остальных, которые реально позволят сделать код более читаемым и выразительным. Я подобрала для вас интересные демонстрационные примеры, которые находятся на
Playground
в Github.Функциональное Программирование: Определение
Прежде всего, Функциональное Программирование — это не язык или синтаксис, а скорее всего — способ решения проблем путем разбиения сложных процессов на более простые и последующей их композиции. Как следует из названия "Функциональное программирование", единицей композиции для данного подхода является функция; и цель такой функции — избежать изменения состояния или значений за пределами своей области действия (
scope)
.В Мире
Swift
для этого есть все условия, ибо функции здесь являются такими же полноправными участниками процесса программирования, как и объекты, а проблема изменяемости (mutation
) решается на уровне концепции value
ТИПОВ (структур struct
и перечислений enum
), которые помогают управлять изменяемостью (mutation
) и четко сообщают о том, как и когда это может произойти.Однако
Swift
не является в полном смысле языком Функционального программирования, он не принуждает вас к Функциональному программированию, хотя и признает преимущества Функциональных подходов и находит способы встраивания их. В этой статье мы сфокусируемся на использовании встроенных в
Swift
(то есть «из коробки») элементов Функционального программирования и понимании того, как можно их комфортно использовать в вашем приложении.Победа в номинации «лучший стартап с перспективой выхода на американский рынок», Spb Startup Day 2017 и мысли про питчи
В начале сентября в Петербурге прошёл Spb Startup Day 2017. Событие интересное как минимум для всех, кто связан с тематикой стартапов или хотя бы думает, что связан. В этой статье я расскажу про свои впечатления от мероприятия, а заодно поделюсь успехами нашего стартапа JEvents — победой в номинации «лучший стартап с перспективой выхода на американский рынок» с призом в виде поездки в Нью-Йорк и не только…
40 эффектных ARKit демок, которые вскоре увидят мир
Если наблюдать за прогрессивно растущим появлением новых видеороликов и пресс-релизов приложений с использованием ARKit, становится очевидным то, что технологии дополненной реальности будут иметь очень широкое применение за счет своих огромных возможностей. В этой статье мы выделили и сгруппировали наиболее интересные приложения.
Итак, перейдем к рассмотрению демоприложений с применением ARKit.
Многопоточность (concurrency) в Swift 3. GCD и Dispatch Queues
Итак, у вас есть приложение, оно работает на
main thread
(главном потоке), который отвечает за выполнение кода, отображающего ваш пользовательский интерфейс (UI
). Как только вы начинаете добавлять к вашему приложению такие «затратные по времени» куски кода, как загрузка данных из сети или обработка изображений на main thread
(главном потоке), то работа вашего UI
начинает сильно замедляться и даже может привести к полному его «замораживанию». Как можно изменить архитектуру приложения, чтобы таких проблем не возникало? В этом случае на помощь приходит многопоточность (
сoncurrency
), которая позволяет одновременно выполнять две или более независимые задачи (tasks
): вычисления, загрузку данных из сети или с диска, обработку изображений и т.д.33 iOS библиотеки с открытым исходным кодом, которые будут популярны в 2017 году
Сегодня мы приготовили для вас полезный перевод поста основателя Ecler Studios Paweł Białecki, в котором он предлагает нашему вниманию 33 open source проекта для iOS разработчиков.
С помощью своего аккаунта в GitHub он открыл для себя множество перспективных инструментов и отобрал, по его мнению, лучшие из них для своих читателей.
Как я запускал афишу еврейских мероприятий
Введение
Начнем с того, что я живу в довольно крупном городе, в котором по разным подсчетам проживает несколько сотен тысяч людей с сильно ощутимыми еврейскими корнями. Город этот сменил несколько названий, сейчас он называется Санкт-Петербург.
Сколько точно в Петербурге еврейских организаций, я не знаю, могу сказать только что есть несколько синагог, пара общинных центров, более 10 детских садов, несколько подростковых клубов, студенческие организации, детские лагеря, семейные лагеря и выезды, молодежные лидерские программы, поездки, курсы, стажировки, организации для пенсионеров и есть еще активные и инициативные люди, которые постоянно что-то организуют.
Все это приводит к тому, что каждый месяц в городе проходит несколько десятков еврейских мероприятий. Для примера, 13 сентября в разных частях города прошло 11 совсем не мелких мероприятий (50-200 человек каждое).
Какую я заметил проблему и как её хотел решить?
Мне показалось и кажется до сих пор, что у каждой организации своя мини-община. В ней находятся люди, которые интересуются событиями этой организации, при этом они мало что знают про события других организаций.
Тут отчасти работает веками сформированный принцип, что еврею нужно минимум две синагоги. В одну он будет ходить, зато в другую ни ногой! Это может казаться смешным, но так и есть — большинство моих знакомых точно могут назвать две еврейские организации в городе: одна им нравится, во вторую они бы точно не пошли.
Я посчитал нужным собрать все мероприятия вместе и сделать афишу еврейских мероприятий Санкт-Петербурга.
Я должен отметить, что данная идея приходила в голову не только мне. За нее брались несколько человек, но афиши в городе так и не было. Важно отметить, что я понимал, что могу не только организовать создание этой афиши, найдя грант и наняв кого-то для выполнения частей этого проекта. Я мог сделать это своими руками и за свой счет!
Информация
- В рейтинге
- Не участвует
- Откуда
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Работает в
- Зарегистрирован
- Активность