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

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

#ios #mobile #swift
加入频道
Простой способ найти все вызовы метода в вашем проекте

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

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

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
Книжная подборка для продвинутых разработчиков Swift от легендарного автора

📖 Flight School — это серия книг, в которой рассматриваются основные темы разработки для iOS и macOS с помощью кратких и целенаправленных руководств.

В 2018 году решение о создании такой подборки принял Mattt (без сомнений, легендарный разработчик). Он проработал 3 года в Apple техническим писателем, участвуя в написании языка программирования Swift, Swift Package Manager и Swift.org.

До этого Мэтт основал NSHipster (который лично я поставил бы если не первым, то в топ-3 ресурсов для обязательного ознакомления), еженедельное издание для разработчиков iOS и macOS, и поддерживал несколько библиотек с открытым исходным кодом, включая Alamofire и AFNetworking (думаю, вы не раз слышали о таких).

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

1️⃣ Flight School Guide to Swift Strings - полный справочник по работе с текстом в Swift и Foundation.

2️⃣ Flight School Guide to Swift Numbers - все, что вам нужно знать о работе с числами в Swift.

3️⃣ Flight School Guide to Swift Codable - эта книга предлагает всесторонний обзор всех аспектов Codable, начиная с основ и заканчивая изучением множества продвинутых тем с помощью увлекательных примеров проектов.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Выход из зоны комфорта

Когда-то (на самом деле не так давно), я писал большой пост про необходимость базы и знания алгоритмов в нашей работе.

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

💨 Последние пару недель я пробую свои силы в контесте coderun, не ставя цель войти в топ-20, а скорее с целью решить столько задач, сколько получится.

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

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

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

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

🌐 Попробовать свои силы можно здесь. Но пожалуйста, не обсуждайте решения задач с другими, ведь для самурая главное это путь (ещё и правила это запрещают).

😃 iOS Dev - поставьте какую-нибудь реакцию, если вам будет интересно почитать решения самых интересных задач после контеста
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉 В Foundation открыли исходный код и теперь каждый iOS-разработчик лично может его улучшить

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

🛠 В Apple выпустили в открытый доступ репозиторий, целью которого является создание унифицированной реализации Swift Foundation для всех платформ.

Многие типы, в том числе JSONEncoder, Calendar, TimeZone и Locale, являются совершенно новыми реализациями Swift.

🆕 FormatStyle и ParseStyle впервые доступны с открытым исходным кодом.

Качество и производительность - две самые важные цели в проекте.

Позднее в этом году ожидается реализация на Swift дополнительных важных базовых API, таких как URL, Bundle, FileManager, FileHandle, Process, SortDescriptor, SortComparator и других.

Реализация на Swift обеспечивает важные преимущества по сравнению с C и Objective-C.

Например, FormatStyle показал значительное улучшение на 150% в тесте форматирования со стандартным шаблоном даты и времени.

Foundation приветствует вклад сообщества, включая исправления ошибок, тесты, документацию и переносы на новые платформы.

И лично вы тоже можете поучаствовать.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Оптимизация приложения при использовании Network Reachability

Network Reachability — жизненно важный аспект приложений, работающих с использованием интернета.

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

📖 В этом материале рассматривается несколько важных аспектов:

1️⃣ Почему стоит дожидаться самого подключения вместо предварительной проверки.

2️⃣ timeoutIntervalForRequest и timeoutIntervalForResource, в чём их разница.

3️⃣ Как обрабатывать сетевые ошибки.

4️⃣ Когда именно следует воспользоваться проверкой доступности сети (спойлер, нужен NWPathMonitor).

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