Мобильный кот
2.63K subscribers
91 photos
3 videos
2 files
91 links
Все, что считаю важным про жизнь мобильного разработчика

Шкаф с материалами
https://t.iss.one/cat_with_mobile_cabinet
Download Telegram
В продолжении предыдущего поста...

🖥 Логарифмический график изменения процентного соотношения основных языков программирования в репозитории Swift. От версии 2.2 до 6.1.

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

🧍‍♂ Что я сделал

Конечно же начал с клонирования репозитория Swift. Дальше нужны было найти инструмент для подсчета процентов на каждом из нужных мне коммитов. Сам GitHub для этой цели использует Ruby-приложение Linguist, которое хрен поставишь на macOS. Я начал с cloc, но цифры, которые он выдавал были странные. Оказалось, что он подсчитывает код построчно, то есть
if { 
// ...
}

дает +3 в копилку свифта, а
if { // ... }

дает +1.

И это явно не то, что нужно, так как Linguist подсчитывает код побайтово.

Оказалось, что у Linguist есть порт на языке Go - Enry. А скомпилировать go-приложение на макоси можно без вопросов, что я и сделал. Дальше муторное переключение между коммитами, заваривание чая, сбор статистики, заваривание кофе, сведение все в табличку, поиск художника для отрисовки графика.

Из графика видно, что разрыв между C++ и Swift в 2016 года был практически в 2 раза, а в последнем релизе Swift 6.1 - практически отсутствует. Objective-C++ все еще есть, хотя в Swift 5.9 появился интероп между плюсами и свифтом.

🧍‍♂ Верим в светлые времена, когда часть исходного кода плюсов будет написана на Swift, а не наоборот)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Что значит Swift Build для экосистемы Swift

Разработчики Tuist об аспектах выпуска Swift Build. Очень интересно почитать мысли тех, кто годами занимается низкоуровневой работой с проектами. О перспективах туиста и формата проектов.

Авторитетное мнение.
👍10🤡3
👍 Выступлению на Мобиусе 2025 быть)

Чуть позже дам подробностей, о чем будем рассказывать.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥302🌚1🍾1
#доклады

Молот и наковальня iOS-разработчика

ℹ️ О чем доклад: Узнаем о macOS-приложении RaifMagic — внутреннем инструменте Райффайзен Банка. Приложение помогает автоматизировать ежедневные рабочие задачи и стандартизировать контроль качества программного кода. 

RaifMagic имеет интегрированный с Swift Concurrency механизм запуска консольных команд, самописную систему автообновления и контроля требуемой для генерации проекта версии, систему контроля и развертывания окружения, систему проверки качества кода, систему интеграции с GitLab для назначения ревьюеров на merge requests и многие другие функции. Выясним историю создания и развития инструмента.

🗣 Спикеры:

Василий Усов — автор бестселлера «Swift. Основы разработки приложений под iOS, iPadOS и MacOS». Работает в платформенной команде Райффайзен Банка, ведет блог Мобильный кот и развивает сообщество JustSwift.

Кирилл Шумаков работает в Райффайзен Банке. Любит делать красивые анимации и классные инструменты для разработчиков.

Подробности и билеты
🔥20😁7👍2
Mobius 2025. Итоги

Было круто, если еще не бывали там - атакуйте мозг своего работодателю, чтобы отправил. Нетворкинг прекрасный. В этот раз OZON устроил чрезвычайно крутую вечеринку после первого дня, удалось и на сцене Кирпичей навалить попеть, и с Яндексом погудеть (я в Райфе, для информации).

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

🦄 RaifMagic
Панель управления iOS проектом. Место моего творчества последний год.

⚠️ CodeOwners
Система, управляющая отношением «файл-владелец» в проекте, и контролирующее влитие МРов в мастер. Суть в том, что разраб может влить МР только когда все заинтересованные лица поставят аппрувы. Данная система есть в составе Мейджика (см. выше), но так же может использоваться независимо. Скоро будет релиз более автоматизированной версии и, возможно, GUI на KMP под все операционки. Как сайд-эффект - вы всегда знаете, какая команда отвечает за тот или иной модуль.

💇♀️ CodeStyler
Система, контролирующая качество кода. Такой linter + danger на максималках, расширяемый, написан на Swift, с локальным GUI и интеграцией на CI. Суть в том, что пока пользователь не выполнит все правила оформления кода и ресурсов, то он не сможет влить их в репозиторий (или даже просто пушнуть). А вишенка в том, что можете писать свои правила на что угодно. Мы, к примеру, проверяем правила оформления в соответствии со swiftformat, архитектурные вопросы, форматы загружаемых изображений, а на CI еще наличие русских символов в названии ветки (оказалось капец как актуально😁)

📟 CommandExecutor
Либа для вызова shell-команд из Swift. Полная интеграция со Swift Concurrency и Swift 6.

Следующим постом приложу презентацию с доклада, но лучше смотреть доклад на сайте конференции. Надеюсь его скоро выложат на ютубчик
🔥236🏆6🍾6
🫠 Прощай, Swift

Сегодня второй рабочий день в роли Техлида. Два дня уже не программировал, ломает.

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

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

Про разработку конечно не буду забывать, RaifMagic, о котором говорил выше все еще остается в моем ведении. Время от времени буду наливать смузи и кодить на SwiftUI.
🔥107😁13❤‍🔥10👍8🐳32😢2🏆2
🍷Отличный повод выйти из техлидского запоя и запилить пятничный пост после полугода шокового состояния от новой должности

Для информации, Педро - основатель Tuist. Ну а что такое Tuist для iOS, думаю, рассказывать не нужно.

Ну а мои ребята - 💪🏼. Беспощадно контрибьютят в Tuist и интегрируют его решение в проекты Райфа.
🔥36👍10🤡21🤣1
Когда структуры в Swift — не твои бро

Один из лучших докладов на Mobius 2025 Autumn. Очень люблю, когда докладчик копает глубоко, объясняет хорошо и разочаровывает меня в Swift.

💡Основное:

- Структуры не всегда ускоряют работу приложения, а не редко замедляют ее и увеличивают размер бинаря.
- Карта линковки (Link Map) позволяет посмотреть из каких сущностей состоит итоговый бинарь,
- С помощью LinkMap можно узнать размер сущностей, вырезанные символы, которые не используются в итоговом бинаре и являются кандидатами на удаление из кода, анализировать краши без DSYM.
- Для сохранения Link Map в файл необходимо включить настройку Build SettingLinking - GeneralWrite Link Map File. Файл будет сохранен в Derived Data с именем {Имя_таргета}-LinkMap-normal-arm64.txt.
- Имена символов манглированы, нужно деманглировать с помощью swift demangle '{Имя_символа}'
- Чем больше вложенность структур друг в друга, тем больше будет итоговый размер структуры. Обычно особенно проблемными являются компоненты дизайн-системы.
- Использование экзистенциальных контейнеров дополнительно увеличивает размер за счет создания сервисных методов witness table. То есть, если компилятор не может рассчитать конкретный тип, а ходит через протокол - ситуация ухудшается. Вот почему нужно использовать some/generic везде, где это возможно.
- Флаги оптимизации -O никак не влияют на рост размера структур.
- Необоснованный рост может быть в КБ, десятки и сотник КБ, и даже МБ для особо больших структур.
- Накладные расходы на поддержку работы структур от 2 КБ превышают расходы на использование ссылочных типов
- Добавление indirect для enum зачастую лечит проблемы, когда в качестве associated value используется "дрянная структура".
- Для определения того, какие структуры наиболее важны для такого рефакторинга можно построить граф вложенности структур (на основе Xcode index Store) и определить метрику центральности графа (Betweenness)

🧠 Мысли после доклада:

- А что там со SwiftUI? Вьюшки с кучей проперти-врапперов разгоняют размер и снижают скорость? Имеет ли смысл дробления вьюшек на более мелкие не только ради переписовок, но и облегчения размера?
- А что с NonCopyable структурами? Они не копируются и возможно в них нет такого большого количества сервисного кода.
- Как именно выглядят дженерики в итоговом файле - требует дополнительного изучения.

🔗 Ссылки:

- Видео (если у вас есть билет на конференцию)
👍146🔥3🤔2
🤔 Embedded Swift в Swift 6.3

Мы уже видели, как Swift успешно захватил server-side, linux и windows разработку. В версии 6.3 язык делает очередной шаг уже в сторону разработки автономного программного обеспечения, в частности под микроконтроллеры или мини-пк, вроде Raspberry Pi и Arduino.

Embedded Swift - это строгое подмножество Swift, благодаря которому конечные бинарные файлы смогут иметь небольшой размер. Ограничения конечно существенные, но не фатальные: нет полноценных экзистенциалов, кучи типов стандартной библиотеки (например Codable, KeyPath ...), рефлексии, weak и unowned и всякого разного, что может вызывать неопределенности в итоговом бинарном файле и увеличить его размер.

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

Неочевидным плюсом этого является то, что аттрибут @_cdecl наконец зафиналили под именем @c (хотя может это было сделано и в более ранних версиях?). Когда я был в ВК, мы активно использовали его, так как взаимодействие C++ со Swift шло через C-слой (еще до официального интеропа). Ну и всякие новые аттрибуты, вроде @section и @used, бесполезность которых еще стоит осознать.

Больше всего заинтересовала поддержка разработки под микроконсоль Playdate (см. картинку у поста). И это именно то, что потенциально будет интересно для детей (мужчин в возрасте до 50): пилить игрули не на чистых сях, а на смузи Swift в Xcode с запуском эмулятора Playdate.

🔗 Почитать про Embedded Swift
🔗 Посмотреть PlaydateKit
🔗 Ограничения Embedded Swift

#swift #embeddedswift #swift63
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8🤡3😁2