iOS Dev
Какую минимальную версию iOS вы поддерживаете на вашем рабочем проекте?
Какую минимальную iOS на рабочем проекте вы поддерживаете в 2026 году?
Anonymous Poll
5%
26
7%
18
14%
17
31%
16
31%
15
4%
14
7%
13 (или ниже)
26✍11☃2👍2🔥2👏2🤯2 2🏆1🍾1🎄1
This media is not supported in your browser
VIEW IN TELEGRAM
Продвинутые графики на SwiftUI без сторонних фреймворков (+ зум и анимации)
Удобная и приятная анимация всё ещё важны при прочих равных параметрах. Графики имеют решающие значения в инвестиционных продуктах и биржах, в частности.
Например, когда-то Telegram проводил один из самых сложных конкурсов (c бюджетом овер $ 100 000), в которых соревновались за производительность десятки и сотни разработчиков.
Но то в прошлом, и сейчас уже даже в iOS из-под капота можно достать сколь-нибудь приемлемые и легкие в настройке опции.
Я постарался объединить лучшее из того, что доступно прямо сейчас, и описать на примере, как можно реализовать подобное в течение пары часов, если знать, куда двигаться.
✅ Код реализации уже доступен 💰 тут и ⭐️ тут.
Больше про создание графиков в открытом доступе можно почитать вот здесь:
😃 iOS Dev
Удобная и приятная анимация всё ещё важны при прочих равных параметрах. Графики имеют решающие значения в инвестиционных продуктах и биржах, в частности.
Например, когда-то Telegram проводил один из самых сложных конкурсов (c бюджетом овер $ 100 000), в которых соревновались за производительность десятки и сотни разработчиков.
Но то в прошлом, и сейчас уже даже в iOS из-под капота можно достать сколь-нибудь приемлемые и легкие в настройке опции.
Я постарался объединить лучшее из того, что доступно прямо сейчас, и описать на примере, как можно реализовать подобное в течение пары часов, если знать, куда двигаться.
Больше про создание графиков в открытом доступе можно почитать вот здесь:
🔗 Создание гистограмм с помощью SwiftUI Charts в iOS 16🔗 Комбинирование разных типов диаграмм для создания уникального дизайна🔗 Освоение диаграмм в SwiftUI: круговые и кольцевые диаграммы🔗 Swift Charts и реализация скролла на графиках
Please open Telegram to view this post
VIEW IN TELEGRAM
20🔥18 7❤🔥5🤩3👍2🏆1 1
Dime - опенсорсный трекер финансов с учетом гайдлайнов Apple
Из моего личного опыта могу сделать вывод, что чаще всего разработчики делают свои первые пет-проекты одного из этих видов: учет финансов, погодное приложение, трекер привычек или заметки.
Даже в этих несложных (но это только на первый взгляд) темах может появиться шедевр вроде Clear.
Да и в тестовых заданиях можно встретить самые разные вариации таких заданий на 4-6 часов работы.
Делюсь приложением с открытым кодом (⭐️ 1 500 звёзд), в котором можно посмотреть на один из подходов.
🛠 Dime на GitHub (есть пример работы с виджетами, синхронизацией iCloud, работа с темами и базовым подходом и многим другим).
😃 iOS Dev
Из моего личного опыта могу сделать вывод, что чаще всего разработчики делают свои первые пет-проекты одного из этих видов: учет финансов, погодное приложение, трекер привычек или заметки.
Даже в этих несложных (но это только на первый взгляд) темах может появиться шедевр вроде Clear.
Да и в тестовых заданиях можно встретить самые разные вариации таких заданий на 4-6 часов работы.
Делюсь приложением с открытым кодом (⭐️ 1 500 звёзд), в котором можно посмотреть на один из подходов.
🛠 Dime на GitHub (есть пример работы с виджетами, синхронизацией iCloud, работа с темами и базовым подходом и многим другим).
Please open Telegram to view this post
VIEW IN TELEGRAM
6 26👍16👏5✍2🔥2🤩2🤯1
Углубленный анализ миграции данных SwiftData
По мнению Донни Уолша (и с ним сложно не согласиться) легкие миграции хорошо работают, когда не вводятся новые требования: добавление опциональных полей, их удаление или переименование.
Но в ситуации, когда нам нужно ввести новое опциональное свойство, изменить типы или в боле сложном кейсе — мы попадаем в область ручной миграции, и на помощь может прийти SchemaMigrationPlan с настраиваемыми этапами.
📖 В этой статье рассмотрено несколько таких ситуаций:
🔘 Как внедрять версии с помощью VersionedSchema
🔘 Когда следует вводить новые версии схемы
🔘 Когда SwiftData может выполнять миграцию автоматически, а когда стоит использовать
🔘 Как обрабатывать особо сложные миграции
🔗 А вот здесь есть пример от Apple, как интегрировать SwiftData в свой проект.
😃 iOS Dev
По мнению Донни Уолша (и с ним сложно не согласиться) легкие миграции хорошо работают, когда не вводятся новые требования: добавление опциональных полей, их удаление или переименование.
Но в ситуации, когда нам нужно ввести новое опциональное свойство, изменить типы или в боле сложном кейсе — мы попадаем в область ручной миграции, и на помощь может прийти SchemaMigrationPlan с настраиваемыми этапами.
📖 В этой статье рассмотрено несколько таких ситуаций:
🔘 Как внедрять версии с помощью VersionedSchema
🔘 Когда следует вводить новые версии схемы
🔘 Когда SwiftData может выполнять миграцию автоматически, а когда стоит использовать
SchemaMigrationPlan и MigrationStage🔘 Как обрабатывать особо сложные миграции
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥8 5❤🔥4👍3🏆2☃1👏1🎄1
В App Store обнаружили утечки пользовательских данных в сотнях приложений, связанных с ИИ
Из 198 перечисленных на данный момент приложений 196 раскрывают пользовательские данные.
Например, приложение «Chat & Ask AI» допустило утчеку 406 миллионов записей от более чем 18 миллионов пользователей.
Категории, в которых находятся потенциально опасные приложения: Образование, Развлечения, Здоровье и Соцсети.
➡️ Полностью список можно посмотреть здесь.
😃 iOS Dev
Из 198 перечисленных на данный момент приложений 196 раскрывают пользовательские данные.
Например, приложение «Chat & Ask AI» допустило утчеку 406 миллионов записей от более чем 18 миллионов пользователей.
Категории, в которых находятся потенциально опасные приложения: Образование, Развлечения, Здоровье и Соцсети.
Please open Telegram to view this post
VIEW IN TELEGRAM
6🤯17🔥6🫡6 5👍2 2🏆1
iOS Dev
🚀Skip с сегодняшнего дня стал бесплатным и опенсорсным
До текущего момента создания приложений в Skip требовалась платная подписка и лицензионный ключ.
Что это значит для тех, кто хотел или уже пользуется скипом?
Больше нет лицензионных ключей, нет лицензионных соглашений для конечных пользователей, нет пробного или ознакомительного периода.
🛠 Открыт исходный код движка Skipstone, а сам сайт уже переезжает на skip.dev.
📖 Целиком заявление создателей можно почитать здесь.
😃 iOS Dev
До текущего момента создания приложений в Skip требовалась платная подписка и лицензионный ключ.
Чтобы сохранить доверие сообщества разработчиков и добиться массового распространения, Skip нуждается в полностью свободной и открытой базе. Даже если основная команда не сможет уделять время развитию, сообщество сможет продолжать поддерживать технологию и приложения, которые от неё зависят.
Что это значит для тех, кто хотел или уже пользуется скипом?
Больше нет лицензионных ключей, нет лицензионных соглашений для конечных пользователей, нет пробного или ознакомительного периода.
🛠 Открыт исходный код движка Skipstone, а сам сайт уже переезжает на skip.dev.
📖 Целиком заявление создателей можно почитать здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥27 15 6❤🔥4👍2💯2☃1🏆1🎅1
This media is not supported in your browser
VIEW IN TELEGRAM
Создаём музыку бесплатно: как я упаковал MusicGen в нативное приложение для MacOS (Swift + Python и щепотка шейдеров)
Вчера холодным зимним вечером смотрел ролик на ютубе, услышал ненавязчивую музыку и вспомнил про опрос в нашем канале.
Стало интересно, можно ли создать собственный генераторбез регистрации и смс без подписок, и короткий ответ - да, можно.
Простой рецепт, из которого можно создать более-менее приемлемый вариант:
Проблемы, которые пришлось решать:
Оригинальный скрипт юзал библиотеку scipy для сохранения звука (а это потенциально дофига зависимостей). В качестве норм решения прокатило переписать модуль сохранения звука audio.pyна чистом Python (wave + numpy).
Упаковка для приложения:
Вся магия внутри самого приложения происходит с помощью Process:
В итоге остановился на 4 доступных параметрах (можно меньше, больше к сожалению, вряд ли):
В качестве промпта можно использовать любой вариант музыки, который вам нравится, для стиля в целом тоже. У меня, например, сейчас несколько пресетов: от саундтреков до Lo-Fi.
С длительностью все сложнее: есть и ограничения модели, и сам трансформ происходит не слишком понятно на первый взгляд, модуль принимает шаги:
И вообще максимальная длительность ограничена типом модели, так что тут тоже пришлось немного подкрутить.
Так или иначе, в итоге получилось завести проект, который генерит безлимитно музыку без использования сторонних решений, доп. зависимостей, подписок и чего-либо ещё.
На видосе приложил, как получившийся проект работает в реальном времени (у меня M1 Max).
🛠 Расширенная инструкция и пример кода (а также все необходимые скрипты для настройки):
💰 На бусти и ⭐️ в телеграме.
🎹 Примеры музыки: в комментариях.
😃 iOS Dev
Вчера холодным зимним вечером смотрел ролик на ютубе, услышал ненавязчивую музыку и вспомнил про опрос в нашем канале.
Стало интересно, можно ли создать собственный генератор
Простой рецепт, из которого можно создать более-менее приемлемый вариант:
Движок - Python + Apple MLX (кстати, сначала пробовал без этого и очевидно упёрся в проблему использования GPU на Apple Silicon).
В качестве модели заттачил MusicGen Small (можно потяжелее).
Обёртку запилил на SwiftUI и добавил немного красоты для фона.
Проблемы, которые пришлось решать:
Оригинальный скрипт юзал библиотеку scipy для сохранения звука (а это потенциально дофига зависимостей). В качестве норм решения прокатило переписать модуль сохранения звука audio.pyна чистом Python (wave + numpy).
Упаковка для приложения:
С этим ожидаемо было больше всего проблем - начиная от того, что чёртов питон постоянно терял файлы при импорте или вовсе зависимости были кривыми, пришлось с напильником фигачить по очереди каждый вручную (в итоге просто скопировал с репы).
Вся магия внутри самого приложения происходит с помощью Process:
В итоге остановился на 4 доступных параметрах (можно меньше, больше к сожалению, вряд ли):
process.arguments = [promptText, selectedStyle, outputURL.path, durationString]В качестве промпта можно использовать любой вариант музыки, который вам нравится, для стиля в целом тоже. У меня, например, сейчас несколько пресетов: от саундтреков до Lo-Fi.
С длительностью все сложнее: есть и ограничения модели, и сам трансформ происходит не слишком понятно на первый взгляд, модуль принимает шаги:
steps = int(duration_sec * 50). И вообще максимальная длительность ограничена типом модели, так что тут тоже пришлось немного подкрутить.
Так или иначе, в итоге получилось завести проект, который генерит безлимитно музыку без использования сторонних решений, доп. зависимостей, подписок и чего-либо ещё.
На видосе приложил, как получившийся проект работает в реальном времени (у меня M1 Max).
🛠 Расширенная инструкция и пример кода (а также все необходимые скрипты для настройки):
🎹 Примеры музыки: в комментариях.
Please open Telegram to view this post
VIEW IN TELEGRAM
20 20🔥10🏆7❤🔥3👍3🎅2🎄1🆒1
This media is not supported in your browser
VIEW IN TELEGRAM
Изучение жестов в SwiftUI: комбинации, практика, примеры и код
Жесты позволяют создавать живые, отзывчивые и понятные каждому интерфейсы. Простые добавить несложно, но вот в комбинациях запутаться довольно просто. Важно понимать не только как они работают в связке, но и какие подводные камни возможны при поворотах или свайпах.
Я написал большую статью с примерами, которую структурировал на несколько важных разделов, с которых рекомендовал бы начать знакомиться с системой жестов не только новичкам, но и тем, у кого возникают сложности при их адаптации:
А ещё я реализовал удобное тестовое приложение, на котором можно посмотреть каждый пример в отдельности.
Весь код, все примеры и многое другое:💰 На бусти и ⭐️ в телеграме.
🧠 Что вы получите ещё, подписавшись:
😃 iOS Dev
Жесты позволяют создавать живые, отзывчивые и понятные каждому интерфейсы. Простые добавить несложно, но вот в комбинациях запутаться довольно просто. Важно понимать не только как они работают в связке, но и какие подводные камни возможны при поворотах или свайпах.
Я написал большую статью с примерами, которую структурировал на несколько важных разделов, с которых рекомендовал бы начать знакомиться с системой жестов не только новичкам, но и тем, у кого возникают сложности при их адаптации:
🔘 Основы работы с жестами (от простых нажатия и удержания до поворотов и перетаскивания).
🔘 Комбинации: перетаскивание и масштабирование, вращение и перемещение.
🔘 Последовательности жестов, расстановка приоритетов.
🔘 Практические примеры: тут классическая карусель и пример карточки с раскрытием в эпловском стиле.
🔘 Работа с координатами и продвинутые техники.
🔘 Разбор очевидных и не столь понятных ошибок (про возможное дергание при перетаскивании и так далее).
🔘 Доступность.
А ещё я реализовал удобное тестовое приложение, на котором можно посмотреть каждый пример в отдельности.
Весь код, все примеры и многое другое:
➡️ Карта изучения Swift Concurrency (примеры, разбор каждого уровня, полезные советы)➡️ Вопросы на чтение кода (несколько уровней: простых, посложнее)➡️ Многопоточность➡️ DispatchQueue: практические вопросы➡️ Swift Concurrency➡️ Алгоритмы: терминология и примеры + путь Яндекс Coderun (разбор нескольких десятков задач)➡️ Память: ARC, side table, флаги, утечки➡️ Результаты зарплатного опроса в нашем канале + сравнение с европейскими реальными зарплатами в iOS➡️ Разбор подходов к анимациям и лучшие паттерны (классические способы, Metal, комбинации - все подкреплено кодом)➡️ Утечки памяти в Swift: что с ними делать, как предотвратить?➡️ Навигация в SwiftUI: типы, отличия, разбор неочевидных моментов
Please open Telegram to view this post
VIEW IN TELEGRAM
24🔥15👍8🤯4 3❤🔥2 1
Улучшение удобства использования библиотек C в Swift
В экосистеме ПО есть огромное количество интересных, полезных и даже забавных библиотек C.
Хотя у нас всегда есть опция пойти и переписать эти библиотеки на Swift, обычно в этом нет необходимости, поскольку Swift обеспечивает прямую совместимость с C.
После небольшой настройки можно юзать существующие библиотеки C прямо из нашего Swift-кода.
Дуг Грегор, который работает над компилятором и рантаймом Swift, написал огромную детальную статью на официальном сайте, в которой поделился примерами такого использования, особенностями построения карты модулей и подводными камнями, которые могут возникнуть.
📖 Целиком руководство доступно здесь.
😃 iOS Dev
В экосистеме ПО есть огромное количество интересных, полезных и даже забавных библиотек C.
Хотя у нас всегда есть опция пойти и переписать эти библиотеки на Swift, обычно в этом нет необходимости, поскольку Swift обеспечивает прямую совместимость с C.
После небольшой настройки можно юзать существующие библиотеки C прямо из нашего Swift-кода.
Дуг Грегор, который работает над компилятором и рантаймом Swift, написал огромную детальную статью на официальном сайте, в которой поделился примерами такого использования, особенностями построения карты модулей и подводными камнями, которые могут возникнуть.
📖 Целиком руководство доступно здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
9 12🔥7👏6👍3💯2🆒1 1
🔥 Приложения для Windows можно будет писать на Swift
Буквально несколько часов назад была анонсирована новая рабочая группа Windows!
Windows уже является официально поддерживаемой платформой (с 2020 года), и с тех пор был достигнут значительный прогресс.
Новая рабочая группа сосредоточится на следующих задачах:
• Улучшение поддержки Windows для официального дистрибутива Swift.
• Рекомендации по улучшению основных пакетов Swift, таких как Foundation и Dispatch.
• Рекомендации Swift относительно будущей поддержки Windows.
• Выявление и рекомендация лучших практик для соединения Swift и Windows API, а также свифтовых либ с приложениями Windows.
🗓 Напомню, что в прошлом году аналогичная группа была создана и для Android.
😃 iOS Dev
Буквально несколько часов назад была анонсирована новая рабочая группа Windows!
Windows уже является официально поддерживаемой платформой (с 2020 года), и с тех пор был достигнут значительный прогресс.
Новая рабочая группа сосредоточится на следующих задачах:
• Улучшение поддержки Windows для официального дистрибутива Swift.
• Рекомендации по улучшению основных пакетов Swift, таких как Foundation и Dispatch.
• Рекомендации Swift относительно будущей поддержки Windows.
• Выявление и рекомендация лучших практик для соединения Swift и Windows API, а также свифтовых либ с приложениями Windows.
🗓 Напомню, что в прошлом году аналогичная группа была создана и для Android.
Please open Telegram to view this post
VIEW IN TELEGRAM
17🔥42 8👍7🆒3👏2🏆1🫡1
Swift Community Showcase - интересные проекты и достижения экосистемы
На форумах Apple разработчики регулярно делятся своими примерами проектов, подходами и тем, как можно использовать привычные инструменты в сложных системах.
Делюсь подборкой за прошедший месяц.
🔗 A little brother for Swift Argument Parser
Легковесный альтернативный парсер аргументов командной строки
🔗 Swift Context Management
Для более эффективного понимания лимитов токенов и работы с контекстом в приложениях на Swift
🔗 Modern DI for Swift Concurrency
Современная библиотека DI, разработанная для Swift Concurrency и SwiftUI
🔗 monocle
CLI для агентов, позволяет проверять символы Swift через SourceKit-LSP
🔗 TaylorTorch: современный Swift-враппер for LibTorch
Позволяет юзать всю мощь PyTorch для нативных Swift-приложений. В следующий раз попробую его использовать👩🎓
Остальные проекты можно посмотреть на скриншоте.
😃 iOS Dev
На форумах Apple разработчики регулярно делятся своими примерами проектов, подходами и тем, как можно использовать привычные инструменты в сложных системах.
Делюсь подборкой за прошедший месяц.
Легковесный альтернативный парсер аргументов командной строки
Для более эффективного понимания лимитов токенов и работы с контекстом в приложениях на Swift
Современная библиотека DI, разработанная для Swift Concurrency и SwiftUI
CLI для агентов, позволяет проверять символы Swift через SourceKit-LSP
Позволяет юзать всю мощь PyTorch для нативных Swift-приложений. В следующий раз попробую его использовать
Остальные проекты можно посмотреть на скриншоте.
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥17 10💯4✍1👍1👏1🤯1🏆1
Swift Actors: 6 подводных камней, которые подстерегают даже опытных разработчиков
Когда Apple представила акторы, среди обещаний особенно выделялось: «конец проблемам с гонками данных». Реальность оказалась гораздо сложнее.
После ряда экспериментов с акторами Рафал Дубиэль составил список ловушек, в которые регулярно попадают даже опытные разработчики.
Некоторые из них плохо документированы, а другие активно вводят в заблуждение.
📖 Целиком статью можно прочитать вот тут.
😃 iOS Dev
Когда Apple представила акторы, среди обещаний особенно выделялось: «конец проблемам с гонками данных». Реальность оказалась гораздо сложнее.
После ряда экспериментов с акторами Рафал Дубиэль составил список ловушек, в которые регулярно попадают даже опытные разработчики.
Некоторые из них плохо документированы, а другие активно вводят в заблуждение.
📖 Целиком статью можно прочитать вот тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥24 11✍4👏2💯2👍1
Универсальность использования Tasks в Swift
Если вы уже давно занимаетесь разработкой для платформ Apple, ваше понимание «параллелизма» может уходить корнями к эпохе Grand Central Dispatch. А если вы в разработке для яблочных девайсов ещё дольше, то как заметил Макс Зелеманн, то даже и к pthreads.
В этой небольшой, но интересной статье рассматриваются моменты, которые могут быть не совсем очевидны при работе с тасками.
📖 Вот выводы, к которым в итоге пришёл автор статьи (но рекомендую посмотреть и сам пост):
😃 iOS Dev
Если вы уже давно занимаетесь разработкой для платформ Apple, ваше понимание «параллелизма» может уходить корнями к эпохе Grand Central Dispatch. А если вы в разработке для яблочных девайсов ещё дольше, то как заметил Макс Зелеманн, то даже и к pthreads.
В этой небольшой, но интересной статье рассматриваются моменты, которые могут быть не совсем очевидны при работе с тасками.
📖 Вот выводы, к которым в итоге пришёл автор статьи (но рекомендую посмотреть и сам пост):
➡️ В своей простейшей форме они представляют собой замыкания для длительных операций в фоне.➡️ Они предоставляют асинхронный контекст, позволяя вызывать асинхронный код.➡️ Если хранить дескриптор, можно ждать завершения в другом месте или отменить задачу вовсе, когда она больше не нужна.➡️ Если вы передаете дескриптор задачи, он служит в качестве промиса (будущего) для значения результата.➡️ Поскольку задачи являются потокобезопасными, они также служат в качестве механизмов синхронизации вокруг их комплишна и результата.
Please open Telegram to view this post
VIEW IN TELEGRAM
19🔥11 8👏6👍3
Разбор архитектуры SwiftUI в 2025 году: MVVM, MVC или TCA
Выбор правильной архитектуры для SwiftUI аналогичен выбору правильной программы тренировки.
Именно с такими словами выступает автор следующей статьи.
📖 А его взгляд на то, что стоит использовать - можно почитать вот здесь.
😃 iOS Dev
Выбор правильной архитектуры для SwiftUI аналогичен выбору правильной программы тренировки.
Каждый эксперт утверждает, что его метод лучший, но если попробовать одно или другое руководство, есть ненулевой шанс, что внезапно ваш проект разрастётся неизвестно во что.
Именно с такими словами выступает автор следующей статьи.
📖 А его взгляд на то, что стоит использовать - можно почитать вот здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
11🔥22 9👏4 2⚡1👍1💯1🏆1
iOS Dev
Просто напоминание, в Матрице плохих парней называли агентами. 25 лет спустя они уже здесь.
Тем временем в Xcode 26.3 рассказали, как работать с агентами
В новом видео за 5 минут рассказывают, как юзать OpenAI Codex и Claude Agent, для совместной работы над сложными многоэтапными задачами.
Например, как Xcode позволяет агентам создавать проекты, запускать тесты и искать документацию Apple — и все это через Model Context Protocol.
📺 А вот и ссылка!
😃 iOS Dev
В новом видео за 5 минут рассказывают, как юзать OpenAI Codex и Claude Agent, для совместной работы над сложными многоэтапными задачами.
Например, как Xcode позволяет агентам создавать проекты, запускать тесты и искать документацию Apple — и все это через Model Context Protocol.
📺 А вот и ссылка!
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥22👍9 6👏3❤🔥1🆒1