Кажется, пора внести ясность
Бизнесу не важно, что у вас под капотом: насколько ваш код красив и удобен в саппорте в будущем, как именно вы хэндлите все сценарии ошибок в непростых сценариях или насколько тяжелые задачи решаете, когда деливерите фичи.
Все мы хотим проводить рефакторинг! А какой разработчик не хочет?
Ведь тут как с автомобилем - вроде и едет, и тормоза в порядке, ну и что, если там где-то тарахтит или стучит, стоит ли всегда чекать шрус?
Напомню, что есть полезное правило трёх.
Важно помнить, что попытка слишком раннего рефакторинга при выборе неправильной абстракции может привести к ухудшению кода по мере появления новых требований и, в конечном итоге, потребует повторного рефакторинга.
Поэтому часто можно услышать от продактов или архитекторов (кому повезло и у них они есть на проекте) - что давайте сделаем фичу, а зарефакторим потом, в следующих спринтах когда-нибудь.
В такой момент важно не пропустить вспышку, когда дальнейшее наслаивание логики может поломать слишком многое внутри.
И в такой момент жизненно важно для проекта остановиться.
Для этого должен быть лид, способный взять ответственность за изменения в ядре проекта (или крупной фичи).
И будет здорово, если ваши стейкхолдеры или продакты смогут оценить такую ветку изменений по достоинству.
Так бывает не всегда.
Зато вы после проведённого рефакторинга сможете спать спокойно.
А вот стоит ли оно таких усилий - решать вам и вашей команде. Ведь многие проекты существуют и прекрасно себя чувствуют на стадии и так сойдёт.
Пишу про моменты, которые вам не расскажут ни на одной конференции здесь.
😃 iOS Dev
Бизнесу не важно, что у вас под капотом: насколько ваш код красив и удобен в саппорте в будущем, как именно вы хэндлите все сценарии ошибок в непростых сценариях или насколько тяжелые задачи решаете, когда деливерите фичи.
Все мы хотим проводить рефакторинг! А какой разработчик не хочет?
Ведь тут как с автомобилем - вроде и едет, и тормоза в порядке, ну и что, если там где-то тарахтит или стучит, стоит ли всегда чекать шрус?
Напомню, что есть полезное правило трёх.
Важно помнить, что попытка слишком раннего рефакторинга при выборе неправильной абстракции может привести к ухудшению кода по мере появления новых требований и, в конечном итоге, потребует повторного рефакторинга.
Поэтому часто можно услышать от продактов или архитекторов (кому повезло и у них они есть на проекте) - что давайте сделаем фичу, а зарефакторим потом, в следующих спринтах когда-нибудь.
В такой момент важно не пропустить вспышку, когда дальнейшее наслаивание логики может поломать слишком многое внутри.
И в такой момент жизненно важно для проекта остановиться.
Для этого должен быть лид, способный взять ответственность за изменения в ядре проекта (или крупной фичи).
И будет здорово, если ваши стейкхолдеры или продакты смогут оценить такую ветку изменений по достоинству.
Так бывает не всегда.
Зато вы после проведённого рефакторинга сможете спать спокойно.
А вот стоит ли оно таких усилий - решать вам и вашей команде. Ведь многие проекты существуют и прекрасно себя чувствуют на стадии и так сойдёт.
Пишу про моменты, которые вам не расскажут ни на одной конференции здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍23 10❤🔥5✍2🔥2💯2🤝1
Почему проекты на Swift сталкиваются с трудностями (и как их преодолеть)
📖 У Tuist вышел разбор, в котором объясняется не только то, почему в крупных Swift-приложениях начинаются типичные проблемы, среди которых и медленные билды, и нестабильные тесты, но, например и то, как справиться со всем этим не прибегая к кардинальным изменениям вроде перехода на React Native или помощи Bazel.
Про React Native это отсылочка к недавнему разбору о том, как Shopify взял и перевёл все мобильные приложения на React Native. Хотя у всего есть своя цена.
Видимо, в tuist читали мой вчерашний пост и согласны, что бизнесу пофиг, почему у вас проект собирается так долго и это вам мешает - ведь конечная цель повысить профит от продукта, что справедливо.
Но вообще в статье есть важные поинты, на которые стоит обратить внимание и посмотреть, можно ли это изменить у вас на проекте:
- Безусловно, одним из факторов для возможного преодоления сложностей они считают модуляризацию.
- Время сборок. Тут не обошлось и без их паблик-дашборда.
- Работа с тестами и разбор флагов.
- Анализ сборок и выводы. Нельзя не вспомнить и про xcbeautify.
- Derived Data. Рассматривают и те проблемы, что есть сейчас, и заглядывают в будущее. На самом деле, Apple уже работает над подходом, называемым хранилищем с адресацией по содержимому и явными модулями, к которому они постепенно подталкивают пользователей.
😃 iOS Dev
📖 У Tuist вышел разбор, в котором объясняется не только то, почему в крупных Swift-приложениях начинаются типичные проблемы, среди которых и медленные билды, и нестабильные тесты, но, например и то, как справиться со всем этим не прибегая к кардинальным изменениям вроде перехода на React Native или помощи Bazel.
Про React Native это отсылочка к недавнему разбору о том, как Shopify взял и перевёл все мобильные приложения на React Native. Хотя у всего есть своя цена.
Видимо, в tuist читали мой вчерашний пост и согласны, что бизнесу пофиг, почему у вас проект собирается так долго и это вам мешает - ведь конечная цель повысить профит от продукта, что справедливо.
Но вообще в статье есть важные поинты, на которые стоит обратить внимание и посмотреть, можно ли это изменить у вас на проекте:
- Безусловно, одним из факторов для возможного преодоления сложностей они считают модуляризацию.
- Время сборок. Тут не обошлось и без их паблик-дашборда.
- Работа с тестами и разбор флагов.
- Анализ сборок и выводы. Нельзя не вспомнить и про xcbeautify.
- Derived Data. Рассматривают и те проблемы, что есть сейчас, и заглядывают в будущее. На самом деле, Apple уже работает над подходом, называемым хранилищем с адресацией по содержимому и явными модулями, к которому они постепенно подталкивают пользователей.
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥16 10✍7👍5🏆1
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация алгоритма для навигации по метро Токио на Swift
В необычном докладе Крис рассказывает не только о способах получения следующих доступных станций в метро, но и о связывании инфы с Dynamic Island.
Сам проект использует два типа данных: статику от жд-системы и GPS в реальном времени от юзера.
А ещё затрагиваются вопросы хранения, отображения и то, как именно стейт-машина позволяет сделать резы более стабильными в каждом случае.
🛠 Хотя сам алгоритм алгоритм не опенсорснут по очевидным причинам, но в этой репе есть целых 5 приложений, которые использовались для сбора данных.
📖 Сама презентация на английском тут, видео здесь (на японском языке будет позже, если кто-то хочет дождаться).
😃 iOS Dev
В необычном докладе Крис рассказывает не только о способах получения следующих доступных станций в метро, но и о связывании инфы с Dynamic Island.
Сам проект использует два типа данных: статику от жд-системы и GPS в реальном времени от юзера.
А ещё затрагиваются вопросы хранения, отображения и то, как именно стейт-машина позволяет сделать резы более стабильными в каждом случае.
🛠 Хотя сам алгоритм алгоритм не опенсорснут по очевидным причинам, но в этой репе есть целых 5 приложений, которые использовались для сбора данных.
📖 Сама презентация на английском тут, видео здесь (на японском языке будет позже, если кто-то хочет дождаться).
Please open Telegram to view this post
VIEW IN TELEGRAM
9 18🔥10🏆4👍2🤯2🍓2👏1💯1
Вышла первая версия Swift Configuration - новый инструмент чтения конфигов от Apple
В первую очередь либа преднозначена для экосистемы Swift-серверов, где конфиг часто считывается из нескольких источников. Но не только. Среди основных преимуществ:
➡️ Появился единый API для чтения конфигураций в приложениях и библиотеках.
➡️ Быстрый старт с поддержкой environment variables, аргументов, JSON/YAML и in-memory данных.
➡️ Есть опция создавать свои провайдеры конфигураций с открытым протоколом
Новая либа пригодится и в инструментах командной строки, и в тех приложениях и библиотеках, где нужно гибкое управление конфигурацией.
📖 Вводный пост здесь, примеры на GitHub, а вся документация (и кейсы использования) лежат вот тут.
😃 iOS Dev
В первую очередь либа преднозначена для экосистемы Swift-серверов, где конфиг часто считывается из нескольких источников. Но не только. Среди основных преимуществ:
ConfigProvider
. Новая либа пригодится и в инструментах командной строки, и в тех приложениях и библиотеках, где нужно гибкое управление конфигурацией.
📖 Вводный пост здесь, примеры на GitHub, а вся документация (и кейсы использования) лежат вот тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
5 15🔥9👍6❤🔥4🤯1💯1
Основы работы с памятью в Swift: size, stride, alignment
Одной из основных задач на моей текущей работе является работа с бинарным протоколом (когда-то давно выбрали его не только потому что он более компактен по сравнению с традиционными вариантами вроде JSON или XML), но и не в меньшей степени из-за скорости и эффективности обработки (а ещё безопасности).
При работе с памятью для новичков важно понимать всего лишь 3 основных свойства: это
И хотя с size всё кажется очевидным, но даже в доках есть важная сноска:
Для stride как и следует из названия:
А вот что такое
📖 Делюсь простой и понятной статьёй, в которой буквально на пальцах объясняют все эти свойства, а ещё какие сложности могут возникнуть.
И напомню про этот пост c разбором MemoryLayout.
✅ А если вы хотите разобраться с темой на более детальном уровне, то вам сюда.
😃 iOS Dev
Одной из основных задач на моей текущей работе является работа с бинарным протоколом (когда-то давно выбрали его не только потому что он более компактен по сравнению с традиционными вариантами вроде JSON или XML), но и не в меньшей степени из-за скорости и эффективности обработки (а ещё безопасности).
При работе с памятью для новичков важно понимать всего лишь 3 основных свойства: это
size
, stride
и alignment
.И хотя с size всё кажется очевидным, но даже в доках есть важная сноска:
Размер типа не включает в себя динамически выделенную память. В частности, MemoryLayout<T>.size, когдаT
является типом класса, остается неизменным независимо от количества сохраненных свойствT
.
Для stride как и следует из названия:
это количество байт от начала одного экземпляра T
до начала следующего при хранении в непрерывной памяти или в `Array<T>`.
А вот что такое
alignment
? И вообще что такое смещение значения и как оно влияет? 📖 Делюсь простой и понятной статьёй, в которой буквально на пальцах объясняют все эти свойства, а ещё какие сложности могут возникнуть.
И напомню про этот пост c разбором MemoryLayout.
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥18 9❤🔥5✍4⚡1👍1👏1💯1🏆1
Теорема о бесконечных обезьянах
Если в течение продолжительного времени случайным образом стучать по клавиатуре, то среди набираемого текста будут возникать осмысленные слова, словосочетания и даже предложения.
А на дистанции длиной плюс-минус в бесконечность есть шанс, что она даже напечатает Шекспира.
Массовая истерия с ИИ мне напоминает примерно это же.
Я уже вижу, как готовят списки промптов, и, чёрт возьми, даже продают их: «что, серьёзно?» (тут нужен мем), а на сотнях сайтов вводят курсыкак гуглить работать с ИИ или хакать подписку.
Самим не смешно?
Все создатели ИИ пишут эти советы, чтобы ты, pal, покупал их. Чтобы ты больше верил в то, что чудо-машина за тебя всё сделает.
Даже в Xcode внедрили ChatGPT - сколько там, 5 запросов, 10, 15? А дальше нужно опять думать.
Я уже вижу, как люди буквально начинают верить в то, что это и есть программирование. Отчасти они правы, ведь наша задача переводить естественный язык в понятный машине, но лишь отчасти.
Ребята посерьёзнее знают, что шум вокруг ИИ подобен парадоксу Солоу.
Я за взвешенный подход не только потому, что люди глупеют при использовании ИИ, но из-за того, что это порождает посредственность, убивает креативность и ставит специалиста в рамки его же промптов.
Чтобы создать что-то новое, нужно уметь выходить за рамки.
Нужно изобретать.
И что-то новое совсем необязательно очередной велосипед.
Не верьте звону вокруг, помните - ради чего вы вообще в профессии, особенно если кроме денежной мотивации есть что-то ещё.
Создавать всегда ценнее, чем просто копировать. Не каждый шорткат позволит вам быть впереди, иногда это путь в тупик.
😃 iOS Dev
Абстрактная обезьяна, ударяя случайным образом по клавишам пишущей машинки в течение неограниченно долгого времени, рано или поздно напечатает любой наперёд заданный текст.
Если в течение продолжительного времени случайным образом стучать по клавиатуре, то среди набираемого текста будут возникать осмысленные слова, словосочетания и даже предложения.
А на дистанции длиной плюс-минус в бесконечность есть шанс, что она даже напечатает Шекспира.
Массовая истерия с ИИ мне напоминает примерно это же.
Я уже вижу, как готовят списки промптов, и, чёрт возьми, даже продают их: «что, серьёзно?» (тут нужен мем), а на сотнях сайтов вводят курсы
Самим не смешно?
Все создатели ИИ пишут эти советы, чтобы ты, pal, покупал их. Чтобы ты больше верил в то, что чудо-машина за тебя всё сделает.
Даже в Xcode внедрили ChatGPT - сколько там, 5 запросов, 10, 15? А дальше нужно опять думать.
Я уже вижу, как люди буквально начинают верить в то, что это и есть программирование. Отчасти они правы, ведь наша задача переводить естественный язык в понятный машине, но лишь отчасти.
Ребята посерьёзнее знают, что шум вокруг ИИ подобен парадоксу Солоу.
Я за взвешенный подход не только потому, что люди глупеют при использовании ИИ, но из-за того, что это порождает посредственность, убивает креативность и ставит специалиста в рамки его же промптов.
Чтобы создать что-то новое, нужно уметь выходить за рамки.
Нужно изобретать.
И что-то новое совсем необязательно очередной велосипед.
Не верьте звону вокруг, помните - ради чего вы вообще в профессии, особенно если кроме денежной мотивации есть что-то ещё.
Создавать всегда ценнее, чем просто копировать. Не каждый шорткат позволит вам быть впереди, иногда это путь в тупик.
Please open Telegram to view this post
VIEW IN TELEGRAM
5❤🔥35🔥13🍓8 5👍4🤯3🫡1
Как наш подписчик прокачал Swift, улучшив производительность для JSONDecoder+JSONEncoder
Я постоянно говорю о том, как важны метрики скорости/отзывчивости/производительности. Для пользователя это может оказаться решающим фактором при выборе приложения при прочих равных.
Но что делать, если вы нашили проблему в самом Swift? Как быть и куда идти с алгоритмом решения?
👩🎓 Наш читатель знает ответ на этот вопрос, ведь при поиске он буквально прошёл путь от первых гипотез до качественных инженерных решений (обязательно посмотрите его доклад, чтобы понять что не так с Codable, какие оптимизации можно сделать и какие бенчмарки можно чекнуть).
Проблемы парсинга могут стоять особенно остро, и я уверен что буквально каждый iOS-разработчик решал и решает схожие задачи прямо сейчас у себя на проекте.
На конкретном примере:
А буквально на днях его правки утвердили в Apple, что означает потенциальное ускорение JSONDecoder/JSONEncoder буквально в два раза.
📖 Описание проблемы и решения тут, а больше деталей здесь.
😃 iOS Dev
Я постоянно говорю о том, как важны метрики скорости/отзывчивости/производительности. Для пользователя это может оказаться решающим фактором при выборе приложения при прочих равных.
Но что делать, если вы нашили проблему в самом Swift? Как быть и куда идти с алгоритмом решения?
Проблемы парсинга могут стоять особенно остро, и я уверен что буквально каждый iOS-разработчик решал и решает схожие задачи прямо сейчас у себя на проекте.
На конкретном примере:
T.self is _JSONStringDictionaryDecodableMarker.Type
,value as? _JSONStringDictionaryEncodableMarker
иvalue as? _JSONDirectArrayEncodable
очень медленные. И чем больше двоичный файл, тем медленнее эта проверка работает в первый раз для каждой пары class/struct/enum и protocol. И Кристиан решил, что стоит изучить, нужны ли вообще эти проверки когда используются дефолтные keyDecoding/EncodingStrategy.
А буквально на днях его правки утвердили в Apple, что означает потенциальное ускорение JSONDecoder/JSONEncoder буквально в два раза.
📖 Описание проблемы и решения тут, а больше деталей здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥61 18❤🔥10👍4🎉3 3
Какими рабочими инструментами я пользуюсь ежедневно и сколько это всё стоит
Apple Developer Account (personal) - $ 99 в год. У меня аккаунт уже более 10 лет, не жалел ни разу. Есть ещё несколько учёток с доступом для работы, за них естественно платит компания.
Tower для работы с Git (оплачивает компания) - по факту $ 99 в год.
CyberDuck - бесплатный браузер для серверов и облаков с поддержкой FTP, SFTP, Amazon S3, OpenStack Swift, Microsoft Azure & OneDrive, Google Drive и многим другим. При закрытии есть алерт про донат (заплатил один раз $ 10, очень доволен).
Дев-фигма (точно не знаю цену, мне кажется около $ 25 в месяц) - оплачивает компания.
Для пет-проектов:
Лицензия Sketch - 110 евро в год. Всегда считал, что понимание принципов работы с интерфейсом (а не только гайдлайнов в коде) упрощает коммуникацию с командой дизайнеров.
Два акка Notion для бусти - каждый по 200 евро в год (я использую систему прямых инвайтов и отслеживаю доступ с помощью кастомной системы). Возможно, скоро понадобится ещё один, всё зависит от вас ❤️.
DB Browser для SQLite - бесплатно, с поддержкой на Patreon.
Оплата Cloud functions + Firestore для бота, портала и моей системы для трека ревенью от приложений (с вебхуками) - сейчас около 15 евро в месяц.
GitHub и GitHub Actions - пока бесплатно. Раньше юзал BitBucket, но недавно они перешли на лимит в 1ГБ для размера реп, к сожалению, вложиться не получилось, но может оно и к лучшему.
DaisyDisk - утилита для управления и удаления (ради чего и покупал) свободным местом. Стоило приложение $10, но периодически бывают всякие удобные акции и можно даже купить за $5.
Starly - пользуюсь каждый раз при апдейтах и ответах на отзывы на других языках, для меня бесплатно 😀.
ReviewBuddy - для отслеживания позиций в сторах с переключением без выхода из учётки, годовой премиум - $ 10, для меня - смотрите пункт выше.
HandBrake - невероятно удобная бесплатная опенсорсная тулза для конвертации видео практически из любого формата в ряд современных кодеков. Все видео, которые вы видите в канале - я создаю с помощью него.
Fastlane - для генерации скриншотов и аплоада в стор, бесплатно. Но приходилось каждый раз с напильником что-то делать для новых устройств.
А вообще, бывают случаи, когда чего-то не хватает, а на гитхабе пусто или 100 лишних зависимостей и приходится реализовывать самостоятельно, но это уже классика.
Что не связано с работой напрямую: очень люблю слушать музыку, и сейчас у меня две подписки - Apple Music и Яндекс Музыка. Яндекс для меня в тысячу раз удобнее из-за бесконечных прослушиваний вроде моей волны с настройками, но к сожалению практически 70% того, что слушаю - там сейчас недоступно, приходится выкручиваться.
Поделитесь, а без какого инструмента вы не видите современную разработку? Согласны ли с тем, что сейчас подписка на LLM нужна также как интернет или можно обойтись? Может вы пишете инструменты сами?
😃 iOS Dev
Apple Developer Account (personal) - $ 99 в год. У меня аккаунт уже более 10 лет, не жалел ни разу. Есть ещё несколько учёток с доступом для работы, за них естественно платит компания.
Tower для работы с Git (оплачивает компания) - по факту $ 99 в год.
CyberDuck - бесплатный браузер для серверов и облаков с поддержкой FTP, SFTP, Amazon S3, OpenStack Swift, Microsoft Azure & OneDrive, Google Drive и многим другим. При закрытии есть алерт про донат (заплатил один раз $ 10, очень доволен).
Дев-фигма (точно не знаю цену, мне кажется около $ 25 в месяц) - оплачивает компания.
Для пет-проектов:
Лицензия Sketch - 110 евро в год. Всегда считал, что понимание принципов работы с интерфейсом (а не только гайдлайнов в коде) упрощает коммуникацию с командой дизайнеров.
Два акка Notion для бусти - каждый по 200 евро в год (я использую систему прямых инвайтов и отслеживаю доступ с помощью кастомной системы). Возможно, скоро понадобится ещё один, всё зависит от вас ❤️.
DB Browser для SQLite - бесплатно, с поддержкой на Patreon.
Оплата Cloud functions + Firestore для бота, портала и моей системы для трека ревенью от приложений (с вебхуками) - сейчас около 15 евро в месяц.
GitHub и GitHub Actions - пока бесплатно. Раньше юзал BitBucket, но недавно они перешли на лимит в 1ГБ для размера реп, к сожалению, вложиться не получилось, но может оно и к лучшему.
DaisyDisk - утилита для управления и удаления (ради чего и покупал) свободным местом. Стоило приложение $10, но периодически бывают всякие удобные акции и можно даже купить за $5.
Starly - пользуюсь каждый раз при апдейтах и ответах на отзывы на других языках, для меня бесплатно 😀.
ReviewBuddy - для отслеживания позиций в сторах с переключением без выхода из учётки, годовой премиум - $ 10, для меня - смотрите пункт выше.
HandBrake - невероятно удобная бесплатная опенсорсная тулза для конвертации видео практически из любого формата в ряд современных кодеков. Все видео, которые вы видите в канале - я создаю с помощью него.
Fastlane - для генерации скриншотов и аплоада в стор, бесплатно. Но приходилось каждый раз с напильником что-то делать для новых устройств.
А вообще, бывают случаи, когда чего-то не хватает, а на гитхабе пусто или 100 лишних зависимостей и приходится реализовывать самостоятельно, но это уже классика.
Что не связано с работой напрямую: очень люблю слушать музыку, и сейчас у меня две подписки - Apple Music и Яндекс Музыка. Яндекс для меня в тысячу раз удобнее из-за бесконечных прослушиваний вроде моей волны с настройками, но к сожалению практически 70% того, что слушаю - там сейчас недоступно, приходится выкручиваться.
Поделитесь, а без какого инструмента вы не видите современную разработку? Согласны ли с тем, что сейчас подписка на LLM нужна также как интернет или можно обойтись? Может вы пишете инструменты сами?
Please open Telegram to view this post
VIEW IN TELEGRAM
5 20🔥8💯7👍4 3❤🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Импорт файлов в SwiftUI: рабочий пример
Периодически самым разным приложениям может пригодиться опция работы с файлами.
Для этого можно подрубить и системный интерфейс, позволяющий пользователю импортировать сразу несколько.
📖 На этом несложном примере можно посмотреть пример настройки и разобраться с каждым параметром по отдельности.
🛠 А тут доступен исходный код.
😃 iOS Dev
Периодически самым разным приложениям может пригодиться опция работы с файлами.
Для этого можно подрубить и системный интерфейс, позволяющий пользователю импортировать сразу несколько.
📖 На этом несложном примере можно посмотреть пример настройки и разобраться с каждым параметром по отдельности.
🛠 А тут доступен исходный код.
Please open Telegram to view this post
VIEW IN TELEGRAM
5 19 9✍6👍3❤🔥2🔥2👌2
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация перетаскивания элементов в SwiftUI
Применений этого механизма множество: от организации фоток в альбомах до, например, реализации какого-нибудь таск-менеджера вроде трелло.
Подход с использованием стандартных модификаторов onDrag и onDrop имеет ряд преимущество по сравнению с этим вариантом.
Например, когда нам важна работа с данными (а не только визуальное перемещение элементов) и если у нас используются сложные структуры данных.
📖 В этом материале можно посмотреть реализацию этого варианта на реальном примере.
😃 iOS Dev
Применений этого механизма множество: от организации фоток в альбомах до, например, реализации какого-нибудь таск-менеджера вроде трелло.
Подход с использованием стандартных модификаторов onDrag и onDrop имеет ряд преимущество по сравнению с этим вариантом.
Например, когда нам важна работа с данными (а не только визуальное перемещение элементов) и если у нас используются сложные структуры данных.
📖 В этом материале можно посмотреть реализацию этого варианта на реальном примере.
Please open Telegram to view this post
VIEW IN TELEGRAM
7 18🔥10 8👍3💯2✍1🏆1🆒1
😳 AppMigrationKit - новый фреймворк для переноса данных на Android
Экспансия Apple продолжается, буквально только что анонсировали новый фреймворк для экспорта данных приложения на другое устройство или для импорта с другой платформы.
Чтобы участвовать в кроссплатформенной миграции, нужно запилить расширение, которое соответствует протоколу AppmigrationExtension и, по крайней мере, одному из его подпротоколов. Протоколы указывают, импортирует или экспортирует данные приложение (или и то, и другое).
Информации пока немного, но уже есть условия:
📖 Остальная информация - здесь.
😃 iOS Dev
Экспансия Apple продолжается, буквально только что анонсировали новый фреймворк для экспорта данных приложения на другое устройство или для импорта с другой платформы.
Чтобы участвовать в кроссплатформенной миграции, нужно запилить расширение, которое соответствует протоколу AppmigrationExtension и, по крайней мере, одному из его подпротоколов. Протоколы указывают, импортирует или экспортирует данные приложение (или и то, и другое).
Информации пока немного, но уже есть условия:
AppMigrationKit поддерживает только миграцию на и с платформ, отличных от Apple, таких как Android. Система не использует фреймворк для миграции между устройствами iOS или iPadOS. Фреймворк также не имеет функциональности в приложениях iOS, работающих в visionOS или macOS на Apple silicon. Фреймворк игнорирует вызовы из приложений Mac, созданных с помощью Mac Catalyst.
📖 Остальная информация - здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥19 9👏5❤🔥2👍2💯1 1
Навигация в SwiftUI: типы, отличия, разбор неочевидных моментов
На прошлой неделе в отпуске я целиком переписал одно из своих приложений на SwiftUI (уже доступно в сторе), включая несколько довольно сложных флоу с навигацией и столкнулся с несколькими сложностями на этом пути.
Посчитал, что полезно будет собрать в одном месте несколько подходов к реализации, посмотреть на разные опции и закрепить вопросами важные моменты.
В конце-концов, подавляющее большинство у нас до сих пор юзает UIKit в качестве базы и уже к нему добавляется новая верстка на SwiftUI, а вместе с ней и логика переходов.
Навигация ранее многих даже останавливала от использования SwiftUI, но с 16 оси мне кажется, всё стало намного проще.
А почему стало проще? Я собрал три важных раздела, добавил реальных примеров и попробовал задать несколько вопросов на рассуждение.
👩🎓 Уже сейчас можно чекнуть основные типы навигации в SwiftUI (в том числе затронул и пример реализации координатора, который из коробки не так просто завести).
А также вас ждёт список полезных ссылок и новая свежая вопросная секция (в том числе с задачками на рассуждение).
🧠 Что вы получите, подписавшись сегодня:
Подписаться можно на💰 бусти и ⭐️ в телеграме.
😃 iOS Dev
На прошлой неделе в отпуске я целиком переписал одно из своих приложений на SwiftUI (уже доступно в сторе), включая несколько довольно сложных флоу с навигацией и столкнулся с несколькими сложностями на этом пути.
Посчитал, что полезно будет собрать в одном месте несколько подходов к реализации, посмотреть на разные опции и закрепить вопросами важные моменты.
В конце-концов, подавляющее большинство у нас до сих пор юзает UIKit в качестве базы и уже к нему добавляется новая верстка на SwiftUI, а вместе с ней и логика переходов.
Навигация ранее многих даже останавливала от использования SwiftUI, но с 16 оси мне кажется, всё стало намного проще.
А почему стало проще? Я собрал три важных раздела, добавил реальных примеров и попробовал задать несколько вопросов на рассуждение.
А также вас ждёт список полезных ссылок и новая свежая вопросная секция (в том числе с задачками на рассуждение).
➡️ Разбор нескольких сотен вопросов на сложные темы➡️ Вопросы на чтение кода➡️ Многопоточность➡️ DispatchQueue: практические вопросы➡️ Swift Concurrency➡️ Алгоритмы: терминология и примеры➡️ Память: ARC, side table, флаги, утечки➡️ Множество анимаций, шейдеров и не только
Подписаться можно на
Please open Telegram to view this post
VIEW IN TELEGRAM
6 11🔥9 9✍2👍2👏1🍓1🫡1
Цена ошибки
Все хотят писать код без багов, юзать приложения, которые не дрейнят заряд батареи, скролл без пролагов и чтобы «нормально делай - нормально будет».
Все разработчики совершают ошибки, но цена каждого бага может разниться от случая к случаю. От шутки до больших проблем, от надоедливых алертов до лика всех данных.
В частности, есть можество примеров последствий, к которым могут приводить ненавязчивые «и так сойдёт, чекнем в следующем релизе».
Ну, и ещё - вы же не даёте доступ к галерее бесплатным приложениям для редактирования фоток? Если так - стоит перестать немедленно. Есть множество способов, когда ваши фотки могут быть проанализрованы, кошельки сдрейнены с помощью парсинга скриншотов, а лучшие моменты жизни оказаться не только в вашем iCloud.
В iOS было много примеров багов, которые правились пассивно (или не правились вовсе).
Например, в 7 оси можно было скипнуть локскрин с помощью комбинации использования контрол-центра и многократного нажатия на камеру/таймер.
Я намеренно не перечисляю кучу ошибок с календарём, режимом не беспокоить и так далее (кстати, проблему в эпл не устраняли, а попросили подождать неделю).
А сколько было проблем с сообщениями, которые окирпичивали ваши девайсы? Тысячи их.
Кто юзает эпл-технику давно, помнит, как даже пятисекундное видео могло заставить вас ребутать смартфон.
Проблемы с нагревом, случайными ребутами на морозе (классика почти для всех наших регионов в РФ), а из недавнего проблемы с Face ID.
К сожалению, это справедливо и для макоси, на тахо, например - куча историй с дропом/шумом и вообще локом аудио-модуля при использовании симулятора (чинится только через kill). Я уже писал и про способ фикса metal-тулчейна в Xcode.
Безобидные случайные пуш-уведомления вряд ли кому-то вредят. А вот то, что они могут быть не доставлены - уже проблема (например, если вы в крупном аэропорту, выход поменялся на другой терминал, а вы до сих пор в кафе).
На мой взгляд, использовании ИИ только повысит энтропию. Далеко не нужно ходить, вот пример использования и веры в то, что ну ИИ же не допускает ошибок со временем. Или допускает?
Главное, чтобы первый вайб-кодинг баг не стал последним. Хорошо, что это всего лишь банковское приложение, правда? И этот список транзакций не нужно было давать при подаче на визу или проверять у tax-department.
Люди допускают ошибки. Но ИИ - не просто делает то же самое, он снижает вашу внимательность, увеличивает энтропию и усложняет поддержку в будущем.
Я рад, что есть истории упрощения рутины (это здорово), написание тестов - кайф, особенно если они не начинают флаковать, мок-данные - великолепно, очень удобно
Но когда вы делаете что-то серьёзнее, то, от чего могут зависеть в будущем человеческие действия, подумайте дважды, понимаете ли вы всё в «вашем» коде.
Чтобы потом впопыхах не искать Vibe Code Cleanup Specialist (ведь этим специалистом чаще всего будете вы сами).
😃 iOS Dev
Все хотят писать код без багов, юзать приложения, которые не дрейнят заряд батареи, скролл без пролагов и чтобы «нормально делай - нормально будет».
Все разработчики совершают ошибки, но цена каждого бага может разниться от случая к случаю. От шутки до больших проблем, от надоедливых алертов до лика всех данных.
В частности, есть можество примеров последствий, к которым могут приводить ненавязчивые «и так сойдёт, чекнем в следующем релизе».
Ну, и ещё - вы же не даёте доступ к галерее бесплатным приложениям для редактирования фоток? Если так - стоит перестать немедленно. Есть множество способов, когда ваши фотки могут быть проанализрованы, кошельки сдрейнены с помощью парсинга скриншотов, а лучшие моменты жизни оказаться не только в вашем iCloud.
В iOS было много примеров багов, которые правились пассивно (или не правились вовсе).
Например, в 7 оси можно было скипнуть локскрин с помощью комбинации использования контрол-центра и многократного нажатия на камеру/таймер.
Я намеренно не перечисляю кучу ошибок с календарём, режимом не беспокоить и так далее (кстати, проблему в эпл не устраняли, а попросили подождать неделю).
А сколько было проблем с сообщениями, которые окирпичивали ваши девайсы? Тысячи их.
Кто юзает эпл-технику давно, помнит, как даже пятисекундное видео могло заставить вас ребутать смартфон.
Проблемы с нагревом, случайными ребутами на морозе (классика почти для всех наших регионов в РФ), а из недавнего проблемы с Face ID.
К сожалению, это справедливо и для макоси, на тахо, например - куча историй с дропом/шумом и вообще локом аудио-модуля при использовании симулятора (чинится только через kill). Я уже писал и про способ фикса metal-тулчейна в Xcode.
Безобидные случайные пуш-уведомления вряд ли кому-то вредят. А вот то, что они могут быть не доставлены - уже проблема (например, если вы в крупном аэропорту, выход поменялся на другой терминал, а вы до сих пор в кафе).
На мой взгляд, использовании ИИ только повысит энтропию. Далеко не нужно ходить, вот пример использования и веры в то, что ну ИИ же не допускает ошибок со временем. Или допускает?
Главное, чтобы первый вайб-кодинг баг не стал последним. Хорошо, что это всего лишь банковское приложение, правда? И этот список транзакций не нужно было давать при подаче на визу или проверять у tax-department.
Люди допускают ошибки. Но ИИ - не просто делает то же самое, он снижает вашу внимательность, увеличивает энтропию и усложняет поддержку в будущем.
Я рад, что есть истории упрощения рутины (это здорово), написание тестов - кайф, особенно если они не начинают флаковать, мок-данные - великолепно, очень удобно
Но когда вы делаете что-то серьёзнее, то, от чего могут зависеть в будущем человеческие действия, подумайте дважды, понимаете ли вы всё в «вашем» коде.
Чтобы потом впопыхах не искать Vibe Code Cleanup Specialist (ведь этим специалистом чаще всего будете вы сами).
Please open Telegram to view this post
VIEW IN TELEGRAM
19🔥22❤🔥6🍓6 5💯3 3👍2🫡1
Создание кастомных контролов в SwiftUI
По сравнению с UIKit сейчас гораздо проще создать кастомный элемент управления на любой вкус.
Джордан Морган делится интересным подходом к реализации, когда каждый контрол должен соответствовать трём правилам:
1️⃣ Простота освоения: если что-то неочевидно, то люди в целом не будут этим пользоваться.
2️⃣ Контрол должен быть запоминающимся. Если нет очевидной причины использовать системное решение, то стоит дважды подумать, прежде чем делать своё.
3️⃣ Доступность. Если что-то не может быть использовано всеми, возможно этот контрол не нужно делать.
😃 iOS Dev
По сравнению с UIKit сейчас гораздо проще создать кастомный элемент управления на любой вкус.
Джордан Морган делится интересным подходом к реализации, когда каждый контрол должен соответствовать трём правилам:
1️⃣ Простота освоения: если что-то неочевидно, то люди в целом не будут этим пользоваться.
2️⃣ Контрол должен быть запоминающимся. Если нет очевидной причины использовать системное решение, то стоит дважды подумать, прежде чем делать своё.
3️⃣ Доступность. Если что-то не может быть использовано всеми, возможно этот контрол не нужно делать.
Please open Telegram to view this post
VIEW IN TELEGRAM
6 15❤🔥7👍6 3🔥1💯1
This media is not supported in your browser
VIEW IN TELEGRAM
Лёгкая демонстрация эффекта липкости на SwiftUI
📖 Минсанг Чой поделился необычным подходом к реализации (без использования Metal 😉).
🛠 Исходный код доступен на GitHub.
😃 iOS Dev
📖 Минсанг Чой поделился необычным подходом к реализации (без использования Metal 😉).
🛠 Исходный код доступен на GitHub.
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥42 12❤🔥6👍5✍1🤯1