Универсальный датасорс (хранилище данных) в iOS-разработке
Такие решения предоставляют разработчикам API для доступа к данным в коллекциях без привязки к конкретному источнику и типу данных.
📖 В статье на хабре рассматриваются:
🔘 Cтандартные подходы к регистрации и конфигурации ячеек в коллекции.
🔘 Альтернативный подход с использованием
🔘 Пример реализации универсального датасорса (на базе
🔘 Преимущества, особенности, сложности и недостатки подхода.
😃 iOS Dev
Такие решения предоставляют разработчикам API для доступа к данным в коллекциях без привязки к конкретному источнику и типу данных.
📖 В статье на хабре рассматриваются:
🔘 Cтандартные подходы к регистрации и конфигурации ячеек в коллекции.
🔘 Альтернативный подход с использованием
ViewRegistration
.🔘 Пример реализации универсального датасорса (на базе
Diffable Datasource
)🔘 Преимущества, особенности, сложности и недостатки подхода.
Please open Telegram to view this post
VIEW IN TELEGRAM
Обновление местоположения пользователя с помощью Core Location и Swift Concurrency
😎 Мы можем создавать собственные обертки для управления доступом к основным сервисам iOS, используя возможности Swift.
Например, для решения задачи получения геолокации через
📖 А в этом материале рассказано, как написать свой
😃 iOS Dev
Например, для решения задачи получения геолокации через
Core Location
можно задействовать CheckedContinuation
.📖 А в этом материале рассказано, как написать свой
Location Manager
, запросить авторизацию и правильно обновлять локацию пользователя.Please open Telegram to view this post
VIEW IN TELEGRAM
Добавление Firebase Analytics замедляет запуск приложения на 30%
👨💻 Тестили на базовом приложении под iOS (тот, что по дефолту при создании проекта), так как его размер всего 118,5 КБ и нет доп. нагрузки.
Либы добавляли через SPM, а затем сравнивали размер и производительность каждого запуска.
📖 Интересные выводы и результаты других SDK в этом посте. Кстати, тут же и объясняется, почему выбрали относительное, а не абсолютное время сравнения.
😃 iOS Dev
Emerge Tools
замерила производительность топовых аналитических SDK для iOS. Либы добавляли через SPM, а затем сравнивали размер и производительность каждого запуска.
📖 Интересные выводы и результаты других SDK в этом посте. Кстати, тут же и объясняется, почему выбрали относительное, а не абсолютное время сравнения.
Please open Telegram to view this post
VIEW IN TELEGRAM
8 советов по оптимизации приложения для iOS
📺 Itay Brenner и Vincent Pradeilles дают практические советы и разбирают способы повышения производительности в видео.
Более детально разделы доступны по следующим тайм-кодам:
1️⃣ Работа с бинарными символами.
2️⃣ Шаринг кода и ресурсов.
3️⃣ Оптимизация ассетов.
4️⃣ Сохранение основного потока лёгким по возможности.
5️⃣ Использование Static Dispatch.
6️⃣ Разбор менеджеров пакетов, их преимущества и недостатки.
7️⃣ Оптимизация CoreML-моделей.
8️⃣ Про постоянные улучшения.
😃 iOS Dev
📺 Itay Brenner и Vincent Pradeilles дают практические советы и разбирают способы повышения производительности в видео.
Более детально разделы доступны по следующим тайм-кодам:
1️⃣ Работа с бинарными символами.
2️⃣ Шаринг кода и ресурсов.
3️⃣ Оптимизация ассетов.
4️⃣ Сохранение основного потока лёгким по возможности.
5️⃣ Использование Static Dispatch.
6️⃣ Разбор менеджеров пакетов, их преимущества и недостатки.
7️⃣ Оптимизация CoreML-моделей.
8️⃣ Про постоянные улучшения.
Please open Telegram to view this post
VIEW IN TELEGRAM
Для этого нужно будет использовать
StoreKit External Purchase Link Entitlement
, выполнить ряд условий и заполнить форму.При этом комиссия Apple составит 27 % от выручки.
Важнейший шаг к альтернативным сторам?
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Swift-библиотека для моделирования и визуализации графов
⭐️ Её целью является расположение узлов графа так, что все рёбра имели бы более-менее одинаковую длину, ну и свести к минимуму число пересечений рёбер.
Часто подобное можно увидеть в визуализации соцсетей, связей страниц в той-же вики, например, и так далее.
Вы наверняка видели разные реализации таких штук на других языках, но вдруг вам пригодится и такое решение.
🛠 Сама либа от Zhen Li доступна здесь, и получившийся итог завораживает!
😃 iOS Dev
Часто подобное можно увидеть в визуализации соцсетей, связей страниц в той-же вики, например, и так далее.
Вы наверняка видели разные реализации таких штук на других языках, но вдруг вам пригодится и такое решение.
🛠 Сама либа от Zhen Li доступна здесь, и получившийся итог завораживает!
Please open Telegram to view this post
VIEW IN TELEGRAM
Комбинирование разных типов диаграмм для создания уникального дизайна
Существует множество различных типов графиков.
Они просты в использовании и обладают широкими возможностями настройки.
📖 Например, в этой статье автор создаёт комбинированную диаграмму для отображения данных на базе
😃 iOS Dev
Существует множество различных типов графиков.
Они просты в использовании и обладают широкими возможностями настройки.
📖 Например, в этой статье автор создаёт комбинированную диаграмму для отображения данных на базе
Line Chart
и Area Chart
.Please open Telegram to view this post
VIEW IN TELEGRAM
Разделение данных на примере использования .chunked()
🧑💻 Один из самых важных источников знаний для просмотра реализации тех или иных алгоритмов — Swift Algorithms.
Например, если вы пишете много длинных и непростых для чтения циклов, то есть вполне приличный шанс, что уже существует нужный алгоритм.
🌎 Допустим, в приложении для путешествий нужно показать список всех мест, которые вы посетили или планируете посетить, отсортированных и сгруппированных по дате в порядке убывания.
📖 В этом посте рассматривается, как юзать алгоритм
😃 iOS Dev
Например, если вы пишете много длинных и непростых для чтения циклов, то есть вполне приличный шанс, что уже существует нужный алгоритм.
🌎 Допустим, в приложении для путешествий нужно показать список всех мест, которые вы посетили или планируете посетить, отсортированных и сгруппированных по дате в порядке убывания.
📖 В этом посте рассматривается, как юзать алгоритм
.chunked()
для разделения массива и отображения результатов в нужном виде.Please open Telegram to view this post
VIEW IN TELEGRAM
Диспетчеризация потоков и Actors: как их использовать
Акторы обеспечивают выполнение кода в определенном потоке (например, в основном или фоновом).
Они помогают синхронизировать доступ к мутабельным состояниям и предотвращать потенциальные гонки данных.
📖 В этой статье рассматривается, что происходит при вызове методов, помеченных любым атрибутом
😃 iOS Dev
Акторы обеспечивают выполнение кода в определенном потоке (например, в основном или фоновом).
Они помогают синхронизировать доступ к мутабельным состояниям и предотвращать потенциальные гонки данных.
📖 В этой статье рассматривается, что происходит при вызове методов, помеченных любым атрибутом
actor
и как избегать непредвиденных сбоев приложения при определенных контекстах.Please open Telegram to view this post
VIEW IN TELEGRAM
Как учить переполненный мозг или про способности решать сложные задачи
📖 Одна из самых крутых и интересных статей на хабре — про математические способности и то, как сейчас люди современности подходят к решению тех или иных проблем.
Автор уделяет особое внимание тому, что сейчас студенты решают задачи хуже, чем раньше. Отчасти из-за многообразия таких простых в освоении и доступных инструментов (
Но важно отметить, что уровень развития человека сегодня, и, например, в 1930 году абсолютно несопоставим. Те, кто сегодня умеренно справляются с математическими (не только) задачами, раньше считались бы едва ли не гениями.
Масштабные исследования на счёт этого можно прочитать здесь (кстати, там упоминается и GTA, и Zelda в качестве примеров тренировок).
На мой взгляд, именно поэтому особенно важно создавать вызовы, например, реализацию своего компонента, или же рассмотреть принципы тех или иных алгоритмов и попробовать найти их преимущества.
Вообще, книги про тренировки мозга, особенно те, которые дают какие-то рекомендации я не считаю панацеей. И их можно учитывать только как взгляд со стороны, но не руководство к действию.
Несмотря на это, не могу не отметить диаграмму выше. Вы же слышали про состояние потока?
Диаграмма основана на исследованиях о вызовах в процессе наших с вами задач (тут 📺 лекция).
🚩 Вкратце, чтобы достичь такого состояния, нужно, чтобы уровень задач оказался выше среднего, а уровень навыков при этом позволил с ними справляться. Во всех других ситуациях может возникнуть или апатия, или уровень стресса будет слишком высок.
😃 iOS Dev
📖 Одна из самых крутых и интересных статей на хабре — про математические способности и то, как сейчас люди современности подходят к решению тех или иных проблем.
Автор уделяет особое внимание тому, что сейчас студенты решают задачи хуже, чем раньше. Отчасти из-за многообразия таких простых в освоении и доступных инструментов (
google lens
, chatgpt
, и так далее).Но важно отметить, что уровень развития человека сегодня, и, например, в 1930 году абсолютно несопоставим. Те, кто сегодня умеренно справляются с математическими (не только) задачами, раньше считались бы едва ли не гениями.
Масштабные исследования на счёт этого можно прочитать здесь (кстати, там упоминается и GTA, и Zelda в качестве примеров тренировок).
На мой взгляд, именно поэтому особенно важно создавать вызовы, например, реализацию своего компонента, или же рассмотреть принципы тех или иных алгоритмов и попробовать найти их преимущества.
Вообще, книги про тренировки мозга, особенно те, которые дают какие-то рекомендации я не считаю панацеей. И их можно учитывать только как взгляд со стороны, но не руководство к действию.
Несмотря на это, не могу не отметить диаграмму выше. Вы же слышали про состояние потока?
Диаграмма основана на исследованиях о вызовах в процессе наших с вами задач (тут 📺 лекция).
Please open Telegram to view this post
VIEW IN TELEGRAM
Способы измерения производительности Swift-кода
Если какая-то часть приложения оказывается медленной, например, по результатам
Для этого можно попробовать:
🔘 Написание юнит-теста в проекте Xcode.
🔘 Использование Playground
🔘 Написание юнит-теста и его использование через терминал.
📖 Более детально с этими способами и выводами можно ознакомиться в этом материале.
😃 iOS Dev
Если какая-то часть приложения оказывается медленной, например, по результатам
Time Profiler
в инструментах, то необходимо знать способы для улучшения этого кода.Для этого можно попробовать:
🔘 Написание юнит-теста в проекте Xcode.
🔘 Использование Playground
🔘 Написание юнит-теста и его использование через терминал.
📖 Более детально с этими способами и выводами можно ознакомиться в этом материале.
Please open Telegram to view this post
VIEW IN TELEGRAM
Структуры данных в Swift: знакомство с базовыми понятиями
Структуры данных - это строительные блоки при разработке программного обеспечения.
📖 В этой вводной статье, особенно полезной для новичков, рассматриваются различные структуры данных, доступные в Swift, их применение и несколько простых примеров кода.
😃 iOS Dev
Структуры данных - это строительные блоки при разработке программного обеспечения.
📖 В этой вводной статье, особенно полезной для новичков, рассматриваются различные структуры данных, доступные в Swift, их применение и несколько простых примеров кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
Реализация загрузки и сохранения офлайн-карт в приложении от автора Pedometer++
🗺️ Как правило, большинство приложений используют принцип определения прямоугольной области, которую необходимо покрыть загружаемыми картами, и затем сохраняют эту область в список наборов автономных карт.
У такого подхода есть ряд преимуществ, но автор решил использовать свой вариант благодаря использованию системы карт XYZ/Slippy.
В этой системе при каждом увеличении разрешения масштабирования количество тайлов на нижнем уровне увеличивается в четыре раза.
📖 А вот тут можно узнать, с какими сложностями можно столкнуться и через какие этапы нужно пройти для такой реализации.
😃 iOS Dev
У такого подхода есть ряд преимуществ, но автор решил использовать свой вариант благодаря использованию системы карт XYZ/Slippy.
В этой системе при каждом увеличении разрешения масштабирования количество тайлов на нижнем уровне увеличивается в четыре раза.
📖 А вот тут можно узнать, с какими сложностями можно столкнуться и через какие этапы нужно пройти для такой реализации.
Please open Telegram to view this post
VIEW IN TELEGRAM
По словам разработчика, Skip выступает в роли команды Android (как по мне, это слишком громко сказано), создавая эквивалентное приложение параллельно с iOS-версией.
Сердцем Skip является интеллектуальный транспилятор языка Swift в Kotlin (и еще несколько лет назад Skip был бы невозможен).
Для анализа исходного кода используется SwiftSyntax, после чего код преобразуется в Kotlin, сохраняя даже комментарии.
Благодаря схожести языков, результат часто не отличается от Kotlin, который был бы написан нативно (но с оговорками).
📖 Документация.
И хотя поддержка API по-прежнему ограничена (будут сложности с внедрением SwiftData или, например, Firebase), все библиотеки Skip имеют открытый исходный код и разработчик приглашает поучаствовать в их улучшении.
Please open Telegram to view this post
VIEW IN TELEGRAM
Знакомство с bash-скриптами для iOS-разработчиков
Использование Bash может помочь выполнить широкий спектр задач, например:
🔘 автоматизация процессов сборки;
🔘 управление файловыми системами;
🔘 запуск тестов;
🔘 развертывание приложений.
Любую команду, которую мы можем запустить в терминале, можно запустить, используя
📖 В этой статье рассмотрены основы написания скриптов и практический пример разработки для iOS, с помощью которого вы сможете создавать скриншоты для разных устройств и языков.
😃 iOS Dev
Использование Bash может помочь выполнить широкий спектр задач, например:
Любую команду, которую мы можем запустить в терминале, можно запустить, используя
Bash
.📖 В этой статье рассмотрены основы написания скриптов и практический пример разработки для iOS, с помощью которого вы сможете создавать скриншоты для разных устройств и языков.
Please open Telegram to view this post
VIEW IN TELEGRAM
Breadcrumbs: утилита-багтрекер на основе комментариев
🛠 На гитхабе есть забавная утилита, которая позволяет увидеть все комментарии
Для этого нужно запустить приложение и выбрать папку проекта. Выглядит как любопытная мысль 😉
😃 iOS Dev
🛠 На гитхабе есть забавная утилита, которая позволяет увидеть все комментарии
TODO
и FIXIT
, которые вы добавили в исходный код.Для этого нужно запустить приложение и выбрать папку проекта. Выглядит как любопытная мысль 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
Разбор особенностей протоколов в Swift
Какими бы мощными не были возможности протоколов, мы должны знать и о скрытых свойствах.
Иногда неочевидные особенности могут затруднить оценку кода, тем более когда протоколы наследуют от других протоколов.
В целом о них можно рассуждать с четырех разных точек зрения:
1️⃣ Использование в рантайме.
2️⃣ Использование во время компиляции.
3️⃣ Протоколы с ограничениями во время компиляции.
4️⃣ Синтез реализаций протокола и его влияние на время компиляции.
📖 Вот тут есть разбор различных ситуаций, которые проясняют путаницу при работе с протоколами.
😃 iOS Dev
Какими бы мощными не были возможности протоколов, мы должны знать и о скрытых свойствах.
Иногда неочевидные особенности могут затруднить оценку кода, тем более когда протоколы наследуют от других протоколов.
В целом о них можно рассуждать с четырех разных точек зрения:
1️⃣ Использование в рантайме.
2️⃣ Использование во время компиляции.
3️⃣ Протоколы с ограничениями во время компиляции.
4️⃣ Синтез реализаций протокола и его влияние на время компиляции.
📖 Вот тут есть разбор различных ситуаций, которые проясняют путаницу при работе с протоколами.
Please open Telegram to view this post
VIEW IN TELEGRAM
Есть общие категории: сервер, сеть, тестирование и логирование. Но не только они. Например, представлены пакеты, содержащие макросы.
При выборе категории показаны примеры некоторых популярных пакетов для этой категории, а также полезная инфа.
Это отличный способ получить представление о разнообразии пакетов, доступных для Swift.
📖 Изучить их детальнее можно здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Flappy Dird — игра внутри MacOS Finder
Прошлая неделя оказалась немного тяжелее, чем обычно, а всё из-за короны, которая не выбирает времени, когда напасть (и это несмотря на 3 прививки в прошлом ).
🚩 И чтобы было немного проще влиться в рабочие будни, сегодня развлекательный пост.
Я люблю необычные подходы к разработке и решения, которые могут удивить. И пусть эта игра работает со скоростью 4 кадра в секунду, зато тут есть рекорды и даже баннеры.
А о сложностях, работе с AppleScript и почему игра не может работать быстрее, можно прочесть в блоге разработчика.
📖 Кстати, если вам интересен исходный код, то он в опенсорсе.
😃 iOS Dev
Прошлая неделя оказалась немного тяжелее, чем обычно, а всё из-за короны, которая не выбирает времени, когда напасть (
Я люблю необычные подходы к разработке и решения, которые могут удивить. И пусть эта игра работает со скоростью 4 кадра в секунду, зато тут есть рекорды и даже баннеры.
А о сложностях, работе с AppleScript и почему игра не может работать быстрее, можно прочесть в блоге разработчика.
📖 Кстати, если вам интересен исходный код, то он в опенсорсе.
Please open Telegram to view this post
VIEW IN TELEGRAM