Telegram Web Link
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
This media is not supported in your browser
VIEW IN TELEGRAM
Создание кастомного компонента на SwiftUI: Segmented Control

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

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

📖 Именно об этом на хабре рассказывает Тёма Загоскин на примере создания Segmented Control.

🛠 А вот здесь пример финального кода.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как быстро разобраться в основах Swift Concurrency

📖 Идеальная аудитория этого материала — опытный разработчик, знакомый с концепциями параллелизма и заинтересованный в изучении синтаксиса и API Swift Concurrency.

В нём перечислены примеры работы с async/await, интеграции с существующим кодом, а также описано, как работать с группами задач.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
CoreData для базовых задач одним методом

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

Как устроить работу с CoreData таким образом, чтобы минимизировать потенциальные лаги при работе с данными?

1️⃣ Чтение должно происходить из main-очереди для достижения отзывчивого и актуального UI.

2️⃣ Запись, изменение и сохранение информации должно производиться вне main-очереди.

3️⃣ Необходимо иметь понимание, когда операция записи закончила свое выполнение и в БД все готово к выполнению дальнейших действий с актуальными данными.

4️⃣ Запись должна происходить синхронно друг за другом, чтобы избежать крешей и неконсистентности данных.

5️⃣ Решение должно предоставлять удобное понятное API для взаимодействия.

6️⃣ Решение должно быть щадящее для новичков и, насколько это возможно, защищено от выстрелов в ногу.

📖 В этой статье автор делится своим опытом работы с CoreData, и предлагает решение, упрощающее работу с фреймворком.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Продвинутые переходы в SwiftUI: анимации на примерах с кодом

🧑‍💻 Важно понимать, как создавать анимированные переходы. Как их настраивать, комбинировать и проверять работу.

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

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

👨‍💻 А вот здесь есть gist с кодом, который можно попробовать завести и кастомизировать.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆 Я прошёл CodeRun, решив все задачи!
Нужно организовать свой буткемп, получается?😅

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

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

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

Очень много сил ушло и на задачу с разноцветными дорогами.

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

Ровно до момента, пока не наткнулся на салон Health & Sun.
Что может быть плохого в соляриях, спросите вы?

А например, то, что вечера четверга и пятницы могут уйти на изучение:
📖 Раз, два, три, четыре.

Но в итоге и этот узел был распутан.

На этом пути было сложно, были извилистые повороты, но как известно: у страха глаза велики, и главное - начать.

Про буткемп это, конечно же, шутка. 😎

😃 iOS Dev - я уважаю правила, и обязательно поделюсь решениями после окончания контеста, который будет идти до июля.

Буду рад вашей поддержке! 🏆❤️‍🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
Популярность CocoaPods продолжает расти, несмотря на продвижение Swift Package Manager

Казалось бы, с 2015 года использование CocoaPods должно пойти на спад, ведь именно тогда появился SPM, но именно так и случилось все не совсем так.

Общее количество скачиваний всех репозиториев превысило 70 миллионов, и это несмотря на:

1️⃣ Огромный импакт Apple в продвижение своей экосистемы, и в частности, Swift Package manager.

2️⃣ Периодические проблемы с совместимостью. В том числе, даже в последнем Xcode 14.3. Хотя для этого и помогает press f (🫡) в прямом смысле.

3️⃣ Недавний вклад Apple в поддержку Swift Package Index.

Конечно, мы не знаем точных цифр и использований SPM на текущий момент, но факт остаётся фактом: cocoapods пока ещё не собирается упускать лидирующие позиции.

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

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

Однако не так давно Apple представила новый стандарт, доступ к которому осуществляется через OSLog.

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

Унифицированное ведение журнала обеспечивает ряд улучшений:

🔘 Каждое сообщение может быть зарегистрировано на соответствующем уровне, включая: default, error, debug и info.

🔘 Сообщения сгруппированы по подсистемам и категориям для эффективного поиска.

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

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

📖 В этом материале более детально разбираются опции и возможности OSLog.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Реализация универсальных ссылок в iOS

Универсальные ссылки позволяют вам ссылаться на контент внутри вашего приложения, когда пользователь открывает определенный URL-адрес.

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

Разница между deeplinks и universal links может быть описана простым примером:

Deeplink: recipeapp://open-recipe?name=recipename
Universal Link: www.recipes.com/recipename

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

📖 Не лишним будет напомнить и про способ реализации автозаполнения паролей.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Как создать PDF Reader в iOS без сторонних библиотек

Полезно будет узнать про базовый подход к отображению PDF-файла, а затем усовершенствать реализацию, используя UIDocumentPickerViewController для более удобного взаимодействия с пользователем.

📖 Для отображения файла PDF можно использовать использовать класс PDFView из фреймворка PDFKit.

📖 В этом пошаговом материале John Codeos на примерах объясняет все этапы создания несложного ридера.

🛠 Финальный проект доступен на Github.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Слушайте, недавно же Telegram выкатил новую штуку — шаринг папок, и я просто не могу не показать свой список!

🤩 Топовые ресуры по iOS-разработке.

Тут представлены и крутые сообщества (привет Coffee&Code) и авторы книг — все, что нужно для более простого и в то же время широкого изучения iOS.

Выбирайте то, что нужно прямо сейчас, или отфильтруйте потом:

🔗 Всё, что нужно для разработки в одном списке.

UPD. Если по нажатию на ссылку не появляется выбор каналов, то обновите Telegram до последней версии 😎

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
2024/10/02 18:19:18
Back to Top
HTML Embed Code: