This media is not supported in your browser
VIEW IN TELEGRAM
Создание интерактивного виджета с использованием App Intents
📖 В этом несложном примере можно узнать, как создать виджет для увеличения глобального счетчика, используемого вместе с таргет-приложением.
📖 Больше про App Intents можно узнать в официальной документации (iOS 16+).
Кстати, если вам нужно использовать больше, чем один виджет, то в канале есть пост и про такую ситуацию.
😃 iOS Dev
📖 В этом несложном примере можно узнать, как создать виджет для увеличения глобального счетчика, используемого вместе с таргет-приложением.
📖 Больше про App Intents можно узнать в официальной документации (iOS 16+).
Кстати, если вам нужно использовать больше, чем один виджет, то в канале есть пост и про такую ситуацию.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥5❤2🏆1🆒1
This media is not supported in your browser
VIEW IN TELEGRAM
Концепт приложения для visionOS в связке с Figma (обновления в реальном времени)
Ещё одна необычная идея от Alex Widua (вы только посмотрите на его прошлый прототип!).
Во время работы с
Удивительно, но работает очень даже неплохо🤩.
🛠 Тут можно посмотреть на реализацию анимации сетки при обнаружении фрейма.
😃 iOS Dev
Ещё одна необычная идея от Alex Widua (вы только посмотрите на его прошлый прототип!).
Во время работы с
visionOS
он придумал такую связку: плагин фигмы общается с приложением iOS через WebSockets
. Все фреймы Figma загружаются как изображения AR, которые может распознать ARKit. Удивительно, но работает очень даже неплохо🤩.
🛠 Тут можно посмотреть на реализацию анимации сетки при обнаружении фрейма.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍4🏆2❤1👏1🤔1🎉1🤩1
Зарплаты мобильных разработчиков по данным Хабр Карьера
Появились результаты нового исследования, в котором есть распределение вакансий и по квалификации.
Самые популярные разработчики мобильных приложений — мидлы и сеньоры, доли вакансий для них одинаковые — по 45,2%.
Реже ищут лидов — доля 7,1%. Для джунов вакансий меньше всего: 2,5%.
💰По цифрам, которые оставили сами разработчики, можно сделать выводы, что джуны в среднем получают 110 000 ₽, а лиды — 430 000 ₽.
😃 iOS Dev
Появились результаты нового исследования, в котором есть распределение вакансий и по квалификации.
Самые популярные разработчики мобильных приложений — мидлы и сеньоры, доли вакансий для них одинаковые — по 45,2%.
Реже ищут лидов — доля 7,1%. Для джунов вакансий меньше всего: 2,5%.
💰По цифрам, которые оставили сами разработчики, можно сделать выводы, что джуны в среднем получают 110 000 ₽, а лиды — 430 000 ₽.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🤣13🔥10🫡5❤3😐3😢2🆒2👏1🏆1
Swift OpenAPI Generator: генерация кода для клиента и сервера с помощью инструмента Apple
Проект ещё на стадии разработки, но, несмотря на то, что до сих пор нет даже версии 1.0, некоторые опенсорс-решения уже стопнули разработку своих репозиториев в пользу эпловского продукта.
📖 В этом материале Марко Эйдингер показывает пример использования для двух важных этапов: создания клиентской либы, а также её внедрения в приложение.
🛠 Сам репозиторий на github.
😃 iOS Dev
Swift OpenAPI Generator
от Apple — это плагин SwiftPM
, в который можно передать OpenAPI-док и сгенерить либо клиентский код для выполнения HTTP-запросов, либо код сервера для обработки этих вызовов.Проект ещё на стадии разработки, но, несмотря на то, что до сих пор нет даже версии 1.0, некоторые опенсорс-решения уже стопнули разработку своих репозиториев в пользу эпловского продукта.
📖 В этом материале Марко Эйдингер показывает пример использования для двух важных этапов: создания клиентской либы, а также её внедрения в приложение.
🛠 Сам репозиторий на github.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤5🔥4👏1🏆1🆒1
Мой опыт разработки пет-проектов
Возможно, вы читали пост, в котором я писал, что создаю приложения с 2011 года. За это время до стора добрались три десятка, из которых так или иначе до сих пор там примерно двадцать. Около половины из них на Objective-c, другая же часть на Swift, а виджеты/приложения для часов уже на SwiftUI. Ха-ха, а ещё у меня есть одно на Kotlin.
Хочу поделиться с вами своими мыслями про то, для чего это всё было (и будет).
🔘 Доведённый до конца проект это важно. На работе встречаются сложные задачи, требующие усидчивости, нескольких подходов, иногда даже пересмотра таски под другим углом.
🔘 Мои приложения — не основной источник дохода. Скорее рассматриваю их как способ узнать что-то новое, попробовать какие-то архитектуры, или, например, попытаться написать проект только c использованием фреймворка
🔘 Вопросы ревьюеров помогут вам аргументировать свою позицию и отстаивать свои решения. Хотя периодически с ними нужно будет соглашаться😎 .
🔘 Иногда что-то даже может выстрелить. Когда-то у меня был клиент для ВК, а сам ВК тогда выпилили за авторские права на музыку, и в течение нескольких дней случилось около 50 000 установок (для меня это много).
🔘 Чаще пользователи молчат, когда их всё устраивает. Но как только что-то пойдёт не так, будьте готовы получить десяток гневных отзывов (всё, как в обычной жизни). На работе ведь тоже иногда случаются сложности при обновлении, верно?
🔘 Ваши проекты — это один из лучших способов рассказать (и показать), что вы умеете. Но, конечно, далеко не единственный.
🔘 Вложенное время, силы и деньги не окупятся напрямую. Скорее всего, никогда, будьте готовы к этому. Фактически, вам может повезти занять узкую нишу либо ресурсы позволят подключить продвижение, тогда шансов будет больше.
🔘 Когда начинаю новый проект, то стараюсь фокусироваться на одной функции. Для этого можно представить, что это фича, которую вам нужно реализовать в спринте.
🔘 Я учусь. В том числе и создавать дизайн, даже участвовал в паре конкурсов скетча, но безрезультатно. Для чего? Когда вы пробуете сделать правильно и по гайдлайнам, вы сможете лучше понимать дизайнеров-коллег и их мысли, хотя это и не всегда получается.
🔘 Про аудиторию. У меня есть приложение, которое не пользуется особым успехом (про составление слов), но там есть один пользователь, который играет в него уже 5 лет, и периодически пишет отзывы. Это невероятно круто, когда ваше приложение кому-то интересно. К сравнению, нишевый знаток скачали около 40к человек за всё время, и периодически на разных турнирах я встречаю пользователей, это забавно 🙂
В целом было множество разных ситуаций, и пусть никаких ощутимых средств приложения мне так и не принесли, но сказать, что я жалею об этом, будет преувеличением.
Пробуйте. Но всегда старайтесь найти баланс между личным временем, творчеством и перфекционизмом.
😃 iOS Dev • 🐱 Доступ к алгоритмам
Возможно, вы читали пост, в котором я писал, что создаю приложения с 2011 года. За это время до стора добрались три десятка, из которых так или иначе до сих пор там примерно двадцать. Около половины из них на Objective-c, другая же часть на Swift, а виджеты/приложения для часов уже на SwiftUI. Ха-ха, а ещё у меня есть одно на Kotlin.
Хочу поделиться с вами своими мыслями про то, для чего это всё было (и будет).
🔘 Доведённый до конца проект это важно. На работе встречаются сложные задачи, требующие усидчивости, нескольких подходов, иногда даже пересмотра таски под другим углом.
🔘 Мои приложения — не основной источник дохода. Скорее рассматриваю их как способ узнать что-то новое, попробовать какие-то архитектуры, или, например, попытаться написать проект только c использованием фреймворка
Texture
.🔘 Вопросы ревьюеров помогут вам аргументировать свою позицию и отстаивать свои решения. Хотя периодически с ними нужно будет соглашаться
🔘 Иногда что-то даже может выстрелить. Когда-то у меня был клиент для ВК, а сам ВК тогда выпилили за авторские права на музыку, и в течение нескольких дней случилось около 50 000 установок (для меня это много).
🔘 Чаще пользователи молчат, когда их всё устраивает. Но как только что-то пойдёт не так, будьте готовы получить десяток гневных отзывов (всё, как в обычной жизни). На работе ведь тоже иногда случаются сложности при обновлении, верно?
🔘 Ваши проекты — это один из лучших способов рассказать (и показать), что вы умеете. Но, конечно, далеко не единственный.
🔘 Вложенное время, силы и деньги не окупятся напрямую. Скорее всего, никогда, будьте готовы к этому. Фактически, вам может повезти занять узкую нишу либо ресурсы позволят подключить продвижение, тогда шансов будет больше.
🔘 Когда начинаю новый проект, то стараюсь фокусироваться на одной функции. Для этого можно представить, что это фича, которую вам нужно реализовать в спринте.
🔘 Я учусь. В том числе и создавать дизайн, даже участвовал в паре конкурсов скетча, но безрезультатно. Для чего? Когда вы пробуете сделать правильно и по гайдлайнам, вы сможете лучше понимать дизайнеров-коллег и их мысли, хотя это и не всегда получается.
🔘 Про аудиторию. У меня есть приложение, которое не пользуется особым успехом (про составление слов), но там есть один пользователь, который играет в него уже 5 лет, и периодически пишет отзывы. Это невероятно круто, когда ваше приложение кому-то интересно. К сравнению, нишевый знаток скачали около 40к человек за всё время, и периодически на разных турнирах я встречаю пользователей, это забавно 🙂
В целом было множество разных ситуаций, и пусть никаких ощутимых средств приложения мне так и не принесли, но сказать, что я жалею об этом, будет преувеличением.
Пробуйте. Но всегда старайтесь найти баланс между личным временем, творчеством и перфекционизмом.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥49👍23🔥8❤5👏3🤔1🏆1
This media is not supported in your browser
VIEW IN TELEGRAM
Погружаемся в Observation: введение, принципы и примеры использования
Новый фреймворк
Он представляет следующие возможности:
1️⃣ Маркировка типа как
2️⃣ Отслеживание изменений в экземпляре такого типа.
3️⃣ Наблюдение и использование этих изменений в другом месте, например, в пользовательском интерфейсе приложения.
Для более детального знакомства я выбрал две обширных статьи с примерами:
📖 Обзорный материал, для чего необходим этот фреймворк: как объявлять оъекты
📖 Гайд, как перенести ObservableObject в Observable.
😃 iOS Dev
Новый фреймворк
Observation
создали с целью уменьшить ненужные обновления во вьюхах SwiftUI, тем самым повышая производительность приложений.Он представляет следующие возможности:
1️⃣ Маркировка типа как
observable
(наблюдаемого).2️⃣ Отслеживание изменений в экземпляре такого типа.
3️⃣ Наблюдение и использование этих изменений в другом месте, например, в пользовательском интерфейсе приложения.
Для более детального знакомства я выбрал две обширных статьи с примерами:
📖 Обзорный материал, для чего необходим этот фреймворк: как объявлять оъекты
Observable
, разбор решаемых проблем с производительностью и примеры.📖 Гайд, как перенести ObservableObject в Observable.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤4🔥4👏2🤯1🏆1🆒1
This media is not supported in your browser
VIEW IN TELEGRAM
Информация — это кровь, метаболизм современного мира (Филипп К. Дик).
Вот уже больше года я активно веду этот канал. Ищу полезный контент, делюсь критическим взглядом и поднимаю важные вопросы необходимости базы, алгоритмов и их влияния на нашу с вами работу.
Фильтрация поступающей лавины новостей, нововведений и поиск ответов на сложные вопросы требуют времени.
Конечно, в 2023 году нам доступно огромное количество каналов, в которых можно черпать информацию. Крупнее, чем @iOSDev, с большими ресурсами или даже командой авторов, и это здорово!
Правда, важно не только расширять арсенал инструментов, но и смотреть на разработку в целом: не только писать код, но и вырабатывать навыки решения проблем.
Развивать технический ресурс — сложно по многим причинам (узкий контент и непростые темы, требующие погружения). И мне невероятно приятно, что вы здесь.
❤🔥Спасибо, что читаете этот канал.
@iOS Dev —
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉41👍8🔥4👏3❤1❤🔥1🤩1🏆1
Масштабное руководство по использованию SwiftData
В нем рассматриваются основополагающие концепции
📖 Этот материал состоит из нескольких разделов, каждый из которых посвящен различным аспектам фреймворка
📖 Будет полезно дополнить этой статьёй о вопросах и ответах, связанных с
😃 iOS Dev
В нем рассматриваются основополагающие концепции
SwiftData
, архитектурный дизайн, возможности миграции и многое другое.📖 Этот материал состоит из нескольких разделов, каждый из которых посвящен различным аспектам фреймворка
SwiftData
. 📖 Будет полезно дополнить этой статьёй о вопросах и ответах, связанных с
SwiftData
и CoreData
.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍7❤4🆒2👏1🤩1🏆1
23 стратегии эффективного использования массивов в Swift
🔑 Эффективное использование массивов является ключом к написанию высокопроизводительного кода.
📖 В этой статье рассматриваются 23 способа, которые вы можете использовать при работе с массивами.
📖 Кстати, для сортировки массивов строк можно ознакомиться с этим постом.
😃 iOS Dev
🔑 Эффективное использование массивов является ключом к написанию высокопроизводительного кода.
📖 В этой статье рассматриваются 23 способа, которые вы можете использовать при работе с массивами.
📖 Кстати, для сортировки массивов строк можно ознакомиться с этим постом.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤4🔥3👏1🏆1🤗1
Реализация темного режима c помощью использования dynamicProvider
Внедрение поддержки новой темы может быть довольно утомительно. Одним из способов, который может помочь в реализации — использование
📖 Про детали и обработку дополнительных кейсов можно прочитать здесь.
😃 iOS Dev
Внедрение поддержки новой темы может быть довольно утомительно. Одним из способов, который может помочь в реализации — использование
dynamicProvider
для UIColor (доступно с 13 оси).📖 Про детали и обработку дополнительных кейсов можно прочитать здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥3🤯3🏆2❤1👏1
This media is not supported in your browser
VIEW IN TELEGRAM
5 вещей, которые вы могли не знать о KeyPaths
Vincent Pradeilles попробовал разобраться, как именно можно использовать KeyPath в своих проектах.
В частности, как простым способом можно написать типобезопасный синтаксис предиката.
📖 А вот здесь весь разбор пяти возможных применений.
📖 Кстати, про KeyPathComparator можно прочитать тут.
😃 iOS Dev
KeyPath
— одна из часто используемых фишек в Swift.Vincent Pradeilles попробовал разобраться, как именно можно использовать KeyPath в своих проектах.
В частности, как простым способом можно написать типобезопасный синтаксис предиката.
📖 А вот здесь весь разбор пяти возможных применений.
📖 Кстати, про KeyPathComparator можно прочитать тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍8❤2👏2🏆1😐1🆒1
Полезные iOS-инструменты для отладки приложений
Владение навыками отладки приложений входит в топ самых полезных вещей для любого разработчика (не только мобильного).
Существует множество различных способов найти проблемы в приложениях, но иногда для поиска самых неприятных багов приходится использовать целую комбинацию вспомогательных средств.
📖 Альберт из компании SimbirSoft собрал в одну статью самые популярные из этих инструментов.
😃 iOS Dev
Владение навыками отладки приложений входит в топ самых полезных вещей для любого разработчика (не только мобильного).
Существует множество различных способов найти проблемы в приложениях, но иногда для поиска самых неприятных багов приходится использовать целую комбинацию вспомогательных средств.
📖 Альберт из компании SimbirSoft собрал в одну статью самые популярные из этих инструментов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍36❤3🔥2🆒2❤🔥1👏1🤩1🤣1🏆1
Первая попытка проектирования приложений для visionOS
📖 Создатель приложения Widgetsmith (более 100 кк скачиваний) делится своим опытом поддержки visionOS для своего приложения и рассказывает про этапы разбора ошибок компилятора и изменения интерфейса в целом.
В частности, рассматриваются не только варианты редизайна, но и способы добавления различных эффектов (мерцания и так далее) на базе уже существующего проекта.
📖 Прочитать про опыт адаптации проекта для visionOS можно здесь.
😃 iOS Dev
В частности, рассматриваются не только варианты редизайна, но и способы добавления различных эффектов (мерцания и так далее) на базе уже существующего проекта.
📖 Прочитать про опыт адаптации проекта для visionOS можно здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥3❤2🤩2👏1🤣1🏆1
Как отключить кастомные клавиатуры в вашем приложении
🙅♂️Запрет нестандартных клавиатур может быть одним из требований безопасности для корпоративных продуктов.
Конечно, чаще на Android, чем на iOS, но в любом случае неплохо пополнить свою базу знаний.
Так как дополнительная клавиатура это
📖 А вот здесь можно посмотреть на пример такого подхода.
😃 iOS Dev
🙅♂️Запрет нестандартных клавиатур может быть одним из требований безопасности для корпоративных продуктов.
Конечно, чаще на Android, чем на iOS, но в любом случае неплохо пополнить свою базу знаний.
Так как дополнительная клавиатура это
Extension
, то с помощью проверки в shouldAllowExtensionPointIdentifier
легко можно проверить дать/запретить доступ для таких клавиатур.📖 А вот здесь можно посмотреть на пример такого подхода.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29👏5🔥4❤2🏆1🆒1
Реализация callback-подхода с использованием AsyncStream в Swift
До
👨💻 Но с ввведением
📖 В этом материале автор делится таким вариантом использования на примере приложения, имитирующего скачивание файлов.
😃 iOS Dev
До
Swift Concurrency
мы могли использовать замыкания, например, для информирования об определенных событиях во время асинхронных операций. AsyncStream
этот подход можно прокачать с помощью более простого синтаксиса async/await
.📖 В этом материале автор делится таким вариантом использования на примере приложения, имитирующего скачивание файлов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥4❤2👏1🏆1🤗1
Логирование в iOS: обработка транзакций с использованием паттерна «Декоратор»
Система логирования — одна из частых задач в разработке.
Например, при работе над банковским приложением важно учитывать время транзакций для увеличения производительности.
📖 В этом примере автор реализует такую систему.
😃 iOS Dev
Система логирования — одна из частых задач в разработке.
Например, при работе над банковским приложением важно учитывать время транзакций для увеличения производительности.
📖 В этом примере автор реализует такую систему.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍4❤2👏1🤩1🏆1
Серия из 8 статей о работе с CloudKit на примере приложения Shopping UK
🧑💻 Стюарт Вилрайт создаёт и поддерживает это приложение в течение 10 лет (рейтинг 4,8 в App Store, более 45 000 ежемесячных пользователей). При этом средний доход приложения от 1000 до 1500 фунтов стерлингов в месяц.
Помимо разбора CloudKit он рассказывает и о том, как пришёл к созданию продукта, какие сложности преодолел и с помощью каких инструментов поддерживает Shopping UK.
📖 Большой разбор о пути приложения и внедрения CloudKit можно прочесть здесь:
1️⃣ Введение.
2️⃣ Обзор основных концепций CloudKit.
3️⃣ Добавление, обновление и удаление записей.
4️⃣ Общий доступ и принципы работы.
5️⃣ Совместный шаринг.
6️⃣ Синхронизация данных.
7️⃣ Работа в фоне.
8️⃣ Когда что-то идет не так.
😃 iOS Dev
Помимо разбора CloudKit он рассказывает и о том, как пришёл к созданию продукта, какие сложности преодолел и с помощью каких инструментов поддерживает Shopping UK.
📖 Большой разбор о пути приложения и внедрения CloudKit можно прочесть здесь:
1️⃣ Введение.
2️⃣ Обзор основных концепций CloudKit.
3️⃣ Добавление, обновление и удаление записей.
4️⃣ Общий доступ и принципы работы.
5️⃣ Совместный шаринг.
6️⃣ Синхронизация данных.
7️⃣ Работа в фоне.
8️⃣ Когда что-то идет не так.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11👏6❤5🔥3🤗1
SwifterSwift — это коллекция из более чем 500 нативных
🤩 А для более наглядного поиска можно проверить
🛠 SwifterSwift на GitHub.
😃 iOS Dev
extensions
Swift с удобными методами, синтаксическим сахаром и улучшениями производительности.Examples.playground
.🛠 SwifterSwift на GitHub.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25❤5🆒4🏆3🔥2👏1🤔1
Использование общих зависимостей с помощью SPM
Иногда мы можем столкнуться с дублированием зависимостей, или в крайне редких случаях сложностями с версионированием, что может стать проблемой.
👩🎓 Хотя в SPM нет базового решения для таких случаев, можно использовать обходной путь.
Ключевой момент заключается в том, что, объявив пакет как зависимость в Package.swift, вы можете импортировать все его зависимости.
📖 В этой статье автор разбирает необходимые шаги, а здесь можно посмотреть пример проекта.
😃 iOS Dev
Иногда мы можем столкнуться с дублированием зависимостей, или в крайне редких случаях сложностями с версионированием, что может стать проблемой.
Ключевой момент заключается в том, что, объявив пакет как зависимость в Package.swift, вы можете импортировать все его зависимости.
📖 В этой статье автор разбирает необходимые шаги, а здесь можно посмотреть пример проекта.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥2❤1👏1🤗1
Подборка паттернов проектирования, реализованных в Swift 5.0
Репозиторий с 14 (!) тысячами звёзд на Github на примерах показывает сразу несколько десятков шаблонов, сгруппированных в три группы: поведенческие, творческие и структурные.
📖 Ссылка на примеры здесь.
📖 Кстати, вот тут есть проект с использованием clean architecture и MVVM.
😃 iOS Dev
Репозиторий с 14 (!) тысячами звёзд на Github на примерах показывает сразу несколько десятков шаблонов, сгруппированных в три группы: поведенческие, творческие и структурные.
📖 Ссылка на примеры здесь.
📖 Кстати, вот тут есть проект с использованием clean architecture и MVVM.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36👍12❤2👏1🤔1🤩1🏆1