Путь к карьерному и техническому росту
Принял участие в безумно интересном обсуждении про карьерный и технический рост.
Успели тонну всего обсудить:
👉 Начало карьеры (как джуну предлагали прийти на лида)
👉 Зарплаты (аналогии с бутылкой 🍾)
👉 Грейды (что делать для повышения)
👉 Менторство (сколько времни занимает и стоит ли того)
Пару ссылочек на обсуждаемые ресурсы:
🖇 Advanced Swift
🖇 Swift Evolution
На самом деле еще много чего успели затронуть. Думаю может отлично зайти как подкаст 🎤
#blog
Принял участие в безумно интересном обсуждении про карьерный и технический рост.
Успели тонну всего обсудить:
👉 Начало карьеры (как джуну предлагали прийти на лида)
👉 Зарплаты (аналогии с бутылкой 🍾)
👉 Грейды (что делать для повышения)
👉 Менторство (сколько времни занимает и стоит ли того)
Пару ссылочек на обсуждаемые ресурсы:
🖇 Advanced Swift
🖇 Swift Evolution
На самом деле еще много чего успели затронуть. Думаю может отлично зайти как подкаст 🎤
#blog
🔥7❤🔥4👍2👏2 1
Насмотренность в разработке
Крайне мало вижу использование термина "
Если совсем коротко -Насмотренность это вкус
Это такой визуальный опыт, который позволяет отличать хороший код от плохого на интуитивном уровне.
К вкусу в разработке можно отнести:
👉 Технологический стек
👉 Форматирование кода
👉 Архитектура
👉 Выбор фреймворка
Что делать, чтобы развить Насмотренность:
👉 Часто посещать GitHub с крутыми проектами (как дизайнеры посещают
👉 Заглядывать в другие проекты или команды в своей компании
Нам нужно не просто смотреть на код, а анализировать его. Чем чаще вы будете уделять время изучению и анализу кода, тем больше опыта и хорошего вкуса вы накопите.
#blog
Крайне мало вижу использование термина "
Насмотренность" среди разработчиков. В то время как дизайнеры постоянно всё насматривают 😅. А ведь это очень полезное понимание зачем и что нужно делать, если ты хочешь уметь писать красивый и чистый код.Если совсем коротко -
Это такой визуальный опыт, который позволяет отличать хороший код от плохого на интуитивном уровне.
К вкусу в разработке можно отнести:
👉 Технологический стек
👉 Форматирование кода
👉 Архитектура
👉 Выбор фреймворка
Что делать, чтобы развить Насмотренность:
👉 Часто посещать GitHub с крутыми проектами (как дизайнеры посещают
Dribble)👉 Заглядывать в другие проекты или команды в своей компании
Нам нужно не просто смотреть на код, а анализировать его. Чем чаще вы будете уделять время изучению и анализу кода, тем больше опыта и хорошего вкуса вы накопите.
#blog
🎄8👍6❤3💅3☃2🔥1 1
Perception: Бэкпорт @Observable
Ребята pointfreeco выпустили Backport макроса @Observable - Preciption.
Сам
Учитывая что это первое 🟢 Production Ready решение, да еще и от pointfreeco - получаем отличную возможность уже сейчас (даже на SwiftUI 1.0 или iOS 13) использовать Observation подход, который очень сильно ускоряет работу SwiftUI.
Держите подробный обзор Perception (ENG) от самих разработчиков.
Я пошел пробовать😁
А вы будете пробовать?
Или использовать бэкпорт слишко рискованно?
#tools
Ребята pointfreeco выпустили Backport макроса @Observable - Preciption.
Сам
@Observable макрос по умолчанию доступен только для iOS 17. Внутри проект очень интересный и повторяет старый концепт с форума forum.swift.org.
+import Perception
-@Observable
+@Perceptible
class FeatureModel {
var count = 0
}
Учитывая что это первое 🟢 Production Ready решение, да еще и от pointfreeco - получаем отличную возможность уже сейчас (даже на SwiftUI 1.0 или iOS 13) использовать Observation подход, который очень сильно ускоряет работу SwiftUI.
Держите подробный обзор Perception (ENG) от самих разработчиков.
Я пошел пробовать
А вы будете пробовать?
Или использовать бэкпорт слишко рискованно?
#tools
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9🦄5❤2🆒2 1
Приглашаю послушать про Swift Plugins: ускоряем сборку проекта 🚀
Я тут обновил свой рассказ про Swift Plugins. И уже 22 февраля совместо с Coffee&Code буду рассказывать вам об этом!
Добавил туда информацию о новом языке от Apple - Pkl
И как Pkl нужно использовать c плагинами
🗓 22 февраля в 18:00
📌 Где: Санкт-Петербург, БЦ Ренессанс Правда
О чем поговорим:
- Проблема скорости сборки
- Что такое Swift Plugins и как с ними работать?
- Сравнение с Build Phase Script и результаты использования плагинов
Будет много времени на вопросы, постараюсь помочь ускорить и ваш проект 🐺
🚀Регистрация на мероприятие🚀
P.S. Количество мест ограничено
Я тут обновил свой рассказ про Swift Plugins. И уже 22 февраля совместо с Coffee&Code буду рассказывать вам об этом!
Добавил туда информацию о новом языке от Apple - Pkl
И как Pkl нужно использовать c плагинами
О чем поговорим:
- Проблема скорости сборки
- Что такое Swift Plugins и как с ними работать?
- Сравнение с Build Phase Script и результаты использования плагинов
Будет много времени на вопросы, постараюсь помочь ускорить и ваш проект 🐺
🚀Регистрация на мероприятие🚀
P.S. Количество мест ограничено
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤🔥3👍3👨💻2⚡1👏1👾1 1
🔥Prefire 2.0: Теперь поддерживает #Preview макрос
Я выпустил новый релиз с поддержкой нового #Preview макроса 🚀
Если коротко, то теперь при подключении Prefire к проекту. Он сразу начинает искать все #Preview и делать из них snapshot тесты.
Этот код будет использоваться для snapshot теста:
И в итоге в DerivedData мы получим готовый файл с тестом, который сразу можно запускать 💨
Вот упрощенный вариант готового теста:
#prefire
Я выпустил новый релиз с поддержкой нового #Preview макроса 🚀
Если коротко, то теперь при подключении Prefire к проекту. Он сразу начинает искать все #Preview и делать из них snapshot тесты.
Этот код будет использоваться для snapshot теста:
#Preview {
Text(“Hello world”)
}
И в итоге в DerivedData мы получим готовый файл с тестом, который сразу можно запускать 💨
Вот упрощенный вариант готового теста:
import XCTest
import Prefire
class PreviewTests: XCTestCase {
func test_text_helloWorld() {
assertSnapshots {
Text(“Hello world”)
}
}
}
#prefire
🔥8❤🔥4 4❤2👏2
Для тех кто только присоединился с Coffee&Code митапа.
Держите серию постов про SwiftPlugins:
👉 Prefire Swift Plugins: Генерация snapshot тестов и Playbook приложения
👉 Репозиторий со списокм SwiftPlugins
👉 Benchmark SwiftPlugin: Метрики работы кода
👉 Поддержка SwiftPlugins в XcodeGen
Держите серию постов про SwiftPlugins:
👉 Prefire Swift Plugins: Генерация snapshot тестов и Playbook приложения
👉 Репозиторий со списокм SwiftPlugins
👉 Benchmark SwiftPlugin: Метрики работы кода
👉 Поддержка SwiftPlugins в XcodeGen
🔥8 8❤🔥6
🌊 Шторм на рынке мобильной разработки
Удалость поучаствовать в записи круглого стола про текущее состояние мобильной разработки.
Обсудили:
👉 Куда пойдет iOS разработка
👉 Спрос на разработчиков
👉 Использование ChatGPT и других ML сервисов
👉 Заменит ли Machine Learning разработчиков?
👉 Советы начинающим разработчикам для трудоустройства
👉 Обсуждение SwiftUI vs UIKit
Дополнительно, держите ресурс (который обсуждали) для тех, кто хочет зайти в ML: huggingface.co
Удалость поучаствовать в записи круглого стола про текущее состояние мобильной разработки.
Обсудили:
👉 Куда пойдет iOS разработка
👉 Спрос на разработчиков
👉 Использование ChatGPT и других ML сервисов
👉 Заменит ли Machine Learning разработчиков?
👉 Советы начинающим разработчикам для трудоустройства
👉 Обсуждение SwiftUI vs UIKit
Дополнительно, держите ресурс (который обсуждали) для тех, кто хочет зайти в ML: huggingface.co
Насмотренность в разработке: путь к красивому и чистому коду 🧘
Я написал небольшую статью, по мотивам предыдущего поста о Насмотренности.
В статье разбирается:
👉 Что такое насмотренность
👉 Зачем развивать насмотренность
👉 Как развивать насмотренность
👉 Как насмотренность влияет на качество и чистоту кода
👉 Как насмотренность влияет на поиск работы
Уверен что статья вам понравится и поможет в дальнейшей разработке⭐️
PS: Я участвую в конкурсе статей, с шансом выиграть macbook. Победителя выбирают по количеству голосов на Habr. Если не сложно, прожмите там плюсик ❤️
#blog
Я написал небольшую статью, по мотивам предыдущего поста о Насмотренности.
В статье разбирается:
👉 Что такое насмотренность
👉 Зачем развивать насмотренность
👉 Как развивать насмотренность
👉 Как насмотренность влияет на качество и чистоту кода
👉 Как насмотренность влияет на поиск работы
Уверен что статья вам понравится и поможет в дальнейшей разработке
#blog
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16🔥5⚡4 4👍1
Prefire 🔥 получил более 200 ⭐️ на GitHub!
Для меня это был невероятно сложный, важный и интересный путь.
Учитывая, что проект практически не продвигался, а его область применения довольно узкая, это просто огромная цифра!
Хочу обсудить с вами дальнейшие планы развития Prefire:
1. Направление развития:
👉 Важно понять, куда двигаться дальше. Prefire создается мной исключительно на энтузиазме, без какой-либо монетизации (и так будет дальше). Поэтому мне очень важно, чтобы проект был нужен и использовался кем-то, кроме меня. Оставьте комментарий, чтобы поделиться своим мнением! Поставьте ⭐️, чтобы поддержать проект!
2. Продвижение в России:
👉Статистика показывает, что Prefire мало используется в РФ. В то же время он очень популярен в Азиатских и Европейских странах. Это довольно странно, но однозначно не плохо. Хочу придумать, как можно продвинуть Prefire дальше. Если у вас есть идеи, пишите в комментариях!
P.S. Prefire - это сложный проект, который решает нетривиальные задачи. Его разработка требует довольно много сил и времени. Ваша поддержка - это огромный стимул для меня!
#blog #prefire
Для меня это был невероятно сложный, важный и интересный путь.
Учитывая, что проект практически не продвигался, а его область применения довольно узкая, это просто огромная цифра!
Хочу обсудить с вами дальнейшие планы развития Prefire:
1. Направление развития:
👉 Важно понять, куда двигаться дальше. Prefire создается мной исключительно на энтузиазме, без какой-либо монетизации (и так будет дальше). Поэтому мне очень важно, чтобы проект был нужен и использовался кем-то, кроме меня. Оставьте комментарий, чтобы поделиться своим мнением! Поставьте ⭐️, чтобы поддержать проект!
2. Продвижение в России:
👉Статистика показывает, что Prefire мало используется в РФ. В то же время он очень популярен в Азиатских и Европейских странах. Это довольно странно, но однозначно не плохо. Хочу придумать, как можно продвинуть Prefire дальше. Если у вас есть идеи, пишите в комментариях!
P.S. Prefire - это сложный проект, который решает нетривиальные задачи. Его разработка требует довольно много сил и времени. Ваша поддержка - это огромный стимул для меня!
#blog #prefire
🔥11 5 4❤3🤩1
Performance-метрики 🚀 : производительность приложения
Я буду рассказывать про сами метрики, зачем они нужны и как их лучше собирать.
Разберем и рассмотрим различные метрики:
🏎 LaunchTime - Время запуска приложения
🏎 HitchRate - Производительность скролла/анимаций
🏎 HangTime - Время ответа приложения
🏎 ScreenTotalTime - Общее время загрузки экрана
Не забудем и о тёмных😠 сторонах: поговорим о том, как обойти систему и почему не все готовы закопаться в коде, исправляя перфоманс.
В конце обсудим, как мотивировать себя и других следить за производительностью.
Вот ссылки на ресуры по теме:
- WWDC Notes: HitchRate
- Время отклика: 3 важных ограничения
- Перфоманс метрики по взрослому
- Perfsuite-ios: Кастомный сбор метрик от ребят из Booking
#blog
Я буду рассказывать про сами метрики, зачем они нужны и как их лучше собирать.
Разберем и рассмотрим различные метрики:
🏎 LaunchTime - Время запуска приложения
🏎 HitchRate - Производительность скролла/анимаций
🏎 HangTime - Время ответа приложения
🏎 ScreenTotalTime - Общее время загрузки экрана
Не забудем и о тёмных
В конце обсудим, как мотивировать себя и других следить за производительностью.
Вот ссылки на ресуры по теме:
- WWDC Notes: HitchRate
- Время отклика: 3 важных ограничения
- Перфоманс метрики по взрослому
- Perfsuite-ios: Кастомный сбор метрик от ребят из Booking
#blog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10 4 2
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10 6 4
Готовлю пост про то, как сделать Notion из Obsidian
Меня сильно коснулся уход Notion и пришлось быстро искать альтернативу. Я выбрал Obsidian.
Разберем:
👉 Плюсы/минусы Notion
👉 Плюсы/минусы Obsidian
👉 Какие плагины установить
👉 Как сделать синхронизацию на Яндекс диск (или другой)
👉 Что получилось в итоге и как это выглядит
На самом делеполучилось довольно хорошо. Но пришлось потратить много времени на настройки.
Меня сильно коснулся уход Notion и пришлось быстро искать альтернативу. Я выбрал Obsidian.
Разберем:
👉 Плюсы/минусы Notion
👉 Плюсы/минусы Obsidian
👉 Какие плагины установить
👉 Как сделать синхронизацию на Яндекс диск (или другой)
👉 Что получилось в итоге и как это выглядит
На самом деле
🔥15❤3👍1 1
Классика от Apple
Пытаемся завести Xcode 16 и вроде бы все хорошо … но UI тесты перестали компилироваться с ошибкой
Testing, это как раз новый фреймворк от Apple на основе макросов, который уже встроен в Xcode.
Завел тред на StackOverflow, но пока не понятно как решать.
Если есть идеи, закидывайте
Пытаемся завести Xcode 16 и вроде бы все хорошо … но UI тесты перестали компилироваться с ошибкой
Missing required module 'Testing’.Testing, это как раз новый фреймворк от Apple на основе макросов, который уже встроен в Xcode.
Завел тред на StackOverflow, но пока не понятно как решать.
⚠️Если у вас есть UI тесты, пока рекомендую не обновляться на Xcode 16.
Если есть идеи, закидывайте
GitHub
GitHub - swiftlang/swift-testing: A modern, expressive testing package for Swift
A modern, expressive testing package for Swift. Contribute to swiftlang/swift-testing development by creating an account on GitHub.
Делаем Notion из Obsidian
После того как Notion ушел из России и многие компании больше не могут его использовать с точки зрения безопасности, встал вопрос: какие есть альтернативы?
Хочется отметить, что Notion был супер удобным и приятным как по UI, так и по UX. Альтернативы, к сожалению, часто уступают.
Какие есть альтернативы?
👉 Obsidian — самый популярный после Notion. Open-source приложение с огромной базой плагинов, что делает возможности редактора практически безграничными.
👉 Yonote — российский аналог Notion. Довольно удобный, но не имеет мобильного приложения, что для меня важно.
👉 AnyType — красивый и open-source редактор, но без баз данных, что также оказалось критичным.
Существует еще множество менее популярных аналогов, таких как Weeek, Bear, Taskade, Craft.do и Capacities. Но во всех есть проблемы, которые мне не удалось решить.
После десятков часов попыток я все же решил погрузиться в Obsidian.
Obsidian
Это главный конкурент Notion, и, что самое интересное, у него открытый код. Все, что вы создаете, хранится локально, и никто не сможет это забрать 🥲. Главной фишкой Obsidian считается его гибкость и поддержка огромного количества плагинов.
Фиксим UI/UX
Первое впечатление об Obsidian было следующим:
Немного пересилив себя, я начал искать способы улучшить UI/UX. Нашел плагин Make.md. Это было спасением для меня!
Этот плагин делает почти все очень похожим на Notion: появилась структура с вложенными папками, возможность добавлять эмодзи к заголовкам страниц и, конечно, красивые картинки сверху.
Краткая инструкция:
1️⃣ Установите плагин Make.md.
2️⃣ В настройках плагина установите:
3️⃣ Установите плагин Banners. Он добавляет красивые заголовки с картинками, как в Notion.
В итоге вы получите довольно красивый результат, который можно достичь быстро, если знать, как делать.
Дополнительно рекомендую установить плагин Kanban. Он очень напоминает доску из Notion и в целом такой же удобный.
Делаем синхронизацию с мобильным устройством
Здесь все значительно сложнее. Сначала я попробовал использовать плагин для выгрузки на Git, но он не заработал на мобильном.
Дальше я решил попробовать более прямой способ: почему бы не синхронизировать с каким-либо облачным хранилищем? Так и сделал.
Я выбрал Яндекс Диск и плагин Remotely Save. После не самой простой настройки я получил отличную синхронизацию заметок между устройствами.
Почти краткая инструкция:
1️⃣ Установите плагин Remotely Save.
2️⃣ Настройте Яндекс Диск. Перейдите по ссылке и создайте пароль для приложения (ядиск). Это позволит использовать этот пароль вместо пароля от Яндекс почты.
3️⃣ Настройте Remotely Save:
👉 Выберите
👉 Установите
👉 Введите свой Яндекс логин и новый пароль
Настройте так же на мобильном устройстве, и все!
Вы получите отличные заметки с безопасной синхронизацией на своем сервере!
Что в итоге?
Сейчас мне Obsidian более чем нравится. Конечно, не без минусов, иногда встречаются мелкие баги UI.
Я бы назвал Obsidian «Linux из мира заметок». Сначала нужно все под себя настроить, а дальше все отлично работает как часы.
#blog
После того как Notion ушел из России и многие компании больше не могут его использовать с точки зрения безопасности, встал вопрос: какие есть альтернативы?
Хочется отметить, что Notion был супер удобным и приятным как по UI, так и по UX. Альтернативы, к сожалению, часто уступают.
Какие есть альтернативы?
👉 Obsidian — самый популярный после Notion. Open-source приложение с огромной базой плагинов, что делает возможности редактора практически безграничными.
👉 Yonote — российский аналог Notion. Довольно удобный, но не имеет мобильного приложения, что для меня важно.
👉 AnyType — красивый и open-source редактор, но без баз данных, что также оказалось критичным.
Существует еще множество менее популярных аналогов, таких как Weeek, Bear, Taskade, Craft.do и Capacities. Но во всех есть проблемы, которые мне не удалось решить.
После десятков часов попыток я все же решил погрузиться в Obsidian.
Obsidian
Это главный конкурент Notion, и, что самое интересное, у него открытый код. Все, что вы создаете, хранится локально, и никто не сможет это забрать 🥲. Главной фишкой Obsidian считается его гибкость и поддержка огромного количества плагинов.
Фиксим UI/UX
Первое впечатление об Obsidian было следующим:
🤢 Фу, некрасивая какаха! Что за шрифты, что за UX?
Немного пересилив себя, я начал искать способы улучшить UI/UX. Нашел плагин Make.md. Это было спасением для меня!
Этот плагин делает почти все очень похожим на Notion: появилась структура с вложенными папками, возможность добавлять эмодзи к заголовкам страниц и, конечно, красивые картинки сверху.
Краткая инструкция:
1️⃣ Установите плагин Make.md.
2️⃣ В настройках плагина установите:
Auto Expand Folder = false3️⃣ Установите плагин Banners. Он добавляет красивые заголовки с картинками, как в Notion.
В итоге вы получите довольно красивый результат, который можно достичь быстро, если знать, как делать.
Дополнительно рекомендую установить плагин Kanban. Он очень напоминает доску из Notion и в целом такой же удобный.
Делаем синхронизацию с мобильным устройством
Здесь все значительно сложнее. Сначала я попробовал использовать плагин для выгрузки на Git, но он не заработал на мобильном.
Дальше я решил попробовать более прямой способ: почему бы не синхронизировать с каким-либо облачным хранилищем? Так и сделал.
Я выбрал Яндекс Диск и плагин Remotely Save. После не самой простой настройки я получил отличную синхронизацию заметок между устройствами.
Почти краткая инструкция:
1️⃣ Установите плагин Remotely Save.
2️⃣ Настройте Яндекс Диск. Перейдите по ссылке и создайте пароль для приложения (ядиск). Это позволит использовать этот пароль вместо пароля от Яндекс почты.
3️⃣ Настройте Remotely Save:
👉 Выберите
Remote Service - WebDav👉 Установите
Server address - https://webdav.yandex.ru👉 Введите свой Яндекс логин и новый пароль
Настройте так же на мобильном устройстве, и все!
Вы получите отличные заметки с безопасной синхронизацией на своем сервере!
Что в итоге?
Сейчас мне Obsidian более чем нравится. Конечно, не без минусов, иногда встречаются мелкие баги UI.
Я бы назвал Obsidian «Linux из мира заметок». Сначала нужно все под себя настроить, а дальше все отлично работает как часы.
#blog
1👍10🔥5 5 4✍3
iOS-разработчикам, которые хотят прокачать свои навыки работы с многопоточностью – совсем скоро стартует Podlodka iOS Crew!
С 11 по 15 ноября лучшие эксперты разберут многопоточность, Swift Concurrency и алгоритмы в формате удобных онлайн-сессий.
Так как на WWDC и в целом в Swift 6 основным изменением стала новая система многопоточности, это и стало темой этой подлодки.
В программе:
🔹 Александр Андрюхин проведёт нас через особенности Swift Concurrency, которых ты точно не знал
🔹 Swift 6 глазами Александра Априамашвили – как переход на новую версию поможет в повседневной работе.
🔹 Антон Марченко расскажет, как async в алгоритмах делает их быстрее.
🔹 Александр Сычев раскроет механизмы работы Thread и объяснит, как это важно для работы с многопоточностью.
Я знаком почти со всеми спикерами и сам выступал на подлодке не раз 🎤, поэтому советую послушать про глубокое погружение в Swift Concurrency.
Присоединяйтесь 👉 https://podlodka.io/ioscrew
По классике промокод
С 11 по 15 ноября лучшие эксперты разберут многопоточность, Swift Concurrency и алгоритмы в формате удобных онлайн-сессий.
Так как на WWDC и в целом в Swift 6 основным изменением стала новая система многопоточности, это и стало темой этой подлодки.
В программе:
🔹 Александр Андрюхин проведёт нас через особенности Swift Concurrency, которых ты точно не знал
🔹 Swift 6 глазами Александра Априамашвили – как переход на новую версию поможет в повседневной работе.
🔹 Антон Марченко расскажет, как async в алгоритмах делает их быстрее.
🔹 Александр Сычев раскроет механизмы работы Thread и объяснит, как это важно для работы с многопоточностью.
Я знаком почти со всеми спикерами и сам выступал на подлодке не раз 🎤, поэтому советую послушать про глубокое погружение в Swift Concurrency.
Присоединяйтесь 👉 https://podlodka.io/ioscrew
По классике промокод
ios_crew_14_8YTVes сообщества на скидку в 500р 🥳1🔥6 3👍2🤩2👎1
Xcode 16: Ускорение Preview, но какой ценой?
Xcode 16 недавно вышел, и я пропустил одно из интереснейших обновлений - обновление движка выполнения Preview.
Это можно заметить в Release Notes:
Ускорение достигается за счет:
👉 Конфигурация сборки для Preview (теперь не нужно полностью собирать новый билд, если вы уже запускали его на симуляторе)
👉 Оборачивание всех SwiftUI.View в AnyView для debug сборок. (Это дает более слабую производительность UI и меньшие FPS, но ускоряет процесс сборки)
Так что будьте внимательны: если тестировали производительность в Preview билде, она окажется значительно хуже.
PS: Если все же хотите идентичную работу Preview и обычных сборок, можно проставить build setting: SWIFT_ENABLE_OPAQUE_TYPE_ERASURE=NO
#tools
Xcode 16 недавно вышел, и я пропустил одно из интереснейших обновлений - обновление движка выполнения Preview.
Это можно заметить в Release Notes:
Xcode 16 brings a new execution engine for Previews that supports a larger range of projects and configurations. Now with shared build products between Build and Run and Previews, switching between the two is instant. Performance between edits in the source code is also improved for many projects, with increases up to 30%.
Ускорение достигается за счет:
👉 Конфигурация сборки для Preview (теперь не нужно полностью собирать новый билд, если вы уже запускали его на симуляторе)
👉 Оборачивание всех SwiftUI.View в AnyView для debug сборок. (Это дает более слабую производительность UI и меньшие FPS, но ускоряет процесс сборки)
Так что будьте внимательны: если тестировали производительность в Preview билде, она окажется значительно хуже.
PS: Если все же хотите идентичную работу Preview и обычных сборок, можно проставить build setting: SWIFT_ENABLE_OPAQUE_TYPE_ERASURE=NO
#tools
2 8🔥4 2❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Решил сегодня поизучать MeshGradient в SwiftUI ♟
MeshGradient новая View в SwiftUI (iOS 18+🤬 ). А у меня так и не доходили руки до него.
Я пытался повторить эффект от Apple AI без Metal и понял что на MeshGradients можно сделать за 10 минут.
Зацените какой анимированный градиент сделал (Там буквально один маленький фалик).
Вы уже попробовали MeshGradient? Скидывайте что красивого получилось☺️
PS:Скоро сделаю пост про приложение в которое я добавлял анимацию
#blog
MeshGradient новая View в SwiftUI (iOS 18+
Я пытался повторить эффект от Apple AI без Metal и понял что на MeshGradients можно сделать за 10 минут.
Зацените какой анимированный градиент сделал (Там буквально один маленький фалик).
Смотреть нужно на статус бар.
struct AppleMeshGradient: View {
@State private var points: [SIMD2<Float>] = [
[0.0, 0.0], [0.5, 0.0], [1.0, 0.0],
[0.0, 0.5], [0.5, 0.5], [1.0, 0.5],
[0.0, 1.0], [0.5, 1.0], [1.0, 1.0],
]
@State private var colors: [Color] = [
firstColor, secondColor, secondColor,
secondColor, secondColor, firstColor,
thirdColor, firstColor, thirdColor
]
var body: some View {
TimelineView(.animation(minimumInterval: 2.0)) { time in
MeshGradient(
width: 3,
height: 3,
points: points,
colors: colors
)
.ignoresSafeArea()
.onChange(of: time.date, { oldValue, newValue in
withAnimation(.linear(duration: 2)) {
var newColors = colors
newColors.shuffle()
colors = newColors
}
})
}
}
}
Вы уже попробовали MeshGradient? Скидывайте что красивого получилось
PS:
#blog
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍9🔥6 4 1
Побывал на игровой выставке Игропром
Первый раз участвовал в таком событии. На выставке мне удалось пообщаться с разработчиками игр и даже посмотреть код с объяснениями. (Была игра на самодельном движке).
К удивлению, встретил много знакомых мобильных разработчиков ❤️
Вообщем максимально советую расширять свой кругозор и выходить за рамки своей работы 💪
PS:На фото я с Дарьей Островской 😁
Первый раз участвовал в таком событии. На выставке мне удалось пообщаться с разработчиками игр и даже посмотреть код с объяснениями. (Была игра на самодельном движке).
К удивлению, встретил много знакомых мобильных разработчиков ❤️
Вообщем максимально советую расширять свой кругозор и выходить за рамки своей работы 💪
Да, я часто играю, и в целом начинал свой путь программирования именно с желания в детстве писать игры. Даже моя первая работа была с игровой тематикой (писал 2d scroll shooter на SpriteKit под iOS).
PS:
Please open Telegram to view this post
VIEW IN TELEGRAM
5❤8👍5❤🔥3🔥2🫡1
This media is not supported in your browser
VIEW IN TELEGRAM
Создаем зимнее настроение: SwiftUI-приложение для macOS с интерактивным снегопадом ❄️
Сейчас уже за окном часто идет метель, а у меня на экране даже не стоит новогодей заставки. Решил сегодня пойти другим путем и написать приложение под MacOS на SwiftUI для отображения снегопада❄️
А для большей атомсферы🎁 снежинка падает супер плавно и реагирует на движение мыши ☺️
Ниже опишу основыные моменты, но на самом деле все получилось очень просто.
👉 Для создания анимации снегопада используется Timer, который обновляет положение каждой снежинки на экране.
👉 Чтобы отследить движение мыши, пришлось обратиться к API AppKit.
Несмотря на приятный результат, код приложения супер простой и понятный. Даже если нет опыта в SwiftUI♟ . Тут самое главное результат и хорошее новогоднее настроение ☃️
Весь код приложения можно посмотреть на ⭐️ Github
Скачать приложение можно Github Release
Попробуйте приложение и поделитесь своими впечатлениями в комментариях! Какие эффекты вы бы хотели добавить?
PS: А в прошлый раз был разбор того, что можно сделать к новому году в приложении
#blog
Сейчас уже за окном часто идет метель, а у меня на экране даже не стоит новогодей заставки. Решил сегодня пойти другим путем и написать приложение под MacOS на SwiftUI для отображения снегопада
А для большей атомсферы
Ниже опишу основыные моменты, но на самом деле все получилось очень просто.
👉 Для создания анимации снегопада используется Timer, который обновляет положение каждой снежинки на экране.
👉 Чтобы отследить движение мыши, пришлось обратиться к API AppKit.
Несмотря на приятный результат, код приложения супер простой и понятный. Даже если нет опыта в SwiftUI
Весь код приложения можно посмотреть на ⭐️ Github
Скачать приложение можно Github Release
Попробуйте приложение и поделитесь своими впечатлениями в комментариях! Какие эффекты вы бы хотели добавить?
PS: А в прошлый раз был разбор того, что можно сделать к новому году в приложении
#blog
Please open Telegram to view this post
VIEW IN TELEGRAM
1☃16🎅3🎄3❤1
This media is not supported in your browser
VIEW IN TELEGRAM
В предыдущем посте было про интерективные снежинки
Опустим настройку работы с Metal. Посмотреть как это сделать, можно в репозитории.
Для начала вспомним логику движения снежинок. Кстати, логику оставим внутри swift кода, а саму отрисовку вынесем на шейдер.
Каждая снежинка 1 раз в кадр изменяет свою позицию:
snowflake.position.y += snowflake.velocity.y
Снежинки появляются сверху и если попадают вних экрана, то мы их перемещаем вверх, что и позволяет сделать бесконечный цикл снега:
if snowflake.position.y > screenSize.y {
snowflake.position.y = 0
snowflare.position.x = Float.random(in: 0…screenSize.x)
}
Все так, логика максимально простая.
Шейдер не менее простой, но так как она написан на другом языке и имеет не привычный интерфейс от Metal, пришлось довольно долго экспериментировать и смотреть туториалы.
Разберем шейдеры по кусочкам.
Будем использовать два шейдера:
Вершинный шейдер - отвечает за позицию x.y нашей снежинки
Фрагментный шейдер - отвечает за цвет пикселей снежинки, мы вернем просто белый цвет
Нам нужно добавить всю информацию из swift кода в Metal код. Эта информация в структуре Snowflake.
struct Snowflake {
float2 position;
float size;
};
Дальше эту информацию нужно преобразовать в данные вершинного шейдера:
// Данные для позиции и размеры шейдера
struct VertexOut {
float4 position [[position]];
float pointSize [[point_size]];
};
// Шейдер вершин. Здесь происходит преобразование swift данных в данные шейдера
vertex VertexOut vertex_main(const device Snowflake *snowflakes [[buffer(0)]],
constant float2 &screenSize[[buffer(1)]],
uint vertexID [[vertex_id]]) {
// Здесь происходит преобразование координат из SwiftUI в координаты Metal
float2 position = convert_to_metal_coordinates(snowflakes[vertexID].position, screenSize);
VertexOut out;
out.position = float4(position, 0, 1);
out.pointSize = snowflakes[vertexID].size;
return out;
}
В конце остается фрагментый шейдер. В нем мы закругляем снежинку и возвращаем белый цвет:
fragment float4 fragment_main(VertexOut fragData [[stage_in]],
float2 pointCoord [[point_coord]]) {
// Закругляем снежинку
if (length(pointCoord - float2(0.5)) > 0.5) {
discard_fragment();
}
return float4(0, 0, 0, 0);
}
Готово, шейдер полностью написан, запускаем и видим пархающие снежинки ❄️❄️❄️
А бонусом, этот шейдер можно конвертировать под OpenGL, DirectX и в целом запускать почти везде. Далее попробую сделать такое же приложение под Windows.
☃️ Скачать можно через brew:
brew install --cask barredewe/cask/snowfallPS:
#blog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24🎄5 5☃3😱1