TGViewer
Channel Public Channel
Prefire iOS

Prefire iOS

@prefire_ios

Чат/блог о современной 🍏iOS разработке

Пробустить канал → https://t.me/prefire_ios?boost

Автор: @barredewe
Subscribers
980
Photos
101
Videos
7
Links
103

Showing posts older than #59 · Back to latest

Older Posts 20 shown
Post #58 1.05K
Небольшие итоги 2024 ☃️

По моим ощущениям, в 2024 году iOS-разработка немного застопорилась в плане появления новых технологий. Но плохо ли это? Думаю, нет. В последние годы мы получили столько новинок — async/await, SwiftUI, ARKit, Metal и другие, — что до сих пор не все успели их освоить и внедрить в свои проекты.

2024-й можно назвать годом закрепления и углубления знаний. Это был год, когда мы наконец получили время на изучение и применение технологий, которые Apple представила в 2020–2023 годах.

Всех с наступающим Новым годом! Пусть 2025 принесет новые возможности и вдохновение!
  • 👍 19
  • ☃ 11
  • 🎄 8
  • 🎉 3
  • 🌚 1
Post #57 1.26K
Список топ iOS фреймворков 2024! 🚀

У меня есть свежая статья, в которой я собрал лучшие фреймворки, которые помогут ускорить разработку и улучшить ваш проект! 💻📱

🔗 Читайте статью «Top iOS frameworks 2024»

Здесь я разобрал:
👉 Какие фреймворки обязательно стоит использовать в 2025 году
👉 Как они могут улучшить ваш рабочий процесс
👉 Какие из них по-настоящему выделяются

Если хотите узнать, какие инструменты могут облегчить вашу жизнь в iOS-разработке — обязательно читайте и делитесь мнением в комментариях! 📢

#blog
  • ❤ 14
  • ☃ 5
Post #56 4.5K
🎯 Какой iOS-фреймворк станет номером один?

Примите участие в голосовании, чтобы вместе создать ТОП iOS-фреймворков 2024 по версии разработчиков!

📋 Что в опросе?
- Выберите фреймворки, которые вы используете каждый день.
- Добавьте свои любимые инструменты и предложите те, которые хотели бы попробовать.

⏱ Займет всего 2 минуты!

🎁 Почему стоит участвовать?
- Итоговые результаты с полезной аналитикой будут опубликованы в Telegram-канале Prefire iOS.
- Помогите собрать реальную статистику по инструментам, которые действительно используют iOS-разработчики.

🗳 Присоединяйтесь к голосованию и делитесь опросом с коллегами!

Ваш голос важен 🚀

#blog
  • 🔥 9
  • 🏆 2
  • 👨‍💻 1
Post #55 991

Forwarded from Coffee&Code | Community | IT | Android | iOS | Design | Frontend | Backend | DevOps | QA

😎 Coffee&Code | TechBrew | Воркшоп

Наш спикер — Тёма Нестеренко @nextster — эксперт в области мобильной разработки, спикер конференции Mobius, мастер анимаций на Metal, а также кофаундер одного из самых красивых приложений для iOS

🚀Регистрация на мероприятие🚀

😉Тема Воркшопа: Snow Globe на Metal

🗓 25 декабря, в 18:00

📌 Где: Санкт-Петербург, Точка кипения - ГУАП

На воркшопе вместе создадим интерактивный снежный шар с анимацией!

☁️Что будем делать:

- Разберемся с ключевыми элементами рендеринга
- Создадим 3D-модель шара и добавим объекты внутри
- Реализуем эффект падающего снега
- Настроим освещение, чтобы всё выглядело эффектно

На выходе каждый участник получит свой собственный новогодний шар с анимацией 🎄

🥳Что взять с собой:

- Ноутбук с установленным Xcode
- Базовые знания Swift или желание разобраться по ходу

Не упустите шанс встретиться с одним из лучших профессионалов отрасли и получить бесценные знания для карьерного роста! Ждем вас на Coffee&Code | TechBrew!

🚀Регистрация на мероприятие🚀

Количество мест ограничено. Присоединяйтесь — сделаем что-то крутое!
  • 🔥 6
  • ☃ 4
  • 🎄 3
  • 😍 1
Post #54 800
Мои друзья из Coffee & Code делают классный митап по Metal 🔥
  • ❤ 4
Post #53 1.21K
Новый 🍓 смузи SafeDI

Нашел новый DI, который пробую в новом pet проекте. API просто мёд 🍯. Еще понравилось, что он compile time проверяет наличие зависимостей (те кто в рантайм ловили ошибки в Swinject, точно поймут зачем эти проверки).

Из близких аналогов это Needle от Uber, но там такой сложный и не самый красивый API, что всегда возникала мысль его переписать.

Основные фичи:
👉 Compile-time safe
👉 Thread safe
👉 Поддержка многомодульности
👉 Поддержка инверсии зависимостей
👉 Cycle detection
👉 Простое тестирование: каждый тип имеет инициализатор
👉 Clear error messages: не нужно дебажить сгенерированный код

Основан DI на макросах. Например, для регистрации сервиса в DI контейнере нужно просто пометить его макросом (как и его зависимости которые нужно подключить из DI):
@Instantiable
public final class UserService: Instantiable {
@Instantiated private let authService: AuthService
}

Вот и все! Нет файлов Assembly, нет лишнего кода, и если что то пойдет не так, то приложение просто не скомпилируется и выдаст понятную ошибку.

Ну что, пора переходить со Swinject и Needle? 😂

#tools
GitHub GitHub - dfed/SafeDI: Compile-time-safe dependency injection for Swift without the boilerplate Compile-time-safe dependency injection for Swift without the boilerplate - dfed/SafeDI
  • 🔥 15
  • 👍 4
  • ❤ 2
Post #51 1.38K
❄️Новогоднее настроение на Metal❄️

В предыдущем посте было про интерективные снежинки ❄️ на SwiftUI. А что на счет тех же снежинок но на более низком уровне? Да, делаем тоже самое но на языке Metal Shading Language (MSL).

Опустим настройку работы с 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/snowfall

PS: Если интересен более подробный обзор, то дайте знать в комментариях

#blog
  • 🔥 24
  • 🎄 5
  • ☃ 3
  • 😱 1
Post #50 1.64K
Создаем зимнее настроение: SwiftUI-приложение для macOS с интерактивным снегопадом ❄️

Сейчас уже за окном часто идет метель, а у меня на экране даже не стоит новогодей заставки. Решил сегодня пойти другим путем и написать приложение под MacOS на SwiftUI для отображения снегопада ❄️
А для большей атомсферы 🎁 снежинка падает супер плавно и реагирует на движение мыши ☺️

Ниже опишу основыные моменты, но на самом деле все получилось очень просто.
👉 Для создания анимации снегопада используется Timer, который обновляет положение каждой снежинки на экране.
👉 Чтобы отследить движение мыши, пришлось обратиться к API AppKit.

Несмотря на приятный результат, код приложения супер простой и понятный. Даже если нет опыта в SwiftUI ♟. Тут самое главное результат и хорошее новогоднее настроение ☃️

Весь код приложения можно посмотреть на ⭐️ Github
Скачать приложение можно Github Release

Попробуйте приложение и поделитесь своими впечатлениями в комментариях! Какие эффекты вы бы хотели добавить?

PS: А в прошлый раз был разбор того, что можно сделать к новому году в приложении

#blog
  • ☃ 16
  • 🎅 3
  • 🎄 3
  • ❤ 1
Post #49 929
Побывал на игровой выставке Игропром

Первый раз участвовал в таком событии. На выставке мне удалось пообщаться с разработчиками игр и даже посмотреть код с объяснениями. (Была игра на самодельном движке).

К удивлению, встретил много знакомых мобильных разработчиков ❤️

Вообщем максимально советую расширять свой кругозор и выходить за рамки своей работы 💪

Да, я часто играю, и в целом начинал свой путь программирования именно с желания в детстве писать игры. Даже моя первая работа была с игровой тематикой (писал 2d scroll shooter на SpriteKit под iOS).


PS: На фото я с Дарьей Островской 😁
  • ❤ 8
  • 👍 5
  • ❤‍🔥 3
  • 🔥 2
  • 🫡 1
Post #48 999
Решил сегодня поизучать MeshGradient в SwiftUI ♟

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
  • 👍 9
  • 🔥 6
Post #47 946
Xcode 16: Ускорение Preview, но какой ценой?

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
  • 🔥 4
  • ❤ 1
Post #46 811
iOS-разработчикам, которые хотят прокачать свои навыки работы с многопоточностью – совсем скоро стартует Podlodka iOS Crew!

С 11 по 15 ноября лучшие эксперты разберут многопоточность, Swift Concurrency и алгоритмы в формате удобных онлайн-сессий.
Так как на WWDC и в целом в Swift 6 основным изменением стала новая система многопоточности, это и стало темой этой подлодки.

В программе:

🔹 Александр Андрюхин проведёт нас через особенности Swift Concurrency, которых ты точно не знал
🔹 Swift 6 глазами Александра Априамашвили – как переход на новую версию поможет в повседневной работе.
🔹 Антон Марченко расскажет, как async в алгоритмах делает их быстрее.
🔹 Александр Сычев раскроет механизмы работы Thread и объяснит, как это важно для работы с многопоточностью.

Я знаком почти со всеми спикерами и сам выступал на подлодке не раз 🎤, поэтому советую послушать про глубокое погружение в Swift Concurrency.

Присоединяйтесь 👉 https://podlodka.io/ioscrew

По классике промокод ios_crew_14_8YTVes сообщества на скидку в 500р 🥳
  • 🔥 6
  • 👍 2
  • 🤩 2
  • 👎 1
Post #45 1.65K
Делаем 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 было следующим:
🤢 Фу, некрасивая какаха! Что за шрифты, что за UX?


Немного пересилив себя, я начал искать способы улучшить UI/UX. Нашел плагин Make.md. Это было спасением для меня!
Этот плагин делает почти все очень похожим на Notion: появилась структура с вложенными папками, возможность добавлять эмодзи к заголовкам страниц и, конечно, красивые картинки сверху.

Краткая инструкция:
1️⃣ Установите плагин Make.md.
2️⃣ В настройках плагина установите: Auto Expand Folder = false
3️⃣ Установите плагин 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
  • 👍 10
  • 🔥 5
  • ✍ 3
Post #42 1.06K
Классика от Apple

Пытаемся завести 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.
  • 🤬 3
  • ❤ 2
Post #41 957
Готовлю пост про то, как сделать Notion из Obsidian

Меня сильно коснулся уход Notion и пришлось быстро искать альтернативу. Я выбрал Obsidian.

Разберем:
👉 Плюсы/минусы Notion
👉 Плюсы/минусы Obsidian
👉 Какие плагины установить
👉 Как сделать синхронизацию на Яндекс диск (или другой)
👉 Что получилось в итоге и как это выглядит

На самом деле получилось довольно хорошо. Но пришлось потратить много времени на настройки.
  • 🔥 15
  • ❤ 3
  • 👍 1
Post #40 1.33K
Пошел ставить новый Xcode 😐

Надеюсь соберет рабочий проект 👩‍💻
  • 🔥 10
Post #39 1.47K
Performance-метрики 🚀: производительность приложения

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

Разберем и рассмотрим различные метрики:
🏎 LaunchTime - Время запуска приложения
🏎 HitchRate - Производительность скролла/анимаций
🏎 HangTime - Время ответа приложения
🏎 ScreenTotalTime - Общее время загрузки экрана

Не забудем и о тёмных 😠 сторонах: поговорим о том, как обойти систему и почему не все готовы закопаться в коде, исправляя перфоманс.
В конце обсудим, как мотивировать себя и других следить за производительностью.

Вот ссылки на ресуры по теме:
- WWDC Notes: HitchRate
- Время отклика: 3 важных ограничения
- Перфоманс метрики по взрослому
- Perfsuite-ios: Кастомный сбор метрик от ребят из Booking

#blog
  • 🔥 10
Post #38 1.05K
Prefire 🔥 получил более 200 ⭐️ на GitHub!

Для меня это был невероятно сложный, важный и интересный путь.
Учитывая, что проект практически не продвигался, а его область применения довольно узкая, это просто огромная цифра!

Хочу обсудить с вами дальнейшие планы развития Prefire:
1. Направление развития:
👉 Важно понять, куда двигаться дальше. Prefire создается мной исключительно на энтузиазме, без какой-либо монетизации (и так будет дальше). Поэтому мне очень важно, чтобы проект был нужен и использовался кем-то, кроме меня. Оставьте комментарий, чтобы поделиться своим мнением! Поставьте ⭐️, чтобы поддержать проект!
2. Продвижение в России:
👉Статистика показывает, что Prefire мало используется в РФ. В то же время он очень популярен в Азиатских и Европейских странах. Это довольно странно, но однозначно не плохо. Хочу придумать, как можно продвинуть Prefire дальше. Если у вас есть идеи, пишите в комментариях!


P.S. Prefire - это сложный проект, который решает нетривиальные задачи. Его разработка требует довольно много сил и времени. Ваша поддержка - это огромный стимул для меня!

#blog #prefire
  • 🔥 11
  • ❤ 3
  • 🤩 1
Post #37 1.13K
Насмотренность в разработке: путь к красивому и чистому коду 🧘

Я написал небольшую статью, по мотивам предыдущего поста о Насмотренности.

В статье разбирается:
👉 Что такое насмотренность
👉 Зачем развивать насмотренность
👉 Как развивать насмотренность
👉 Как насмотренность влияет на качество и чистоту кода
👉 Как насмотренность влияет на поиск работы

Уверен что статья вам понравится и поможет в дальнейшей разработке ⭐️

PS: Я участвую в конкурсе статей, с шансом выиграть macbook. Победителя выбирают по количеству голосов на Habr. Если не сложно, прожмите там плюсик ❤️

#blog
  • ❤ 16
  • 🔥 5
  • ⚡ 4
  • 👍 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →