Property Wrapper @State теперь макрос
Только-что показали, что @State стала макросом и тем самым будет доступна с ios 17.
Исправили проблему, при которой @State могла вызвать конструктор сущности несколько раз.
В отличие от @StateObject с его autoclosure, у @State отсутствовало последнее и это было неоднозначно.
В ноушене про это писал, что будьте осторожны, несет за собой сайд эффект.
Теперь еще одну неприятность убрали, отлично!
Только-что показали, что @State стала макросом и тем самым будет доступна с ios 17.
Исправили проблему, при которой @State могла вызвать конструктор сущности несколько раз.
В отличие от @StateObject с его autoclosure, у @State отсутствовало последнее и это было неоднозначно.
В ноушене про это писал, что будьте осторожны, несет за собой сайд эффект.
Теперь еще одну неприятность убрали, отлично!
🔥5❤2👍1
ForEach из SwiftUI обзовется swipe actions
Наконец-то Apple добавили поведение свайпов: влево, вправо как у List, UICollection, UITableView, Table и для ForEach элементов, примате ленивые стеки!
Жаль это все доступно только с 27 версии. Как по мне изначально должно было быт, с 13 или хотя бы 15…
Наконец-то Apple добавили поведение свайпов: влево, вправо как у List, UICollection, UITableView, Table и для ForEach элементов, примате ленивые стеки!
Жаль это все доступно только с 27 версии. Как по мне изначально должно было быт, с 13 или хотя бы 15…
❤4🔥3😁2🤯1
Реинкорнация Stack Overflow
Возможно ты видел новость, что количество вопросов на Stack Overflow упало с 200к до 3862 в месяц.
Так вот, команда не сдаётся, она адаптируется. Будут делать свой сайт "API first" для агентов.
Как это работает? Цикл из четырёх шагов:
• Сначала ищи. Независимо от того, планирует ли агент выполнение задачи, застрял ли он в процессе реализации или собирается выполнить действие, на которое модель не была обучена, он сначала запрашивает информацию в Stack Overflow for Agents, прежде чем тратить вычислительные ресурсы на повторный поиск уже известных решений. Если нужный ответ есть в корпусе, агент использует проверенный ответ и приступает к выполнению задачи.
• Нет ответа - внеси свой. Решил проблему сам? Оформляет пост. Для этого skill файл просит сначала показать черновик человеку-оркестратору на ревью.
• Проверяй чужое. Агенты и разработчики, которые пробуют решить ту же проблему после публикации, делятся информацией о том, что сработало, что пришлось изменить и при каких условиях это сработало. Именно проверка, а не создание ответов, помогает агентам заработать репутацию на Stack Overflow.
• Сигналы объединяются в консенсус. Голоса, ответы и отзывы о проверке возвращаются к исходному сообщению и накапливаются вокруг него. Платформа создана для выявления консенсуса, а не единственного канонического ответа, поэтому пользователи видят, что уже было опробовано, и сами решают, что подходит именно им.
Возможно ты видел новость, что количество вопросов на Stack Overflow упало с 200к до 3862 в месяц.
Так вот, команда не сдаётся, она адаптируется. Будут делать свой сайт "API first" для агентов.
Как это работает? Цикл из четырёх шагов:
• Сначала ищи. Независимо от того, планирует ли агент выполнение задачи, застрял ли он в процессе реализации или собирается выполнить действие, на которое модель не была обучена, он сначала запрашивает информацию в Stack Overflow for Agents, прежде чем тратить вычислительные ресурсы на повторный поиск уже известных решений. Если нужный ответ есть в корпусе, агент использует проверенный ответ и приступает к выполнению задачи.
• Нет ответа - внеси свой. Решил проблему сам? Оформляет пост. Для этого skill файл просит сначала показать черновик человеку-оркестратору на ревью.
• Проверяй чужое. Агенты и разработчики, которые пробуют решить ту же проблему после публикации, делятся информацией о том, что сработало, что пришлось изменить и при каких условиях это сработало. Именно проверка, а не создание ответов, помогает агентам заработать репутацию на Stack Overflow.
• Сигналы объединяются в консенсус. Голоса, ответы и отзывы о проверке возвращаются к исходному сообщению и накапливаются вокруг него. Платформа создана для выявления консенсуса, а не единственного канонического ответа, поэтому пользователи видят, что уже было опробовано, и сами решают, что подходит именно им.
Сейчас есть Три типа постов
1. Question. Что пробовал, что не вышло, где остался затык.
2. Today I Learned. Что сломалось, что помогло, в чём корневая причина. Самый ценный тип: фиксирует ровно то, чего не было в обучении модели.
3. Blueprint. Переиспользуемый паттерн архитектуры. Планка качества максимальная: один кривой Blueprint уведёт в сторону всех, кто строит такое же.
👍5🔥4❤2
Матрёшка из Task внутри ViewModel
Есть популярный паттерн, который выглядит знакомым многим SwiftUI разработчикам:
На первый взгляд вроде-бы всё нормально:
• ViewModel изолирована на MainActor
• UI состояние меняется безопасно
• async работа вынесена в Task
Но есть одно "но" и выглядит оно как
Проблема в том, что мы легко можем протащить через MainActor работу, которой этот актор вообще не нужен.
Например, ViewModel целиком помечена
Но как быть, если у нас ViewModel большая, скажем на 800-900 строк и одну из операций внутри неё необходимо реализовать вне текущего actor isolation?🤔
В Swift 6.2 для такого случая есть явный инструмент - атрибут @concurrent.
Что здесь происходит:
•
• Вызов публикации больше не стартует в MainActor изоляции ViewModel
• MainActor.run используется только там, где реально нужно обновить UI состояние
То есть мы не таскаем всю операцию через главный актор просто потому, что вся ViewModel помечена @MainActor. И
Эту async работу не нужно выполнять в текущей actor isolation
Тем самым ближе познакомились с достаточно частым кейсом, сейчас / в будущем, где нам может понадобиться новый атрибут! 😎️️️️️️
Вдохновился и видоизменил под +1 кейс от Unexpected Task suspension points in Swift Concurrency
Есть популярный паттерн, который выглядит знакомым многим SwiftUI разработчикам:
@MainActor
final class ArticleViewModel: ObservableObject {
@Published var isPublishing = false
func publish(_ article: Article) {
isPublishing = true
Task {
await ArticlePublisher.publish(article: article)
isPublishing = false
}
}
}
На первый взгляд вроде-бы всё нормально:
• ViewModel изолирована на MainActor
• UI состояние меняется безопасно
• async работа вынесена в Task
Но есть одно "но" и выглядит оно как
Task. Кто-то сразу прикинул:"Ага, ну тут у нас просто Task, а не Task.detached и значит мы наследуем изоляцию и замыкание Task будет изолировано на MainActor!" И будет прав, достаточно типичный пример в SwiftUI разработке.Проблема в том, что мы легко можем протащить через MainActor работу, которой этот актор вообще не нужен.
Например, ViewModel целиком помечена
@MainActor, потому что хранит UI состояние и управляет навигацией, но не каждая операция внутри такой ViewModel обязана выполняться в этой изоляции.Но как быть, если у нас ViewModel большая, скажем на 800-900 строк и одну из операций внутри неё необходимо реализовать вне текущего actor isolation?
В Swift 6.2 для такого случая есть явный инструмент - атрибут @concurrent.
Task { @concurrent in
await ArticlePublisher.publish(article: article)
await MainActor.run {
isPublishing = false
}
}
Что здесь происходит:
•
@concurrent говорит замыканию Task не наследовать текущую actor isolation• Вызов публикации больше не стартует в MainActor изоляции ViewModel
• MainActor.run используется только там, где реально нужно обновить UI состояние
То есть мы не таскаем всю операцию через главный актор просто потому, что вся ViewModel помечена @MainActor. И
@concurrent нужен как раз для случаев, когда мы хотим явно сказать:Эту async работу не нужно выполнять в текущей actor isolation
Тем самым ближе познакомились с достаточно частым кейсом, сейчас / в будущем, где нам может понадобиться новый атрибут! 😎️️️️️️
Вдохновился и видоизменил под +1 кейс от Unexpected Task suspension points in Swift Concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤5🔥5
#miniapp #обновление
Привет, в mini app обновление - расширил источник вакансий. Теперь есть небольшой количество вакансий из Linkedln, совсем немного 10-15шт удалось подтянуть.
Соверешнно бесплатно и уже доступно для каждого: @ios_roadmap_academy_2024_bot
Привет, в mini app обновление - расширил источник вакансий. Теперь есть небольшой количество вакансий из Linkedln, совсем немного 10-15шт удалось подтянуть.
Буду так же смотреть в увеличение вакансий из Linkedln + остальные источники.
Соверешнно бесплатно и уже доступно для каждого: @ios_roadmap_academy_2024_bot
🔥3👍2🤯1
Получай новые вакансии прямо в боте
Сейчас все настройки у каждого пользователя по-умолчанию выключены. Но если тебе актуален просмотр вакансий и тем-более новых, то по картинкам показал путь до включения уведомлений для новых вакансий.
Тем самым тебе от бота будет приходить каждые 2 часа при наличии новых. Если вакансий открылось несколько - будет одно смс с разделением.
При нажатии на вакансию ты по диплинку перейдешь на детальный экран. Там уже на сам сайт, либо написать заметку или добавить в избранное и т.д.
Новые вакансии - это новые в БД мини App. Так как источников несколько.
@ios_roadmap_academy_2024_bot
Сейчас все настройки у каждого пользователя по-умолчанию выключены. Но если тебе актуален просмотр вакансий и тем-более новых, то по картинкам показал путь до включения уведомлений для новых вакансий.
Тем самым тебе от бота будет приходить каждые 2 часа при наличии новых. Если вакансий открылось несколько - будет одно смс с разделением.
При нажатии на вакансию ты по диплинку перейдешь на детальный экран. Там уже на сам сайт, либо написать заметку или добавить в избранное и т.д.
Новые вакансии - это новые в БД мини App. Так как источников несколько.
• Бесплатно
• Доступно
• Легко и просто
@ios_roadmap_academy_2024_bot
🔥3❤1👍1
Сегодня последний день Тима Кука
Уже завтра CEO Apple сменится и на должность компании встанет Джон Тернус. Тим принял компанию в 2011.
1. Капитализация выросла примерно с 350 млрд до 4 трлн. В августе 2018 Apple первой среди американских компаний взяла отметку в триллион. Сейчас занимает 2-ую строчку, 1-ую думаю и сами догадаетесь кто и почему?😋 (подсказка - глава в куртке презентации делает)
2. Две новые категории с нуля - Apple Watch и AirPods. Возможно кто-то видел картинки, где сравнивают доход от AirPods с топовыми компаниями? А-ля спотифай, кока-кола и т.д.
3. Одно из самых значимых для нас - в 2020 Mac начал уходить с процессоров Intel на собственные чипы Apple.
1. Персональную Siri показали на WWDC 2024 и обещали к осени. В марте 2025 отложили без новой даты...
2. Vision Pro. 3499 долларов, массовым продуктом шлем так и не стал.
3. Автомобиль. Десять лет разработки и где-то 2000 человек в команде, проект закрыли в феврале 2024.
Сменщик Тима - Джон Тернус. Он в компании с 2001 года, старший вице-президент по аппаратной инженерии, вёл разработку iPhone, iPad и Mac. Интересно, сможет ли он нарастить доминировании и дальше? Что будет в гонке с AI?
🫰 Легенде и достойному приемнику Стива Джобса!
Уже завтра CEO Apple сменится и на должность компании встанет Джон Тернус. Тим принял компанию в 2011.
Так что же у Тима получилось за весь этот период?
1. Капитализация выросла примерно с 350 млрд до 4 трлн. В августе 2018 Apple первой среди американских компаний взяла отметку в триллион. Сейчас занимает 2-ую строчку, 1-ую думаю и сами догадаетесь кто и почему?
2. Две новые категории с нуля - Apple Watch и AirPods. Возможно кто-то видел картинки, где сравнивают доход от AirPods с топовыми компаниями? А-ля спотифай, кока-кола и т.д.
3. Одно из самых значимых для нас - в 2020 Mac начал уходить с процессоров Intel на собственные чипы Apple.
Но что пошло не совсем поплану и не получилось?
1. Персональную Siri показали на WWDC 2024 и обещали к осени. В марте 2025 отложили без новой даты...
2. Vision Pro. 3499 долларов, массовым продуктом шлем так и не стал.
3. Автомобиль. Десять лет разработки и где-то 2000 человек в команде, проект закрыли в феврале 2024.
Сменщик Тима - Джон Тернус. Он в компании с 2001 года, старший вице-президент по аппаратной инженерии, вёл разработку iPhone, iPad и Mac. Интересно, сможет ли он нарастить доминировании и дальше? Что будет в гонке с AI?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍3🤯1
Кросс-платформа переходит на натив
Несколько компаний сообщили о том, что они двигаются от кросс-платформы в сторону натива: Swift и Kotlin. Из тех, кто на слуху - это:
1. Notion, с его проблемой холодного старта и перфорансем в целом.
2. Shopify, в 2020 перешли на React Native, теперь переходят обратно на натив. К слову до конца этого года хотят основное приложение (300+ экранов и множество другого) перевести на нативку.
Это два крупных и нашумевших случая (пост про ноушен 2млн глазиков в Х). У Shopify кстати есть две хорошие статьи на почитать:
• Native is now the future of mobile at Shopify
• Migrating Shop app from React Native to native
У Amazon было хорошее исследование на тему фризов и как это влияет на покупки.
Любая кросс-платформа - это компромиссы, будь то Flutter или KMP. И в нашем случае помощь LLM обеспечивает нужную поддержку и скорость поставки, чтобы нивелировать недостатки натива перед кросс-платформой.
Несколько компаний сообщили о том, что они двигаются от кросс-платформы в сторону натива: Swift и Kotlin. Из тех, кто на слуху - это:
1. Notion, с его проблемой холодного старта и перфорансем в целом.
2. Shopify, в 2020 перешли на React Native, теперь переходят обратно на натив. К слову до конца этого года хотят основное приложение (300+ экранов и множество другого) перевести на нативку.
Это два крупных и нашумевших случая (пост про ноушен 2млн глазиков в Х). У Shopify кстати есть две хорошие статьи на почитать:
• Native is now the future of mobile at Shopify
• Migrating Shop app from React Native to native
Размер бинаря, холодный старт и ФПС внутри второй статьи. К слову, iOS ускорился на 23%, android ускорился на 50%.
У Amazon было хорошее исследование на тему фризов и как это влияет на покупки.
Любая кросс-платформа - это компромиссы, будь то Flutter или KMP. И в нашем случае помощь LLM обеспечивает нужную поддержку и скорость поставки, чтобы нивелировать недостатки натива перед кросс-платформой.
❤9🔥6🤯4
Вышли iOS 27, iPadOS 27, macOS 27
В этом году Apple делает ставку на более умную Siri, доработку интерфейса и скорость повседневных действий. Что из интересного можно обозначить:
Phone на iOS 27
• Siri AI: диалоги с продолжением, поиск по письмам, фотографиям и заметкам, выполнение действий в приложениях. Появилось отдельное приложение с историей разговоров.
• Камера и "Фото": визуальный поиск прямо из камеры, расширение границ снимка и улучшенное удаление лишних объектов.
• Liquid Glass: больше контраста и ползунок настройки прозрачности, вот и сдали Apple чуть назад.
• Скорость: Apple заявляет ускорение запуска приложений, загрузки фото и AirDrop и т.д.
➡️ Подробнее
MacBook на macOS 27 Golden Gate
• ИИ понимает содержимое экрана: можно сделать скриншот картинки или PDF и задать Siri вопрос.
• Работа с текстом: создание черновиков и предложения по улучшению написанного.
• Safari: автоматическая группировка вкладок по темам и уведомления об изменениях на страницах к примеру, о снижении цены.
• Повседневные улучшения: более читаемый интерфейс, ускорение работы с сетевыми файлами и AirDrop, запоминание расположения внешних дисплеев.
Mac на Intel обновление не получат: новая macOS поддерживает компьютеры с чипами Apple.
➡️ Подробнее
iPad на iPadOS 27
• Поиск с Apple Pencil: обводите объект на скриншоте и спрашиваете Siri, что это.
• Умные заметки: Siri помогает превратить рукописные записи в структурированный материал для учёбы или план встречи.
• Работа с файлами: Apple заявляет ускорение просмотра и передачи данных на внешний накопитель.
➡️ Подробнее
Новая Siri AI запускается на английском. Доступность зависит от языка, региона и устройства самособой.
Для Apple Intelligence нужны iPhone 15 Pro / Pro Max или линейка iPhone 16 и новее. iPad с M1 и новее либо mini с A17 Pro. Mac с M1 и новее либо MacBook Neo
P.S. Про айфон слышал мнение, что ждать 27.3 если важен заряд батареи.
В этом году Apple делает ставку на более умную Siri, доработку интерфейса и скорость повседневных действий. Что из интересного можно обозначить:
Phone на iOS 27
• Siri AI: диалоги с продолжением, поиск по письмам, фотографиям и заметкам, выполнение действий в приложениях. Появилось отдельное приложение с историей разговоров.
• Камера и "Фото": визуальный поиск прямо из камеры, расширение границ снимка и улучшенное удаление лишних объектов.
• Liquid Glass: больше контраста и ползунок настройки прозрачности, вот и сдали Apple чуть назад.
• Скорость: Apple заявляет ускорение запуска приложений, загрузки фото и AirDrop и т.д.
MacBook на macOS 27 Golden Gate
• ИИ понимает содержимое экрана: можно сделать скриншот картинки или PDF и задать Siri вопрос.
• Работа с текстом: создание черновиков и предложения по улучшению написанного.
• Safari: автоматическая группировка вкладок по темам и уведомления об изменениях на страницах к примеру, о снижении цены.
• Повседневные улучшения: более читаемый интерфейс, ускорение работы с сетевыми файлами и AirDrop, запоминание расположения внешних дисплеев.
Mac на Intel обновление не получат: новая macOS поддерживает компьютеры с чипами Apple.
iPad на iPadOS 27
• Поиск с Apple Pencil: обводите объект на скриншоте и спрашиваете Siri, что это.
• Умные заметки: Siri помогает превратить рукописные записи в структурированный материал для учёбы или план встречи.
• Работа с файлами: Apple заявляет ускорение просмотра и передачи данных на внешний накопитель.
Новая Siri AI запускается на английском. Доступность зависит от языка, региона и устройства самособой.
Для Apple Intelligence нужны iPhone 15 Pro / Pro Max или линейка iPhone 16 и новее. iPad с M1 и новее либо mini с A17 Pro. Mac с M1 и новее либо MacBook Neo
P.S. Про айфон слышал мнение, что ждать 27.3 если важен заряд батареи.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Один Swift модуль для iOS и Android
Давай представим, что ты написал на Swift расчёты, парсер или обработку звука. Всё отлично работает, никаких проблем нет, но ты видишь, как коллега по Android собирается реализовать ту же логику на Kotlin.
И тут ты вспоминаешь: Swift же умеет и в Android
Можно попробовать вынести этот код в общий модуль, и интерфейсы оставить отдельными для каждой платформы.
Так уже кто-то делает?🤔
Оказывается, что да! Spark использует Swift для общего кода между платформами. При этом такие команды начинали со своими инструментами задолго до нынешнего официального SDK. Можно подробнее посмотреть и про другие приложения.
И вот в сентябрьском Swift 6.4 релизе доработали сборку и взаимодействие языков:
• Swift Build теперь поддерживает Android в SwiftPM без дополнительного post-install скрипта.
• Swift / Java интероп расширил поддержку async и throws в обёртках для протоколов и колбэков.
Как это устроено? Swift модуль компилируется в нативную библиотеку под Android и включается в приложение.
Kotlin / Java код обращается к нему через JNI и инструменты Swift / Java помогают сгенерировать нужные обёртки. Интерфейс при этом можно оставить на Jetpack Compose. Если интересно углубиться, вот ссылка!👌
Как по мне, для эксперимента можно взять один небольшой модуль. Подключить, прогнать тесты (и написать если не написаны) на Android и посмотреть, сколько приседаний потребуется.
Тогда будет понятнее, что выгоднее для конкретного проекта: поддерживать эту интеграцию или две реализации логики.
Давай представим, что ты написал на Swift расчёты, парсер или обработку звука. Всё отлично работает, никаких проблем нет, но ты видишь, как коллега по Android собирается реализовать ту же логику на Kotlin.
И тут ты вспоминаешь: Swift же умеет и в Android
Можно попробовать вынести этот код в общий модуль, и интерфейсы оставить отдельными для каждой платформы.
Так уже кто-то делает?
Оказывается, что да! Spark использует Swift для общего кода между платформами. При этом такие команды начинали со своими инструментами задолго до нынешнего официального SDK. Можно подробнее посмотреть и про другие приложения.
И вот в сентябрьском Swift 6.4 релизе доработали сборку и взаимодействие языков:
• Swift Build теперь поддерживает Android в SwiftPM без дополнительного post-install скрипта.
• Swift / Java интероп расширил поддержку async и throws в обёртках для протоколов и колбэков.
Как это устроено? Swift модуль компилируется в нативную библиотеку под Android и включается в приложение.
Kotlin / Java код обращается к нему через JNI и инструменты Swift / Java помогают сгенерировать нужные обёртки. Интерфейс при этом можно оставить на Jetpack Compose. Если интересно углубиться, вот ссылка!
Есть и примеры, которые можно изучить:
1. Swift пакет, который считает SHA256 через swift-crypto, где андроид приложение на Kotlin с Compose вызывает его по нажатию кнопки. [репозиторий]
2. Пример с асинхронными вызовами и реализацией Swift протокола на Java.
Как по мне, для эксперимента можно взять один небольшой модуль. Подключить, прогнать тесты (и написать если не написаны) на Android и посмотреть, сколько приседаний потребуется.
Тогда будет понятнее, что выгоднее для конкретного проекта: поддерживать эту интеграцию или две реализации логики.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3🤯3