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
🎉 В 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
🔥52🎉15👍9👏95🤔1🤩1
Оптимизация приложения при использовании Network Reachability

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

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

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

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥42👏2💯2
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
👍155👏3💯2🆒2🔥1🎉1🎅1
Как быстро разобраться в основах Swift Concurrency

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍83💯2🎉1🫡1
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
👍15🔥42👏2🎉1🤩1👌1🌚1
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
🔥14👍62💯21👏1🎉1🤩1
🏆 Я прошёл CodeRun, решив все задачи!
Нужно организовать свой буткемп, получается?😅

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

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

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

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

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

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

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

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

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

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

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

Буду рад вашей поддержке! 🏆❤️‍🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆627👍7🔥6❤‍🔥3👏3😁2🎉2🌚2🆒1
Популярность 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
👍19🫡10🤯4🔥31🎉1💯1🏆1
Понятное и доступное для поиска логирование в 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