Усложнение разработки
Сегодня, решая очередную задачу, связанную с саппортом новых фич для проекта, задумался вот о чём.
Хотя у нас и появляется больше возможностей и новых API и какие-то вещи становятся проще, например, в верстке - это довольно обманчиво.
Язык усложняется, Swift 6 и миграция проекта может стать головной болью любого разработчика.
Только вдумайтесь, что у нас появилось за последнее время: и таски, и акторы, и preconcurrency, я уже не говорю про isolation domains и boundaries (кстати, разбор изоляции есть здесь).
И хотя в разработку многие уже активно вводят ИИ, а на конфе от Яндекса будет даже отдельное соревнование - это не всегда полезное решение.
Упрощение верстки в SwiftUI - за что мы его любим (а кто-то ненавидит), также спорное. Вопросы с производительностью остаются критическими и на моём проекте, поэтому для чата мы до сих пор не впилили новую верстку на SwiftUI. У нас могут быть кейсы с обработкой нескольких десятков (и иногда сотен) сообщений в секунду - и это может стать критикал поинтом для ненужных обновлений.
Если сейчас кажется, что ИИ - серебряная пуля, то на мой взгляд, сложности при использовании ИИ начнутся позже.
На поддержке. На обновлении логики. На рефакторинге.
У вас, безусловно, собственное мнение на этот счёт - и я не претендую на истину.
Но считаю, что каждое действие стоит обсудить на переправе, иначе ошибка на проекте может превратиться в огромную лавину крашей или, что того хуже - отсутствия понимания, почему было реализовано именно так. Кстати, этот вопрос характерен и не только для таких решений, но и например для крупных, солидных проектов с кодовой базой в миллион строк и более. Те, кто разбирал код телеги, поймёт, про что здесь речь.
На мой взгляд, даже при наличии современных решений, сложность проектов будет только расти.
Какие-то решения станут цениться меньше, но способность поддерживать крупные проекты и понимать причину условного краша у 0.0005% будет на вес золота.
Стоит инвестировать не только в AI-тулзы, но и в самих себя.
Ваши знания сослужат вам хорошую службу.
Даже сейчас.
😃 iOS Dev
Сегодня, решая очередную задачу, связанную с саппортом новых фич для проекта, задумался вот о чём.
Хотя у нас и появляется больше возможностей и новых API и какие-то вещи становятся проще, например, в верстке - это довольно обманчиво.
Язык усложняется, Swift 6 и миграция проекта может стать головной болью любого разработчика.
Только вдумайтесь, что у нас появилось за последнее время: и таски, и акторы, и preconcurrency, я уже не говорю про isolation domains и boundaries (кстати, разбор изоляции есть здесь).
И хотя в разработку многие уже активно вводят ИИ, а на конфе от Яндекса будет даже отдельное соревнование - это не всегда полезное решение.
Упрощение верстки в SwiftUI - за что мы его любим (а кто-то ненавидит), также спорное. Вопросы с производительностью остаются критическими и на моём проекте, поэтому для чата мы до сих пор не впилили новую верстку на SwiftUI. У нас могут быть кейсы с обработкой нескольких десятков (и иногда сотен) сообщений в секунду - и это может стать критикал поинтом для ненужных обновлений.
Если сейчас кажется, что ИИ - серебряная пуля, то на мой взгляд, сложности при использовании ИИ начнутся позже.
На поддержке. На обновлении логики. На рефакторинге.
У вас, безусловно, собственное мнение на этот счёт - и я не претендую на истину.
Но считаю, что каждое действие стоит обсудить на переправе, иначе ошибка на проекте может превратиться в огромную лавину крашей или, что того хуже - отсутствия понимания, почему было реализовано именно так. Кстати, этот вопрос характерен и не только для таких решений, но и например для крупных, солидных проектов с кодовой базой в миллион строк и более. Те, кто разбирал код телеги, поймёт, про что здесь речь.
На мой взгляд, даже при наличии современных решений, сложность проектов будет только расти.
Какие-то решения станут цениться меньше, но способность поддерживать крупные проекты и понимать причину условного краша у 0.0005% будет на вес золота.
Стоит инвестировать не только в AI-тулзы, но и в самих себя.
Ваши знания сослужат вам хорошую службу.
Даже сейчас.
Please open Telegram to view this post
VIEW IN TELEGRAM
16 40❤🔥15💯15🔥3🤝2👍1🏆1
This media is not supported in your browser
VIEW IN TELEGRAM
FoundationModels Framework и пример создания приложения для внешних LLM-провайдеров
В Xcode 26 Beta 4 доступна новая опция GeneratedContent с json для передачи ответов от внешних LLM-провайдеров, таких как OpenAI, Anthropic, Gemini и многих других.
И хотя этот фреймворк позволяет нам использовать мощные возможности ИИ на устройствах, но с ограничениями реальной модели (не так много поддерживаемых языков, да и окно контекста недостаточно большое) ее может не хватать.
Многие приложения всё также будут продолжать полагаться на внешних поставщиков LLM.
📖 В развернутом материале можно чекнуть, как создать такое приложение.
🛠 А вот здесь можно посмотреть на код проекта на GitHub (нужен Xcode Beta 4 и новая макось + iOS).
➡️ В этом посте можно ещё раз взглянуть на набор советов по работе (от управляемой генерации до сохранения ответов).
😃 iOS Dev
В Xcode 26 Beta 4 доступна новая опция GeneratedContent с json для передачи ответов от внешних LLM-провайдеров, таких как OpenAI, Anthropic, Gemini и многих других.
И хотя этот фреймворк позволяет нам использовать мощные возможности ИИ на устройствах, но с ограничениями реальной модели (не так много поддерживаемых языков, да и окно контекста недостаточно большое) ее может не хватать.
Многие приложения всё также будут продолжать полагаться на внешних поставщиков LLM.
📖 В развернутом материале можно чекнуть, как создать такое приложение.
По факту есть возможность выбрать из списка компанию для получения отчётности, указать временной диапазон для этой информации и задать любые дополнительные вопросы.
🛠 А вот здесь можно посмотреть на код проекта на GitHub (нужен Xcode Beta 4 и новая макось + iOS).
Please open Telegram to view this post
VIEW IN TELEGRAM
9 14🔥9👍5❤🔥2💯2🆒2👏1
Правильно поставленный вопрос
Пожалуй, одно из самых изматывающих занятий, с которыми вы можете столкнуться на практике - это фикс проблем, которые возникают при неординарных условиях, у одного человекаи вообще при определённой фазе луны.
Скорее всего в таком случае у вас есть отдел поддержки (или просто фидбэк пользователей в тестфлайте/других системах), но и его может быть недостаточно.
Приведу пример, с которым сталкивался несколько лет назад: прилетела обратная связь, что приложение не подгружало данные от слова совсем. Не грузились картинки, да и вообще по словам пользователя, всё не работало (ну классика же).
По логам при этом всё было чисто, а по айдишнику юзера не наблюдалось никаких аномалий.
Мы вместе с саппортом пытались повторить сценарий юзера, по которому он шёл, логин-проверка актуального стейта данных и подгрузка диффов, всё вроде чётко. Но что-то мне не давало покоя, и мы задали контрольный вопрос - а где эта ситуация происходила?
Ответ был простым: в самолёте. Человек на высоте в 10 км решил проверить, что не так, и получил очевидное поведение. Тогда не везде был wi-fi, да и сейчас мягко говоря не все авиакомпании предоставляют такую опцию, например, во многих самолётах british airways точки доступа может не быть вовсе (если речь не о межконтинентальных перелётах).
Или ещё чекайте пример: при воспроизведении видео не было звука. Человек получал сообщение с медиа-энтити, врубал видосы, перематывал их туда-сюда, а звука нет. С этим сценарием и прилетел запрос к нам через саппорт. Догадались, что было? Ответ всё также на поверхности - всего лишь не был включён регулятор тихого режима.
А ещё есть бесчисленные истории, когда жаловались на скорость работы приложения в кейсах, когда было меньше 20% зарядки и включён режим энергосбережения (тут даже объяснять не надо, что и почему так, надеюсь).
Безусловно, мы с вами можем стараться покрыть самые разные сценарии, но реальная жизнь порой подкидывает загадкижака фреско, решение которых может крыться совсем не в логах кибаны или firebase.
Я очень давно играю в разные квизы и интеллектуальные игры (тут можно пошутить про аббревиатуру ИИ), и поэтому создал себе пару приложений для тренировок, и даже там всегда надо помнить о фразе:
😉 Правильно поставленный вопрос - уже половина решения.
Были ли у вас в разработке ситуации, когда вы сталкивались с необычными ситуациями? Поделитесь ими, этим вы поможете коллегам не наступить на те же грабли.
😃 iOS Dev
Пожалуй, одно из самых изматывающих занятий, с которыми вы можете столкнуться на практике - это фикс проблем, которые возникают при неординарных условиях, у одного человека
Скорее всего в таком случае у вас есть отдел поддержки (или просто фидбэк пользователей в тестфлайте/других системах), но и его может быть недостаточно.
Приведу пример, с которым сталкивался несколько лет назад: прилетела обратная связь, что приложение не подгружало данные от слова совсем. Не грузились картинки, да и вообще по словам пользователя, всё не работало (ну классика же).
По логам при этом всё было чисто, а по айдишнику юзера не наблюдалось никаких аномалий.
Мы вместе с саппортом пытались повторить сценарий юзера, по которому он шёл, логин-проверка актуального стейта данных и подгрузка диффов, всё вроде чётко. Но что-то мне не давало покоя, и мы задали контрольный вопрос - а где эта ситуация происходила?
Ответ был простым: в самолёте. Человек на высоте в 10 км решил проверить, что не так, и получил очевидное поведение. Тогда не везде был wi-fi, да и сейчас мягко говоря не все авиакомпании предоставляют такую опцию, например, во многих самолётах british airways точки доступа может не быть вовсе (если речь не о межконтинентальных перелётах).
Или ещё чекайте пример: при воспроизведении видео не было звука. Человек получал сообщение с медиа-энтити, врубал видосы, перематывал их туда-сюда, а звука нет. С этим сценарием и прилетел запрос к нам через саппорт. Догадались, что было? Ответ всё также на поверхности - всего лишь не был включён регулятор тихого режима.
А ещё есть бесчисленные истории, когда жаловались на скорость работы приложения в кейсах, когда было меньше 20% зарядки и включён режим энергосбережения (тут даже объяснять не надо, что и почему так, надеюсь).
Безусловно, мы с вами можем стараться покрыть самые разные сценарии, но реальная жизнь порой подкидывает загадки
Я очень давно играю в разные квизы и интеллектуальные игры (тут можно пошутить про аббревиатуру ИИ), и поэтому создал себе пару приложений для тренировок, и даже там всегда надо помнить о фразе:
😉 Правильно поставленный вопрос - уже половина решения.
Были ли у вас в разработке ситуации, когда вы сталкивались с необычными ситуациями? Поделитесь ими, этим вы поможете коллегам не наступить на те же грабли.
Please open Telegram to view this post
VIEW IN TELEGRAM
6 18🔥8👍6❤🔥5🤯4✍1💯1
Фуллстэк Swift: реализация гибридного приложения с помощью Vapor для сервера и SwifUI+Observation для клиента
Technicolor — это сайд-проект Криса Тротта, над которым он работает более десяти лет.
Изначально использовался Ruby on Rails с поддержкой только браузеров, а теперь это полноценный Swift-on-server и нативное клиентское приложение для девайсов Apple.
Небольшая ремарка: к сожалению, часто вижу подмену понятий на счёт того, кто такой фуллстэк разработчик, но базово это специалист, который может сделать одновременно и клиент, и сервер (а не андроид + iOS клиент).
📖 На этом пути Крис столкнулся с самыми разными сложностями, и поделился ими в большом развернутом материале:
🔘 Обзор архитектуры.
🔘 API-слой.
🔘 Серверная часть и мысли на счёт фреймворка Vapor.
🔘 Аутентификация, сервисы и тестирование.
🔘 Клиентская часть: настройка проекта, работа с API и архитектура.
Несмотря на то, что Крису удалось всё это завести, в любом случае он считает, что Swift в качестве сервера пока ещё далеко не самый прагматичный выбор.
Все его преимущества не компенсируют того, насколько он отстает в более широкой экосистеме веб-фреймворков.
😃 iOS Dev
Technicolor — это сайд-проект Криса Тротта, над которым он работает более десяти лет.
Изначально использовался Ruby on Rails с поддержкой только браузеров, а теперь это полноценный Swift-on-server и нативное клиентское приложение для девайсов Apple.
Небольшая ремарка: к сожалению, часто вижу подмену понятий на счёт того, кто такой фуллстэк разработчик, но базово это специалист, который может сделать одновременно и клиент, и сервер (а не андроид + iOS клиент).
📖 На этом пути Крис столкнулся с самыми разными сложностями, и поделился ими в большом развернутом материале:
🔘 Обзор архитектуры.
🔘 API-слой.
🔘 Серверная часть и мысли на счёт фреймворка Vapor.
🔘 Аутентификация, сервисы и тестирование.
🔘 Клиентская часть: настройка проекта, работа с API и архитектура.
Несмотря на то, что Крису удалось всё это завести, в любом случае он считает, что Swift в качестве сервера пока ещё далеко не самый прагматичный выбор.
Все его преимущества не компенсируют того, насколько он отстает в более широкой экосистеме веб-фреймворков.
Please open Telegram to view this post
VIEW IN TELEGRAM
9 18✍8👍7🔥3❤🔥1👌1💯1
This media is not supported in your browser
VIEW IN TELEGRAM
Путешествие в космосе - новый шейдер на Metal + SwiftUI
🧠 Первое, что видят пользователи в iOS IQ - одну из вариаций гиперпространства, нативно реализованного на Swift.
Но, как известно, технологии постоянно идут вперёд, а мы вместе с ними.
🚀 Хочу поделиться с вами тем, что получилось (результат на гифке).
Для получения доступа к исходному коду, примерам многому другому загляните сюда (или можно прямо вот тут).
Ещё примеры:
Ах да, ещё там множество сложных тем от алгоритмов до решения проблем с производительностью.
😃 iOS Dev
Но, как известно, технологии постоянно идут вперёд, а мы вместе с ними.
🚀 Хочу поделиться с вами тем, что получилось (результат на гифке).
Для получения доступа к исходному коду, примерам многому другому загляните сюда (или можно прямо вот тут).
Ещё примеры:
🔗 Warp-эффект на metal-шейдере🔗 Beauty infinite loop🔗 Огненный шейдер🔗 Люминофор
Ах да, ещё там множество сложных тем от алгоритмов до решения проблем с производительностью.
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥19 13🤩5🏆4🆒3 3👍2❤🔥1🤝1
Реализация мема:
Каждый раз, когда мы встречаем сложные термины, может казаться - что это поймут не только лишь все, но с помощью разбора теории и пары практических примеров почти всегда изначальная сложность исчезает или хотя бы кратно уменьшается.
📖 Статья Джейкоба Бартлетта посвящена реализации мема, который изначально заставил автора почувствовать синдром самозванца.
В ней последовательно разбираются атрибуты от escaping до MainActor, и в итоге Джейкоб приходит к варианту:
😅 Как говорится, не пробуйте это дома (или на продакшне без должных навыков).
Кстати, напомню, что в канале был пост с огромным глоссарием по Swift Concurrency.
✅ А вот тут есть примеры тем, вопросов - и несколько разборов подводных камней в Swift Concurrency.
😃 iOS Dev
@escaping @Sendable @MainActor @autoclosure () async -> Void
Каждый раз, когда мы встречаем сложные термины, может казаться - что это поймут не только лишь все, но с помощью разбора теории и пары практических примеров почти всегда изначальная сложность исчезает или хотя бы кратно уменьшается.
📖 Статья Джейкоба Бартлетта посвящена реализации мема, который изначально заставил автора почувствовать синдром самозванца.
В ней последовательно разбираются атрибуты от escaping до MainActor, и в итоге Джейкоб приходит к варианту:
Task {
await allTheAttributes(await helloWorld())
}
func allTheAttributes(
_ then: @escaping @Sendable @MainActor @autoclosure () async -> Void
) async {
Task {
await then()
}
}
@MainActor func helloWorld() {
print("Hello, world!")
}
😅 Как говорится, не пробуйте это дома (или на продакшне без должных навыков).
Кстати, напомню, что в канале был пост с огромным глоссарием по Swift Concurrency.
Please open Telegram to view this post
VIEW IN TELEGRAM
10 20🔥12👍9🤯3⚡2👏2
Global actor в Swift Concurrency на реальных примерах
ℹ️ Swift Concurrency ввел концепцию глобального актора среди async/await и задач.
Наиболее распространенным из них, вероятно, является
Однако нам доступна возможность создавать и собственные глобальные акторы.
Глобальный актор обеспечивает ту же изоляцию актора (безопасный, сериализованный доступ к данным), но есть и разница: вместо привязки к одному экземпляру он привязан к чему-то более широкому, например, к функции, свойству или даже целому типу.
📖 А о том, как его использовать (и как не допустить ошибок) можно прочитать в этой статье.
😃 iOS Dev
ℹ️ Swift Concurrency ввел концепцию глобального актора среди async/await и задач.
Наиболее распространенным из них, вероятно, является
@MainActor
, про который можно почитать здесь и вот тут. Однако нам доступна возможность создавать и собственные глобальные акторы.
Глобальный актор обеспечивает ту же изоляцию актора (безопасный, сериализованный доступ к данным), но есть и разница: вместо привязки к одному экземпляру он привязан к чему-то более широкому, например, к функции, свойству или даже целому типу.
📖 А о том, как его использовать (и как не допустить ошибок) можно прочитать в этой статье.
Please open Telegram to view this post
VIEW IN TELEGRAM
8 11🔥10✍5👍4❤🔥1🆒1
Огромный обзорный пост по всем изменениям UIKit в iOS 26
Ремарка - несколько месяцев назад целый ряд крупных ресурсов про iOS сообщали о том, что UIKit (и UIApplicationDelegate, в частности) депрекейтнут, но как обычно без какого-либо подкрепления фактов.
С тех пор прошла WWDC, и на практике всё совсем не так, в ближайшем времени фреймворк нам ещё пригодится.
Сегодня делюсь чудесным разбором от Себа Видаля, который он писал несколько последних недель (поблагодарить его можно здесь).
В нашем канале уже есть несколько примеров по важным изменениям во фреймворке (и в экосистеме в целом), но этот пост просто невероятен по объёму и количеству примеров.
📖 В этом посте можно познакомиться и с UIBackgroundExtensionView, и с UICornerConfiguration (шок, что этого не было ранее и я, например, писал кастомное решение с UIBezierPath для большинства проектов). Также есть изменения и в UIResponder, и в UIScrollView, и во многом другом.
🔗 Сохраните пост в закладки (релиз новой оси совсем скоро).
😃 iOS Dev
Ремарка - несколько месяцев назад целый ряд крупных ресурсов про iOS сообщали о том, что UIKit (и UIApplicationDelegate, в частности) депрекейтнут, но как обычно без какого-либо подкрепления фактов.
С тех пор прошла WWDC, и на практике всё совсем не так, в ближайшем времени фреймворк нам ещё пригодится.
Сегодня делюсь чудесным разбором от Себа Видаля, который он писал несколько последних недель (поблагодарить его можно здесь).
В нашем канале уже есть несколько примеров по важным изменениям во фреймворке (и в экосистеме в целом), но этот пост просто невероятен по объёму и количеству примеров.
📖 В этом посте можно познакомиться и с UIBackgroundExtensionView, и с UICornerConfiguration (шок, что этого не было ранее и я, например, писал кастомное решение с UIBezierPath для большинства проектов). Также есть изменения и в UIResponder, и в UIScrollView, и во многом другом.
🔗 Сохраните пост в закладки (релиз новой оси совсем скоро).
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥14 11👍9❤🔥2👏2✍1🍓1
Карта изучения Swift Concurrency
Последние несколько недель я активно изучал самые интересные моменты в Swift Concurrency и чем-то делился в канале, что-то пробовал в приложениях, а определённую часть выписывал и структурировал.
Пришло время первого роадмапа по изучению Swift Concurrency (постарался пошагово пройтись по самым важным концепциям и доступно разложить по полочкам самое интересное).
В канале уже есть и пример глоссария и разбор доступных нам инструментов в изложении Emerge Tools.
Но я люблю разбираться в сложных темах, а декомпозиция помогает не только в решении задач, но и в разборах таких вещей.
🔗 Файл в большом разрешении в .pdf доступен всем желающим в моём бусти (достаточно просто подписаться даже на бесплатный уровень).
🧠 А в закрытой базе можно получить доступ к разборам каждой секции и пройтись по каждому этапу:
И это далеко не всё.
✅ Получите доступ к этому разбору и не только на бусти и прямо здесь уже сегодня.
😃 iOS Dev
Последние несколько недель я активно изучал самые интересные моменты в Swift Concurrency и чем-то делился в канале, что-то пробовал в приложениях, а определённую часть выписывал и структурировал.
Пришло время первого роадмапа по изучению Swift Concurrency (постарался пошагово пройтись по самым важным концепциям и доступно разложить по полочкам самое интересное).
В канале уже есть и пример глоссария и разбор доступных нам инструментов в изложении Emerge Tools.
Но я люблю разбираться в сложных темах, а декомпозиция помогает не только в решении задач, но и в разборах таких вещей.
🔗 Файл в большом разрешении в .pdf доступен всем желающим в моём бусти (достаточно просто подписаться даже на бесплатный уровень).
🔘 С чего начать (основны многопоточности, существующие проблемы GCD и нужен ли переход на Swift Concurrency).
🔘 Синтаксис async/await, обработка ошибок, применение@MainActor
.
🔘 Tasks (что это, как работать, как отменять и для чего нужен detached).
🔘 Sendable, потокобезопасность на практике.
🔘 AsyncStream и разбор на реальных примерах.
🔘 Работа в реальных проекта (тестирование, отладка и способы избежать ошибок).
И это далеко не всё.
Please open Telegram to view this post
VIEW IN TELEGRAM
6 16❤🔥9✍5💯5 3👍2🔥1🎉1
Разработчики на Objective-С получают самую высокую зарплату в России
На Хабр Карьере провели очередное крупное исследование (примерно 60 000 специалистов в выборке), и составили несколько отчётов по зарплатам за первое полугодие 2025 года.
Среди интересующих нас результатов:
💰 У разработчиков на Objective-С средняя зарплата 380 000 ₽ (самая высокая в отрасли), а на Swift 292 000 ₽.
Среди компаний лидеры: Авито, Райффайзен Банк, Иннотех и VK.
📖 Сравнить тенденцию изменений можно с этим постом.
😃 iOS Dev
На Хабр Карьере провели очередное крупное исследование (примерно 60 000 специалистов в выборке), и составили несколько отчётов по зарплатам за первое полугодие 2025 года.
Среди интересующих нас результатов:
💰 У разработчиков на Objective-С средняя зарплата 380 000 ₽ (самая высокая в отрасли), а на Swift 292 000 ₽.
Среди компаний лидеры: Авито, Райффайзен Банк, Иннотех и VK.
📖 Сравнить тенденцию изменений можно с этим постом.
Please open Telegram to view this post
VIEW IN TELEGRAM
9 18🔥9👏7👍3 3✍2❤🔥2💯2