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

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

#ios #mobile #swift
Download Telegram
Лучшие практики для TCA (The Composable Architecture)

Команда The Browser Company активно использует структуру Composable Architecture (об их любопытном способе организации SPM можно почитать вот тут).

Krzysztof Zabłocki на основе своего опыта разработал новый набор лучших практик, которые могут принести пользу проектам, использующим эту архитектуру.

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

📖 Кстати, здесь сообщество делится рекомендациями (и вы можете добавить свои).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
StackOverflow тонет или почему Google ломает интернет
И почему всё это очень плохо

В течение восьми последних лет на самом популярном сайте для поиска причин/симптомов/решений для программистов наблюдается уменьшение количества сообщений в целом.

С 2014 года сообщений стало меньше в два раза, вместо 140k -> 70k. Кроме этого, существует очень плохая тенденция, что количество вопросов уже превышает количество ответов.

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

Но не это ключевой фактор

Несмотря на бан использования ChatGPT на самом StackOverflow, они не могут повлиять на количество входящего трафика от крупнейшего поисковика Google при использовании нейросетей.

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

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

Авторы создают контент -> прокачивают его видимость -> Google показывает рекламу у себя + авторы получают отдачу в виде денег (ну или альтруистической обратной связи). Казалось бы, win-win для обеих сторон, вот только появляется но.

С появлением нейросетей авторство, как вы понимаете, становится никому не интересно.

Это означает очень простую вещь, создавая контент или в примере с ответами на StackOverflow нейросети просто парсят это всё в датасет и авторы отходят на второй план.

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

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

Они перестанут отвечать на вопросы. Перестанут разбирать сложные вещи.

Можно ли что-то сделать?

Да, добавить источники цитирования. Возможно, реализовать в ответах блок с референсами. Наверняка, существуют и другие решения.

Но что случится с хвалёным вау-эффектом от нейросетей, когда окажется, что это лишь поисковик на стероидах?

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Топ-6 вдохновляющих докладов, номинированных на Swift Community Awards 2022
Остальные номинации с возможностью проголосовать доступны тут

Пока на хабре жюри рассматривает лучшие статьи, на Hacking with swift опубликовали и свой шортлист.

📺 Anna Beltrami: Spark your Creativity – the Power of iPad Playgrounds. О том, как изменить свой стиль разработки и обратиться к своему творческому потенциалу.

📺 Frank Courville: Roll your own networking stack. О том, как создать собственную небольшую библиотеку компонуемых инструментов, чтобы сделать работу с сетью приятной.

📺 Jordi Bruin: Shipping Side Projects in 2-2-2 Easy Steps. Про то, как сохранить идеи небольшими и реализовать их от финалиста Apple Design Awards.

📺 Krzysztof Zabłocki: Improving developer experience through tools and techniques. Про инструменты и методы для экономии месяцев работы и повышения скорости итераций.

📺 Daniel Steinberg: Willing Suspension of Disbelief. В этом докладе говорится про ментальную модель, которая упростит написание асинхронного кода и сделает его более понятным.

📺 Natalia Panferova: Mysteries of SwiftUI Text view. Полезный доклад, в котором рассматриваются возможности компонента, о которых вы могли и не подозревать.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Три частые ошибки при работе с Optionals

📖 В этом материале Винсент расскажет о 3 ошибках, которые нужно избегать при работе с опциональными значениями и разбирает:

1️⃣ В чём разница между «?» и «!» при использовании в коде.

2️⃣ О важности использовать optional binding.

3️⃣ Излишнее использование опциональных значений там, где это не нужно.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Необычный эффект на основе значения освещённости

🤩 Alex Widua создал прототип, достигнутый путем эмуляции внешней освещенности устройства и частичного затемнения пользовательского интерфейса.

К сожалению, ему не удалось получить разрешения от SensorKit , в чём он честно признался, зато код на базе данных EXIF от ​​камеры можно использовать для приблизительного значения.

🛠 Вот тут лежит код для этого эффекта, а в качестве бонуса ещё и приложение для воссоздания «блестящей кнопки» (тоже на основе камеры).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Простой способ найти все вызовы метода в вашем проекте

Часто нам требуется узнать, где именно в коде вызывается тот или иной метод.

Для этого можно попробовать воспользоваться поиском, а можно использовать следующие опции:

1️⃣ Выделите код. Нажмите Find -> Find Call Hierarchy.

2️⃣ При поиске названия метода выберите фильтр: Call Hierarchy.

3️⃣ После выделения названия метода используете комбинацию клавиш: ⌘ + ⌃ + ⇧ + H, они же: CMD + Ctrl + Shift + H.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Контекстное меню для таблиц в iOS 16

Apple добавила контекстные меню еще в iOS 13.

То, как пользователь видит меню, зависит от платформы:

🔘 Жест касания и удержания (длительное нажатие) на iOS.

🔘 Клик мышкой, удерживая нажатой клавишу Control, в macOS.

🔘 Правый клик на трекпаде в macOS или iPadOS.

В iOS 16 Apple появился новый вариант контекстного меню, которое работает работает только при добавлении в контейнер, например, в таблицу или список.

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
✅️ Xcode больше не работает с помощью Rosetta? Есть решение, о котором не написали в Release Notes

Как и ожидалось ранее, Apple отключила возможность запуска Xcode с использованием Rosetta в версии 14.3 (больше не работает опция с проставлением галочки в настройках), небольшое видео для ввода в курс дела.

В своих Release Notes они писали о грядущем изменении в разделе deprecations:

Xcode isn’t supported under Rosetta. See Developer Technote “Resolving architecture build errors on Apple silicon“ for more information. (92772361)

После чего сразу же последовал целый ряд статей как всё очень плохо про остановку поддержки и собственно, что теперь остаётся только переходить на SPM.

К счастью, есть одна фича, не указанная в тех самых release notes, которая пока что ещё позволит нам использовать нужные pods (и другие либы) даже в Xcode 14.3.

Для этого нужно всего лишь использовать:

Product -> Destination -> Destination Architectures -> Show Rosetta Destinations.

😃 iOS Devделюсь рабочими способами 😎
Please open Telegram to view this post
VIEW IN TELEGRAM
Ресурс с информацией о текущем времени проверки в App Store и TestFlight

🌐 На этом сайте доступно текущее среднее время проверки iOS, время проверки бета-версии TestFlight и время обработки сборки.

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

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

Кроме того, здесь есть данные и о проверке билдов для TestFlight, а также о build processing, которыми раньше не делились.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как использовать юнит-тестирование при работе с async/await в Swift

Юнит-тесты можно использовать для проверки кода, написанного с использованием async/await.

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

📖 В этом материале разбирается значение атрибутов @MainActor, предотвращение дедлоков XCTestExpectation и приводится пример использования await fulfillment.

📖 Также рекомендую вместе с этим материалом ознакомиться и с официальной документацией.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
💥 Реализация анимации отклеивания для повторения эффекта в приложении Messages

Один из крутых и необычных эффектов в «Сообщения» — анимация отклеивания, которую можно увидеть при отправке стикера.

Если внимательно посмотреть, можно различить несколько отдельных анимаций, которые сливаются воедино:

1️⃣ Стикер деформируется и «приближается к камере», начиная с верхней и продвигаясь к нижней части стикера.

2️⃣ По поверхности стикера проходит блик, усиливая эффект деформации и заставляя нас поверить, что частично деформированный стикер отражает невидимый источник света.

3️⃣ При «сгибе» стикера можно увидеть рассеянное отражение того, что облегчает пользователю понимание происходящего.

🧐 Robb Böhnke решил поискать способы для повторения этой необычной анимации (не обязательно с точностью до пикселя).

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

🛠 А вот здесь даже есть рабочий пример кода. Только обратите внимание, что на симуляторе не запустится, так как используются кастомные модификаторы шейдеров на Metal.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Код Воробья для iOS разработчиков
В 💻 Xcode 14 прокачали автокомплит - инициализаторы, Codable, форматирование и другое. В видео наглядно, как это работает.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Настройка различных Launch Screen на основе схемы URL

Основная цель добавления лончскрина — сократить время ожидания пользователя, показывая «часть интерфейса» во время загрузки приложения.

Но что делать, если ваше приложение поддерживает deep links, а первый экран изменяется на основе схемы URL?

При таких условиях важно определить, какой экран следует показывать.

📖 В этой статье объясняется, как корректно добавлять и изменять ключи UILaunchScreens в зависимости от заданных условий.

Кстати, есть несколько базовых советов для ускорения запуска приложения.

👩‍🎓 А если хотите узнать, чем различается холодный и теплый запуски приложения, то можно обратить внимание и на этот пост.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Итоги конкурса Технотекст - 2022 на хабре!

Наконец-то подвели итоги конкурса технических статей за прошлый год.

Я рад, что попробовал свои силы и пусть не удалось получить наивысший балл по сумме, но всё-таки🥉 место — отличный результат.

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

Ну а победили две статьи в корпоративных блогах:

🏆По сумме баллов Yatagan и по техническим критериям Kotlin Symbol Processing.

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

📖 Все итоги доступны тут, а сам протокол с оценками здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация «написанной от руки» анимации с использованием svg, path и контрольных точек

На гифке вы можете увидеть практически культовую анимацию слова Hello, показанную на презентации Apple Spring 2020.

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

📖 В этом материале автор рассказывает о своём опыте повторения такой анимации с помощью конвертации svg в SwiftUI и о необходимых преобразованиях.

🛠 А вот тут есть рабочий пример.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Пример создания музыкального плеера с использование MusicKit и Apple Music API

🎹 Если вы задумывались, как управлять воспроизведением мультимедиа с помощью MediaPlayer, то следующий материал точно пригодится.

📖 В этой статье приводится пример создания приложения на базе API Apple Music.

🛠 Финальный проект на github.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Инструмент апгрейда arm64-бинарников для запуска на Apple Silicon iOS Simulator

📖 В интересном исследовании последствий отключения розетты (и что с этим делать) Антон Грачёв наткнулся на любопытную утилиту.

Без долгих разговоров: она умеет прокачивать либу для запуска на симуляторе.

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

⚠️ Как человек, который работает в том числе и над защитой данных, хочу предупредить в очередной раз: использование любых опенсорсных продуктов должно быть тщательно взвешено.

В этих двух материалах разработчики либы пишут об этой идее и своих шагах:

1️⃣ Hacking native ARM64 binaries to run on the iOS Simulator.

2️⃣ Hacking native ARM64 binaries to run on the iOS Simulator - the dynamic framework edition.

⬇️ Сам инструмент доступен здесь, а простой способ всё-таки запустить ваш проект без серьёзных изменений вот тут.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Опыт собеседований System Design и возможный путь обсуждения

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

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

Если один из раундов содержит system design, важно не пропустить следующие базовые вещи (мне кажется, и для интервьюера тоже):

1️⃣ Вы не можете спроектировать всё приложение за 20 минут. Задайте уточняющие вопросы, на какой части архитектуры нужно сделать акцент. В дальнейшем вопросы будут задавать уже вам.

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

2️⃣ Начните с базового прототипа. Здесь важно правильно разделить архитектуру по слоям (какой класс за что будет отвечать), можно от самого верхнего уровня и спускаться ниже.

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

4️⃣ Безопасность. Это огромная, иногда важнейшая часть приложения, и даже если мы не специалисты в области криптографии, мы должны обладать базовым набором навыков, которые помогут защитить пользователя (и нас тоже).

5️⃣ Кэширование. Существует множество различных механизмов и идей кэширования. Например, изображения обычно кэшируются в памяти. Приложение для обмена сообщениями более эффективно извлекает изображения из памяти, а не загружает их каждый раз (телеграм не исключение).

6️⃣ Автономная работа приложения. Её необходимость и доступность конечно же, будут связаны с предыдущим пунктом.

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻 Что нового в Swift 5.8: все особенности и пример playground

Недавно состоялся релиз Swit 5.8, который, к слову, включён в Xcode 14.3.

Вкратце основые изменения перечислены ниже:

🔘 Swift 5.8 позволяет начать поэтапную подготовку проектов для Swift 6, используя новые функции. Чтобы включить функцию, нужно передать флаг компилятора -enable-upcoming-feature

🔘 Прокачали реализацию Result builder.

🔘 Обновили экосистему, в том числе Swift-DocC и Swift Package Manager.

🔘 В выпуске SwiftSyntax вместе со Swift 5.8 теперь содержится полностью переписанный синтаксический анализатор, полностью реализованный на Swift. Новый парсер имеет ряд преимуществ.

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

📖 А вот тут есть материал с разбором новых атрибутов, например @preconcurrency и hasAttribute.

🛠 Бонуc: пример Playground от Пола Хадсона, демонстрирующий новые фичи.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
AttributedString в Swift: форматирование текста и создание собственных стилей

🧐 Создание красивых приложений зависит не только от изображений — оно также распространяется и на текст.

Различные стили строк с атрибутами могут сделать информацию более выразительной.

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

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