TGViewer
Channel Public Channel
Prefire iOS

Prefire iOS

@prefire_ios

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

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

Автор: @barredewe
Subscribers
979
Photos
101
Videos
7
Links
103
Recent Posts 17 shown
Post #185 419
☺️ Prefire в требованиях к вакансиям

Где-то месяц назад поставил ежедневную задачу на ChatGPT. Искать упоминания своих 'поделок': Prefire, Mewmori, Snowfall Desktop и др.

Сегодня увидел неожиданное и приятное 😁

В вакансии Lead QA Engineer в Emirates среди требований к iOS-разработке написано:
• XCUITest, Snapshot testing (Prefire)
• А для Android - Compose Testing и Paparazzi.

Причём сама вакансия ещё июльская. То есть всё это время где-то существовала вакансия в Emirates, где знание моей библиотеки было одним из требований, а я вообще об этом не знал 😅

Первый раз увидел Prefire в таком контексте. Обычно это статьи, доклады, или проекты на github. Но чтобы кто-то искал Lead QA с этим знанием, это что то новое 😁

PS: На изображении к посту - новый котик/лис, которого я добавил в последний релиз mewmori и еще кучу осенней одежды😊
  • 🔥 21
  • 👍 8
  • 👏 6
Post #181 611
🧭 Podlodka iOS Crew: разработка с AI

С 14 по 18 сентября пройдет новый сезон Podlodka iOS Crew. В этот раз в центре внимания авторов конференции то, как AI меняет iOS-разработку. Я там буду рассказывать про то, как котик видит экран через AI.

Что ждёт участников:

🍏 Стратегия внедрения терминальных ИИ-агентов и MCP-интеграции в ежедневную iOS-разработку

🍏 AI как экзокостюм мобильного разработчика: harness, skills, CLI, orchestration, validation и evals

🍏 Знания о том, как запускать локальные модели на Apple Silicon

🍏 Готовые скрипты, которые можно забрать в свой проект: шаблон рабочего пространства агента, примеры скиллов и MCP, пайплайн от Jira-задачи до Merge Request.

И это ещё не всё! Подробности о сезоне смотрите на сайте, и там же есть билеты по early-bird цене.

👉 Билеты на Podlodka iOS Crew
  • 🔥 4
  • 🤬 3
  • 👍 2
  • 🗿 2
  • ❤ 1
  • 👎 1
Post #180 727
Кажется, мой кот начал жить своей жизнью.

Сначала друзья просто закинули Mewmori в несколько больших Telegram-пабликов. Я тогда сидел и смотрел, как внезапно растут скачивания, DAU и онбординг.

Потом про кота отдельно написал AppleInsider (кстати классный обзор вышел).

А теперь он добрался до RationalAnswer, где Mewmori уже обсуждают как «нейрокотана».

И вот это, если честно, для меня сейчас самое странное ощущение от проекта. Когда ты долго что-то делаешь сам, ты очень хорошо знаешь все кривые места:
• Где костыль.
• Где окно иногда не открывается.
• Где OCR можно сделать лучше.
• Где кот говорит какую-то ерунду.

А потом люди снаружи начинают воспринимать это уже просто как готовую штуку. Не как очередной эксперимент с локальной LLM. А как: «о, прикольный кот для Mac» или «нейрокотан».

И, кажется, именно в этот момент проект впервые становится не только твоим. Он начинает жить у других людей 😊
  • 🔥 9
  • 👍 4
  • ❤ 2
Post #179 698
Нахождение текста котом Mewmori в уникальных приложениях

Что бы кот видел, я снимаю скриншот активного приложения. После перегоняю скриншот в текст через VIsion. И вот после этого идет довольно много работы, перед тем как ИИ мозг кота получит текст и понимание.

Сейчас кот перед тем как передать контекст в ИИ, немного его причесывает.

Что получаем после обычного Vision OCR (определение текста по скриншоту):

Telegram
Антон
был недавно
Маша
А ты сегодня будешь?
Да, ближе к вечеру
Работа
Prefire
12:43
12:45


По сути просто набор строк с координатами. Для маленькой модели это выглядит очень сложно и она не может связать хоть что-то по смыслу. Для этого нужен процессинг. Сам процессинг максимально простой, весь текст делится линиями, который вычисляются на основе x/y координат текста. И эти линии говорят нам о том, где примерно заголовок и тд.

А Вот что в итоге передаем в модель:

Приложение: Telegram
Чат: Антон
Статус: был недавно
Сообщения:
Антон: А ты сегодня будешь?
Я: Да, ближе к вечеру


Причём для разных приложений это работает по-разному. Есть общие вещи. Например, заголовок почти всегда стоит искать сверху.

А есть специфичные. Например, для Telegram я ищу самый большой разрыв по X между распознанными строками. Так можно довольно неплохо понять, где заканчивается список чатов и начинается сам чат.

И после процессинга кот уже начинает забавно шутить. Он может не просто сказать что-то про текущий диалог, а запомнить, что я уже общался с этим человеком. А через какое-то время спросить что-нибудь типа: «Вы давно дружите?» 😼

Пока всё это набор эвристик под конкретные приложения. Но мне прям нравится, насколько сильно такая простая предобработка меняет ощущение от маленькой локальной 2B модели.
  • 👍 7
  • 🔥 5
Post #178 602
Начал готовить к релизу ScreenCat - 🐈 Mewmori

- Переименовал проект в Mewmori (типо memory - память, но измененное под мяу)
- Cделал большой редизайн и кучу внутренних оптимизаций, что бы кот не кушал всю батарею и ресурсы на mac. Потестил даже на Mac M1 - работает отлично.
- Сейчас активно готовлю контент для соц. сетей. И даже некоторый уже выложил.

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

А сверху видео для рилса, которое я сделал полностью кодом:
1. Написал промо сценарий
2. Cделал фейковый рабочий стол
3. На питоне сделал запись экрана и подстановку музыки

Теперь клипаю ролики спокойно, написав один простой json с сценарием этого ролика 😊
  "name": "intro-ru",
  "settle": 1.0,
  "tail": 1.0,
  "steps": [
    { "action": "move", "x": 0.47, "y": 0.20, "style": "teleport" },
    { "action": "look", "skin": "classic_cat" },
    { "action": "mood", "value": "sleeping" },
    { "action": "wait", "seconds": 1.6 },

    { "action": "mood", "value": "interacting", "direction": "right" },
    { "action": "effect", "value": "surprise" },
    { "action": "say", "text": "Ой. Ты меня видишь?", "hold": 2.0 },

    { "action": "say", "text": "Я Mewmori. Живу у тебя на рабочем столе.", "hold": 3.2 },
  ]
  • 🔥 11
  • ❤ 2
Post #177 738
Сделал систему скинов для котиков 🐈

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

Посидел вместе с Claude и подумал: а что, если создание скина будет больше похоже на написание кода, чем на ручную сборку иллюстрации?

В итоге собрал data-driven систему на JSON. Теперь визуальная часть кота состоит из трёх уровней:

1. skin.json - описание конкретного кота: его части, текстуры, позиции, порядок слоёв, точки крепления аксессуаров и настройки взгляда.

2. JSON-клипы анимаций - описывают движение частей: подпрыгивание тела, поворот хвоста, наклон головы, моргание.

3. animations.json — граф состояний: когда кот сидит, бежит, спит, реагирует на действие или переключается между анимациями.

{
"id": "ginger_fold_cat",
"rig": {
"parts": [
{ "id": "body", "texture": "body.png", "position": [-5, -22] },
{ "id": "tail", "texture": "tail.png", "parent": "body", "position": [32, -12] },
{ "id": "head", "texture": "head.png", "parent": "body", "position": [-10, 41] }
]
}
}


Риг это иерархия частей внутри скина. Например, хвост прикреплён к телу, а глаза к голове. Поэтому при движении головы всё нужное едет вместе с ней.

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

{
"part": "tail",
"property": "rotation",
"keys": [[0, 0], [0.14, 18], [0.42, -18], [0.56, 0]]
}



То есть здесь хвост просто отклоняется от своего обычного положения на 18 градусов туда и обратно. Клипу не нужно знать, где хвост находится у конкретного скина.

В итоге новый скин - это набор PNG и JSON, а не пачка исключений в коде. Можно менять пропорции, добавлять образы и анимации, а валидатор сразу проверит, что все части, текстуры и связи на месте.

PS: После написания json - скрипт прогоняет рендеринг PNG через ffmpeg

А дальше я навайбкодил UI на Tauri, чтобы работать со скинами было ещё удобнее.
Про редактор, генерацию арта и весь этот пайплайн расскажу в следующих постах.
  • 🔥 14
  • ❤ 4
Post #176 790
Кажется, Prefire полюбили в Японии 🇯🇵

Только вернулся из отпуска в Японии и, пока был там, случайно наткнулся на статью японской компании PREVENT не спрашивайте что это за компания, сам не знаю.

Они подробно рассказали, как используют Prefire в продакшн-разработке для snapshot-тестов. Ой как приятно 🥹

Самое интересное, что у них весь пайплайн построен на Prefire без каких-либо своих доработок. Именно так я его когда-то и задумывал и использовал.

Из интересных моментов: ребята из PREVENT фиксируют Locale и другие параметры окружения, чтобы уменьшить количество флаков. А при падении CI сохраняют весь .xcresult, чтобы потом удобно разбирать проблему локально. Честно говоря, про такой подход я сам даже не думал 😄

И это, как оказалось, не единичный случай. Уже после статьи начал копать дальше и выяснил, что в Японии было несколько конференций, митапов и статей, где обсуждали Prefire и работу с ним. Вообще не ожидал, что именно там вокруг проекта будет такая активность.

В целом мега приятно такое находить. Очень мотивирует продолжать развивать проект. Прямо сейчас заканчиваю поддержку macOS - PR уже открыт 🚀
  • ❤ 29
  • 🔥 22
  • 👍 7
Post #175 920
Хочу рассказать одну довольно личную историю 💀

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

Все получилось. Команда выросла до 30+ человек.

Я не только писал код, но и много вкладывался в людей. Собеседовал, нанимал, старался продвигать ребят: конференции, обучение, open source и все такое. Было очень приятно видеть, как люди растут.

Но дальше пошла череда неудач.

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

Я очень тяжело это пережил.

Наверное, только спустя время понял, насколько сильно работа может влиять на жизнь. Постоянный стресс, моральная усталость, еда как самый простой способ отвлечься. За это время я набрал больше 50 кг.

Потом в какой-то момент решил, что так дальше нельзя.

Начал заниматься спортом.

Сначала просто хотелось снова нормально себя чувствовать. Потом втянулся. Постепенно похудел, подкачался, вернулась энергия. А уже после этого нашел новую классную работу.

Наверное, это довольно стандартная история в IT. Да и не только в IT.

Но для себя я вынес один очень важный инсайд:
здоровье > любой работы

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

Работу можно поменять. А здоровье вернуть намного сложнее.
  • ❤ 67
  • 💯 21
  • 👍 15
  • 🔥 10
Post #174 1.38K
Обновления в 🔥Prefire

Prefire, если кто-то вдруг пропустил, это мой инструмент для SwiftUI/UIKit #Preview.

Он берет превьюхи и на их основе генерирует snapshot-тесты и Playbook.

Из свежего я добавил установку через Mint:
mint install BarredEwe/Prefire


Теперь Prefire можно ставить через Brew, SPM, Xcode Plugin и Mint.

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

Например, добавили split_snapshot_directories.
Это флаг, который раскладывает снапшоты по папкам исходных файлов. Когда превьюх много, это сильно удобнее, чем одна огромная папка со всем подряд.

Плюс поправили несколько неприятных кейсов:
- исправлена проблема с определением пути к yml конфигу;
- @Previewable;
- креш, если после #Preview идет перенос строки;
- настройку drawHierarchy.

И я думаю, сейчас Prefire стал еще актуальнее.
UI все чаще пишется с помощью ИИ. Агент может быстро накидать экран, поменять компоненты, поправить состояние. Но после этого все равно нужен какой-то быстрый способ понять: он визуально ничего не развалил?

(Надо продумать этот кейс подробнее, может mcp сделать)

Snapshot-тесты из #Preview как раз хорошо закрывают этот сценарий.

GitHub:
https://github.com/BarredEwe/Prefire

Буду рад звездам, ишьюсам и особенно фидбеку от тех, кто попробует у себя.
  • 🔥 21
  • ❤ 6
  • 👍 4
Post #173 984
🐈 Решил заняться своим старым проектом «ScreenCat».

Вот, например, старый пост: https://t.me/prefire_ios/116

Обновил llama.cpp, полностью ушел от LLM.swift к самописному (ага, конечно, навайбкоденному 😁) бриджу на Swift со всеми новыми фишками, типа спекулятивного выполнения и так далее.

Но это не главное. У кота сейчас модель довольно большая - Qwen 3.5 2B или 4B на выбор. Это нагружает компьютер.

Вот решил выбрать модель поменьше, MiniCPM 1B, и дообучить её через LoRA под конкретную задачу. В этом помогла как раз ИИшка.

Из этапов, без большого погружения, выглядит так:

1. Сначала качаем модель.
2. Потом нужно найти или сгенерировать датасет. Так как мне нужны фразы котика, такого датасета я не нашел. Так что с помощью другой модели (Qwen 3.6 35B) начал генерацию. Если интересно, что и как, могу сделать отдельный пост.
3. Дальше с помощью датасета и самой маленькой модели обучаем её. Одна команда в терминале, сам удивлен, что так легко.
4. Наслаждаемся результатом 😁

На самом деле результат очень плохой 🤡

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

Буду рад послушать предложения и исправления.
Telegram Prefire iOS 🐾 ScrrenКот возвращается Проект был на паузе - завал задач, да и казалось, что всё почти готово. Но внутри не отпускало. Сейчас снова в деле и иду на финишной прямой. 🧠 За это время перепробовал кучу LLM-моделей для локального запуска — искал ту, что даст…
  • ❤ 12
  • 🔥 2
Post #172 971
Пока только прошло WWDC (мне кстати не понравилось), разбавлю немного постом про инструменты , которыми пользуюсь.


Недавно открыл для себя довольно новый терминал для macOS - CMUX.

Неожиданно зашло 😁

Самое полезное для меня это сплиты. Очень удобно делить окно и держать рядом несколько сессий opencode (или других *code-агентов).

Когда параллельно работаешь над несколькими задачами (а даже скорее проектами), фича топ.

Еще понравились уведомления. Можно переключиться на другую задачу и не сидеть, уставившись в терминал в ожидании ответа агента. CMUX уведомляет если агенту что то нужно или он завершил работу.

В итоге настолько привык к нему, что полностью переехал со стандартного терминала macOS.

Не скажу, что это какой-то революционный инструмент. Но если активно используете opencode, Codex, Claude Code, Gemini CLI или другие агентные инструменты, то CMUX именно под такой сценарий работы (да и для других тоже норм).

CMUX на GitHub⁠
  • 👍 9
  • 🔥 3
  • ❤‍🔥 1
Post #171 1.28K
14 апреля покажу, как можно пройти собеседование по системному дизайну.
Или как его завалить.

Формат интересный: буду решать задачу с полным доступом к ИИ. Близко к реальности - как ты думаешь, что отдаёшь агентам, как проверяешь результат и к какому решению приходишь.

Я к этому заранее подготовил скилы и агентов, так что самому уже интересно, что из этого получится 💥

14 апреля 17:00 подключайтесь посмотреть и пообщаться вживую:
📹 YouTube: https://www.youtube.com/watch?v=-ZyVpAzCf2E
  • 🔥 16
  • ❤ 6
  • 👍 2
  • 🤡 2
Post #170 1.1K
Prefire iOS 🚬 Розыгрыш 4 промокодов на Podlodka iOS Crew Я сам тоже буду участвовать в этом сезоне. Будет публичное собеседование, где я буду задавать примерно те же вопросы, которые обычно задаю кандидатам к себе в core-команду. Ну и в целом мне просто близка вся эта…
🎉 Результаты розыгрыша:

🏆 Победители:
1. David (@davidbayramo)
2. Тимур (@timnur)
3. Timofey (@bytim)
4. Musa (@musamuss)

✔️Проверить результаты
  • 🎉 3
  • ❤‍🔥 1
Post #168 1.11K
🚬 Розыгрыш 4 промокодов на Podlodka iOS Crew

Я сам тоже буду участвовать в этом сезоне. Будет публичное собеседование, где я буду задавать примерно те же вопросы, которые обычно задаю кандидатам к себе в core-команду. Ну и в целом мне просто близка вся эта тема с внутренностями системы, так что за сезон прям топлю.

Результаты будут 10 апреля в 18:00 🎁

Сам Crew пройдет с 13 по 17 апреля, тема сезона — «Фундаментальный iOS». Там будет прям глубокое погружение в системные штуки.
  • ❤ 3
  • 🔥 3
Post #167 958
🧭 Погружаемся в iOS вместе с Podlodka iOS Crew

Работа с iOS — это не только про красивый фронтенд. С 13 по 17 апреля пройдет новый сезон Podlodka iOS Crew — «Фундаментальный iOS».

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

💡Участники конференции:


• погрузятся в детали Swift Generics и Swift Dictionary,

• узнают, как создать свою ферму виртуальных iPhone с настоящей iOS,

• разберут актуальные подходы работы с Metal
и Core Image,

• погрузятся в то, как внедрить современные мультимодальные LLM в приложения для iPhone, используя аппаратные возможности устройств,

• пройдут по процессу собеседования вместе с тимлидом платформенной команды (это я 👉).

Всё это — в формате утренних и вечерних Zoom-сессий и общения с коллегами в закрытой группе Telegram.

🧠Если вы хотите обновить свои знания о фундаментальных основах iOS и погрузиться в практику вместе с опытными экспертами, подключайтесь к Podlodka iOS Crew👇

🔗 Посмотреть программу и присоединиться

А промокод ios_crew_17_o35WAv дает скидку 500р🎁
  • 😎 5
  • 🔥 3
  • 👍 2
Post #166 1.04K
Реализнули Swift 6.3

Этот релиз в первую очередь про кроссплатформу: Android, C interop, build tooling, embedded.

Появился первый официальный Swift SDK for Android, а в SwiftPM завезли preview нового Swift Build, чтобы сборка была более нормальной и единообразной на разных платформах.

Для меня самое интересное тут это @c атрибут. Потому что почти все llm библиотеки написаны прежде всего на C/C++, а остальное это уже обертки. У меня есть своя обертка над llama swift, так что попробую там применить.

Еще из полезного:
👉 в DocC добавили поддержку symbol links на overload groups и расширили кастомизацию Generated C/C++ API docs,
👉 завезли module selectors вида ModuleA::foo(), чтобы нормально разруливать одинаковые имена из разных модулей.
  • 🔥 12
  • ❤ 3
Post #165 1.11K
Держите свежую фоточку с Recrent 😎

Я тут вспомнил что давно ничего не постил (новостей кроме блокировок и нет нормальных).

Все так же делаю приложение для блогеров в свободное время. Все так же в LLM копаю. Очень удивил Qwen 3.5 который даже на утюге работает просто шикарно. Его кстати и использую в приложении.

По мобиусу готовим классную программу, почти все слоты уже закрыли, все финалим.

Пока сидел тут на стримерском мероприятии, ко мне пару раз походили и просили сфоткаться, так как перепутали меня с Recrent 🤡
  • 🔥 17
  • 😁 3
  • ❤ 1
Older posts →

About this channel

How can I read @prefire_ios without a Telegram account?
TGViewer shows the public web preview Telegram publishes for Prefire iOS: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does Prefire iOS have?
Prefire iOS (@prefire_ios) has 979 subscribers on Telegram, refreshed roughly every 30 minutes.
Does Prefire iOS know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →