Что такое copy-on-write?
Что такое COW или какой механизм может помочь сохранить нашу память при работе со структурами?
Открытый объектно-ориентированный язык
Что такое copy-on-write?
Что такое COW или какой механизм может помочь сохранить нашу память при работе со структурами?
Привет, Хабр!
Меня зовут Ахмат. Я iOS QA Automation Engineer - в Vivid Money.
В этой статье я хочу рассказать про взаимодействие с alerts и permissions в iOS тестах и показать, как их можно эффективно обрабатывать в своём проекте.
Данная статья будет полезна начинающим iOS-автоматизаторам, либо разработчикам, которые решили изучить XCUITest и покрыть свой проект ui-тестами.
В рамках статьи мы разберем:
Вы скорее всего знаете, как это бывает: пишешь код, пишешь, а в итоге получаешь настолько большой модуль, что полностью теряешь над ним контроль. И всё это добро изменяется со страшным скрипом, расширяется медленно и совсем не покрывается тестами. Ровно это с нами и произошло.
Меня зовут Саша, я iOS-разработчик в hh.ru. В сегодняшней статьей расскажу, как мы ушли от этого монструозного ужаса и что у нас в итоге получилось. Спойлер, мы использовали стейт-машину.
Всем привет, на связи Никита и Технократия! В прошлой статье мы уже обсудили проблемы текущего состояния concurrency в Swift. Давайте двигаться дальше и сегодня мы начнем свое знакомство с необходимой базой для async/await в Swift 5.5
Приложение написано на сценах. Root-контроллер называется DisplayViewController
. Лейбл с введенными цифрами обернули в контейнер DisplayView
и добавили жесты LongPress, Swipe и Tap.
Согласно последнему опросу российских команд iOS разработки made by iOS Good Reads, архитектура MVVM занимает лидирующую строчку в хит-параде, этого подхода придерживаются 59% опрошенных. А как известно, наиболее частый спутник MVVM - реактивный подход. Наша команда Upstarts - не исключение, мы используем MVVM + RxSwift последние 5 лет на большинстве проектов, и за это время столкнулись с множеством проблем и челленджей, написали десятки расширений, оберток и сформировали свой собственный пул инструментов для максимального удобства работы с RxSwift.
В этом материале я раскрою и предложу решение для одной из самых распространенных проблем при работе с Rx свойствами - инкапсуляцией прав на чтение / запись, а также предложу удобную запись для инкапсулированных Rx свойств.
Компания Apple только что анонсировала фреймворк Swift Charts, который мы можем использовать для создания диаграмм в наших приложениях. Судя по беглому взгляду на API, фреймворк может предоставить гораздо больше, чем базовые диаграммы, создаваемые такими приложениями, как Numbers и т.д. В этой статье хотелось бы поделиться первыми экспериментами с API.
Для примеров будем использовать набор данных о популярных именах.
Как и многие iOS разработчики, я столкнулся с дилеммой: какой объект использовать для построения архитектуры проекта. Взять для примера реализацию паттерна фасад. Этот объект должен принять некоторое количество сущностей и реализовать методы для упрощенного доступа к ним. Если не вдаваться в подробности, то подойдет и класс, и структура: оба могут инкапсулировать объекты и функции. Так что же выбрать?
Так или иначе, все реже можно найти приложение, которое не требует создания аккаунта для полноценной работы. В связи с этим возникает необходимость в некоторого рода защищенном хранилище аутентификационных данных. В iOS для этих целей используется framework Security и его сервис KeyChain. Далее будет описан подход для работы с этим сервисом.
Вряд ли можно представить хоть одно приложение, которое не требует сохранения настроек пользователя. Очевидно, что для этих целей существует масса решений, и каждое из них решает одну, конкретную задачу. Сегодня речь пойдет о постоянном хранилище данных UserDefaults и его использовании для хранения данных.
Всем привет, с вами я, Анна Жаркова, ведущий разработчик компании Usetech.
Неделя тематических сессий в самом разгаре. Сегодня поговорим о SwiftUI, какие же новинки были уже представлены и озвучены.
В этой версии ставку сделали как на поддержку новых возможностей iOS, так и на улучшение и доработку уже существовавших. Основными направления развития SwiftUI стали:
1. Поддержка нового фреймворка для графиков Charts.
2.Навигация (своя, родная, нативная).
3.Сложные контролы.
4.Поддержка шаринга.
5.Графика и разметка.
Предлагаю рассмотреть их детальнее.
Charts
Начнем по порядку с API для графиков.
Всем привет, с вами я, Анна Жаркова, ведущий разработчик компании Usetech.
Итак, долгожданная ежегодная презентация WWDC состоялась, мы готовы обсудить представленные новинки и анонсированные сессии. В этом году на Keynote основной упор был сделан на:
- игры и разработку
- иммерсивный звук и изображение
- многооконность
- расширенный и улучшенный шаринг, механизмы обмена самыми разными данными и совместные процессы, взаимодействие между устройствами
- улучшенные возможности отслеживать состояние здоровья и физическую активность
Разумеется, полноценная поддержка такого функционала требует хорошего производительного железа, которое и было представлено, а также программных средств, механизмов, API и функционала для разработки производительных приложений с поддержкой улучшенного перформанса, управления памятью, безопасности, а также всех представленных возможностей.
Сразу скажу, что все сессии упомянуть не возможно. В этом году их много, они довольно разнообразные и разноплановые. От улучшений уже известных нам фреймворков (SwiftUI, WidgetKit, SharePlay) до совсем новых (WeatherKit, ScreenCaptureKit). Также верно сказано, что описания сессий в этом году не сильно многословны, видимо, что подстегнуть зрителей к просмотру всех.
Помните времена, когда дизайнеры рисовали незамысловатые интерфейсы, а разработчики просто описывали переходы от одного экрана к другому? Вот и я не помню. Современное iOS-приложение – это тысячи строк кода, где добрая четверть – всего лишь описание навигации. Закономерно, что для упрощения жизни появляются различные фреймворки для навигации.
Меня зовут Тимур Шафигулин, я – iOS-разработчик в hh.ru. В этой статье я расскажу про фреймворк для навигации в iOS-приложении.
Всем привет! Меня зовут Никита, я работаю в компании Технократия и занимаюсь iOS-разработкой. С сегодняшнего дня мы начинаем регулярный выпуск статей, в которых я буду рассказывать о современном подходе к написанию асинхронного кода в Swift.
Данный мини-курс будет логически разбит на серию небольших статей, в которых мы постепенно будем усложнять темы и смотреть на все более интересные примеры с использованием новой технологии.
Захват self в замыкании — обычная вещь в Swift, которая скрывает множество нюансов. Нужно ли делать его weak, чтобы избежать цикла ссылок? И является ли проблемой сделать его weak постоянно?
Один из распространенных UI элементов в iOS является UICollectionView.
Часто при построении таких коллекций возникает необходимость обновления данных, например добавления новых ячеек в коллекцию.
Рассмотрим простой пример - список новостей, вертикальный UICollectionView. При пролистывании списка вниз, необходимо подгружать старые новости. В данном случае все просто - нужно обновить данные и выполнить один из методов:
Привет! Меня зовут Владислав Сединкин, я работаю iOS-разработчиком в СберМаркете. Сегодня я расскажу, как мы проводим юнит-тестирование, с какими сложностями сталкивались при написании тестов и как их решали.
Я выступал с этим докладом на iOS Meetup | СберМаркет Tech, здесь его сжатая версия.
В этой статье я расскажу о проблемах с которыми я столкнулся при подключении тяжелых зависимостей к iOS проекту с помощью Swift Package Manager и о способе их решения.
Достаточно плотно разработкой программного обеспечения для часов я занимаюсь с 2017 года. За этот период сменилось 4 версии WatchOS (5, 6, 7, 8). Появилось больше функционала и исправлено множество баг с внедрением каждой новой версии Swift. Complications стали более самостоятельной частью приложения.
За 5 лет работы в сфере разработки приложений для часов мне пришлось столкнуться с множеством различных проблем и задач. Я хотел бы поделиться опытом и получить критические замечания относительно проделанной работы. Заранее сделаю оговорку, что решения, используемые в моей разработке, не претендуют на истинно верные. Не буду спорить, что что-то можно было бы сделать по-другому и лучше.