Обновить
5.28

Swift *

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

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

XCResult — как и зачем читать

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


В 2018 году Apple в очередной (третий) раз обновили формат, в котором выдаётся информация о прогоне тестов. Если раньше это был plist файл, который представлял из себя большой xml, то теперь это большой файл с расширением xcresult, который открывается через Xcode и содержит в себе кучу полезной информации, начиная c результатов тестов с логами, скриншотами и заканчивая покрытием таргетов, диагностической информацией о сборке и многим другим. Большинство разработчиков не работает каждый день с этим, но инфраструктурщики в данной статье могут найти что-то полезное.
Читать дальше →

Погружение в автотестирование на iOS. Часть 3. Жизненный цикл iOS приложения во время прогона тестов

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

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

В этой статье я расскажу про жизненый цикл iOS приложения во время прогона тестов, а в частности про:

- Предусловия и постусловия в ui-тестах;

- Запуск/завершение работы приложения;

- Запуск стороних приложений;

- Сброс permissions;

- Определение состояния приложения.

Читать далее

Предотвращаем мерж-конфликты с XcodeGen

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

В этой статье мы рассмотрим решение для мгновенного разрешения мерж-конфликтов в файле .xcodeproj, что является одной из самых трудоемких проблем, с которыми сегодня сталкиваются команды iOS и macOS разработчиков. К концу этой статьи у вас будет рабочая среда, обеспечивающая бесконфликтное слияние.

Читать далее

Цвета в Swift: UIColor

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

UIColor дает возможность настроить цвет для Dark Mode, дает семантический набор цветов "от Apple", а также дает возможность задать не только цвет, но и паттерн заполнения пространства, что как бы кричит нам, что UIColor это вовсе не цвет. Давайте слегка заглянем в эти чертоги UIColor.

Читать далее

Распознание блоков текста в IOS-приложении с помощью Vision

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

Работая над приложением, связанным с финансовыми операциями, возникла необходимость распознать и выделить суммы на чеках. Начиная с 11-ой версии в IOS-разработке появился нативный фреймворк Vision, который позволяет распознавать различные объекты на изображениях, без задействования сторонних сервисов.

В данной статье представлен личный опыт разработки приложения, использующего Vision.

Читать далее

Процесс локализации iOS приложения в компании Vivid Money

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

Приветствуем! Если ваше приложение поддерживает разные языки, то наверняка вы сталкивались с проблемами, связанными с локализацией: ошибки в написании ключей, отсутствующие значения для языков, необходимость пересборки приложения в случае экстренных правок перевода. Не самые приятные моменты разработки, не правда ли?

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

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

Читать далее

Разбираемся с Opaque Return Types в Swift

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

Opaque return types (непрозрачные типы) — это новая языковая конструкция, представленная Apple в Swift 5.1. Их можно использовать для возврата некоторого (some) значения функции (function)/метода (method) и свойства (property), не раскрывая конкретный тип значения клиенту, который вызывает API. Тип возврата будет некоторым типом, реализующим протокол (protocol). С помощью этого решения API-интерфейс модуля больше не должен публично раскрывать базовый внутренний возвращаемый тип метода, ему просто нужно вернуть opaque type протокола с помощью ключевого слова some. Компилятор Swift также сможет сохранить базовую идентичность  (identity) возвращаемого типа, в отличии от варианта с использованием протокола в качестве возвращаемого типа. SwiftUI использует opaque return types внутри своего протокола View, который возвращает some View в свойстве body.

Читать далее

Создание пользовательских функций запросов с key paths

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

Поскольку это довольно строгий статически компилируемый язык, с первого взгляда может показаться, что Swift мало чего может предложить в плане кастомизации синтаксиса, но на самом деле это далеко не так. Благодаря таким фичам, как настраиваемые и перегруженные операторы, key paths, function/result builders и т. д., у нас есть множество возможностей для настройки синтаксиса Swift под конкретные сценарии использования.

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

Читать далее

Видеомонтаж, машинное обучение и взломанный xml — все в одной программе

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

По профессии я режиссер монтажа, а прикладное программирование как увлечение в свободное время.

В какой то момент пришла идея совместить работу с хобби, прочитал статью на хабре о распознавании объектов на картинках с помощью Core ML, с этого собственно все и началось. Поделюсь скромным опытом и проблемами с которыми можно столкнуться при разработке приложений работающих с Core ML.

Дело в том что почти треть работы видеомонтажера  заключается  в рутинном поиске видеоряда из исходников, которые надо каждый раз шерстить в поиске контекстного плана под закадровый текст, по моему это не несет никакой творческой составляющей, особенно когда ты занимаешься этим 15 лет). Ну и подумал я, а что если написать софтину, которая будет проходится по папке с исходниками, распознавать объекты, аккуратненько «складывать» их в БД. Далее, в момент поиска видео фрагментов для так называемой «джинсы», вводится поисковое слово, например «Солнце», и все что находится каким то образом передается в монтажную систему.

Идея зрела, собирался стёк, писать решил на Swift, обученные модели собственно Core ML, база данных SQLite. На первый взгляд идея казалась легко реализуемой, вроде ничего сложного.  

Очень быстро накидал основной код, который вытаскивает кадры из видео, распознает обьекты с помощью модели Resnet50, которую рекомендовали яблочники у себя на сайте, она очень шустро работала и позволяла настраивать процент при котором считать объект распознанным. Сам код спокойно раздается на том же apple.com  для всех желающих. Подключил библиотеку SQLite.swift, обернул ее функции в свои методы, все работает! 

Потом еще пришлось неплохо повозиться с алгоритмами создания очереди обработки списка файлов и в этот момент я обратил внимание что программа то разрослась! 

Читать далее

Быстрый, простой, сложный: как мы выпилили Realm

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

Когда на собеседованиях я спрашиваю у кандидата с какими базами он работал и что делал, то чаще всего слышу про Realm. Типичный ответ: он быстрее и с ним проще работать: создал конфиг, описал модель, готово. Последствия, недостатки и проблемы обычно обсудить не получается: нужен опыт использования в пару лет, а его обычно нет. 

Мы тоже использовали Realm — 3 года подряд. Сначала он помогал, потом раздражал, пару раз выстрелил и в конце чуть не вогнал команду в депрессию. В итоге мы удалили Realm из проекта. Это сложный инструмент — простота интеграции обманчива, а за все удобства придётся расплачиваться.

Почему и как мы его удалили

Погружение в автотестирование на iOS. Часть 2. Как взаимодействовать с ui-элементами iOS приложения в тестах

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

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

В прошлой статье мы разобрались:

- Что такое ui-тесты и для чего они нужны;

- Как настроить окружение для тестов;

- Как находить ui-элементы в проекте и проставлять им accessibilityidentifier.

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

- Как обращаться и инициализировать ui-элементы в ваших тестах;

- Как взаимодействовать с ui-элементами приложения;

- Как писать ассерты для проверки в автотесте ожидаемого результата.

Читать далее

Модуляризация iOS-приложения Badoo: борьба с последствиями

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

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

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

В этой статье я расскажу:

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

— как спасли CI от чрезмерной нагрузки;

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

— мониторинг каких показателей стоит предусмотреть и почему это необходимо.

Читать далее

Vivid UI

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

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

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

Эта статья будет полезна тем, кто хочет тратить меньше времени на рутинные процессы верстки и повторяющуюся логику обработки состояний экранов.

Читать далее

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

Делаем свой Widget в iOS 14

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

В iOS 14 и macOS 11 Apple представили Widgets. Еще один способ взаимодействия пользователя с приложением. В данной статье рассмотрим основные принципы работы WidgetKit и интегрируем свой Widget в готовый проект.


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

Создаем Swift Package на основе C++ библиотеки

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

Данная статья поможет вам создать свой первый Swift Package. Мы воспользуемся популярной C++ библиотекой для линейной алгебры Eigen, чтобы продемонстрировать, как можно обращаться к ней из Swift. Для простоты, мы портируем только часть возможностей Eigen.

Читать далее

Почему я не могу найти Яндекс.Такси через системный поиск на iPhone?

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

Переименовав недавно Яндекс.Такси в «Яндекс Go», разработчики приложения сделали невозможным его поиск через Spotlight по главному ключевому слову — «такси». Однако дело здесь вовсе не в названии, поскольку в iOS давно уже предусмотрено всё необходимое для решения разработчиками «супераппа» сложившейся проблемы. Было бы только желание...

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

The Layout Engine в Swift

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

Многие iOS разработчики не задумываются как работает механизм отрисовки элементов, установки и обновлении constraints в Auto Layout'e. В этой статье я пробую подробно заглянуть внутрь работы the Layout Engine

Читать далее

Linked List: Когда нужно писать свой Copy-on-write в iOS?

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

Я всегда думал: "А зачем нужно писать свой copy-on-write? Ведь круто, когда есть структуры и они такие быстрые, что всё делают за тебя."

Но все это не нужно, пока не начинаешь писать свои типы и не подсаживаешься на LinkedList'ы.

Что такое этот связанный список и какие у него преимущества?

Читать далее

Приложение на SwiftUI в AppStore – сложности разработки

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

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

Так ли просто писать на SwiftUI, как показывают на WWDC? Я расскажу о сложностях, с которыми столкнулся лично я во время написания собственного приложения. Оно полностью написано на SwiftUI и выложено в App Store.

Какие проблемы могут встретиться во время разработки? Давайте разбираться.

Читать далее

Книга «Swift. Основы разработки приложений под iOS, iPadOS и macOS. 6-е изд. дополненное и переработанное»

Время на прочтение8 мин
Охват и читатели19K
image Привет, Хаброжители! Язык Swift прост, понятен и отлично подойдет как новичкам, так и опытным программистам. Чтобы начать писать код, вам потребуются только эта книга, компьютер и желание учиться. Все базовые концепции программирования и основы синтаксиса объясняются доступным языком, поэтому если вы никогда раньше не занимались разработкой, то эта книга — отличный старт. Теория чередуется с практическими примерами и кодом — так вы сразу сможете связать абстрактные понятия с реальными ситуациями. В каждой главе вас ждут тесты и домашние задания, которые помогут закрепить материал.
Читать дальше →