
Xcode *
Интегрированная среда разработки ПО
Создаем шаблон Xcode проекта

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

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

Скачать его можно по ссылке в разделе Applications.
Вы могли встречать риалтайм-превью во время работы со SwiftUI. Чтобы активировать его, а так же некоторые контекстные меню, нужно установить бету macOS Catalina. Тут без боли не обойдется. Я бету не ставил, поэтому буду по старинке запускать симулятор.
Поднимаем читаемость кода в iOS разработке
Представили?
Смогли бы вы понять, о чем книга?
Насколько быстро вы смогли бы найти интересующий вас отрывок?
Ваш код, как и содержание книги, нуждается в структурировании, чтобы код был легко читаемым и передавал заложенный в нем смысл.
В данной статье я покажу примеры по организации кода, в которых классы будут иметь одинаковую последовательность основных блоков и их разбивку.
Для удобства я буду использовать слово класс (class), но подразумевать любой вид типа (class, struct, enum).
Благодаря применению этих советов ваш код станет читабельным, что в дальнейшем обеспечит удобство и скорость работы с ним.
Добавление UICollectionViews в кастомный UITableViewCell который сделан через Xib
Примечание: это туториал не для начинающих. Предполагается, что вы знаете о tableViews и создании пользовательских ячеек с файлами xib.
Также я не описываю ничего, про визульную составляющую.
Проблемы паттерна Координатор и при чем тут RouteComposer
Я продолжаю цикл статей о библиотеке RouteComposer которую мы используем, и сегодня я хочу поговорить о паттерне Координатор. К написанию этой статьи меня побудило обсуждение одной из статей о паттерне Координатор тут на Хабре.
Паттерн Координатор, будучи представленным не так давно, набирает все большую популярность в кругах IOS разработчиков, и, в целом, понятно почему. Потому что средства из коробки, которые предоставляет UIKit представляют собой довольно не универсальное месиво.

UICollectionView всему голова: Изменение представления на лету
В данной статье мы рассмотрим использование различный способов отображение элементов, а также их переиспользование и динамическое изменение. Здесь мы не будем рассматривать основы работы с коллекциями и autolayout.
В результате мы получим такой пример:

Написание Unit тестов на Swift для проверки асинхронных задач
Представьте ситуацию, что вам надо загрузить данные из интернета и проверить все ли работает нормально, либо еще какую-нибудь задачу, которая выполняется асинхронно. И как же его протестировать? Что если попробовать так же как и обычный синхронный код?!
func testAscynFunction() {
someAsyncFunction()
}
func someAsyncFunction() {
let bg = DispatchQueue.global(qos: .background)
bg.asyncAfter(deadline: .now() + 5) {
XCTAssert(false, "Something went wrong")
}
}
Такой тест вернет нам положительный результат, так как метод не будет ждать всех наших асинхронных задач.
Для решения такой проблемы в тестах есть одна замечательная вещь:
Ускорение компиляции в Xcode на swift
Сначала давайте узнаем как долго компилируется проект до наших улучшений. ЧТобы это сделать надо в терминале ввести
defaults write com.apple.dt.Xcode ShowBuildOperationDuration -bool YESДля этого нужно зайти в раздел Product зажать alt и нажать Clean Build Folder, а потом собрать проект заново. Мой проект компилируется 81 секунду. Посмотрим какой результат будет после улучшения.

Нам, в первую очередь, стоит узнать какие места приводят к замедлению компиляции. По умолчанию Xcode не показывает предупреждения, где проблема, но мы можем это исправить.
Самые «тяжелые» места большие функции и проверка типов. Поэтому нам нужно вписать эти две строчки в раздел Build Settings -> Other Swift Flags -> Debug
-Xfrontend -warn-long-function-bodies=100
-Xfrontend -warn-long-expression-type-checking=100 (здесь у нас стоит 100мс время компиляции, мы можем поставить любое число)

Пример моего рабочего проекта

У меня есть участок который занимает 13778 ms, скорее всего у вас не будет такого, но из-за специфики проекта у меня такие участки есть. Так как там построено бинарное дерево для OCR.
Из-за глубокой вложенности друг в друга и определения типа только в самом начале, перед знаком равенства, компилятору требуется много времени понять какой перед ним тип. (Дерево занимает 30 строк, вот его часть)
Xcode 10.2, macOS Mojave 10.14.4, iOS 12.1 и другие бета-версии

Вышли новые беты Xcode, macOS Mojave и iOS — и вот основные моменты, которые я усвоил.
Swift 5 для Xcode 10.2 beta
Swift
Прежде всего, последняя бета-версия Xcode идет в комплекте с новой версией Swift:
Apple Swift 5.0 (swiftlang-1001.0.45.7 clang-1001.0.37.7)
Target: x86_64-apple-darwin18.2.0
ABI version: 0.6Начнем с самых волнующих новостей:
Приложения на Swift больше не включают в себя DLL для стандартной библиотеки Swift и оверлеи Swift SDK в версиях для устройств на iOS 12.2, watchOS 5.2 и tvOS 12.2. В результате Swift-приложения уменьшаются в размере при развертывании для тестирования в TestFlight или при сжатии архива для дистрибутива.ABI наконец-то станет стабильным, и это отличные новости. На мой взгляд, сегодня это одна из ключевых проблем Swift — не из-за побочных эффектов, а из-за невыполненных обещаний. Некоторые мои знакомые даже переписывают расширения для Apple Watch на Objective-C, чтобы уменьшить размер бинарного файла (примерно с 15 Мб до 1 Мб). Узнать больше о состоянии ABI можно по ссылкам: Информационная панель Swift ABI и Манифест стабильности Swift ABI.
Делаем UITableView. Для начинающих
Новогодние праздники прошли, а мое стремление писать полезные и не очень статьи — нет! Сегодня поговорим о UITableView, работе с UITableViewDataSource и переиспользовании ячеек. Затронем как установить рут контроллер без сториборда, ошибки при работе с таблицей, лейаут и большой заголовок для UINavigationBar.
Для тех, кому нравятся несмешные шутки, я записал ролик на YouTube. Ну а здесь всё будет серьезно. Давайте начнём.
Рисуем кодом в Swift, PaintCode
— “Ааастановите, пожалуйста, вот у магазина” — прокричал герой российского сериала.
В целом, дорогой друг, ты прав. Будут и дробные числа, и куча строчек кода. Но будет намного проще. Интересно? Давай к делу.
Сколько стоит Review в AppStore
Если вы следите за конкурентами, или, не дай бог, вкладываете силы в ещё одно приложение-гороскопы, то сталкивались с нарушениями конкурентами гидлайнов. Я расскажу то, что знаю.
Ближайшие события
Обновление библиотеки SPPermission и хейтер
мог подумать ты, мой дорогой друг. Не нужно тратить время. Это просто вечернее чтиво с долей несмешных юморесок. Текст будет о библиотеке RequestPermission и о её загадочном авторе.
Drag & Drop в ваших iOS приложениях

Механизм
Drag & Drop, работающий в iOS 11 и iOS 12, — это способ графического асинхронного копирования или перемещения данных как внутри одного приложения, так и между разными приложениями. Хотя этой технологии лет 30, она стала в буквальном смысле «прорывной» технологией на iOS благодаря тому, что при перетаскивании чего-либо в iOS, multitouch позволяет свободно взаимодействовать с остальной частью системы и набирать данные для сброса из разных приложений.Apple Wallet. Что это такое и как интегрировать в него свою карту
Принято считать, что Wallet – не самый популярный сервис в СНГ. Но уже во втором проекте подряд заказчик ставит задачу «Сделать интеграцию с Wallet». Поэтому я решил написать эту статью, чтобы рассказать о сервисе в целом и показать, как интегрировать в него свой продукт.
Что такое Wallet? Он позволяет держать в телефоне различного вида карты (билеты, скидочные карты и т.п.), облегчая жизнь пользователям продукта. Более того, есть возможность актуализировать информацию о карте посредством push-уведомлений, но это тема для отдельной статьи. Но если у вас есть карта/билет/абонемент, которые можно интегрировать в телефон, то для этого есть решение! Как это сделать – читайте ниже.
Улучшаем загрузку контента без котиков

Быстрая и качественная доставка контента пользователям — важнейшая задача, которой мы постоянно занимаемся, работая над приложением iFunny. Отсутствие элементов ожидания даже при плохом соединении — к этому стремится любой сервис для просмотра медиа-контента.
У нас было несколько итераций по работе с префетчингом контента. В каждой новой мажорной версии мы изобретали что-то новое и смотрели, как это работает на пользователях. В очередной итерации по работе с префетчингом было решено сначала отладить метрики, на которые он влияет, на локальном стенде, а уже потом отдать результат пользователям.
В этой статье я расскажу про то, как выглядит префетчинг в iFunny сейчас и о том, как автоматизировали процесс исследования для дальнейшего тюнинга его настроек.
Универсальное решение для UITableViewRowAction и UIContextualAction

Многие сталкивались с проблемой реализации красивого отображения кнопок для UITableViewCell при сдвиге влево. Некоторые использовали стандартный функционал «из коробки», другие заморачивались над собственной реализацией, а кто-то обошелся Unicode-символами. В этой статье я расскажу как добиться максимальной кастомизации UITableViewRowAction.
Убираем мусор от XCode

На макбуке кончается место, и остро стоит вопрос что бы прибить. Не понятно, куда оно делось? Знакомая ситуация?
Возможно для кого-то будет новостью, что есть куча мусора, оставшаяся после разработки в XCode, который можно безболезненно прибить. Об этом и поговорим…
Как победить рутину, или Готовое приложение в Xcode за пару кликов

У каждого опытного разработчика есть набор инструментов, к которым он привык и с которыми ему удобно работать. Это может быть простейшая настройка окружения, утилиты для промежуточных операций (к примеру, помощник по тестированию API Postman), проверенные временем и лично разработчиком библиотеки и сниппеты.
Также у многих разработчиков может быть свой подход к реализации выбранной архитектуры. Поэтому очень полезно иметь в своем арсенале заготовку приложения – общий скелет, к которому останется только добавлять новые модули, экраны и фичи. В этом материале я расскажу, как создать собственный шаблон приложения в Xcode.