Мобильный трудоголик
1.65K subscribers
122 photos
10 videos
431 links
Пишу простым языком об iOS разработке на Swift и мобильной разработке в целом.
Обо мне: https://t.me/hardworkerIT/3
Чат: @hardworkerChatIT
Канал про разработку и жизнь в ИТ: @itDenisov
Вакансии по мобильной разработке: @mobileDevJobs
Download Telegram
Forwarded from Кот Денисова
👨‍💻 Big O нотация: почему ваш код может работать медленно в 100 раз при росте данных в 10 раз.

В мире разработки часто возникает дискуссия: как оценить эффективность алгоритма? Можно измерить время выполнения на конкретных данных, но эти цифры будут относительными - зависеть от мощности железа, текущей нагрузки и множества других факторов. Существует более фундаментальный способ, который абстрагируется от конкретных измерений и описывает суть поведения алгоритма. Этот язык называется Big O нотация, и его понимание - не академическое упражнение, а практический навык, который отделяет хаотичное написание кода от осознанного проектирования систем.


Суть нотации - описываем не секунды, а характер роста:

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

Big O - это именно про характер роста требуемых ресурсов (времени или памяти) при увеличении объема входных данных. Обозначение O(n) говорит: время работы растет пропорционально n. O(1): время не зависит от размера данных. Нотация игнорирует константы (O(2n) это O(n)) и менее значимые слагаемые, фокусируясь на доминирующем факторе при стремлении n к бесконечности.


От простого к сложному - иерархия сложностей в действии:

🔹O(1) - константное время: доступ по индексу в массиве. Независимо от того, массив из 10 или 10 миллионов элементов, операция array[42] выполняется за одно и то же время. Это идеал, но не всегда достижимый.

🔹O(log n) - логарифмическое время: бинарный поиск. Каждый шаг алгоритма отбрасывает половину оставшихся вариантов. Увеличение данных в 1000 раз увеличит время работы лишь в ~10 раз (log₂(1000) ≈ 10). Невероятно эффективно для больших объемов.

🔹O(n) - линейное время: поиск элемента в неотсортированном массиве. В худшем случае придется проверить каждый элемент. Увеличение данных в 10 раз - в 10 раз больше операций. Предсказуемо и часто приемлемо.

🔹O(n log n) - линейно-логарифмическое время: эффективные алгоритмы сортировки (Merge Sort, Quick Sort). Хуже, чем линейный рост, но значительно лучше квадратичного. Фактический стандарт для сортировки.

🔹O(n²) - квадратичное время: пузырьковая сортировка, два вложенных цикла. Увеличение данных в 10 раз увеличивает время работы в 100 раз. На больших n это катастрофа. Классический маркер неоптимального алгоритма.

🔹O(2ⁿ), O(n!) - экспоненциальное и факториальное время: решение некоторых задач перебором (например задача коммивояжера). Практически неприменимы для реальных данных, кроме самых маленьких n.


🔗 Ссылка на подробную статью


💡 Вывод:

Big O нотация - это не просто набор странных символов для прохождения собеседований. Это система мышления, которая позволяет оценивать последствия ваших архитектурных решений на этапе проектирования.

Она отвечает на критически важный вопрос: «Что произойдет с моим приложением, когда данных станет в 100, 1000 или 1000000 раз больше?» Пренебрежение этим анализом ведет к созданию систем, которые корректно работают на тестовых данных, но непредсказуемо ведет себя при реальной работе, создавая инциденты, которые невозможно быстро разрешить простым добавлением ресурсов на сервере.


➡️ Кот Денисова
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍9🙏2🔥1👀1🤝1
🔢 Плавные expandable-ячейки в SwiftUI List.

В SwiftUI раскрывающиеся списки - штука коварная. В обычном VStack или LazyVStack анимация работает как по маслу: нажал - контент плавно появился, исчез - так же плавно скрылся. Но стоит положить такую конструкцию в List, и анимация начинает дергаться. Контент просто выскакивает, а высота ячейки меняется рывками.


Почему в List анимация ломается:

Проблема в том, что List по-своему управляет переиспользованием ячеек и вычислением их высоты. Когда внутри ячейки появляется или исчезает условный блок с if, List не всегда корректно анимирует изменение размера. SwiftUI просто не понимает, как плавно перейти от одного состояния к другому.

DisclosureGroup - встроенное решение от Apple. Оно работает плавно, но не дает кастомизировать анимацию. Если вам нужен свой дизайн (своя иконка, свои тайминги), DisclosureGroup не подходит.


Как это можно обойти:

Есть способ, который заставляет List анимироваться так, как нужно. Идея в том, чтобы анимировать не появление/исчезновение контента, а его высоту. Для этого используется протокол Animatable, который анимирует одно числовое значение от 0 до 1. В зависимости от этого значения меняется высота блока, а сам контент всегда присутствует в иерархии, но его прозрачность и положение привязаны к анимируемому значению.


Основные шаги:

🔵Измерить высоту заголовка и высоту раскрывающегося контента (через GeometryReader и PreferenceKey).

🔵Вычислить общую высоту ячейки как высота_заголовка + высота_контента * прогресс.

🔵Раскрывающийся контент разместить в оверлее, сдвигая его вниз по мере увеличения прогресса.

В результате List видит только изменение высоты ячейки и плавно анимирует ее, а контент появляется и исчезает синхронно.


🔗 Читать подробнее


💡 Вывод:

Анимация раскрывающихся ячеек в SwiftUI List - не магия, а четкое понимание того, как List обрабатывает изменения высоты. DisclosureGroup решает проблему из коробки, но ограничивает в дизайне. Кастомное решение через Animatable сложнее, зато дает полную свободу. Выбор зависит от того, что важнее: скорость реализации или точное соответствие дизайну.


➡️ Подписаться на канал
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍188🙏2❤1🔥1
🔢 iOS 26: SwiftUI наконец-то стал таким же быстрым как UIKit?

Нашел интересную статью, в которой автор провел сравнение производительности SwiftUI и UIKit в iOS 26. На WWDC25 компания Apple уверяла, что с производительностью в SwiftUI стало в разы лучше. Но так ли это на практике? Чтобы проверить, он создал максимально сложную ленту и сравнил, как с ней справляются оба UI-фреймворка.


Что тестировали:

Лента содержала следующие элементы:

🔵Изображения высокого разрешения.

🔵Сложную иерархию элементов, текстов и градиентов.

🔵Постоянно анимирующиеся гифки.

🔵Ячейки переменной высоты.

🔵Жесты, которые в реальном времени обновляют состояние.

Все это заставляло экран работать на 120 кадрах в секунду, давая на каждый кадр всего 8 миллисекунд.


Результаты тестов:

🔵Память. SwiftUI использовал около 250 МБ памяти, в то время как UIKit - примерно 90 МБ. Разница почти в три раза.

🔵Hitches (пропущенные кадры). У SwiftUI было около 3,4 хитча в секунду, у UIKit - 0,7. В пять раз меньше.

🔵CPU и батарея. В состоянии покоя SwiftUI загружал процессор на 100%, постоянно. UIKit - опускался до 11%. Энергопотребление у SwiftUI было очень высоким, у UIKit - просто высоким. Термальный профиль SwiftUI быстро полз вверх, и в какой-то момент приложение просто было убито системой из-за перегрева.


💡 Вывод:

Даже в iOS 26 SwiftUI значительно уступает UIKit в производительности при работе со сложными, тяжелыми интерфейсами. В простых лентах разница может быть незаметна, но как только появляются анимации, гифки, сложная верстка и жесты - SwiftUI начинает проседать.

Интересно, что SwiftUI List внутри использует не обычный UICollectionView, а некую UpdateCoalescingCollectionView, что, видимо, и дает такую разницу. Плюс сама архитектура SwiftUI с пересчетом тела вьюх, диффингом и пересчетом layout добавляет накладные расходы, которых UIKit лишен.

Автор делает невеселый вывод: для сложных сценариев, где важна производительность, UIKit все еще вне конкуренции.


➡️ Подписаться на канал
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤23👍8🙏32🤔1👀1
🍎 Тим Кук уходит. Новая эра Apple - с надеждой на инновации.

Apple официально объявила о смене руководителя. Тим Кук, возглавлявший компанию с 2011 года, с 1 сентября передаст пост CEO Джону Тернусу, который сейчас отвечает за разработку аппаратного обеспечения. Кук останется председателем совета директоров.


Кто такой Джон Тернус:

Тернус пришел в Apple в 2001 году в команду продуктового дизайна. За 25 лет он прошел путь от инженера до старшего вице-президента по аппаратной инженерии. Под его руководством создавались iPad, AirPods, iPhone, Mac и Apple Watch. Он также отвечал за внедрение новых материалов, повышение надежности устройств и снижение углеродного следа.


Почему это важно:

Тернус - инженер до мозга костей. Его назначение сигнализирует, что Apple делает ставку на инновации в аппаратной части. При нем вышли MacBook Neo, iPhone Air, были внедрены 3D-печать титана и новые композитные материалы. В отличие от Кука, который был операционным гением, Тернус - инженер, прошедший все стадии создания продуктов.


Мое мнение:

Тим Кук был человеком стабильности. При нем Apple почти не рисковала, редко вводила по-настоящему новые продукты и в основном полировала то, что придумали до него. Да, компания стала в разы богаче, но инноваций, которые меняли бы рынок, за его правление было очень мало. Я надеюсь, что с приходом Тернуса что-то изменится. Хочется верить, что Apple снова начнет удивлять и выпускать действительно новые, интересные продукты, а не просто обновлять айфоны и цвета их корпуса каждый год. Посмотрим, оправдаются ли надежды.


🔗 Читать подробнее


💡 Вывод:

Apple меняет руководителя впервые за 15 лет. Это событие, но не революция. Тернус - свой человек, его знают и уважают в компании. Кук остается в совете директоров, так что резкой смены курса ждать не стоит. Для пользователей это может означать больше инноваций в технической части устройств и возможно, меньше внимания к софту и сервисам. А я лично надеюсь, что Apple наконец-то перестанет бояться рисковать и начнет делать то, за что ее когда-то полюбили - за умение удивлять.


➡️ Подписаться на канал
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍9🤯3🔥1👀1🫡1
👨‍💻 Apple может удалить ваше приложение без объяснения причин.

Суд в США постановил: Apple имеет право удалять приложения из App Store с указанием причины или без нее. Речь идет о деле стримингового сервиса Musi, который загружал музыку с YouTube, показывал свою рекламу и брал 5,99 доллара за ее отключение. Apple удалила приложение в 2024 году. Musi подала в суд, но проиграла - и не просто проиграла, а с запретом на повторное обращение и с оплатой судебных издержек Apple.


Что решил суд:

Судья отклонил иск с формулировкой, которая теперь станет прецедентом: лицензионное соглашение Apple прямо говорит, что компания может прекратить распространение приложения в любое время, по любой причине или без нее, направив уведомление. Musi не оспаривала, что уведомление получила. Значит, все законно.

Apple - частная компания и App Store - не общественная площадка. Она имеет право решать, что публиковать, а что удалять. Даже если вы потратили годы на разработку. Даже если у вас миллионы пользователей.


Почему это важно для разработчиков:

До этого решения у многих была иллюзия, что Apple не может просто взять и удалить приложение без веской причины. Что есть процедура, обжалование, шанс все исправить. Оказывается, может. И не обязана даже объяснять почему.

Конечно, на практике Apple обычно дает предупреждения, указывает на нарушения и дает время на исправление. Но теперь у нее есть юридически закрепленное право так делать не всегда.


🔗 Читать подробнее


💡 Вывод:

Apple может удалить ваше приложение без объяснения причин. Это законно. Это закреплено в соглашении, которое вы подписали. И теперь это подтверждено судом. Не нравится - не публикуйтесь в App Store. Но других легальных способов установить приложение на iPhone у вас нет.

А разработчикам из России - тем более стоит держать это в голове. Российские разработчики и так находятся в уязвимом положении: санкционные ограничения, проблемы с оплатой аккаунта, блокировки приложений по географическому признаку. Apple и без того может удалить приложение по формальным причинам - а теперь, как выяснилось, может и без всяких причин.


➡️ Подписаться на канал
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯16👀7👍4❤2💯1🗿1
👣 Как удалить все неиспользуемые импорты во Flutter-проекте

В каждом проекте рано или поздно появляются серые, поблекшие импорты. Они висят, ни на что не влияют, но глаза мозолят. Ревьюеры тратят время на проверку, нужны ли они вообще. А кодовая база обрастает балластом, который никто не замечает, но всем мешает.


Одна команда, которая все решает:

В корне проекта достаточно выполнить:


dart pub get && dart fix --apply


Анализатор Dart пробежится по всем файлам, найдет неиспользуемые импорты и удалит их. Без лишних вопросов, без ручного перебора каждого файла.

Если хочется сначала посмотреть, что именно будет удалено, можно выполнить dart fix --dry-run. Покажет список изменений, но ничего не тронет.


Почему об этом вообще стоит думать:

Неиспользуемые импорты не ломают код, но они делают его грязным. Ревьюеры тратят время на проверку того, что на самом деле не используется. Линтеры и форматтеры работают хуже, когда списки импортов захламлены. А сам проект со временем становится тяжелее и менее понятным.

dart fix решает эту проблему мгновенно. Инструмент официальный, встроенный в экосистему Dart, так что никаких сторонних зависимостей тащить не нужно.


Что важно помнить:

Перед массовой чисткой лучше сделать коммит - мало ли что. Сгенерированные файлы (.g.dart) dart fix трогать не должен, они все равно перезапишутся при следующей сборке. И всегда после чистки стоит прогнать dart analyze && flutter test, чтобы убедиться, что ничего не сломалось.


🔗 Читать подробнее


💡 Вывод:

dart fix --apply - это не магия, а просто правильный инструмент. Он не делает код быстрее и не добавляет новых фич. Зато он убирает мусор, который отвлекает, запутывает и создает иллюзию сложности. Если в вашем проекте есть неиспользуемые импорты - команда решит проблему за секунду. Если их нет - вы либо уже все почистили, либо просто не замечаете.


➡️ Flutter & Dart | Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍6👀3🔥1🙏1🗿1
👨‍💻 Некоторые приложения для iPhone получили загадочное обновление «от Apple».

Недавно пользователи iPhone заметили странное: некоторые приложения получили обновления, но в описании указано не имя разработчика, а Apple. Текст гласит: «Это обновление от Apple улучшит функциональность этого приложения. Новые функции не добавлены».


Какие приложения пострадали:

В списке приложений: Candy Crush Soda Saga, Sentry Mobile, Catan Universe, Bluetti, Mortal Kombat, Duet Display, VLC и многие другие. Категории приложений совершенно разные: игры, утилиты, медиаплееры. Что их объединяет - непонятно.


Что говорят разработчики:

Один из разработчиков на Reddit сообщил, что Apple выпустила обновление его приложения с тем же номером версии и тем же содержимым, что и предыдущее. То есть технически ничего не изменилось, а обновление вышло.

Эксперты проанализировали код одного из таких приложений - и не нашли никаких изменений. Никаких исправлений уязвимостей, никаких новых функций, никаких правок.


Догадки:

Разработчики выдвигают несколько предположений:

🔵Технические правки со стороны Apple (например переподпись сертификатами).

🔵Исправление критических уязвимостей, о которых не говорят вслух.

🔵Проблема с истекшими сертификатами, из-за которой Apple пришлось переподписывать приложения вручную.


🔗 Читать подробнее


💡 Вывод:

Apple тихо, но уверенно обновляет приложения в App Store от своего имени. Что именно она меняет - неясно. Разработчики, чьи приложения попали под это, похоже, тоже не в курсе. Пока это выглядит как техническая необходимость, а не как злоупотребление. Но сам прецедент заставляет задуматься: Apple может влиять на приложения на вашем телефоне даже без участия их создателей.


➡️ Подписаться на канал
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯19🤔8👍4👀3❤1🙏1
🔢 Полный контроль над списками: создаем свою замену List в SwiftUI.

Привет! Наткнулся на статью, где автор разбирает, почему List подходит не для всех случаев. Да, для однородных данных (например списка писем или задач) List незаменим. Но когда интерфейс становится сложнее - появляются разные типы карточек, нестандартные отступы, кастомные фоны - List начинает мешать. Специфичные модификаторы вроде listRowBackground или listRowInsets работают только внутри List и не дают гибкости.

Автор предлагает альтернативу - ScrollView с ленивыми стеками (LazyVStack / LazyHStack). За последние годы SwiftUI значительно подтянул их производительность. Если вы не отображаете сотни тысяч однородных строк, ScrollView - отличный выбор.


Что предлагает автор статьи:

🔵ScrollingSurface - простая обертка над ScrollView и ленивым стеком. Позволяет задать направление прокрутки и выравнивание. Автор использует ее как корневой контейнер для всех экранов своего приложения CardioBot.

🔵DividedCard - карточка с разделителями между дочерними элементами. Использует Group(subviews:) из Container View API, чтобы разобрать переданное содержимое, добавить Divider между элементами и обернуть все в фон с закругленными углами.

🔵SectionedSurface - обрабатывает секции внутри переданного содержимого. Использует ForEach(sections:), чтобы извлечь заголовки, контент и футеры, отфильтровать пустые секции и добавить отступы.

🔵NavigationButtonStyle - кастомный стиль кнопки, который добавляет шеврон справа, как в стандартном NavigationLink внутри List. Это мелочь, но без нее навигация выглядит неполноценно.


Как это собирается вместе:

В итоговом экране автор использует ScrollingSurface как корневой контейнер, внутри - SectionedSurface с секциями, а внутри секций - DividedCard с NavigationLink. Все это покрывается кастомным стилем кнопки. API получается очень похожим на стандартный List, но с полным контролем над внешним видом.


💡 Вывод:

Отказываться от List не нужно - он хорош для своих задач. Но когда интерфейс становится сложным и неоднородным, современный SwiftUI дает инструменты, чтобы построить свою замену. ScrollView с ленивыми стеками и Container View API позволяют создавать переиспользуемые компоненты, которые не уступают List в производительности, но дают полный контроль над дизайном. Если ваш интерфейс перерос стандартный List - присмотритесь к этому подходу.


➡️ Подписаться на канал
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍179🙏3❤1👀1
🔢 Новая фича Swift: деманглинг прямо в рантайме.

В будущей версии Swift появится официальный API для деманглинга - преобразования страшных имен вроде $sSS7cStringSSSPys4Int8VG_tcfC в читаемый вид Swift.String.init(cString: Swift.UnsafePointer<Swift.Int8>) -> Swift.String. Это важное изменение для всех, кто пишет инструменты для отладки, профилирования или анализа кода.


Как это работает сейчас:

Сейчас, чтобы получить человеческое имя символа, приходится либо запускать внешний процесс swift-demangle, либо использовать неофициальные внутренние API рантайма. Первый вариант медленный, второй - ненадежный и может сломаться в любой момент.


Решение:

Новый модуль Runtime получит функцию demangle(_:), которая принимает искаженное имя и возвращает строку в читаемом виде или выбрасывает ошибку, если символ невалиден.

Для высокопроизводительных сценариев (например профайлеры, которые обрабатывают тысячи символов в секунду) добавлен второй вариант - запись результата в заранее выделенный буфер через UTF8Span. Это позволяет избежать лишних аллокаций и копирований.


Важное предупреждение:

Формат деманглинга не гарантирует стабильности. В следующих версиях Swift вывод может измениться - добавится больше информации, уберется что-то неважное, изменится порядок слов. Полагаться на точный формат вывода нельзя. Использовать деманглинг можно только для отображения человеку, но не для автоматической обработки результатов.


Кому это может пригодиться:

Разработчикам инструментов статического анализа, профилировщиков, логгеров и систем сбора ошибок. Всем, кто сейчас вынужден запускать внешние процессы или дергать нестабильные внутренние API.


💡 Вывод:

Официальный деманглинг в рантайме - давно назревшее изменение. Оно упростит жизнь создателям инструментов и уберет необходимость в хаках. Но использовать его нужно с осторожностью: формат вывода может меняться от версии к версии, и полагаться на него как на стабильный API не стоит.


➡️ Подписаться на канал
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍125🤔2❤1🔥1👀1
Forwarded from Кот Денисова
📱 ИИ-инженер: почему недостаточно просто уметь общаться с ChatGPT.

Мы живем в эпоху, когда искусственный интеллект перестал быть лабораторной диковинкой и стал рабочим инструментом. Но вместе с этим изменилась и роль разработчика, который работает с ИИ. Сегодня «ИИ-разработчик» - это не тот, кто мастерски формулирует запросы к ChatGPT. Это инженер, способный превращать исследовательские модели в надежные, масштабируемые системы, которые работают в реальных условиях и приносят бизнес-ценность.

Если раньше разработчик писал четкие правила и алгоритмы, то теперь он проектирует условия, в которых модель принимает правильные решения. Это смена парадигмы: от детерминированного программирования к вероятностному системному мышлению.


Системный промптинг - не искусство, а инженерия:

Многие ошибочно считают промтинг чем-то вроде магии или искусства общения. На самом деле, это инженерная дисциплина. Хороший промпт - это не просто вопрос, это структурированное техническое задание для модели. Разница между любителем и профессионалом видна в подходе к формулировкам.

Новичок попросит: «Напиши код кнопки». Результат будет случайным - где-то SwiftUI, где-то UIKit, с разной логикой.

Инженер строит систему взаимодействия. Он определит роль: «Ты - senior iOS-разработчик».
Задаст формат ответа: «Верни только код SwiftUI без пояснений».
Укажет требования: «Используй модификатор .accessibilityLabel и предусмотри состояния .disabled».
И добавит ограничения: «Не используй устаревшие API iOS 14».

Такая спецификация превращает генерацию из лотереи в предсказуемый процесс. Ключевой навык здесь - умение декомпозировать задачу и формализовать требования так, чтобы их мог выполнить не человек, а статистическая модель.


Архитектура контекста:

Работа с контекстом - это проектирование информационного пространства. Представьте, что модель это новый сотрудник. Можно бросить его в опенспейс с криками «разберись сам», а можно подготовить рабочее место: положить на стол инструкции, повесить на стену схемы процессов, выделить наставника.

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


Стратегия адаптации:

Перед ИИ-инженером всегда стоит выбор: как адаптировать модель под конкретную задачу. Здесь нет серебряной пули, есть компромиссы.

🔹Промптинг - это быстро и дешево. Как готовить по базовому рецепту. Подходит для прототипов и задач, где допустима некоторая вариативность.

🔹RAG (Retrieval-Augmented Generation) - это когда к модели подключают внешнюю память. Представьте врача, который перед ответом листает вашу медицинскую карту. Этот подход нужен, когда важна актуальность данных или работа с приватной информацией - документацией компании, персональными данными пользователя.

🔹Финтюнинг - глубокое обучение, изменение весов модели. Это как нанимать частного шеф-повара, который учится готовить именно так, как нравится вашей семье. Дорого, требует экспертизы, но дает максимальное качество для узкой задачи.

Выбор зависит от ответов на вопросы: Как часто меняются данные? Насколько критичны ошибки? Каков бюджет?


Защитные барьеры:

Модель может сгенерировать что угодно: от гениального кода до опасного совета. Инженер обязан построить систему безопасности. Это не доверие, а верификация.

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


💡 Вывод:

Эволюция от пользователя ИИ к ИИ-инженеру - это путь от тактики к стратегии, от единичных запросов к проектированию целых экосистем. Ключевой навык нового времени - не умение «договориться с моделью», а способность создавать среды, где эти модели работают предсказуемо, безопасно и эффективно.


➡️ Кот Денисова
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14💯11👍4🤔1👀1🤝1
👨‍💻 Почему ревью в App Store Connect стало занимать недели.

В последнее время все больше iOS-разработчиков сталкиваются с зависшими ревью. Приложения ждут неделями, а то и дольше. Причем проблема носит массовый характер. Разбираемся, что происходит и почему Apple не справляется с потоком.


Почему ревью зависли:

Основная причина - резкий рост числа запросов на проверку. В 2025 году App Store получил около 557 тысяч новых заявок, что на 24% больше, чем в 2024-м. Это первый сильный рост с 2016 года. За первый квартал 2026-го уже 235 тысяч новых приложений. Пользователей больше не стало, а вот приложений - да.


Почему так много новых приложений:

Благодаря ИИ-инструментам порог входа в разработку резко упал. С помощью Claude Code, Codex и аналогичных решений даже непрофессионалы могут создавать рабочие приложения, просто формулируя задачи на естественном языке. На рынок теперь выходят не студии, а одиночные разработчики. Сделать MVP стало дешевле, проверить спрос - проще, а выход на аудиторию через соц. сети - доступнее. Подписочная модель монетиации превращает даже небольшое приложение в полноценный источник дохода.


Что изменилось в процессе ревью:

Apple официально заявляет, что 90% заявок рассматриваются менее чем за 24 часа. Опытные разработчики говорят что доходит до 48 часов. Но часть разработчиков сталкивается с ожиданием в недели. Среднее время остается быстрым, но в сложных или подозрительных приложениях резко увеличивается.


Почему проверять стало сложнее:

Раньше App Review в основном отсеивал баги, приватные API и контентные нарушения. Теперь появилась новая головная боль: приложения, которые с помощью ИИ генерируют или исполняют код, меняющий функциональность после публикации. Это прямое нарушение Guideline 2.5.2. Проверить такое приложение вручную - задача нетривиальная и очень ресурсоемкая.


Что требуют сейчас:

По сообщениям разработчиков, Apple начала запрашивать для новых приложений:

🔹Запись видео с реального устройства.

🔹Описание смысла приложения и реальной ценности.

🔹Инструкции по получению доступа к основным функциям.

Это прямая реакция на вал завайбкоженных приложений, которые стали массово отправлять в стор.


🔗 Читать подробнее


💡 Вывод:

Зависшие ревью - это не сбой, а следствие структурных изменений в экосистеме. Поток новых приложений вырос кратно, а механизмы проверки остались прежними. Apple пытается ужесточить требования, но процесс отладки новых правил занимает время. Разработчикам остается только закладывать больше времени на публикацию новых приложений и готовить максимально полную документацию заранее.


Подписаться на канал:
➡️ Telegram | Max

Закрытый канал:
🚀 Мобильный трудоголик PRO
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍11🙏3🤯1👀1
🔢 Жизненный цикл SwiftUI View: когда onAppear вызывается не так, как ожидали.

На первый взгляд, onAppear кажется простым и понятным: показалась вью - сработало, скрылась - сработало onDisappear. Но на практике все сложнее. В зависимости от того, где находится вью - в TabView, NavigationStack или List - поведение может кардинально отличаться. И если не понимать этих нюансов, можно нарваться на баги, которые трудно воспроизвести.


Две разные системы:

Чтобы понять, что происходит, нужно разделить два понятия: время жизни узла (node lifetime) и видимость на экране (visibility). Узел живет, пока существует идентичность вью. К узлу привязаны @State и @StateObject. А видимость - это то, видит ли пользователь вью сейчас. onAppear и onDisappear реагируют именно на видимость, а не на создание или уничтожение узла.

В простых случаях эти две шкалы совпадают. Но в сложных контейнерах - расходятся.


TabView - узлы живут, видимость меняется:

Когда вы переключаете вкладки, узлы вью не уничтожаются. Они остаются в памяти, меняется только флаг видимости. Поэтому onAppear срабатывает при каждом переключении на вкладку, но @State сохраняет свое значение.

Нюанс: на iOS 17 TabView создавал все вкладки сразу при запуске. На iOS 18+ - только при первом открытии. Один и тот же код может вести себя по-разному на разных версиях.


NavigationStack - при возврате узел уничтожается:

В навигационном стеке при возврате назад (pop) узел детальной вью уничтожается, а @State сбрасывается. При повторном переходе создается новый узел. В отличие от TabView, здесь данные не сохраняются между показами.


List и LazyVStack - узлы создаются и уничтожаются при скролле:

В ленивых списках узлы для ячеек создаются, когда те подъезжают к видимой области, и могут быть уничтожены, когда уезжают далеко. Поэтому @State внутри ячейки нельзя использовать для хранения данных - при повторном появлении оно сбросится.


Главное правило - body выполняется до onAppear:

body вычисляется до того, как сработает onAppear или .task. Нельзя полагаться на то, что в onAppear данные подгрузятся до первого вызова body. Нужно всегда предусматривать начальное состояние.


🔗 Читать подробнее


💡 Вывод:

onAppear в SwiftUI - это не «вью создана», а «вью стала видимой». Время жизни узла и видимость - это две независимые шкалы. Понимание этого спасает от багов, когда @State вдруг не сбрасывается или, наоборот, сбрасывается не вовремя. Разные контейнеры ведут себя по-разному и это нужно тестировать, а не гадать.


Подписаться на канал:
➡️ Telegram | Max

Закрытый канал:
🚀 Мобильный трудоголик PRO
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1310❤4🔥1🙏1🤝1
🔢 Copy-on-Write в Swift: как массивы экономят память.

Всем привет! Наткнулся на статью, где автор подробно разбирает механизм Copy-on-Write (COW) в Swift. Это та самая технология, благодаря которой массивы, строки и словари ведут себя как типы значений, но при этом не создают полные копии больших объемов данных при каждом присваивании.


Что такое COW простыми словами:

Когда вы присваиваете массив другой переменной, Swift не создает полноценную копию. Обе переменные ссылаются на одни и те же данные в памяти. Только когда одна из них начинает изменяться, Swift создает уникальную копию для нее. Отсюда и название - копирование при записи.

Это позволяет Swift сохранять семантику значений (изменение одной копии не влияет на другую) без дорогостоящего копирования больших объемов данных.


Как это работает под капотом:

Тип-значение (например ваш массив) хранит ссылку на объект-хранилище (класс). При присваивании копируется ссылка, а не само хранилище. При попытке изменения вызывается метод isKnownUniquelyReferenced(_:), который проверяет, есть ли у хранилища другие ссылки. Если есть - создается новое хранилище с копией данных, и только потом происходит изменение.

Проверить уникальность можно и в своем коде, если вы пишете кастомную COW-структуру.


Как реализовать свой COW-контейнер:

Автор приводит пример SharedBuffer<Element>:

🔹Публичная структура-обертка.

🔹Внутренний класс Storage, хранящий массив элементов.

🔹Метод ensureUniqueStorage(), который копирует хранилище, если на него есть другие ссылки.

🔹Все мутирующие методы сначала вызывают ensureUniqueStorage()

Простой, но эффективный паттерн.


Распространенные заблуждения:

🔹«Структуры автоматически используют COW». Нет. COW - это стратегия реализации конкретных типов (Array, String, Dictionary). Ваши структуры по умолчанию копируются целиком.

🔹«COW рекурсивно копирует все вложенные объекты». Нет. Копируется только само хранилище контейнера. Если внутри лежат ссылочные типы, их изменение не триггерит COW.


🔗 Читать подробнее


💡 Вывод:

Copy-on-Write - один из ключевых механизмов, позволяющих Swift сочетать производительность и безопасность. Понимание того, как он работает, дает вам инструмент для проектирования эффективных структур данных и помогает писать более производительный код.


Подписаться на канал:
➡️ Telegram | Max

Закрытый канал:
🚀 Мобильный трудоголик PRO
Please open Telegram to view this post
VIEW IN TELEGRAM
13❤8👍3🔥1🙏1
👣 Два года спустя: как увольнения повлияли на Flutter

Всем привет! Сегодня хочу разобрать интересную статью про судьбу Flutter после увольнений в Google. В апреле 2024 года Google уволил инженеров из команд Flutter, Dart и Python - за несколько недель до Google I/O, где традиционно анонсировали светлое будущее. Тогда было много паники и постов «Flutter умер». Прошло два года. Flutter не умер. Но и не остался прежним. Пора без истерик разобраться, что на самом деле изменилось.


Что тогда произошло:

Увольнения затронули в основном DevOps и инфраструктуру, а не разработчиков самого фреймворка. План развития продукта не изменился. Но сообщество правильно прочитало сигнал: для Google Flutter - больше не стратегический приоритет, а просто поддерживаемый продукт. Разница огромная. Стратегическому приоритету выделяют лучших инженеров, лоббируют внутри компании, вкладывают ресурсы. Поддерживаемому продукту - фиксят критические баги, но новых горизонтов не открывают.


Что случилось потом:

Flutter продолжил выпускать релизы. Impeller стал стабильным. Дорожная карта 2024 года выполнена. BMW, Alibaba и eBay все еще используют Flutter на проде. Опрос Stack Overflow 2024 показал 46% использования среди кроссплатформенных фреймворков - больше, чем у React Native (35%).

Но вот что важно: Тим Снит (многолетний руководитель разработки Flutter, лицо проекта на I/O) ушел в Apple в 2023 году. Брэндон ДеРозье (создатель Impeller) в 2025 году перешел в команду Android XR. Это не увольнения. Это добровольные уходы ключевых людей. И они сигнализируют о том, что даже внутри Google самые талантливые инженеры перестали видеть будущее за Flutter.


Почему я все еще использую Flutter:

Фреймворк работает. Для 90% задач кроссплатформенной разработки - стабильно, быстро, предсказуемо. Сообщество огромное, уже более 50 000 пакетов на pub.dev. Релизы выходят четыре раза в год. С точки зрения инженерной реальности Flutter не стал хуже.

Но соотношение затрат и выгод изменилось. Теперь нужно задавать себе другие вопросы.


🔗 Читать подробнее


💡 Вывод:

Используйте Flutter там, где он подходит. Понимайте свои зависимости и риски. Не принимайте архитектурные решения по звездам на GitHub и по рекомендациям от ИИ. Релевантный показатель один: решает ли фреймворк вашу проблему сегодня и есть ли у него разумный путь поддержки на три года вперед. По этому показателю Flutter проходит проверку. Не на отлично. Не так уверенно, как в 2021 году. Но проходит. Те, кто ожидает немедленного краха, ошибаются. Те, кто утверждает, что все осталось по-прежнему, тоже ошибаются. Правда, как обычно, посередине: Flutter - рабочий инструмент, но теперь его стоит выбирать с открытыми глазами, понимая, что уровень поддержки со стороны Google может и дальше снижаться.


➡️ Flutter & Dart | Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍12🗿3🙏1🫡1
👨‍💻 Apple добавила годовую подписку с ежемесячной оплатой.

Apple официально представила новый тип автоматически продлеваемых подписок - годовое обязательство с ежемесячными платежами. Пользователь подписывается на 12 месяцев, но платит не сразу всю сумму, а каждый месяц. Это не рассрочка в привычном смысле, а именно подписка с фиксированным сроком и разбивкой платежей.


Как это работает:

Пользователь оформляет подписку на год, но деньги списываются небольшими суммами каждый месяц. Отменить подписку можно в любой момент, но она не прекратится сразу - она просто не продлится после того, как пользователь выплатит все оставшиеся платежи по обязательству. То есть, если отменить подписку через три месяца, придется доплатить еще девять, и только потом подписка закончится.

Apple добавила прозрачности: в аккаунте пользователя будет видно, сколько платежей уже прошло и сколько осталось. Также будут приходить email и push-уведомления перед очередным списанием.


Почему это интересно для разработчиков:

Можно сделать годовую подписку с ежемесячным платежом, которая выглядит дешевле для пользователя (например, 500 рублей в месяц вместо 5000 рублей сразу), но при этом гарантирует доход на год вперед. Это снижает порог входа - пользователю психологически легче согласиться на небольшие ежемесячные списания, чем на крупную сумму сразу.

Появляется новый инструмент для A/B-тестов и ценовых стратегий. Можно комбинировать с классическими годовыми подписками и месячными без обязательств.


На что обратить внимание:

Нужно аккуратно объяснять пользователю условия в интерфейсе. Если не предупредить, что «отменить подписку» не означает «прекратить платить прямо сейчас», можно получить негативные отзывы, споры и возвраты.

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


🔗 Читать подробнее


💡 Вывод:

Новый тип подписки - компромисс между годовым контрактом (высокий порог входа, но предсказуемый доход) и ежемесячной подпиской (низкий порог, но нестабильные оттоки). Для некоторых категорий приложений, особенно с высокой ценой годовой подписки, это может стать золотой серединой. Главное - честно и понятно объяснять пользователям условия, чтобы не получить волну негатива в отзывах.


Подписаться на канал:
➡️ Telegram | Max

Закрытый канал:
🚀 Мобильный трудоголик PRO
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍13🔥10❤3🤯1🙏1
🍏 Разработчики Apple забыли удалить инструкции для ИИ перед релизом приложения.

В обновлении приложения Apple Support (версия 5.13) пользователи обнаружили файлы claude.md. Разработчики быстро это заметили и в следующем обновлении файлы убрали, но интернет все помнит.


Что это за файл:

Данный файл обычно содержат инструкции для ИИ: правила оформления кода, архитектурные ограничения, команды сборки, известные проблемы. Это не сам код, а подсказки для нейросети, чтобы она генерировала код в нужном стиле.


Что это значит для Apple:

Самое интересное - не то, что Apple использует ИИ для разработки (это уже никого не удивляет), а то, что они используют Claude от Anthropic, а не свои внутренние наработки. Это сигнал: даже в Apple предпочитают готовые решения от сторонних разработчиков, когда речь заходит о современных ИИ-инструментах.

Файлы оказались базовыми и не содержали никаких секретов или инсайтов. Но сам факт их наличия в релизной сборке говорит о том, что внутри компании активно используют агентную разработку с привлечением Claude.


Почему это обсуждают:

Сообщество разделилось. Одни видят в этом доказательство того, что Apple все активнее использует ИИ для написания кода. Другие считают, что файлы попали в релиз случайно и не отражают реальную картину. Третьи просто смеются над тем, что даже у Apple бывают такие ошибки.


🔗 Читать подробнее


💡 Вывод:

Новость интересная, но не сенсационная. Apple использует современные инструменты разработки, включая ИИ от Anthropic. Это подтверждает, что даже гиганты индустрии не гнушаются готовыми решениями, когда они эффективны. А забытый файл в релизе - лишнее напоминание, что разработка - это живой процесс, и ошибки случаются у всех.


Подписаться на канал:
➡️ Telegram | Max

Закрытый канал:
🚀 Мобильный трудоголик PRO
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16💯10🔥3❤1🤯1👀1
🔨 Agent Skills для ускорения сборки Xcode.

Наткнулся на статью, где автор рассказывает о наборе Agent Skills для оптимизации времени сборки Xcode. Понимаю, что к ИИ-инструментам многие относятся скептически, но здесь речь не о написании кода за вас, а об экономии времени.


Почему это важно:

Автор приводит простую математику. Если вы делаете 50 сборок в день и ускоряете каждую на 5 секунд, это около 5 минут в день. В год - 30 часов. Один из первых пользователей сэкономил 20 секунд на каждой сборке. Для больших проектов разница может быть еще заметнее.


Что такое нулевая сборка и почему это показатель:

Отдельное внимание уделено сборке без изменений (zero-change build). Это когда вы ничего не меняли в коде, а Xcode все равно что-то пересобирает. У одного из проектов такая сборка занимала 70 секунд. После оптимизации - 9 секунд. Разница в 87%.


Как устроен скилл:

Это не один инструмент, а целый оркестр из шести специализированных скиллов:

🔹Оркестратор запускает весь процесс и направляет.

🔹Бенчмарк делает три чистые и три инкрементальные сборки, сохраняет результаты в JSON.

🔹Анализ проводится тремя скиллами, которые проверяют настройки сборки, конфигурацию проекта, исходный код и зависимости - всего более 40 пунктов.

🔹План оптимизации формируется на основе анализа и представляется разработчику для утверждения.

🔹Применение изменений происходит автоматически, но только после вашего согласия.

🔹Финальный бенчмарк показывает результат и сравнивает с исходными данными.


Что можно оптимизировать:

Скилл проверяет:

🔹Настройки компилятора и линкера.

🔹Конфигурацию Swift Package Manager.

🔹Build phases (скрипты, копирование ресурсов).

🔹Сложность кода (например долгие компиляции конкретных файлов).

🔹Включение кэширования компиляции (Compilation Caching).


Результаты на реальных проектах:

Автор приводит данные трех приложений:

🔹Helm: чистая сборка почти без изменений (в пределах погрешности), инкрементальная ускорилась на 87% (с 70 до 9 секунд).

🔹Stock Analyzer: чистая сборка быстрее на 20%, инкрементальная - на 32%.

🔹Enchanted: чистая сборка быстрее на 14%, инкрементальная - на 12%.


🔗 Читать подробнее


💡 Вывод:

Даже если вы не используете ИИ для написания кода, такие инструменты не про замену программиста. Они про конкретную, измеримую помощь в рутинных задачах. Экономия времени на сборках - это не гипотетическое преимущество, а реальные часы, которые можно потратить на разработку, а не на ожидание.


Подписаться на канал:
➡️ Telegram | Max

Закрытый канал:
🚀 Мобильный трудоголик PRO
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍12🔥4💯1👀1🗿1
Forwarded from Кот Денисова
👨‍💻 Почему агенты пишут плохой код.

Вокруг ИИ-агентов для разработки сформировался странный парадокс. Одни заявляют, что не писали код руками полгода и полностью делегируют задачи машине. Другие клянутся, что агенты глупые и не способны на что-то сложнее «Hello World». Оба мнения честны и оба - об одном и том же инструменте. Разрыв в результатах говорит не о качестве технологии, а о катастрофической разнице в подходе к ее использованию. Успех определяет не сам агент, а навык, стоящий за промптом.


Проблема не в инструменте, а в операторе:

Ключевое заблуждение - ожидать от агента волшебства. Это не искусственный общий интеллект, который читает мысли. Это сложный, но ограниченный инструмент, который действует строго по инструкции. Разница между командами «напиши код» и «напиши на Swift функцию, которая асинхронно загружает JSON по URL, обрабатывает ошибки сети и парсит результат в структуру User с полями id и name, используя современный async/await синтаксис» - это разница между хаотичным выводом и рабочим решением.


Главный навык - умение формулировать, а не писать код:

Роль разработчика трансформируется. Если раньше ценность заключалась в умении писать код, то теперь возрастает цена умения его описывать. Это смежная, но иная дисциплина. Требуется:

🔹Декомпозиция: умение разбивать крупную задачу на последовательные, атомарные шаги, которые агент может выполнить.

🔹Контекстуализация: способность предоставить агенту достаточный контекст - архитектурные решения, стиль кода, используемые библиотеки, ограничения бизнес-логики.

🔹Предвосхищение: прогнозирование потенциальных недопониманий и упреждающее их устранение в формулировке задачи.


Провальные паттерны коммуникации:

Большинство неудач происходят по шаблонным сценариям:

🔹Слишком абстрактно: «Сделай красивый интерфейс». Агент не понимает, что такое «красивый» в вашем контексте.

🔹Без контекста: «Пофикси баг». Агент не знает кодобазы, архитектуры и истории проблемы.

🔹Противоречиво: «Код должен быть быстрым и читаемым, но еще и очень компактным». Это взаимоисключающие требования на этапе реализации.


Стратегия эффективного промптинга:

Вместо расплывчатых пожеланий нужен структурированная задача:

🔹Роль: «Ты senior iOS-разработчик, специализирующийся на оптимизации производительности».

🔹Цель: «Мне нужно реализовать фичу А в контексте Б для достижения цели В».

🔹Контекст: «Вот текущая архитектура проекта, вот основные принятые в проекте требования».

🔹Ограничения: «Нельзя использовать библиотеку X, минимальная версия iOS - 15, код должен проходить линтер с настройками Y».

🔹Критерии успеха: «Код считается успешным, если он покрыт unit-тестами на 90%, не вызывает ошибок и соответствует всем указанным требованиям».

Именно такой подход позволяет опытным инженерам в самых сложных облостях получать качественный результат. Они не просят «написать код для банка», а описывают все требования.


💡 Вывод:

Агент не заменит инженерное мышление. Он его усилит. Он снимет с вас рутину, если вы сможете ее четко описать. Но он не сформулирует за вас требования, не выберет архитектуру и не примет ключевое решение. Ваша ценность теперь определяется не столько умением транслировать мысль в синтаксис языка, сколько способностью мыслить системно и доносить эти мысли с беспрецедентной точностью. Если агент вас не слушается - это не его баг. Это фича, указывающая на пробел в самом фундаментальном и востребованном сейчас навыке.


➡️ Кот Денисова
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14💯9👍3👀1🫡1🗿1
🔢 MapKit: работа с картами в SwiftUI.

SwiftUI и MapKit постепенно сближаются. Если раньше для работы с картами приходилось писать код на UIKit и оборачивать его в UIViewRepresentable, то теперь для этого есть нативный Map view. Разбираем, какие возможности появились и как их использовать.


Базовое отображение:

Самый простой способ - добавить карту одной строкой: Map(). Она автоматически заполнит доступное пространство. Ее можно оформлять как любой другой SwiftUI-компонент: добавлять скругление углов через .cornerRadius, ограничивать размер через .frame, настраивать отступы.


Настройка камеры:

Управлять тем, что видит пользователь, можно через MapCameraPosition. Камеру можно задать один раз при создании карты (параметр initialPosition) или связать с @State через двухсторонний биндинг (position), чтобы менять положение динамически.

Камера настраивается через MKMapCamera: указывается центр, расстояние, угол наклона (pitch) и направление (heading). Все это упаковывается в MapCamera, затем в MapCameraPosition.camera.


Ограничение видимой области:

Если нужно, чтобы пользователь не мог уйти за пределы определенной территории, используется MapCameraBounds. Задается регион, в котором должен оставаться центр карты. Например, можно запретить вертикальное перемещение, оставив только горизонтальное.


Интерактивность:

При инициализации карты можно задать допустимые режимы взаимодействия: .pan (перемещение), .zoom (масштабирование), .rotate (поворот). По умолчанию разрешены все, но их легко ограничить.


🔗 Читать подробнее


💡 Вывод:

Работа с картами в SwiftUI стала гораздо удобнее. Нативный Map view покрывает большинство сценариев: от простого отображения до управления камерой и ограничения видимой области. Если нужны совсем экзотические возможности, можно опуститься до UIKit-оберток, но в 90% случаев встроенных средств достаточно.


Подписаться на канал:
➡️ Telegram | Max

Закрытый канал:
🚀 Мобильный трудоголик PRO
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍8❤4🔥1🙏1
👨‍💻 ИИ-агенты в App Store: Apple ищет компромисс между трендом и безопасностью.

До WWDC остались недели, и появляется все больше слухов о том, как Apple планирует встраивать ИИ в свои платформы. Одна из ключевых и самых щепетильных тем - допуск в App Store агентов, способных автономно выполнять действия за пользователя. С одной стороны, тренд игнорировать нельзя. С другой - правила App Store не резиновые.


В чем проблема:

ИИ-агенты (например те, что могут сами управлять приложениями, удалять письма, совершать покупки) - это вызов для Apple. Правила App Store строго запрещают приложениям выполнять код, который меняет их функциональность или функциональность других приложений. Агенты как раз этим и занимаются.

Кроме того, есть риск обхода комиссии и потери контроля над монетизацией. Если агент может создать приложение на лету и запустить его, минуя App Store, Apple теряет и деньги и возможность проверить, что этот код безопасен.


Что предложит Apple:

По данным источников, компания разрабатывает специальную систему, которая позволит агентам работать в рамках экосистемы, но под строгим контролем. Основная цель - предотвратить хаотичное поведение, когда агент выходит из-под контроля (например как в случае с OpenClaw, где бот удалял всю почту пользователя).

Новая система должна гарантировать, что агент не сможет делать то, что не предусмотрено правилами: обходить комиссии, выполнять вредоносный код, нарушать приватность.

Ожидается, что подробности появятся на WWDC в июне. Но источники допускают, что компания может быть еще не готова к полноценному анонсу.


🔗 Читать подробнее


💡 Вывод:

Apple не хочет оставаться в стороне от бума ИИ-агентов, но и не готова жертвовать принципами. Новая система - это компромисс. Если она сработает, разработчики получат доступ к новой аудитории, пользователи - полезных помощников, а Apple сохранит контроль. Но все решит то, насколько жесткими окажутся ограничения. Если они будут слишком строгими, агенты могут так и остаться за пределами App Store, либо перейти на другие платформы, где жестких правил меньше.


Подписаться на канал:
➡️ Telegram | Max

Закрытый канал:
🚀 Мобильный трудоголик PRO
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤8👍3👀1🫡1
🔨 Time Profiler: повышение производительности с помощью ИИ.

Всем привет! Нашел интересную статью, где автор делится опытом использования Time Profiler в связке с ИИ-агентами. Устройства сейчас действительно быстрые чем раньше и потребность в профилировании снизилась. Но это не значит, что проблем с производительностью больше нет. Просто мы перестали их замечать.


Кейс - ускорение в 25 раз:

Автор взял конкретную задачу - загрузку accessibility-элементов в RocketSim. На одном экране с 70+ элементов это занимало 12 секунд. Вместе с ИИ-агентом они прошли несколько итераций:

🔹12 с -> 4 с (в 3 раза быстрее).

🔹4 с -> 2,5 с (еще в 2 раза).

🔹2,5 с -> 525 мс (в 23 раза).

🔹525 мс -> 485 мс (финальные 25 раз).

Ключевой момент: если бы остановились на первой итерации, решив, что «и так неплохо», результат был бы в 25 раз хуже.


Как это работает:

У автора уже был CLI для RocketSim. ИИ-агент мог запускать его до и после изменений, сравнивать результаты и отменять правки, если стало хуже. Для анализа использовался Time Profiler с добавленными signpost (чтобы код был виден в инструменте).


Процесс выглядит так:

🔹Агент вносит изменения в код.

🔹Разработчик запускает приложение в Instruments с шаблоном Time Profiler и signpost.

🔹Копирует результаты (интервалы signpost и глубокую копию Time Profiler).

🔹Отдает агенту с запросом: «Проанализируй и предложи план дальнейших оптимизаций».

🔹Цикл повторяется, пока агент не скажет, что быстрее уже не сделать.


Кому может быть полезно:

🔹Разработчикам, которые хотят ускорить свои приложения, но не знают, с чего начать.

🔹Тем, кто использует ИИ-агентов в своей работе и хочет дать им реальные данные о производительности, а не гадать на кофейной гуще.

🔹Разработчикам инструментов и SDK, где важна скорость работы (CLI, accessibility, обработка больших объемов данных).


🔗 Читать подробнее


💡 Вывод:

Instruments не умерли. Они просто стали реже нужны - но когда они нужны, без них никуда. А с ИИ-агентами процесс становится еще эффективнее: вы не тратите часы на анализ стеков, а просто даете агенту данные и получаете готовый план оптимизаций. И да, 25-кратное ускорение - не предел. Все упирается в то, как часто вы готовы запускать этот цикл.


Подписаться на канал:
➡️ Telegram | Max

Закрытый канал:
🚀 Мобильный трудоголик PRO
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍7🗿2❤1🙏1💯1