C чего начать изучение SwiftUI в 2023?
Как показывает практика, одна из основных сложностей для новичков в том, что брать за точку отсчёта.
Что ж, вот мои топ-3 ресурса, которые я бы рекомендовал изучать всем перед дальнейшим погружением в более сложные вещи.
➡️  SwiftUI Tutorials. 4.5 часа отборных материалов от Apple, которые при тщательном изучении сформируют начальную базу. 
➡️  Лекции Стенфорда. По ним учились несколько поколений разработчиков, доступная и понятная инфа. Плюс в том, что эти материалы уже содержат в себе изменения за 2023 год.
➡️  SwiftUI by Example на портале Hacking with Swift. Почти 600(!) страниц кода, решающих конкретные проблемы здесь и сейчас.
➡️  Develop in Swift: новая серия уроков от Apple.
😃  iOS Dev
Как показывает практика, одна из основных сложностей для новичков в том, что брать за точку отсчёта.
Что ж, вот мои топ-3 ресурса, которые я бы рекомендовал изучать всем перед дальнейшим погружением в более сложные вещи.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥36👍11❤🔥5❤2💯2👏1🤩1🏆1
  Как устроена система сборки в Xcode?
Многие инженеры могут недооценивать сложность таких систем в целом.
Например, нам в большинстве случаев не приходится настраивать шаги вручную.
Хотя, возможно, вы когда-нибудь пытались понять, почему система сборки Xcode жалуется на цикл компиляции или оптимизировали сборку, используя только билд-логи или Build Timelines, добавленные в Xcode 14.
📖 В этой статье можно узнать, что происходит Xcode при нажатии
😃  iOS Dev
Многие инженеры могут недооценивать сложность таких систем в целом.
Например, нам в большинстве случаев не приходится настраивать шаги вручную.
Хотя, возможно, вы когда-нибудь пытались понять, почему система сборки Xcode жалуется на цикл компиляции или оптимизировали сборку, используя только билд-логи или Build Timelines, добавленные в Xcode 14.
📖 В этой статье можно узнать, что происходит Xcode при нажатии
⌘+R с помощью XCBuildAnalyzer.Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍16🏆4🔥3👏3❤2🤔1💯1🆒1
  This media is not supported in your browser
    VIEW IN TELEGRAM
  Возможность юзать if и switch в качестве выражений наглядно
Такая фича для возвращаемых значений уже доступна в Swift 5.9.
📖 А вот тут можно посмотреть, какие ещё варианты возможны.
😃  iOS Dev
Такая фича для возвращаемых значений уже доступна в Swift 5.9.
📖 А вот тут можно посмотреть, какие ещё варианты возможны.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍50🔥13🤔4❤2💯2👏1🤯1🤩1🏆1
  
  iOS Dev
Новая опция в Xcode 15: форматирование кода на несколько строк  🤩  Спустя годы после того, как эту функцию запрашивали и после появления довольно популярного репозитория на Github Apple наконец выкатили фичу для разбиения кода на несколько строк. Разве не amazing!…
Кстати, в релизной версии Xcode появился шорткат для форматирования в несколько строк, дефолтно 
😎  В KeyBindings можно чекнуть 
😃  iOS Dev
Ctrl+M (но можно назначить свою комбинацию).Structure -> Format to Multiple Lines.Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍9🔥6💯3🏆2😎2👏1🆒1
  Освоение диаграмм в SwiftUI: круговые и кольцевые диаграммы
Фреймворк
Кроме этого, в них можно задействовать
📖 Посмотреть на примеры создания таких диаграмм можно здесь.
😃  iOS Dev
Фреймворк
Swift Charts принёс множество опций, среди которых, например: гистограммы, графики с применением градиента и возможность даже делать свои игры.Кроме этого, в них можно задействовать
SectorMark, который можно использовать для построения круговых или кольцевых графиков.📖 Посмотреть на примеры создания таких диаграмм можно здесь.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍13🔥3💯2🏆1
  Произошли важные изменения для URL-адресов в iOS 17.
Парсинг URL был переведён с устаревшего стандарта
RFC 1738/1808 на RFC 3986 (аналогичный тому, что используется для URLComponents). Теперь разбор URL и URLComponents унифицирован.
Если проще, теперь URL автоматически кодирует недопустимые символы и добавляет символ процента для корректного URL.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥25👍13🤯11😱8🫡3👏1😢1🏆1
  Изучение Swift Concurrency за 2 часа
📺 В этом масштабном (иначе и не сказать) видео Vincent Pradeilles рассказывает о Swift Concurrency с нескольких разных точек зрения.
А вот и сами статьи, которые Винсент использовал:
📖 Async await в Swift с примерами.
📖 Конвертация асинхронного кода в async/await в Swift.
📖 Async let: параллельный вызов async-функций.
📖 Какую роль Tasks играют в системе параллелизма Swift?
📖 Разбор Swift Tasks Groups на примере.
😃  iOS Dev  •  🐱  Доступ к алгоритмам
📺 В этом масштабном (иначе и не сказать) видео Vincent Pradeilles рассказывает о Swift Concurrency с нескольких разных точек зрения.
А вот и сами статьи, которые Винсент использовал:
📖 Async await в Swift с примерами.
📖 Конвертация асинхронного кода в async/await в Swift.
📖 Async let: параллельный вызов async-функций.
📖 Какую роль Tasks играют в системе параллелизма Swift?
📖 Разбор Swift Tasks Groups на примере.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍34🔥13❤2💯2🏆2👏1
  Продвинутые анимации в SwiftUI: протокол CustomAnimation
🤩  Вышла новая часть замечательной серии статей про анимацию.
В этой публикации авторы обсуждают такие темы, как типы анимаций и протокол
Кроме этого, уделяется внимание
📖 Десятки примеров кода и разбор параметров доступны здесь.
😃  iOS Dev
В этой публикации авторы обсуждают такие темы, как типы анимаций и протокол
CustomAnimation, новые способы работы с Transactions и новые параметры. Кроме этого, уделяется внимание
PhaseAnimator и KeyframeAnimator.📖 Десятки примеров кода и разбор параметров доступны здесь.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥14👍5👏1🤩1🏆1🆒1
  Загрузка кастомных шрифтов в приложение с помощью Swift Package Plugins
🔎  Если вы создаёте свои приложения с общим стилем оформления и сталкиваетесь с проблемой использования одних и тех же шрифтов снова и снова, то одно из решений — создать собственный Swift package.
Это позволит ускорить выпуск приложений и уменьшить дублирование кода.
📖 Пример создания Swift Package с использованием SwiftGen.
Кстати, вот тут я писал о более традиционном способе работы с нестандартными шрифтами.
😃  iOS Dev
Это позволит ускорить выпуск приложений и уменьшить дублирование кода.
📖 Пример создания Swift Package с использованием SwiftGen.
Кстати, вот тут я писал о более традиционном способе работы с нестандартными шрифтами.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👏13👍5❤1🔥1😢1🤩1💯1🏆1
  TipKit: варианты и примеры использования
✅️  Цель 
При реализация всплывающих подсказок нужно решить два вопроса:
1️⃣ Как их показать для всех комбинаций языков и размеров экрана.
2️⃣ Как убедиться, что они срабатывают в нужное время, чтобы не перегружать пользователей.
И как раз с этим успешно справляется TipKit.
📖 А вот тут можно посмотреть примеры использования нового фреймворка.
😃  iOS Dev
TipKit — максимально упростить отображение информации, которая подчеркивает или объясняет ту или иную функцию приложения.При реализация всплывающих подсказок нужно решить два вопроса:
1️⃣ Как их показать для всех комбинаций языков и размеров экрана.
2️⃣ Как убедиться, что они срабатывают в нужное время, чтобы не перегружать пользователей.
И как раз с этим успешно справляется TipKit.
📖 А вот тут можно посмотреть примеры использования нового фреймворка.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍19❤3🔥3😢1🤩1💯1🏆1🆒1
  Запуск приложения: советы по продвижению 
Инди-разработчик делится своим опытом и идеями по продвижению приложения в первые дни.
Например, для пресс-релизов важно:
1️⃣ Проблема, которую нужно решить.
2️⃣ Само приложение для решения.
3️⃣ История о том, как появилась идея и как она воплотилась в жизнь.
Большой материал разделен на две части:
📖 Часть 1.
📖 Часть 2.
😃  iOS Dev
Инди-разработчик делится своим опытом и идеями по продвижению приложения в первые дни.
Например, для пресс-релизов важно:
1️⃣ Проблема, которую нужно решить.
2️⃣ Само приложение для решения.
3️⃣ История о том, как появилась идея и как она воплотилась в жизнь.
Большой материал разделен на две части:
📖 Часть 1.
📖 Часть 2.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍17🔥8👏2😢1💯1🏆1
  Универсальный датасорс (хранилище данных) в iOS-разработке
Такие решения предоставляют разработчикам API для доступа к данным в коллекциях без привязки к конкретному источнику и типу данных.
📖 В статье на хабре рассматриваются:
🔘 Cтандартные подходы к регистрации и конфигурации ячеек в коллекции.
🔘 Альтернативный подход с использованием
🔘 Пример реализации универсального датасорса (на базе
🔘 Преимущества, особенности, сложности и недостатки подхода.
😃  iOS Dev
Такие решения предоставляют разработчикам API для доступа к данным в коллекциях без привязки к конкретному источнику и типу данных.
📖 В статье на хабре рассматриваются:
🔘 Cтандартные подходы к регистрации и конфигурации ячеек в коллекции.
🔘 Альтернативный подход с использованием
ViewRegistration.🔘 Пример реализации универсального датасорса (на базе
Diffable Datasource)🔘 Преимущества, особенности, сложности и недостатки подхода.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍17👏2💯2❤1🔥1😢1🏆1🆒1
  Обновление местоположения пользователя с помощью Core Location и Swift Concurrency
😎  Мы можем создавать собственные обертки для управления доступом к основным сервисам iOS, используя возможности Swift.
Например, для решения задачи получения геолокации через
📖 А в этом материале рассказано, как написать свой
😃  iOS Dev
Например, для решения задачи получения геолокации через
Core Location можно задействовать CheckedContinuation.📖 А в этом материале рассказано, как написать свой
Location Manager, запросить авторизацию и правильно обновлять локацию пользователя.Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍18🔥5👏1🤯1🎉1👌1🏆1👨💻1
  Добавление 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
  🤯27👍4🔥4❤2👏2🎉1💯1🏆1
  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
  👍18🔥4🎉2❤1💯1🏆1🆒1
  Для этого нужно будет использовать
StoreKit External Purchase Link Entitlement, выполнить ряд условий и заполнить форму.При этом комиссия Apple составит 27 % от выручки.
Важнейший шаг к альтернативным сторам?
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥52🎉17🤩6👍5🤯5❤3🆒3🏆1
  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
  🔥32👍8🤩4🆒2❤1🏆1
  Комбинирование разных типов диаграмм для создания уникального дизайна
Существует множество различных типов графиков.
Они просты в использовании и обладают широкими возможностями настройки.
📖 Например, в этой статье автор создаёт комбинированную диаграмму для отображения данных на базе
😃  iOS Dev
Существует множество различных типов графиков.
Они просты в использовании и обладают широкими возможностями настройки.
📖 Например, в этой статье автор создаёт комбинированную диаграмму для отображения данных на базе
Line Chart и Area Chart.Please open Telegram to view this post
    VIEW IN TELEGRAM
  👏9👍7🔥3🤩2❤1🤔1💯1🏆1
  Разделение данных на примере использования .chunked()
🧑💻   Один из самых важных источников знаний для просмотра реализации тех или иных алгоритмов — Swift Algorithms.
Например, если вы пишете много длинных и непростых для чтения циклов, то есть вполне приличный шанс, что уже существует нужный алгоритм.
🌎 Допустим, в приложении для путешествий нужно показать список всех мест, которые вы посетили или планируете посетить, отсортированных и сгруппированных по дате в порядке убывания.
📖 В этом посте рассматривается, как юзать алгоритм
😃  iOS Dev
Например, если вы пишете много длинных и непростых для чтения циклов, то есть вполне приличный шанс, что уже существует нужный алгоритм.
🌎 Допустим, в приложении для путешествий нужно показать список всех мест, которые вы посетили или планируете посетить, отсортированных и сгруппированных по дате в порядке убывания.
📖 В этом посте рассматривается, как юзать алгоритм
.chunked() для разделения массива и отображения результатов в нужном виде.Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍30🔥6👏2🤩1💯1🏆1
  Диспетчеризация потоков и Actors: как их использовать
Акторы обеспечивают выполнение кода в определенном потоке (например, в основном или фоновом).
Они помогают синхронизировать доступ к мутабельным состояниям и предотвращать потенциальные гонки данных.
📖 В этой статье рассматривается, что происходит при вызове методов, помеченных любым атрибутом
😃  iOS Dev
Акторы обеспечивают выполнение кода в определенном потоке (например, в основном или фоновом).
Они помогают синхронизировать доступ к мутабельным состояниям и предотвращать потенциальные гонки данных.
📖 В этой статье рассматривается, что происходит при вызове методов, помеченных любым атрибутом
actor и как избегать непредвиденных сбоев приложения при определенных контекстах.Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍15🔥3❤2💯1🏆1🫡1