Обновить
5.28

Swift *

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

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

Пошаговый урок: как начать делать что угодно для Touch Bar

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

Я не Swift разработчик, и даже не objc. У меня просто был и есть Mac с навороченной вставкой в виде Touch Bar для которой захотелось сделать кастомизацию.

Эта статья покажет всем не iOS разработчикам как можно НАЧАТЬ создавать простые приложухи (развлекательного или полезного характера) для Touch Bar с самых первых этапов.

Притупим к делу:

Приступить к делу

Построители результатов в Swift: описание и примеры кода

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

Построители результатов (result builders) в Swift позволяют получать результирующее значение из последовательности компонентов — выставленных друг за другом «строительных блоков». Они появились в Swift 5.4 и доступны в Xcode 12.5 и более поздних версиях. Ранее эти средства были известны как function builders («построители функций»). Вам, вероятно, уже приходилось использовать их при создании стеков представлений в SwiftUI.

Должен признаться: поначалу я думал, что это некая узкоспециализированная возможность Swift, которую я никогда не стану применять для организации своего кода. Однако стоило мне в ней разобраться и написать небольшое решение для создания ограничений представления в UIKit, как я обнаружил, что раньше просто не понимал всю мощь построителей результатов.

Читать далее

Вас заметили! App Tracking Transparency (ATT) для iOS 14.5

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

Недавно вышла iOS 14.5, а чуть ранее Apple предупредила разработчиков, что начиная с этой версии ОС необходимо поддерживать фреймворк AppTrackingTransparency, который позволяет получить доступ к IDFA.

Читать далее

10 расширений Swift, которые мы используем на Livefront

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

Добавьте в Swift свою собственную изюминку

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

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

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

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

Стремясь к тому, чтобы содержание ниже было относительно кратким, я не включил в описание наши юнит-тесты.

Вы можете найти Xcode Playground, используемый в этой статье, на моей странице GitHub.

Вот только 10 из многих расширений, которые мы используем в Livefront.

Читать далее

Переход вашего приложения на модули пакетов Swift

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

Приложения с течением времени будут разрастаться и без хорошей архитектуры, станут неуправляемыми и сложными в обслуживании. Здесь, в OkCupid, мы решили, что лучший способ обеспечить чистый код и хорошую организацию — это разбить кодовую базу на легко управляемые части. К счастью, Apple создала отличный инструмент, чтобы упростить эту задачу.

Читать далее

AppCode 2021.1: улучшения поддержки Swift Package Manager и быстродействия, обновление плагина Kotlin/Native и другое

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

Всем привет! 

Все IDE от JetBrains уже обновились, мы же в AppCode немного задержались, проверяя очередные улучшения в кэшировании. Но вот и у нас вышел первый релиз в этом году — AppCode 2021.1! 

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

Как мы создали фреймворк для построения графиков в iOS-приложении

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

Привет, я Сергей, iOS-разработчик в ЮKassa, занимаюсь ее мобильным приложением. Недавно в нем появился просмотр аналитики по счетам и платежам. И сегодня я расскажу, как мы реализовали эту возможность, а еще — зачем и как разработали собственный фреймворк для создания графиков.

Читать статью

Как запустить модель машинного обучения на iPhone

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

Чего уж только на Хабре не было, и DOOM на осциллографе, тесте на беременности и калькуляторе запускали, даже сервер Minecraft на зеркалке Canon 200D поднимали. Сегодня же, специально к старту нового потока курса по Machine Learning и углубленного Machine Learning и Deep Learning, попробуем описать кратчайший путь от обучения модели машинного обучения на Python до доказательства концепции iOS-приложения, которое можно развернуть на iPhone. Цель статьи — дать базовый скаффолдинг, оставляя место для дальнейшей настройки, подходящей для конкретного случая использования.

Приятного чтения

Подходы к спискам на UICollectionView

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

Уже давным давно, во всех известных нам галактиках мобильные приложения представляют информацию в виде списков - будь то доставка еды на Татуине, имперская почта или обычный ежедневник джедая. С незапамятных времен мы писали UI на UITableView и не задумывались.

Копились бесчисленные баги и знания об устройстве этого инструмента и о лучших практиках. И когда мы получили очередной infinite scroll дизайн, мы поняли: пришло время задуматься и дать отпор тирании UITableViewDataSource и UITableViewDelegate.

Читать далее

Связанные неявные выражения в Swift 5.4

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

В Swift 5.4: не явные выражения для членов классов (также известные как «точечный синтаксис») теперь могут использоваться даже при обращении к свойству или методу в результате такого выражения, пока окончательный тип возвращаемого значения остается прежним.

Читать далее

Настало время офигительных историй. Кастомные транзишены в iOS. [2/2]

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

В прошлой статье мы реализовали анимацию ZoomIn/ZoomOut для открытия и закрытия экрана с историями.

В этот раз мы прокачаем StoryBaseViewController и реализуем кастомные анимации при переходе между историями.

Читать далее

Подключаем нагрудный датчик пульса по Bluetooth на Swift

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

Подключаем нагрудный пульсометр к IOS устройству на Swift по протоколу Bluetooth без смс и регистраций.

У меня был китайский пульсометр CooSpo, MacBook, iPhone и немного свободного времени, чтобы написать данный гайд, так как информации в интернете по данной теме не совсем много, либо она не переведена на русский язык. Поэтому считаю, что данная статья будет полезна новичкам для освоения данной технологии. В принципе, вместо пульсометра может оказаться любой девайс, поддерживающий Bluetooth, поэтому вам точно будет полезно.

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

Настало время офигительных историй. Кастомные транзишены в iOS [1/2]

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

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

Читать далее

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

7 Кругов SPM или как сделать модульное приложение на Swift Package Manager

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

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

Возможно, у многих возникнет вопрос:  “Зачем разбивать с помощью SPM?”. Ведь можно просто создавать подпроекты. Можно, но в использовании SPM для разбиения есть несколько преимуществ:

Читать далее

iOS. UI. Приëмы. Часть 1

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

Привет читателям Хабра!

Я iOS-разработчик, и так случилось, что мне приходилось много делать в ui: кастомные view, тени, layout-ы, кнопки и вот это всё. В этой и паре следующих статей хочу поделиться некоторыми приёмами, которые помогали мне добиваться весьма красивых и интересных эффектов в плане рисования компонентов ui. Надеюсь, кому-нибудь это будет полезно. Ну или просто интересно.

Читать далее

Работа со сложными JSON-объектами в Swift (Codable)

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

Написать эту статью меня сподвиг почти случившийся нервный срыв, причиной которого стало мое желание научиться общаться с сторонними API, конкретно меня интересовал процесс декодирования JSON-докуметов! Нервного срыва я, к счастью, избежал, поэтому теперь настало время сделать вклад в сообщество и попробовать опубликовать свою первую статью на Хабре.

Почему вообще возникли проблемы с такой простой задачей?

Чтобы понять, откуда проблемы, нужно сначала рассказать об инструментарии, которым я пользовался. Для декодирования JSON-объектов я использовал относительно новый синтезированный (synthesized) протокол библиотеки Foundation - Сodable.

Codable - это встроенный протокол, позволяющий заниматься кодированием в объект текстового формата и декодированием из текстового формата. Codable - это протокол-сумма двух других протоколов: Decodable и Encodable.

Cтоит сделать оговорку, что протокол называется синтезированным тогда, когда часть его методов и свойств имеют дефолтную реализацию. Зачем такие протоколы нужны? Чтобы облегчить работу с их подписанием, как минимум уменьшив количество boilerplate-кода.

Еще такие протоколы позволяют работать с композицией, а не наследованием!

Вот теперь поговорим о проблемах:

Читать далее

Погружение в автотестирование на iOS. Часть 4. Ожидания в XCUITest

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

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

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

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

- Что такое ожидание и для чего они используются в тестах;

- Рассмотрим какие бывают ожидания;

- Разберем из чего состоят ожидания;

- Рассмотрим пример эффективных ожиданий в тестах.

Читать далее

Память в Swift от 0 до 1

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

В этой статье мы рассмотрим принципы работы памяти в Swift и разберемся, как Swift располагает байты в памяти, как управляет памятью и что из себя представляет жизненный цикл объектов.

Читать далее

DI в iOS: Complete guide

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

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

Читать далее

Как мы ускоряли работу отладчика Swift

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

Привет! Меня зовут Александр Скворцов, я работаю в команде Яндекс.Браузера для iOS. Это очень большой проект, который насчитывает около тысячи clang-модулей и примерно 600 Swift-модулей. Наверное, из-за таких масштабов мы чаще других наталкиваемся на проблемы инструментов разработки, например, находим критические ошибки в компиляторе, неработающую подсветку и автодополнение. Это бывает неприятно, но жить можно. 

Самая серьёзная проблема возникла с отладкой. В худшем случае с момента запуска до остановки в отладчике на точке входа в приложение проходило больше 20 минут. И это на свежем MacBook Pro 16! С таким «быстродействием» инструментов разработки невозможно эффективно развивать проект, поэтому мы решили разобраться в причинах и поискать возможные решения.

В результате получилось не только снять остроту проблемы у себя, но и внести правки в код отладчика Swift — со временем описанные в статье неприятности перестанут беспокоить всех пользователей Xcode. А теперь расскажу подробнее, как это было.

Читать далее