iOS Dev
7.72K subscribers
1K photos
84 videos
1 file
1.16K links
🍏Канал об iOS-разработке, необычных подходах и решениях.
👨‍💻Автор: Виктор Грушевский (@Viktorianec)
Темы:
⭐️ Подготовка к собеседованиям.
⭐️ Архитектуры и алгоритмы.
⭐️ Код. Много кода.

⚒️База знаний: https://boosty.to/ios_dev

#ios #mobile #swift
加入频道
Xcode позволит разработчикам создавать приложения автоматически?

Казалось бы, что может быть круче анонсированной visionOS, но обо всём по порядку.

27 июня 2023 года в Apple подали патент, в котором, в частности, есть следующие моменты:

1️⃣ Генератор кода будет создавать подпрограмму, которая облегчит доступ ... поддерживаемый конкретным языком программирования (не только Swift).

2️⃣ Разработчик cможет затем воспользоваться автокомплитом, обнаружением ошибок имени или типа т.д., - продолжает Apple.

3️⃣ Код, как говорится в патенте, будет совместим с конкретным языком программирования, используемым в проекте.

Понимаете, к чему я веду?

Пока в компании запрещают пользоваться ChatGPT, а остальные упрекают Apple в том, что она не делает ничего, чтобы соревноваться с Google, OpenAI или продуктом Microsoft, на самом деле в Apple уже делают аналог ChatGPT.

Ускорение написания кода позволит Xcode выполнять большую часть работы, которая нужна начинающим или менее опытным разработчикам. А если читать между строк — то выполнять работу вместо них.

Предыдущие патенты по схожей тематике датируются 2016 годом (источник), и это означает, что Apple делает свою ChatGPT как минимум 7 лет.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Создание сложных интерфейсов в SwiftUI: вертикальный список с возможностью горизонтальной прокрутки

Пожалуй, одна из непростых, но в то же время часто встречающихся задач — реализация такого отображения.

📖 В этом обучающем материале от Applе вы сможете внимательнее изучить один из возможных подходов и посмотреть, как такой интерфейс может адаптироваться к различным размерам и ориентациям устройств.

🛠 А по этой ссылке доступны оба проекта (стартовый и финальный).

🧑‍💻 К слову, вот тут в нашем канале есть пост о том, как можно реализовать двунаправленную UICollectionView (тоже с примерами).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Серии вопросов и ответов, связанных с SwiftData и CoreData

Keith Harrison (автор сайта useyourloaf) задавал вопросы на QA-сессии в Slack напрямую инженерам Apple, после чего поделился кратким изложением информации, которую узнал.

И пусть SwiftData пока только анонсирована, уже есть важные моменты, на которые стоит обратить внимание:

🔘 Асинхронные операции.

🔘 Синхронизация CloudKit.

🔘 Вопросы, посвященные миграции с CoreData и так далее.

📖 Про SwiftData можно прочесть здесь, а про CoreData материал доступен вот тут.

🧑‍💻 Кстати, напоминаю, что у нас есть пополняемый список обновлений с WWDC23.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Объединяемые библиотеки (mergeable libraries) в Xcode 15: лучшее от динамических и статических либ

До введения объединяемых библиотек в WWDC этого года мы должны были решить, каким должен быть фреймворк — статическим или динамическим.

Выбор мог повлиять на время сборки приложения и производительность во время запуска.

Начиная с Xcode 15, нам не нужно будет принимать такое решение.

📺 Были анонсированы объединяемые библиотеки, сочетающие в себе лучшее из динамических и статических библиотек.

📖 В этой статье можно узнать, какие проблемы они решают и как настроить проект в Xcode для использования таких библиотек.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Создание интерактивного виджета с использованием App Intents

📖 В этом несложном примере можно узнать, как создать виджет для увеличения глобального счетчика, используемого вместе с таргет-приложением.

📖 Больше про App Intents можно узнать в официальной документации (iOS 16+).

Кстати, если вам нужно использовать больше, чем один виджет, то в канале есть пост и про такую ситуацию.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Концепт приложения для visionOS в связке с Figma (обновления в реальном времени)

Ещё одна необычная идея от Alex Widua (вы только посмотрите на его прошлый прототип!).

Во время работы с visionOS он придумал такую связку: плагин фигмы общается с приложением iOS через WebSockets. Все фреймы Figma загружаются как изображения AR, которые может распознать ARKit.

Удивительно, но работает очень даже неплохо🤩.

🛠 Тут можно посмотреть на реализацию анимации сетки при обнаружении фрейма.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Зарплаты мобильных разработчиков по данным Хабр Карьера

Появились результаты нового исследования, в котором есть распределение вакансий и по квалификации.

Самые популярные разработчики мобильных приложений — мидлы и сеньоры, доли вакансий для них одинаковые — по 45,2%.

Реже ищут лидов — доля 7,1%. Для джунов вакансий меньше всего: 2,5%.

💰По цифрам, которые оставили сами разработчики, можно сделать выводы, что джуны в среднем получают 110 000 ₽, а лиды — 430 000 ₽.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Swift OpenAPI Generator: генерация кода для клиента и сервера с помощью инструмента Apple

Swift OpenAPI Generator от Apple — это плагин SwiftPM, в который можно передать OpenAPI-док и сгенерить либо клиентский код для выполнения HTTP-запросов, либо код сервера для обработки этих вызовов.

Проект ещё на стадии разработки, но, несмотря на то, что до сих пор нет даже версии 1.0, некоторые опенсорс-решения уже стопнули разработку своих репозиториев в пользу эпловского продукта.

📖 В этом материале Марко Эйдингер показывает пример использования для двух важных этапов: создания клиентской либы, а также её внедрения в приложение.

🛠 Сам репозиторий на github.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Мой опыт разработки пет-проектов

Возможно, вы читали пост, в котором я писал, что создаю приложения с 2011 года. За это время до стора добрались три десятка, из которых так или иначе до сих пор там примерно двадцать. Около половины из них на Objective-c, другая же часть на Swift, а виджеты/приложения для часов уже на SwiftUI. Ха-ха, а ещё у меня есть одно на Kotlin.

Хочу поделиться с вами своими мыслями про то, для чего это всё было (и будет).

🔘 Доведённый до конца проект это важно. На работе встречаются сложные задачи, требующие усидчивости, нескольких подходов, иногда даже пересмотра таски под другим углом.

🔘 Мои приложения — не основной источник дохода. Скорее рассматриваю их как способ узнать что-то новое, попробовать какие-то архитектуры, или, например, попытаться написать проект только c использованием фреймворка Texture.

🔘 Вопросы ревьюеров помогут вам аргументировать свою позицию и отстаивать свои решения. Хотя периодически с ними нужно будет соглашаться 😎.

🔘 Иногда что-то даже может выстрелить. Когда-то у меня был клиент для ВК, а сам ВК тогда выпилили за авторские права на музыку, и в течение нескольких дней случилось около 50 000 установок (для меня это много).

🔘 Чаще пользователи молчат, когда их всё устраивает. Но как только что-то пойдёт не так, будьте готовы получить десяток гневных отзывов (всё, как в обычной жизни). На работе ведь тоже иногда случаются сложности при обновлении, верно?

🔘 Ваши проекты — это один из лучших способов рассказать (и показать), что вы умеете. Но, конечно, далеко не единственный.

🔘 Вложенное время, силы и деньги не окупятся напрямую. Скорее всего, никогда, будьте готовы к этому. Фактически, вам может повезти занять узкую нишу либо ресурсы позволят подключить продвижение, тогда шансов будет больше.

🔘 Когда начинаю новый проект, то стараюсь фокусироваться на одной функции. Для этого можно представить, что это фича, которую вам нужно реализовать в спринте.

🔘 Я учусь. В том числе и создавать дизайн, даже участвовал в паре конкурсов скетча, но безрезультатно. Для чего? Когда вы пробуете сделать правильно и по гайдлайнам, вы сможете лучше понимать дизайнеров-коллег и их мысли, хотя это и не всегда получается.

🔘 Про аудиторию. У меня есть приложение, которое не пользуется особым успехом (про составление слов), но там есть один пользователь, который играет в него уже 5 лет, и периодически пишет отзывы. Это невероятно круто, когда ваше приложение кому-то интересно. К сравнению, нишевый знаток скачали около 40к человек за всё время, и периодически на разных турнирах я встречаю пользователей, это забавно 🙂

В целом было множество разных ситуаций, и пусть никаких ощутимых средств приложения мне так и не принесли, но сказать, что я жалею об этом, будет преувеличением.

Пробуйте. Но всегда старайтесь найти баланс между личным временем, творчеством и перфекционизмом.

😃 iOS Dev🐱 Доступ к алгоритмам
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Погружаемся в Observation: введение, принципы и примеры использования

Новый фреймворк Observation создали с целью уменьшить ненужные обновления во вьюхах SwiftUI, тем самым повышая производительность приложений.

Он представляет следующие возможности:

1️⃣ Маркировка типа как observable (наблюдаемого).

2️⃣ Отслеживание изменений в экземпляре такого типа.

3️⃣ Наблюдение и использование этих изменений в другом месте, например, в пользовательском интерфейсе приложения.

Для более детального знакомства я выбрал две обширных статьи с примерами:

📖 Обзорный материал, для чего необходим этот фреймворк: как объявлять оъекты Observable, разбор решаемых проблем с производительностью и примеры.

📖 Гайд, как перенести ObservableObject в Observable.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🥳 5 000 разработчиков в канале!

Информация — это кровь, метаболизм современного мира (Филипп К. Дик).

Вот уже больше года я активно веду этот канал. Ищу полезный контент, делюсь критическим взглядом и поднимаю важные вопросы необходимости базы, алгоритмов и их влияния на нашу с вами работу.

Фильтрация поступающей лавины новостей, нововведений и поиск ответов на сложные вопросы требуют времени.

Конечно, в 2023 году нам доступно огромное количество каналов, в которых можно черпать информацию. Крупнее, чем @iOSDev, с большими ресурсами или даже командой авторов, и это здорово!

Правда, важно не только расширять арсенал инструментов, но и смотреть на разработку в целом: не только писать код, но и вырабатывать навыки решения проблем.

Развивать технический ресурс — сложно по многим причинам (узкий контент и непростые темы, требующие погружения). И мне невероятно приятно, что вы здесь.

❤‍🔥Спасибо, что читаете этот канал.

@iOS Devа ещё я решился на небольшой подарок, и купил соответствующий юзернейм (можете посмотреть в настройках канала). Кстати, такие эффекты гифки можно сделать в Keynote 🤗
Please open Telegram to view this post
VIEW IN TELEGRAM
Масштабное руководство по использованию SwiftData

В нем рассматриваются основополагающие концепции SwiftData, архитектурный дизайн, возможности миграции и многое другое.

📖 Этот материал состоит из нескольких разделов, каждый из которых посвящен различным аспектам фреймворка SwiftData.

📖 Будет полезно дополнить этой статьёй о вопросах и ответах, связанных с SwiftData и CoreData.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
23 стратегии эффективного использования массивов в Swift

🔑 Эффективное использование массивов является ключом к написанию высокопроизводительного кода.

📖 В этой статье рассматриваются 23 способа, которые вы можете использовать при работе с массивами.

📖 Кстати, для сортировки массивов строк можно ознакомиться с этим постом.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Реализация темного режима c помощью использования dynamicProvider

Внедрение поддержки новой темы может быть довольно утомительно. Одним из способов, который может помочь в реализации — использование dynamicProvider для UIColor (доступно с 13 оси).

📖 Про детали и обработку дополнительных кейсов можно прочитать здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
5 вещей, которые вы могли не знать о KeyPaths

KeyPath — одна из часто используемых фишек в Swift.

Vincent Pradeilles попробовал разобраться, как именно можно использовать KeyPath в своих проектах.

В частности, как простым способом можно написать типобезопасный синтаксис предиката.

📖 А вот здесь весь разбор пяти возможных применений.

📖 Кстати, про KeyPathComparator можно прочитать тут.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Полезные iOS-инструменты для отладки приложений

Владение навыками отладки приложений входит в топ самых полезных вещей для любого разработчика (не только мобильного).

Существует множество различных способов найти проблемы в приложениях, но иногда для поиска самых неприятных багов приходится использовать целую комбинацию вспомогательных средств.

📖 Альберт из компании SimbirSoft собрал в одну статью самые популярные из этих инструментов.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Первая попытка проектирования приложений для visionOS

📖 Создатель приложения Widgetsmith (более 100 кк скачиваний) делится своим опытом поддержки visionOS для своего приложения и рассказывает про этапы разбора ошибок компилятора и изменения интерфейса в целом.

В частности, рассматриваются не только варианты редизайна, но и способы добавления различных эффектов (мерцания и так далее) на базе уже существующего проекта.

📖 Прочитать про опыт адаптации проекта для visionOS можно здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как отключить кастомные клавиатуры в вашем приложении

🙅‍♂️Запрет нестандартных клавиатур может быть одним из требований безопасности для корпоративных продуктов.

Конечно, чаще на Android, чем на iOS, но в любом случае неплохо пополнить свою базу знаний.

Так как дополнительная клавиатура это Extension, то с помощью проверки в shouldAllowExtensionPointIdentifier легко можно проверить дать/запретить доступ для таких клавиатур.

📖 А вот здесь можно посмотреть на пример такого подхода.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Реализация callback-подхода с использованием AsyncStream в Swift

До Swift Concurrency мы могли использовать замыкания, например, для информирования об определенных событиях во время асинхронных операций.

👨‍💻 Но с ввведением AsyncStream этот подход можно прокачать с помощью более простого синтаксиса async/await.

📖 В этом материале автор делится таким вариантом использования на примере приложения, имитирующего скачивание файлов.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Логирование в iOS: обработка транзакций с использованием паттерна «Декоратор»

Система логирования — одна из частых задач в разработке.

Например, при работе над банковским приложением важно учитывать время транзакций для увеличения производительности.

📖 В этом примере автор реализует такую систему.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM