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🔥11 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🔥24❤🔥7🍓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 16❤🔥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🔥52 12❤🔥6👍5✍1🤯1
This media is not supported in your browser
VIEW IN TELEGRAM
Повторяем эффект Apple Intelligence - разбор+код
В новой оси можно было заметить анимированный эффект обводки, который динамически подсвечивает формы и компоненты.
📖 В этой статье автор пробует воссоздать этот эффект в SwiftUI с помощью модификаторов для фона и оверлэя и делится расширением.
🛠 Исходный код доступен здесь.
😃 iOS Dev
В новой оси можно было заметить анимированный эффект обводки, который динамически подсвечивает формы и компоненты.
📖 В этой статье автор пробует воссоздать этот эффект в SwiftUI с помощью модификаторов для фона и оверлэя и делится расширением.
🛠 Исходный код доступен здесь.
Если захотите подключить через SPM, то используйте этот адрес (в самой репе ошибка).
Please open Telegram to view this post
VIEW IN TELEGRAM
5 21 9❤🔥7👍6✍1🔥1
Классическая история
Написание кода - это лишь верхушка айсберга наших задач.
Вот одна из классических ситуаций: вы заложили время на реализацию фичи, успешно сделали требуемое, все покрыли тестами, затем отдали в тестирование QA-команде, а она оказалсь сейчас загружена.
Проходит день, другой, неделя - фича все еще в фазе "на проверку/на тестирование", вы уже погрузились в контекст другой задачи, совсем забыв про то, что делали.
И вот наступает долгожданный момент, когда вашу задачу наконец тестируют и... Возвращают обратно.
Причина банальна ну просто донельзя, например, в изменившихся требованиях (оказывается, что в целом это положительное изменение для пользователей), и вам нужно что-то менять, дорабатывать, а тут ещё и новая ось подоспела, да и версия Swift повысилась. Поэтому нужно апдейтить код к изменившимся условиям, допиливать, повторять процесс снова.
Эта итерация может повториться несколько раз. И окажется, что вообще-то время релизить, все команды уже готовы - а вы доделываете фичу, учитывая окончательные требования. Вот только и они могут поменяться.
Идеальных процессов не бывает - бывают лишь многократно улучшенные. Разработка и создание проектов - это живой организм, пусть на некоторых он и может действовать как кордицепс, проявляя себя в разных симптомах.
Умение адаптироваться к постоянным изменениям, использовать те инструменты, которые актуальны сейчас, соглашаться с тем, что иногда фичи действительно могут быть выпилены, даже когда на них потрачено много сил - лишь одна часть из того, что включает наша работа.
Об этом не пишут популярные блогеры, которые хотят нажиться на желающих влететь в разработку, быстро раскрутиться и обещающих мир в розовых очках.
Здесь всё сложнее.
😃 iOS Dev
Написание кода - это лишь верхушка айсберга наших задач.
Вот одна из классических ситуаций: вы заложили время на реализацию фичи, успешно сделали требуемое, все покрыли тестами, затем отдали в тестирование QA-команде, а она оказалсь сейчас загружена.
Проходит день, другой, неделя - фича все еще в фазе "на проверку/на тестирование", вы уже погрузились в контекст другой задачи, совсем забыв про то, что делали.
И вот наступает долгожданный момент, когда вашу задачу наконец тестируют и... Возвращают обратно.
Причина банальна ну просто донельзя, например, в изменившихся требованиях (оказывается, что в целом это положительное изменение для пользователей), и вам нужно что-то менять, дорабатывать, а тут ещё и новая ось подоспела, да и версия Swift повысилась. Поэтому нужно апдейтить код к изменившимся условиям, допиливать, повторять процесс снова.
Эта итерация может повториться несколько раз. И окажется, что вообще-то время релизить, все команды уже готовы - а вы доделываете фичу, учитывая окончательные требования. Вот только и они могут поменяться.
Идеальных процессов не бывает - бывают лишь многократно улучшенные. Разработка и создание проектов - это живой организм, пусть на некоторых он и может действовать как кордицепс, проявляя себя в разных симптомах.
Умение адаптироваться к постоянным изменениям, использовать те инструменты, которые актуальны сейчас, соглашаться с тем, что иногда фичи действительно могут быть выпилены, даже когда на них потрачено много сил - лишь одна часть из того, что включает наша работа.
Об этом не пишут популярные блогеры, которые хотят нажиться на желающих влететь в разработку, быстро раскрутиться и обещающих мир в розовых очках.
Здесь всё сложнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
9💯23 9❤🔥6👍3🔥3🏆3🤯1
Кэширование изображений в SwiftUI
Ещё в 15 оси появилась полезнейшая
И как раз в таких ситуациях не обойтись без кэширования.
Часто вижу, как ради такого ребята тащат лишние зависимости, но всё гораздо проще, особенно если нам достаточен кэш только в памяти (хотя для записи на диск всё не то чтобы и усложняется).
📖 В этой статье рассматривается полезный для новичков способ работы с
Напомню и про эти материалы:
➡️ Загрузка UIImage с диска: разбор сценариев и импакт на память
➡️ Контроль и оптимизация процесса декодирования изображений в iOS
😃 iOS Dev
Ещё в 15 оси появилась полезнейшая
AsyncImage
(можно грузить изображения без лока интерфейса), но есть небольшая загвоздка: SwiftUI, например при скролле вверх-вниз картинка будет загружена заново.И как раз в таких ситуациях не обойтись без кэширования.
Часто вижу, как ради такого ребята тащат лишние зависимости, но всё гораздо проще, особенно если нам достаточен кэш только в памяти (хотя для записи на диск всё не то чтобы и усложняется).
📖 В этой статье рассматривается полезный для новичков способ работы с
NSCache
и его настройка.Напомню и про эти материалы:
Please open Telegram to view this post
VIEW IN TELEGRAM
11 22👍8✍4🔥4 2👌1🏆1🤗1🆒1
Memory Integrity Enforcement — новая технология безопасности от Apple
Наши девайсы могут содержать большой объем конфиденциальных данных, требующих защиты.
Если приложение содержит уязвимости, то ими могут воспользоваться для доступа к данным в вашем приложении (или расширении).
Многие команды проходят регулярные аудиты безопасности, и наверняка используют популярные проверки на джейл или наличие некоторых процессов.
Совсем недавно в Xcode появилась опция для Enhanced Security (можно включить в проекте) для устранения многих распространённых проблем.
Так вот, вышла целая сессия, в которой можно не только узнать, как внедрить MIE в приложение, но и как также устранить трудно обнаруживаемые проблемы с памятью в коде.
📺 Сессию можно посмотреть на сайте Apple или📺 в Youtube.
📖 Дополнительно разбор доступен вот тут.
😃 iOS Dev
Наши девайсы могут содержать большой объем конфиденциальных данных, требующих защиты.
Если приложение содержит уязвимости, то ими могут воспользоваться для доступа к данным в вашем приложении (или расширении).
Многие команды проходят регулярные аудиты безопасности, и наверняка используют популярные проверки на джейл или наличие некоторых процессов.
Совсем недавно в Xcode появилась опция для Enhanced Security (можно включить в проекте) для устранения многих распространённых проблем.
Так вот, вышла целая сессия, в которой можно не только узнать, как внедрить MIE в приложение, но и как также устранить трудно обнаруживаемые проблемы с памятью в коде.
📺 Сессию можно посмотреть на сайте Apple или
📖 Дополнительно разбор доступен вот тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
8 13❤🔥7 7🔥5✍1👍1👏1💯1
Самая сложная задача
В разработке есть множество областей, где задачи могут уходить буквально на несколько уровней вглубь и некая простота на первый взгляд может обернуться приключением в несколько спринтов.
Поэтому деление на создание анимаций/работу с изображениями/проектирование условно сетевого слоя или работу с шифрованием сложно измерить по конкретной шкале. Всегда будут вопросы в стиле «а что, если».
Я вижу заблуждения даже среди новичков, которые считают, что анимации это простая задача, но забывают, что буквально благодаря буквально одной фишке, например, Clear в своё время стал приложением номер один среди заметок. А множество обывателей пересело с андроид на iOS благодаря цельности экосистемы и видению дизайн-команд Apple.
Конечно, кто-то останавливается на стадии добавления пары модификаторов и этого может хватать для средненького приложения.
Но когда вы создаёте диаграммы для телеги или проектируете сложную комбинированную анимацию для переходов - это всегда будет невероятным плюсом, тем - ради чего пользователи сделают выбор в сторону вашего приложения или продукта.
Под капотом часто будет сложная математика, будь то алгоритмы пересечения (или объединения) отрезков для тех же графиков или же расчёт таймингов при анимациях. Практически все крупные компании реализуют свои компоненты для таких задач (от бирж с их невероятным количеством апдейтов в реалтайме до визуализаций в музыкальных приложениях).
Проблемы с производительностью могут быть и при реализации скролла в чате, и, например, при создании сложного текстового редактора - поверьте, я знаю, о чём говорю.
Уровень сложности не зависит от предметной области, а формируется количеством входных требований и детализацией покрытия кейсов использования.
Именно поэтому регулярка для почты - задача не на одну минуту, а работа со временем может вас удивить.
😃 iOS Dev
В разработке есть множество областей, где задачи могут уходить буквально на несколько уровней вглубь и некая простота на первый взгляд может обернуться приключением в несколько спринтов.
Поэтому деление на создание анимаций/работу с изображениями/проектирование условно сетевого слоя или работу с шифрованием сложно измерить по конкретной шкале. Всегда будут вопросы в стиле «а что, если».
Я вижу заблуждения даже среди новичков, которые считают, что анимации это простая задача, но забывают, что буквально благодаря буквально одной фишке, например, Clear в своё время стал приложением номер один среди заметок. А множество обывателей пересело с андроид на iOS благодаря цельности экосистемы и видению дизайн-команд Apple.
Конечно, кто-то останавливается на стадии добавления пары модификаторов и этого может хватать для средненького приложения.
Но когда вы создаёте диаграммы для телеги или проектируете сложную комбинированную анимацию для переходов - это всегда будет невероятным плюсом, тем - ради чего пользователи сделают выбор в сторону вашего приложения или продукта.
Конечно, если вы не монополист и у пользователей буквально нет альтернатив регистрации в вашем продукте.
Под капотом часто будет сложная математика, будь то алгоритмы пересечения (или объединения) отрезков для тех же графиков или же расчёт таймингов при анимациях. Практически все крупные компании реализуют свои компоненты для таких задач (от бирж с их невероятным количеством апдейтов в реалтайме до визуализаций в музыкальных приложениях).
Проблемы с производительностью могут быть и при реализации скролла в чате, и, например, при создании сложного текстового редактора - поверьте, я знаю, о чём говорю.
Уровень сложности не зависит от предметной области, а формируется количеством входных требований и детализацией покрытия кейсов использования.
Именно поэтому регулярка для почты - задача не на одну минуту, а работа со временем может вас удивить.
Please open Telegram to view this post
VIEW IN TELEGRAM
8 16🔥8❤🔥5🏆2⚡1✍1👍1👏1🍓1