bootg.com »
United States »
iOS Good Reads – swift, разработка мобильных приложений, архитектура, блокчейн, VR, AR, карьера, IT » Telegram Web
История переезда Spotify на Bazel
🤔Дано:
- 200 iOS разработчиков в 120 командах
- 3 миллиона строк кода только в тестах
- Рост кодовой базы на 30% каждый год
- 80 минут ожидания сборки и прогона тестов на PR
После того, как Spotify перевел все приложение на сборку через Bazel, время ожидания сборки упало в 4 раза, до 20 минут. В статье подробно рассказывается их история миграции: начиная от бесшовной замены xcodebuild на Bazel, заканчивая его интеграцией с IDE.
🤔Дано:
- 200 iOS разработчиков в 120 командах
- 3 миллиона строк кода только в тестах
- Рост кодовой базы на 30% каждый год
- 80 минут ожидания сборки и прогона тестов на PR
После того, как Spotify перевел все приложение на сборку через Bazel, время ожидания сборки упало в 4 раза, до 20 минут. В статье подробно рассказывается их история миграции: начиная от бесшовной замены xcodebuild на Bazel, заканчивая его интеграцией с IDE.
Гайд по работе с make
Короткий гайд для тех, кто совсем ничего не знает про make. Автор использует его на примере скрипта настройки окружения для нового iOS проекта.
Короткий гайд для тех, кто совсем ничего не знает про make. Автор использует его на примере скрипта настройки окружения для нового iOS проекта.
Запуск локальной LLM на iOS
LLaMA.cpp – проект для инференса различных LLM на девайсах. Основная проблема с запуском его на iOS – ограничения по памяти. В статье разбирается, как можно квантовать модель таким образом, чтобы не ухудшить ее точность, попасть в лимиты памяти и запустить ее локально.
LLaMA.cpp – проект для инференса различных LLM на девайсах. Основная проблема с запуском его на iOS – ограничения по памяти. В статье разбирается, как можно квантовать модель таким образом, чтобы не ухудшить ее точность, попасть в лимиты памяти и запустить ее локально.
Хабр
LLaMA 2, RWKV, Santacoder и другие LLM на iOS
Однажды я решил изучить язык Swift и разработать свое первое приложение для iOS. Для этого я решил создать реальный проект, который заключался в оптимизации нашумевшего LLaMA.cpp...
Демон, который чинит проблемы с потреблением CPU симуляторов Xcode 15
В симуляторах Xcode 15 есть проблема. При прогоне тестов запускаются процессы, которые могут нагрузить несколько ядер CPU на 100%, и, как результат, значительно увеличить время на их прогон.
Yeetd – простой демон, который отслеживает такие процессы и убивает их. Костыль, но может помочь до исправления корневой проблемы.
В симуляторах Xcode 15 есть проблема. При прогоне тестов запускаются процессы, которые могут нагрузить несколько ядер CPU на 100%, и, как результат, значительно увеличить время на их прогон.
Yeetd – простой демон, который отслеживает такие процессы и убивает их. Костыль, но может помочь до исправления корневой проблемы.
GitHub
GitHub - biscuitehh/yeetd: yeetd is a lil' daemon that watches for specific CPU-intensive Simulator processes and stops them in…
yeetd is a lil' daemon that watches for specific CPU-intensive Simulator processes and stops them in their tracks! - biscuitehh/yeetd
Все возможности #Preview макроса
👉Можно использовать как со SwiftUI, так и с UIKit.
👉Если вы хотите сгенерировать несколько превью, макрос можно использовать сколько угодно раз.
👉Чтобы проще отличать превью друг от друга, в макрос можно передать название конкретного превью.
👉Начиная с iOS 17, макросу можно передать еще и параметр, определяющий размер и поворот экрана.
👉Превью можно использовать и с виджетами.
👉Можно использовать как со SwiftUI, так и с UIKit.
👉Если вы хотите сгенерировать несколько превью, макрос можно использовать сколько угодно раз.
👉Чтобы проще отличать превью друг от друга, в макрос можно передать название конкретного превью.
👉Начиная с iOS 17, макросу можно передать еще и параметр, определяющий размер и поворот экрана.
👉Превью можно использовать и с виджетами.
Метрики в Push Notifications Console
В Push Notifications Console завезли метрики для пушей, отправленных в продакшне через APNs. С их помощью можно понять, были ли ваши пуши доставлены до пользователя, отменены, или отложены для более поздней отправки. Подробнее тут.
В Push Notifications Console завезли метрики для пушей, отправленных в продакшне через APNs. С их помощью можно понять, были ли ваши пуши доставлены до пользователя, отменены, или отложены для более поздней отправки. Подробнее тут.
Apple
New delivery metrics now available in the Push Notifications Console - Latest News - Apple Developer
The Push Notifications Console now includes metrics for notifications sent in production through the Apple Push Notification service (APNs). With the console’s intuitive interface, you’ll get an aggregated view of delivery statuses and insights into various…
Советы по жизни со SwiftSyntax
Пару месяцев назад я постил обсуждение со Swift Forums про то, что SwiftSyntax, зависимость на который неизбежна при использовании макросов, существенно замедляет сборку и усложняет менеджмент версий ваших зависимостей. В статье от Pointfree дается несколько советов по тому, как эти проблемы можно минимизировать. Статья в первую очередь ориентирована на авторов библиотек, но помочь может и разработчикам приложений.
Пару месяцев назад я постил обсуждение со Swift Forums про то, что SwiftSyntax, зависимость на который неизбежна при использовании макросов, существенно замедляет сборку и усложняет менеджмент версий ваших зависимостей. В статье от Pointfree дается несколько советов по тому, как эти проблемы можно минимизировать. Статья в первую очередь ориентирована на авторов библиотек, но помочь может и разработчикам приложений.
www.pointfree.co
Being a good citizen in the land of SwiftSyntax
How can you be a good citizen in the new world of SwiftSyntax proliferation? Follow our advice to keep the greater Swift ecosystem healthy and thriving.
Fastlane переезжает в Mobile Native Foundation
В феврале я рассказывал про историю вокруг Fastlane. Если кратко, то по историческим причинам права на репозиторий принадлежали Google, который был совсем не заинтересован в развитии проекта. Так вот, все наконец-то закрутилось. Google согласился передать владение проектом в Mobile Native Foundation, который уже хостит несколько интересных вещей. Для Fastlane это в первую очередь развязывает руки для того, чтобы начать собирать донаты и гранты на оплату мейнтейнеров.
В феврале я рассказывал про историю вокруг Fastlane. Если кратко, то по историческим причинам права на репозиторий принадлежали Google, который был совсем не заинтересован в развитии проекта. Так вот, все наконец-то закрутилось. Google согласился передать владение проектом в Mobile Native Foundation, который уже хостит несколько интересных вещей. Для Fastlane это в первую очередь развязывает руки для того, чтобы начать собирать донаты и гранты на оплату мейнтейнеров.
GitHub
Moving fastlane to MNF · MobileNativeFoundation/discussions · Discussion #194
fastlane is currently being ignored by Google, yet still on their GitHub. That makes sponsoring difficult and also adding new maintainers. It is an extremely widely used project and the MNF seems l...
Skip – iOS-first кроссплатформа
Вышел первый релиз Skip – кроссплатформенной технологии, которая расчитана в первую очередь на айосеров. Основная идея – вы просто пишете Swift код, а он автоматически транспилится в нативное Android приложение. В чем суть:
👉Проприетарный транспилятор Swift->Kotlin автоматом переводит весь ваш код на Android
👉Стандартную библиотеку и Foundation заменяют написанные авторами библиотеки на Kotlin
👉SwiftUI код переводится в вызовы Kotlin-обертки поверх Jetpack Compose с похожим API
Вышел первый релиз Skip – кроссплатформенной технологии, которая расчитана в первую очередь на айосеров. Основная идея – вы просто пишете Swift код, а он автоматически транспилится в нативное Android приложение. В чем суть:
👉Проприетарный транспилятор Swift->Kotlin автоматом переводит весь ваш код на Android
👉Стандартную библиотеку и Foundation заменяют написанные авторами библиотеки на Kotlin
👉SwiftUI код переводится в вызовы Kotlin-обертки поверх Jetpack Compose с похожим API
Улучшения в менеджменте бета-тестеров в TestFlight
Apple выкатил обновление TestFlight. Основная фича – расширенная статистика по всем бета-тестерам, включающая в себя количество сессий, пойманных крешей, отправленного фидбэка, и конкретную информацию про модель устройства и версию ОС.
Apple выкатил обновление TestFlight. Основная фича – расширенная статистика по всем бета-тестерам, включающая в себя количество сессий, пойманных крешей, отправленного фидбэка, и конкретную информацию про модель устройства и версию ОС.
Обзор всех улучшений логов в Xcode 15
👉Отображение разных видов метадаты
👉Скрытие записей, похожих друг на друга
👉Фильтрация по типу
👉Отображение разных видов метадаты
👉Скрытие записей, похожих друг на друга
👉Фильтрация по типу
Mojo – новый язык от Криса Латтнера
Крис Латтнер – разработчик LLVM и языковой дизайнер, который выпустил первые версии Swift, а потом ушел из Apple. Недавно я уже рассказывал, что он выпустил новый язык Mojo – надмножество Python с близким к С++ перфомансом, ориентированное на ML разработчиков.
Так вот, сначала короткая новость – Mojo SDK стал доступен для macOS, так что можете поиграться с языком.
Но самое интересное не новость, а слайды с выступления Латтнера и других разработчиков на LLVM Conference 2023 с подробнейшим разбором компилятора, языка и его принципов.
Крис Латтнер – разработчик LLVM и языковой дизайнер, который выпустил первые версии Swift, а потом ушел из Apple. Недавно я уже рассказывал, что он выпустил новый язык Mojo – надмножество Python с близким к С++ перфомансом, ориентированное на ML разработчиков.
Так вот, сначала короткая новость – Mojo SDK стал доступен для macOS, так что можете поиграться с языком.
Но самое интересное не новость, а слайды с выступления Латтнера и других разработчиков на LLVM Conference 2023 с подробнейшим разбором компилятора, языка и его принципов.
Modular
Modular: Mojo 🔥 - A systems programming language presented at LLVM 2023
Jeff, Abdul, and Chris presented a talk about Mojo and how it relates to MLIR and LLVM, at the LLVM Developer Conference 2023.
Эволюция мобильных релизов в Авито
Когда я работал в Авито, я в том числе руководил и командой, которая занималась релизами мобильных приложений. Уже тогда у них были построены супер крутые процессы и инфра (мы даже подкаст про это записали). На прошлой неделе ребята выложили статью, где рассказали про то, как они прокачали свой релизный процесс за последние пять лет:
👉Автоматизация мониторинга отзывов и крешей
👉Релизы, которые катятся каждую неделю вообще без участия людей
👉Дэшборд с текущим статусом всех релизов
👉Сервис релизов, который менеджерит все зависимости по определенным контрактам
Когда я работал в Авито, я в том числе руководил и командой, которая занималась релизами мобильных приложений. Уже тогда у них были построены супер крутые процессы и инфра (мы даже подкаст про это записали). На прошлой неделе ребята выложили статью, где рассказали про то, как они прокачали свой релизный процесс за последние пять лет:
👉Автоматизация мониторинга отзывов и крешей
👉Релизы, которые катятся каждую неделю вообще без участия людей
👉Дэшборд с текущим статусом всех релизов
👉Сервис релизов, который менеджерит все зависимости по определенным контрактам
100 советов по росту приложений
Твиттер-тред из 100 советов про то, как зарабатывать больше денег на вашем мобильном приложении, от фаундера с неплохим портфолио. Много деталей про ожидаемые конверсии на разных этапах и предложений по проведению монетизационных тестов.
Твиттер-тред из 100 советов про то, как зарабатывать больше денег на вашем мобильном приложении, от фаундера с неплохим портфолио. Много деталей про ожидаемые конверсии на разных этапах и предложений по проведению монетизационных тестов.
X (formerly Twitter)
Jake Mor (@jakemor) on X
100 tips I learned growing an iOS app to ~$5M in sales in 3 yrs, going through YC 1.5 times, and co-founding @Superwall 👇
Второй лайв шоу “Ламповый стол”
Активные участники нашего чата iOS Good Talks проводят уже второй лайв, на котором будут обсуждать AI, его использование в работе рядовым кнопкокрасом, и куда вообще все катится. Присоединяйтесь в качестве слушателя, участника или просто общайтесь в чате, рассказывайте успешные кейсы, боли и просто свои мысли по поводу этой темы, будет интересно!
📆Четверг, 2 ноября, 19:00 по Москве
👉Ссылка на Zoom
Активные участники нашего чата iOS Good Talks проводят уже второй лайв, на котором будут обсуждать AI, его использование в работе рядовым кнопкокрасом, и куда вообще все катится. Присоединяйтесь в качестве слушателя, участника или просто общайтесь в чате, рассказывайте успешные кейсы, боли и просто свои мысли по поводу этой темы, будет интересно!
📆Четверг, 2 ноября, 19:00 по Москве
👉Ссылка на Zoom
Поиск утечек памяти на CI
Инструкция по тому, как вместе с прогоном UI тестов генерировать граф потребляемой памяти и автоматически анализировать его для поиска утечек памяти.
Инструкция по тому, как вместе с прогоном UI тестов генерировать граф потребляемой памяти и автоматически анализировать его для поиска утечек памяти.
Плюсы и минусы Swift OpenAPI Generator
Ребята из Озона проверили на тестовом проекте,как работает OpenAPI Generator, и готов ли он к использованию в продакшне. Из заметных минусов:
👉Нет поддержки Lossy Array
👉Нет поддержки multipart/form-data
👉Нет поддержки внешних JSON спецификаций
👉Нет возможности скорректировать шаблоны генерации
👉Довольно медленная генерация
Ребята из Озона проверили на тестовом проекте,как работает OpenAPI Generator, и готов ли он к использованию в продакшне. Из заметных минусов:
👉Нет поддержки Lossy Array
👉Нет поддержки multipart/form-data
👉Нет поддержки внешних JSON спецификаций
👉Нет возможности скорректировать шаблоны генерации
👉Довольно медленная генерация
Хабр
Готов ли Swift OpenAPI Generator для продуктивного кода?
Привет! Меня зовут Андрей, я iOS-разработчик приложения «Пункт Ozon». С помощью него сотрудники пунктов выдачи Ozon выдают посылки, принимают возвраты, проводят инвентаризации. Мы хотим...
Рекомендации библиотек на Swift.org
На официальном сайте Swift появился новый раздел Packages с рекомендациями лучших библиотек для нетворкинга, логов, тестирования, работы с макросами и других задач. Отображается только несколько топовых пакетов, но есть возможность посмотреть всю категорию на коммьюнити-сайте Swift Package Index.
На официальном сайте Swift появился новый раздел Packages с рекомендациями лучших библиотек для нетворкинга, логов, тестирования, работы с макросами и других задач. Отображается только несколько топовых пакетов, но есть возможность посмотреть всю категорию на коммьюнити-сайте Swift Package Index.
Swift.org
Introducing Packages on Swift.org
Today, Swift.org gains a useful, new top-level Packages page.
This media is not supported in your browser
VIEW IN TELEGRAM
Rugby – кэш для CocoaPods
Rugby – консольный инструмент, который запускается сбоку от CocoaPods и ускоряет его работу.
👉Кеширует все зависимости и удаляет их из Pods проекта
👉Пересобирает только изменившиеся поды
👉Детектит и удаляет лишние таргеты
При этом никак не меняет Podfile или Podfile.lock.
Rugby – консольный инструмент, который запускается сбоку от CocoaPods и ускоряет его работу.
👉Кеширует все зависимости и удаляет их из Pods проекта
👉Пересобирает только изменившиеся поды
👉Детектит и удаляет лишние таргеты
При этом никак не меняет Podfile или Podfile.lock.
Добавление поддержки шорткатов
В iOS 16 появился фреймворк AppIntents, который добавояет в приложение поддержку App Actions. Эти экшны могут быть использованы в Shortcuts, Siri и Spotlight.
В статье разбирается, как быстро интегрировать фреймворк к себе в проект и правильным образом обрабатывать переданный пользователем ввод.
В iOS 16 появился фреймворк AppIntents, который добавояет в приложение поддержку App Actions. Эти экшны могут быть использованы в Shortcuts, Siri и Spotlight.
В статье разбирается, как быстро интегрировать фреймворк к себе в проект и правильным образом обрабатывать переданный пользователем ввод.
Lickability
Creating your first app shortcut – Lickability
How to use Apple's new AppIntents framework