Обновить
4.56

Swift *

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

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

Split Controller без этих ваших сторибордов

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

Раньше для поддержки iPad делали отдельный xib. Чтобы унифицировать лейаут, в 2014 году Apple представила Auto Layout и Size Classes, а для адаптивной навигации UISplitViewController.



Split-контроллер — это контейнер, который разместит два контроллера рядом. Слева будет навигационный контроллер (речь не про Navigation Controller), справа соответсвующий выбору в навигационном. Короче, как в Настройках.


Разберем как настроить UISplitViewController и его поведение на экранах.

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

Настройка Unit-тестов в смешанных проектах Swift + Objective-C

Время на прочтение2 мин
Охват и читатели2.1K
Данная статья будет маленькой, расскажу, какие проблемы возникли при создании таргета для тестирования в смешанном и достаточно старом проекте ObjectiveC + Swift, и как удалось их решить.
Читать дальше →

Как мы в QIWI пришли к единому стилю взаимодействия между View и ViewModel в рамках MVVM

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

Изначально весь проект был написан на Objective-C и использовал ReactiveCocoa версии 2.0


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


И вот настало время использовать Swift. Поначалу мы решили попробовать вообще без реактивщины.

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

Sourcery для автоматического конвертирования в структуры объектов Realm

Время на прочтение4 мин
Охват и читатели4K
В интернете, да и даже на Хабре, есть куча статей о том, как работать с Realm. Эта база данных достаточно удобная и требует минимальных усилий для написания кода, если ей уметь пользоваться. В этой статье будет описан метод работы, к которому пришел я.
Читать дальше →

Продвинутый Debug

Время на прочтение8 мин
Охват и читатели15K
Debug Area — полезная функция в работе iOS разработчика в Xcode. Как только мы начинаем осваивать разработку под iOS, и пытаемся отойти от привычного и любимого print метода, и найти более быстрые и удобные методы понимания состояния системы в определенный период мы начинаем изучать область дебага (Debug Area).

Скорее всего, в Debug панель ваш взгляд упадёт до того, как вы будете понимать, что именно там происходит. При первом падении приложения нижнее меню открывается автоматически, оно изначально может послужить помощью для понимания проблемы (Вспомним старую добрую “Fatal error: Index out of range”), в основном в самом начале вы не будете понимать, что от нас хочет Xcode и приметесь гуглить ошибки, но по ходу роста всё больше и больше информации станет понятной.

С самого начала программист старается оптимизировать свою работу. Для этого мы стремимся понять в какой момент наша программа перешла в некорректное состояние. И тут в зависимости от точки в которой находится эволюция программиста, методы могут разниться. Сначала как правильно Debug осуществляется методом “print()”, потом идёт расстановка Breakpoints и вызов методов “po”, далее ознакомление с Debug Variable Input (области рядом с консолью в Xcode), а далее приходит понимание и способов компиляции кода в процессе остановки на Breakpoint методов — “expression” (По крайней мере, такая была эволюция у меня).

Давайте попробуем разные способы которые нам помогут понять и изменить состояние нашего приложения. Самые простые вроде “print()”, и “po” рассматривать не будем, я думаю, вы и так понимаете их суть и умеете применять.

Создадим простое приложение с одним экраном в котором будем всего один тип ячеек (TableViewcell) c двумя элементами внутри: UIImageView и UILabel. В ячейках будем писать её порядковый номер, а в картинку ставить либо image1, либо image2.

Метод tableViewCellForRowAtIndexPath будет создавать для нас ячейки, проставлять данные и возвращать:

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

Разработка приложения на SwiftUI. Часть 1: поток данных и Redux

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


После участия в сессии State of the Union на WWDC 2019 я решил детально изучить SwiftUI. Я потратил много времени на работу с ним и теперь приступил к разработке реального приложения, которое может оказаться полезным широкому кругу пользователей.

Его я назвал MovieSwiftUI — это апп для поиска новых и старых фильмов, а также их сбора в коллекцию при помощи TMDB API. Я всегда любил фильмы и даже создал компанию, работающую в этой сфере, правда давно. Компанию сложно было назвать классной, а вот приложение — да!
Читать дальше →

Custom refactoring tool: Swift

Время на прочтение10 мин
Охват и читатели7.9K
Любой инженер стремится сделать процесс своей работы максимально оптимизированным. Нам, как мобильным разработчикам iOS, очень часто приходится работать с однообразными структурами языка. Компания Apple улучшает инструменты разработчиков, прилагая много усилий, чтобы нам было удобно программировать: подсветка языка, автодополнение методов и многие другие возможности IDE позволяют нашим пальцам успевать за идеями в голове.



Что делает инженер, когда необходимый инструмент отсутствует? Верно, сделает всё сам! Ранее мы уже рассказывали о создании своих кастомных инструментов, теперь поговорим о том, как модифицировать Xcode и заставить его работать по твоим правилам.
Читать дальше →

GitHub Package Registry будет поддерживать пакеты Swift

Время на прочтение1 мин
Охват и читатели2.3K
10 мая мы запустили ограниченный бета-тест GitHub Package Registry, службы управления пакетами, которая позволяет легко публиковать публичные или частные пакеты рядом с исходным кодом. В настоящее время сервис поддерживает знакомые инструменты управления пакетами: JavaScript (npm), Java (Maven), Ruby (RubyGems), .NET (NuGet), образы Docker, а также многое другое.

Рады анонсировать, что добавим поддержку пакетов Swift в GitHub Package Registry. Пакеты Swift позволяют легко делиться вашими библиотеками и исходным кодом в собственных проектах и с сообществом Swift. Работать над этим мы будем в партнерстве с ребятами из Apple.

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

Мобильное приложение с автоматической генерацией форм: наш кейс

Время на прочтение5 мин
Охват и читатели3.7K
Мобильные приложения не всегда бывают простыми и лаконичными, как это любим мы — разработчики. Иные приложения создаются для решения сложных задач пользователя и содержат много экранов и сценариев. Например, приложения для проведения тестов, анкет и опросов — везде, где в процессе нужно заполнять много форм. Про такое приложение и пойдет речь в этой статье.



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

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

Интеграционное тестирование для проверки на наличие утечки памяти

Время на прочтение5 мин
Охват и читатели5.1K
Мы пишем множество юнит тестов, разрабатывая приложение SoundCloud под iOS. Юнит тесты выглядят вполне великолепно. Они короткие, (надеюсь) читабельны, и они дают нам уверенность в том, что код, который мы пишем, работает так, как и ожидается. Но юнит тесты, как следует из их названия, охватывают только один блок кода, чаще всего функцию или класс. Итак, как отловить ошибки, которые существуют во взаимодействиях между классами — ошибки, такие как утечки памяти?
Читать дальше →

Знакомство с HealthKit

Время на прочтение17 мин
Охват и читатели13K
В этой статье про HealthKit вы узнаете, как запрашивать разрешение на доступ к данным HealthKit, а также считывать и записывать данные в центральный репозиторий HealthKit. В статье используется Swift 4, iOS 11, Xcode 9 версии.

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

По ходу прочтения статьи о HealthKit, вы создадите простейшее приложение для отслеживания тренировок и узнаете:

  • Как запросить разрешение и получить доступ к данным HealthKit
  • Как читать данные HealthKit и отображать их в UITableView
  • Как записать данные в центральный репозиторий HealthKit

Готовы начать знакомство с HealthKit? Читайте дальше!
Читать дальше →

SwiftUI и авто-возобновляемые подписки

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

image


Привет! На связи Денис из Apphud – сервиса по аналитике возобновляемых подписок для iOS-приложений.


Как вы знаете, на WWDC 2019 Apple анонсировали свой новый декларативный фреймворк SwiftUI. В этой статье я попробую рассказать как с помощью SwiftUI сделать экраны оплаты и реализовать функционал авто-возобновляемых подписок.

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

Почему Swift может стать большим событием в глубинном обучении

Время на прочтение4 мин
Охват и читатели7.3K
Здравствуй, Хабр! Представляю вашему вниманию перевод заинтересовавшей меня статьи «Why Swift May Be the Next Big Thing in Deep Learning» автора Max Pechyonkin, в которой автор рассуждает о языке на котором будет осуществляться глубокое обучение в ближайшие годы.
Читать дальше →

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

Анимированные карточки на SwiftUI

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

Сделаем на SwiftUI анимированные карточки с поддержкой жестов:



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


Потребуется


SwiftUI сейчас в beta, и устанавливается вместе с новым Xcode, который тоже в beta. Хорошая новость — новый Xcode можно поставить рядом со старым, и практически не почувствовать боли.



Скачать его можно по ссылке в разделе Applications.


Вы могли встречать риалтайм-превью во время работы со SwiftUI. Чтобы активировать его, а так же некоторые контекстные меню, нужно установить бету macOS Catalina. Тут без боли не обойдется. Я бету не ставил, поэтому буду по старинке запускать симулятор.

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

Спокойствие спокойствию рознь

Время на прочтение15 мин
Охват и читатели11K
иконка библиотеки Три года назад, я написал статью о DI библиотеке для языка Swift. С того момента библиотека сильно измененилась и стала лучшей в своем роде достойным конкурентом Swinject, превосходящяя его по многим показателям. Статья посвящена возможностям библиотеки, но и имеет теоретические рассуждения. Итак, кому интересны темы DI, DIP, IoC или кто делает выбор между Swinject и Swinject прошу под кат:
Читать дальше →

Архитектурный шаблон «Строитель» во вселенной «Swift» и «iOS»/«macOS»

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

В этот раз я бы хотел немного поговорить о еще одном порождающем шаблоне проектирования из арсенала «Банды четырех» – «Строителе» («Builder»). Так вышло, что в ходе получения своего (пусть и не слишком обширного) опыта, я довольно часто видел, чтобы паттерн использовался в «Java»-коде вообще и в «Android»-приложениях в частности. В «iOS» же проектах, будь они написаны на «Swift» или «Objective-C», шаблон встречался мне довольно редко. Тем не менее, при всей своей простоте, в подходящих случаях он может оказаться довольно удобным и, как модно говорить, мощным.

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

Изучая Dependency Injection

Время на прочтение8 мин
Охват и читатели33K
Несмотря на то, что паттерну уже более десятка лет и есть немало статей (и переводов), тем не менее споров, комментариев, вопросов и разных реализаций становится все больше и больше.

Предыстория
В 2004 Мартин Фаулер написал известную статью “Inversion of Control Containers and the Dependency Injection pattern”, в которой описывал вышеуказанный паттерн и его реализацию для Java. С этих пор паттерн стал широко обсуждаться и внедрятся. В мобильную разработку, особенно на IOS, это пришло с существенной задержкой. На хабре есть хорошие переводы статьи, удачи и светлой кармы их автору.

Информации достаточно даже на хабре, но к написанию поста меня подвигло то обстоятельство, что везде обсуждается КАК сделать, но практически нигде – ЗАЧЕМ. Можно ли создать хорошую архитектуру, если вы не знаете для чего она нужна и в чем именно должна быть хороша? Можно принимать во внимание определенные принципы и явные тренды, — это поможет свести к минимуму непредвиденные проблемы, но понимать – это еще лучше.
Читать дальше →

Руководство по реализации авто-возобновляемых подписок в iOS-приложениях

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

image


Всем привет! Меня зовут Денис, я разрабатываю Apphud – сервис по аналитике авто-возобновляемых подписок в iOS-приложениях.


В данной статье я расскажу как настроить, реализовать и валидировать авто-возобновляемые подписки в iOS 12 и iOS 13. Бонусом расскажу о тонких моментах и подводных камнях, которые не все разработчики учитывают.

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

Даб-даб 2019: новинки WWDC и мои впечатления

Время на прочтение12 мин
Охват и читатели5.5K
Привет! Меня зовут Азат Зулькарняев, я занимаюсь разработкой iOS-приложений в компании Badoo. Традиционно мы каждый год с коллегами проводим неделю на WWDC. В статье я делюсь своими впечатлениями с конференции: под катом не только важные обновления и обзор сессий, но и немного личных эмоций от пребывания в счастливой толпе, которая скандирует «Даб-даб! Ди-Си!» и мечтает пожать руку Тиму Куку.


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

Все, что вы хотели знать о SwiftUI, но боялись спросить

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


Привет! Меня зовут Ренат, я разрабатываю сервис по аналитике подписок в iOS – Apphud.


Как вы знаете, Apple на WWDC 2019 представила свой новый фреймворк SwiftUI, который призван в будущем заменить (или нет?) привычный нам UIKit. SwiftUI позволяет описывать интерфейс приложений в декларативном стиле и сильно сокращает количество кода.


Apple уже представила несколько интересных туториалов на английском языке с множеством примеров. Я же постараюсь рассказать о новом фреймворке в форме вопросов и ответов. Итак, поехали.

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