Pull to refresh
0
@Black-Opiumread⁠-⁠only

iOS developer

Send message

Логи Xcode — читаем самостоятельно?

Level of difficultyHard
Reading time10 min
Views4K

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

Читать далее
Total votes 4: ↑4 and ↓0+4
Comments0

MVP with Router

Level of difficultyMedium
Reading time6 min
Views5.4K

Данная статья - моя попытка разобраться и объяснить архитектурный паттерн MVP with Router.

Про сам паттерн MVP в на просторах интернета можно найти довольно много информации, например по следующей ссылкам:

Архитектурные паттерны в iOS

Архитектурные паттерны в iOS: страх и ненависть в диаграммах. MV(X)

А вот про разновидность данного паттерна, которая решает проблему сборки, возникающую при использовании MVP информации не так уж и много. Давайте попробуем разобраться что такое Router применительно к паттерну MVP, зачем он нужен и как его использовать.

Читать далее
Rating0
Comments3

OptionSet в деталях

Level of difficultyEasy
Reading time3 min
Views2.2K

Элементарный тип OptionSet в Swift кроет в себе много интересного. Почему набор опций представлен массивом а не Set, как работает алгебра множеств и когда его можно применить в повседневных задачах

Читать далее
Total votes 1: ↑1 and ↓0+1
Comments0

Раскладываю Swift Runtime на детали

Level of difficultyMedium
Reading time9 min
Views7.7K

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

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

Привет, меня зовут Александр Пахомов, я работаю в Альфа-Банке на проекте для юридических лиц Альфа Бизнес Мобайл. В статье расскажу про Runtime:

— покопаемся в исходниках: узнаем на каком языке написан и что делает;
— напишем простой код, скомпилируем и посмотрим как он выглядит на уровне SIL и IR;
— добавлю в мой исходный код функцию swift_releaseи посмотрю результат;
— узнаю, что будет, если не учесть ‘name mangling’;
— и покажу ненастоящую функцию.

Читать далее
Total votes 37: ↑37 and ↓0+37
Comments1

Thread Safety in Swift

Reading time11 min
Views3.5K

Потокобезопасность в Swift

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

Читать далее
Rating0
Comments3

Про многопоточность 3. Operation

Level of difficultyMedium
Reading time20 min
Views5.7K

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

Читать далее
Rating0
Comments1

Учимся генерировать код из OpenAPI, делать автоверсионирование, разрабатывать мобильные SDK и растить команду без ошибок

Level of difficultyMedium
Reading time4 min
Views2.7K

Всем привет от команды ЮMoney!

Делимся докладами с нашего недавнего митапа Red Hot Chili Apples для iOS-разработчиков.

Кому рекомендуем посмотреть:

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

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

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

Всем, кто хочет научиться делать идеальную маркетинговую и внутреннюю версии приложения.

Смотреть доклады
Total votes 3: ↑3 and ↓0+3
Comments0

Дебаггинг приложения без Xcode. Зачем?

Level of difficultyMedium
Reading time18 min
Views5.3K

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

Привет, меня зовут Владимир Петров, я iOS разработчик в Альфа-Банке. Я вам расскажу как мы сделали свой дебаг-инструмент и научились дебажить наше приложение без Xcode. Обратите внимание на статью, если думали над тем, чтобы делать свое решение или готовое — расскажу, какая там может быть функциональность.

Читать далее
Total votes 25: ↑25 and ↓0+25
Comments10

Swift Utilities — Потокобезопасное свойство

Level of difficultyEasy
Reading time2 min
Views1.4K

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

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

Читать далее
Total votes 2: ↑1 and ↓1+2
Comments2

Стеки и Очереди в Swift

Level of difficultyEasy
Reading time6 min
Views2.2K

В этой статье мы исследуем две фундаментальные структуры данных, которые являются неотъемлемой частью программирования на Swift: стеки и очереди. Они представляют собой коллекции элементов с особыми правилами для добавления и удаления элементов. Стеки работают по принципу "последним пришел, первым ушел" (LIFO), что делает их идеальными для задач, связанных с обратной навигацией или отменой действий. Очереди, следуя принципу "первым пришел, первым ушел" (FIFO), идеально подходят для задач, требующих обработки элементов в порядке их поступления, например, в управлении задачами или потоками данных.

Читать далее
Total votes 4: ↑2 and ↓2+2
Comments6

Task и structured concurrency в swift

Reading time16 min
Views3.9K

В данной части из серии статей про Swift concurrency мы подробно остановимся на сущности под названием Task и разберем на примерах, как с ней работать. Также поговорим про structured concurrency. Что это такое, как это понятие связано с Task и почему механизмы языка async/await structured, но не concurrent.

Помимо этого, мы разберем инструменты и механизмы structured concurrency. Среди них async let, Task hierarchy и Task cancellation. И, как обычно, не оставлю вас без примеров применения этого букета конкуррентности.

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments5

Как работает async/await в Swift

Level of difficultyHard
Reading time27 min
Views5.1K

Функция async/await в Swift появилась в iOS 15, и я полагаю, что на данный момент вы уже знаете, как ее использовать. Но задумывались ли вы когда-нибудь о том, как работает async/await изнутри? Или, может быть, почему выглядит и ведет себя именно так? Или даже почему вообще была представлена?

В типичной для SwiftRocks манере мы углубимся в компилятор Swift, чтобы ответить на вопросы о том, как работает async/await внутри. Это не инструкция по использованию async/await, а глубокое погружение в историю и реализацию этой функции, чтобы понять, как она работает, почему она работает, чего можно добиться с ее помощью и, самое главное, какие нюансы следует учитывать при работе с ней.

Читать далее
Total votes 11: ↑11 and ↓0+11
Comments0

Делаем вездесущий Splash Screen на iOS

Reading time10 min
Views27K


Привет Хабр!

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

Для многих разработчиков, участвующих в крупных проектах, решение задач, связанных с созданием красивой анимации, становится глотком свежего воздуха в мире багов, сложных фичей и хот-фиксов. Такие задачи относительно просты в реализации, а результат радует глаз и выглядит очень впечатляюще! Но бывают случаи, когда стандартные подходы не применимы, и тогда нужно придумывать всевозможные обходные решения.
Читать дальше →
Total votes 40: ↑40 and ↓0+40
Comments4

Swift. Менеджер сетевых запросов. DataLoader

Reading time11 min
Views3.7K

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

Читать далее
Total votes 5: ↑4 and ↓1+3
Comments2

Диспетчеризация методов iOS

Reading time6 min
Views9.3K

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

Читать далее
Total votes 4: ↑4 and ↓0+4
Comments4

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

Reading time8 min
Views2K

Мы продолжаем сражаться с шаблонным кодом в табличных экранах iOS-приложений. 

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

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

В этой статье рассмотрим, как избавиться и от такого кода. 

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments0

[Async/await] Structured concurrency Pt.1

Reading time7 min
Views3.9K

Всем привет! Мы продолжаем разбираться в асинхронном Swift! В рамках этой статьи мы познакомимся с тем, как писать зависящие друг от друга асинхронные задачи, познакомимся с Task поближе и разберем несколько интересных  примеров

Читать далее
Total votes 2: ↑1 and ↓10
Comments0

Создание анимаций для навигации в iOS

Reading time9 min
Views2.8K

Всем привет! Я хочу поделится своим опытом реализации кастомных переходов между экранами в iOS. Несмотря на то, что тема эта достаточно популярная, и очень многие дизайнеры хотят привнести в процесс перехода какую-то свою изюминку (затемнение, параллакс и т. п.), реализация этих вещей не очень тривиальна. Я попробую разложить все по полочкам. Рассмотрим сначала стандартное решение, которое не особо гибкое, но зачастую достаточное для многих проектов. Затем реализуем полностью кастомное и контролируемое исключительно нами решение.

Итак, погнали!
Total votes 2: ↑2 and ↓0+2
Comments0

Статические и динамические фреймворки на iOS — обсуждение с ChatGPT

Reading time11 min
Views3.7K

Статические и динамические фреймворки на iOS - обсуждение с ChatGPT

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

Читать далее
Total votes 3: ↑0 and ↓3-3
Comments0

Более Быстрые Сборки Apple с помощью lld Linker

Reading time5 min
Views1.6K

Более Быстрые Сборки Apple с помощью lld Linker.

Linker - Компоновщик (также редактор связей, от англ. link editor) — инструментальная программа, которая производит компоновку («линковку»): принимает на вход один или несколько объектных модулей и собирает из них исполняемый или библиотечный файл-модуль.

Читать далее
Total votes 4: ↑4 and ↓0+4
Comments0
1

Information

Rating
Does not participate
Location
Махачкала, Дагестан, Россия
Registered
Activity