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

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

#ios #mobile #swift
Download 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
👍14🔥42👏1🎉1💯1👨‍💻1
Реализация универсальных ссылок в 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
👍164🔥41👏1🤔1🎉1💯1
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
👍20🔥32👏2🎉1💯1🤗1
Слушайте, недавно же Telegram выкатил новую штуку — шаринг папок, и я просто не могу не показать свой список!

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

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉19❤‍🔥76😐5👍3🔥1👏1😁1🫡1🆒1💘1
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация эффекта Parallax в SwiftUI с использованием CoordinateSpace

Хэдеры в Parallax-стиле — это популярный вариант дизайна, который можно использовать для создания визуально привлекательных интерфейсов в мобильных приложениях.

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

📖 Тут есть пример реализации на SwiftUI.
📷 Для гифки использовал эту картинку.

📖 А вот тут можно узнать и другой способ создания такого эффекта.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍165🔥2🎉2👏1🤩1💯1
Тут вот какое дело.

Этот канал был создан более трёх лет назад, но начал развиваться только в 2022. Об этом ниже.

Я Виктор Грушевский — автор этого канала, в iOS-разработке с 2011 года (примерно тогда был переход с iOS 4 на iOS 5).

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

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

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

Можно сказать, что я технарь до мозга костей, но, поверьте, всё куда сложнее.

Одно из качеств, которые считаю своей сильной стороной — упорство (в разумной степени). Например, в CodeRun. В нашей с вами жизни не всегда удаётся побеждать, но главное начать, разве нет?

Иногда я делюсь своими проектами с сообществом: например, решением для управления отзывами (и локализациями) или полузабавным способом посмотреть распределение ваших файлов в проекте. А игроки в спортивное ЧГК скорее всего знают о знатоке.

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

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

Для этого я пишу посты на хабр, делаю подборки из того, что вам пригодится: память, ссылки, side table и огромный пост про многопоточность и добавляю необычные материалы, например, как на самом деле реализовано управление громкостью в ваших наушниках.

Я против токсичности, против обмана и навязанных мнений.

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

Для этого и нужен этот канал.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
100👍37🔥13❤‍🔥4👏2🤗2🤔1🌚1🏆1
Измерение производительности приложений iOS в Uber: техники и советы

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

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

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

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

Например, для измерения времени до main() в приложении после создания процесса используется вызов ядра Mach:

C/C++
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()};
struct kinfo_proc kp;
size_t size = sizeof (kp);
// Time in Microseconds
kp.kp_proc.p_starttime.tv.sec * 1000000 + kp.kp_proc.p_starttime.tv_usec


Из интересных решений: данные MetricKit не обрабатываются на клиенте, а отправляются в полуструктурированном формате JSON на серверную часть.

Грамотное исследование этих метрик позволяет определять, что сотни изменений кода и десятки функций не замедлят запуск приложения.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍7👏32🤯1🎉1🆒1
Реализация мгновенного взаимодействия с pan-жестами

Это сложнее, чем кажется, поскольку UIPanGestureRecognizer не сразу распознает начало жеста.

Если вы просто прикаснетесь пальцем к движущемуся объекту, технически это не «панорамирование», поэтому жест будет проигнорирован. И хоть это ожидаемое поведение согласно докам, в результате может получиться недостаточно отзывчивое взаимодействие.

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

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

Это около 0,75 секунды, что очень долго для жеста (на устройстве с частотой 120 Гц это 90 кадров, отображаемых до того, как ваш ввод будет распознан!).

📖 В этом материале Christian Selig (создатель Apollo — крутого клиента для Reddit) рассказывает о создании собственного распознавателя жестов, который работает поверх остальных и обходит проблему паузы при взаимодействии.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥114🤯3👏2🎉1💯1
Ranges в Swift: примеры и неочевидные моменты

Ranges позволяют нам писать элегантный код Swift с помощью операторов диапазона.

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

Важно понимать, когда и какой тип оператора диапазона стоит использовать, и как именно можно избежать неприятностей с index is out of range.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3💯311👏1🎉1
❗️Вышел Xcode 14.3.1 RC с важными фиксами

1️⃣ При сборках с 14.3 девайсы на iOS 13, использующие протоколы Objective-C из Swift, крашились при запуске.
С этой проблемой мы столкнулись и на рабочем проекте.

2️⃣ Исправили краш на iOS 15, связанный со Swift Concurrency.

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

🔗 Детально весь список обновлений здесь.

🛠 Скачать обновлённый Xcode уже можно на сайте.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥62🎉1🙏1💯1
Почему Apple запретила своим сотрудникам использовать ChatGPT и другие нейросети

Некоторое время назад я писал, почему использование ChatGPT мешает жить StackOverflow и не только.

Буквально сегодня в сторе появился официальный iOS-клиент, который уже на подступах к первым позициям во всех чартах. И как нельзя кстати появилась вот эта новость на базе информации от The Wall Street Journal.

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

Если инженеры Apple используют эти платформы, нет никакой гарантии, что их код (или ваш) не попадёт к кому-то другому или даже не будет использован конкурентами.

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

Apple не единственная компания, запретившая ChatGPT. Например, JPMorgan Chase и Verizon также ограничили использование таких платформ.

Кстати, в отчете упоминается, что Apple также работает над собственной моделью ИИ.

Так оно или нет, узнаем совсем скоро, WWDC приближается.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍973👏1💯1
Рендеринг сцены Моаны (мультфильма Диснея) менее чем за 10 000 строк кода Swift

После того, как Walt Disney выпустила описание сцены острова в Моане, были предприняты некоторые усилия по его визуализации помимо Диснеевского Hyperion.

Энтузиаст пошёл ещё дальше и выпустил собственный рендерер на Swift (с несколькими строками на C++ для вызова OpenEXR и Ptex).

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

📖 А в текущей версии он рассказывает, как он смог ускорить процесс рендеринга с 26 часов в начале до 78 минут.

🛠 Вы не поверите, но есть даже исходный код.

😃 iOS Devа что вы сможете делать с помощью Swift?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥34🤯19👍65👏4🤩1🌚1💯1🫡1
🇯🇵 Apple Marunouchi в Токио

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

Он открылся в 2019 году и более чем половина из 130 сотрудников приехали сюда из разных районов Японии. А если сложить их знания, окажется, что работники могут помочь вам аж на 15 разных языках.

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

В отличие от моих прошлых постов о двух магазинах в Нью-Йорке и в Лос-Анджелесе можно сказать, что здесь торжествует минимализм. Но знаете, здесь это как нельзя кстати.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥36🔥15👍7😍42🤩2👏1💯1🤗1