Pull to refresh
-4
2.4
Send message

Test Plans — теперь по умолчанию для новых проектов с Xcode 14.3

Reading time2 min
Views1.4K

Начиная с Xcode 11, когда Apple представила Xcode Test Plans для более простого и более настраиваемого управления тестированием и его выполнения, — и новые, и уже существующие проекты приходилось вручную переводить на использование новой системы или создавать новые планы тестирования с нуля. Для тех, кто не знаком: планы тестирования позволяют одному файлу управлять одной или несколькими тестовыми конфигурациями для набора тестов; допускают использование нескольких языков, смоделированных локаций, настроек тестирования и многое другое в одном тестовом запуске. Они могут сэкономить массу времени главным образом для локализованных приложений, приложений с белой меткой или сценариев со сложными конфигурациями сборки.

Переход на планы тестирования не требует больших усилий, вам нужно открыть существующую схему и перейти в раздел Test, а затем нажать кнопку Convert to use Test Plans

Читать далее

Как не потерять голову (и память) при поиске утечек в iOS

Level of difficultyMedium
Reading time6 min
Views11K

Всем привет! Меня зовут Фируза, я занимаюсь iOS-разработкой в компании SimbirSoft. Хочу поделиться результатами исследования утечек памяти, с которыми я столкнулась на одном из проектов.

Все началось с того, что я заметила подтормаживания UI и обратила внимание на рост занимаемой памяти в процессе использования приложения. В пределах нескольких сценариев расход памяти незначительно колебался – объекты создавались и освобождались. Другие сценарии при непродолжительном использовании приводили к значительному росту памяти, используемой приложением. При активном и продолжительном использовании могут «убежать» сотни мегабайт.

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

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

Читать далее

Освоение диаграмм в SwiftUI. Доступность

Reading time3 min
Views1K

Последний, но не менее важный пост в серии — о доступности. Важно сделать ваше приложение доступным для пользователей VoiceOver. Как правило, гораздо сложнее сделать доступным ваш визуальный контент. К счастью, Apple предоставляет функции аудиографики, которая позволяет нам отображать любую диаграмму с помощью звука. На этой неделе мы узнаем, как улучшить доступность наших графиков с помощью фреймворка Swift Charts.

Прежде всего, я должен отметить, что фреймворк Swift Charts понимает ваши данные и автоматически бесплатно создает дерево (*древовидную схему) доступности для вашей диаграммы. Вам не потребуется выполнять никаких специальных действий, чтобы сделать вашу диаграмму доступной при использовании фреймворка Swift Charts.

Читать далее

Реализация спойлеров в SwiftUI

Reading time4 min
Views1.6K

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

Читать далее

Отладка SwiftUI с пользовательским модификатором вью

Reading time3 min
Views560

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

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

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

Читать далее

Примеры анимаций, зависящих от прокрутки содержимого UIScrollView

Level of difficultyEasy
Reading time4 min
Views2.1K

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

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

Разбираем ошибки начинающих iOS-разработчиков

Level of difficultyMedium
Reading time19 min
Views15K

Привет! Я Александра Башкирова, iOS-инженер в Clover и старший код-ревьюер на курсе «iOS-разработчик» в Яндекс Практикуме. На момент подготовки этой статьи мы уже проверили более тысячи работ студентов и успели заметить повторяющиеся ошибки.

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

Читать далее

Анимация UIView, зависящая от прокрутки содержимого UIScrollView

Level of difficultyMedium
Reading time9 min
Views4K

Узнайте, как сделать ваше iOS-приложение более динамичным с помощью анимации UIView, связанной с прокруткой UIScrollView

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

Произвольное вращение линейного градиента SwiftUI

Reading time2 min
Views700

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

Однако всякий раз, когда я использовал их раньше, я использовал только встроенные значения direction (направления):.top,.topTrailing,.leading и т. д. И, если быть честным, это были единственные варианты, которыми я располагаю.

Читать далее

iOS-разработка со SnapKit: спасаем консоль от простыни ошибок и ускоряем отрисовку UI

Level of difficultyMedium
Reading time15 min
Views16K

Привет, я Даша, занимаюсь iOS‑разработкой в Сравни. Мы в мобильной команде пользуемся SnapKit — помогает нам ревьюить изменения в общих компонентах быстрее и проще. Инструмент прекрасный, но я заметила тенденцию: стоит в работе появиться сложным вариантам вёрстки, как сразу в разы растёт вероятность, что UI может выглядеть ок, а в консоли будет отображаться множество ошибок LayoutConstraints, логи засоряются, найти действительно полезную информацию становится сложнее.

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

Читать далее

Разделяй и властвуй. Как разбить приложение на модули в XCode

Level of difficultyMedium
Reading time5 min
Views2.8K

Привет! На связи команда Joy Dev. Представим ситуацию, вы работаете над проектом, дела идут хорошо, проект растет, и в какой‑то момент вас в команде становится все больше и больше! Проект вырастает, и становится много модулей и фич, но появились проблемы:

Читать далее

Controller, но не Massive: реализуем список карточек для iOS 13+ и 11+ с учетом практик чистого кода

Reading time9 min
Views4.4K

Привет! Когда мне по работе понадобилось реализовать список карточек на связке UICollectionView и UICollectionViewCompositionalLayout для iOS 13+, я не нашел хорошего примера. Написал свой и хочу поделиться с сообществом. А заодно показать реализацию для iOS11+.

Примеры можно адаптировать под свои задачи, а все исходники вы найдете в Github-репозитории в конце поста. Поехали!

Читать далее

Стилизация компонентов в SwiftUI

Reading time18 min
Views5.5K

SwiftUI имеет отличный API для стилизации view независимо от их реализации. В этом посте мы рассмотрим, как мы можем стилизовать пользовательские view таким же образом.

В прошлом году в ходе нескольких эпизодов на Swift Talk мы продемонстрировали, как создать собственный степпер для увеличения и уменьшения значения. Он был похож на Stepper в SwiftUI, но с API, который делает его стильным.

Этот пост является кратким изложением того, что мы рассмотрели тогда, а также несколькими приёмами, которым мы научились с тех пор, чтобы наши пользовательские стили view (представление, вью, вьюшка) работали ещё лучше, как built‑in (встроенные) в SwiftUI. В последующем посте мы рассмотрим несколько более продвинутых вариантов использования.

Читать далее

Перенос URLSessionTask в background URLSession при уходе приложения в фон

Level of difficultyMedium
Reading time14 min
Views6.3K

Всем привет. Всем привет. Меня зовут Максим Батраков и я iOS-разработчик в 65apps. В этой статье я хочу рассказать о некоторых особенностях работы с URLSession, разобрать загрузку файлов в background URLSession и показать процесс переноса выполнения активных запросов в background URLSession после того, как приложение ушло в фон.

Читать далее

Отслеживание местоположения при наведении в SwiftUI

Reading time3 min
Views1.2K

Какое-то время у нас был только модификатор onHover(perform:) в SwiftUI, который вызывается, когда пользователь перемещает указатель над рамкой view (представление, вью, вьюшка) или от неё. Раньше не было официального способа непрерывного отслеживания местоположения указателя. Это изменилось с введением onContinuousHover(coordinateSpace:perform:) в macOS 13 и iPadOS 16.

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

Читать далее

Live coding интервью для iOS разработчиков

Level of difficultyMedium
Reading time12 min
Views13K

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

Какие проблемы должен уметь решать каждый iOS разработчик? Как оценить широту и глубину знаний кандидата?

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

Читать далее

Пишем типизированный DI-контейнер для iOS приложения. Часть 2. Жизненные циклы

Reading time8 min
Views2.5K

Привет! На связи KTS и наш привлеченный эксперт по направлению iOS-разработки Александр.

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

В первой статье мы рассказали о своём понимании Dependency Injection, какие бывают зависимости и откуда их получать. Разобрались в паттерне Dependency Container, написали собственную реализацию и поняли, какую проблему он решает.

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

Если вы готовы, погнали! ?

Читать далее

5 шагов для устранения «рунглиша» из ИТ-переводов

Level of difficultyEasy
Reading time6 min
Views8.2K

К моим словам прошу относиться со здоровой долей скепсиса, ибо я не нейтив-спикер, а просто ИТшный переводчик-редактор (пусть даже и с 20-летним опытом).

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

Эту памятку или «дорожную карту» я опубликовал в своем телеграм-канале несколько месяцев назад, многократно её обкатал на проектах, и убедился в ее применимости — поэтому вешаю ниже.

Шагов в этой памятке 5:

Читать далее

NSPredicate: старый API с новыми сюрпризами

Reading time4 min
Views1K

Недавно я работал с NSPredicate — API, который существует с момента выхода Mac OS X Tiger в 2005 году — и в довольно простой ситуации на самом деле все оказалось не так, как я ожидал.

Я имплементировал поддержку Apple Shortcuts в свое приложение для чтения, чтобы пользователи могли создавать автоматизированные рабочие процессы и заметил, что некоторые запросы статьи на основе свойств с использованием EntityPropertyQuery не выдавали их ожидаемое количество. У меня было четырнадцать статей, сохраненных на симуляторе iPad. Четыре из них были написаны лично мной. Однако когда я осуществлял поиск статей, автором которых был не "Дуглас Хилл (Douglas Hill)", получилось всего два результата вместо ожидаемых десяти.

Читать далее

Information

Rating
1,249-th
Registered
Activity