es
Feedback
iOS Dev

iOS Dev

Ir al canal en Telegram

👨‍💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift

Mostrar más
7 874
Suscriptores
-124 horas
Sin datos7 días
-5130 días
Archivo de publicaciones
iOS Dev
7 876
❗️Вышел Xcode 14.3.1 RC с важными фиксами 1️⃣ При сборках с 14.3 девайсы на iOS 13, использующие протоколы Objective-C из Swi
❗️Вышел Xcode 14.3.1 RC с важными фиксами 1️⃣ При сборках с 14.3 девайсы на iOS 13, использующие протоколы Objective-C из Swift, крашились при запуске. С этой проблемой мы столкнулись и на рабочем проекте. 2️⃣ Исправили краш на iOS 15, связанный со Swift Concurrency. Кроме этого, избавились от проблем с отображением альтернативных иконок на планшетах и улучшили поведение на макоси. 🔗 Детально весь список обновлений здесь. 🛠 Скачать обновлённый Xcode уже можно на сайте. 😃 iOS Dev

iOS Dev
7 876
Ranges в Swift: примеры и неочевидные моменты Ranges позволяют нам писать элегантный код Swift с помощью операторов диапазона
Ranges в Swift: примеры и неочевидные моменты Ranges позволяют нам писать элегантный код Swift с помощью операторов диапазона. Скорее всего в первый раз вы их использовали для выборки символов из строки, но на самом деле возможности куда шире. Важно понимать, когда и какой тип оператора диапазона стоит использовать, и как именно можно избежать неприятностей с index is out of range. 📖 Antoine (создатель одноимённого сайта) в этой статье разбирает примеры, а также то, что может произойти, когда в вашей строке содержатся, например, эмодзи. 😃 iOS Dev

iOS Dev
7 876
Реализация мгновенного взаимодействия с pan-жестами Это сложнее, чем кажется, поскольку UIPanGestureRecognizer не сразу распо
Реализация мгновенного взаимодействия с pan-жестами Это сложнее, чем кажется, поскольку UIPanGestureRecognizer не сразу распознает начало жеста. Если вы просто прикаснетесь пальцем к движущемуся объекту, технически это не «панорамирование», поэтому жест будет проигнорирован. И хоть это ожидаемое поведение согласно докам, в результате может получиться недостаточно отзывчивое взаимодействие. 🤩 У Натана Гиттера есть отличная статья, в которой показаны примеры кода для многих подобных ситуаций, в том числе с реализацией кастомного жеста. Некоторое время это работало, но в последней версии iOS были внесены некоторые изменения. Например, снизу экрана может быть задержка между обновлением состояния до .began и уведомлением обработчика жестов. Это около 0,75 секунды, что очень долго для жеста (на устройстве с частотой 120 Гц это 90 кадров, отображаемых до того, как ваш ввод будет распознан!). 📖 В этом материале Christian Selig (создатель Apollo — крутого клиента для Reddit) рассказывает о создании собственного распознавателя жестов, который работает поверх остальных и обходит проблему паузы при взаимодействии. 😃 iOS Dev

iOS Dev
7 876
Измерение производительности приложений iOS в Uber: техники и советы Для запуска приложения инженеры специально измеряют прод
Измерение производительности приложений 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

iOS Dev
7 876
Тут вот какое дело. Этот канал был создан более трёх лет назад, но начал развиваться только в 2022. Об этом ниже. Я Виктор Грушевский — автор этого канала, в iOS-разработке с 2011 года (примерно тогда был переход с iOS 4 на iOS 5). На протяжении своего пути мне всегда нравилось создавать приложения, настраивать анимации, проектировать архитектуру и искать неочевидные пути выхода из сложных технических ситуаций. Эти стремления отразились и в моём аккаунте разработчика, и в попытках участвовать в контестах среди крутых разработчиков. Я никогда не считал алгоритмы лишними в разработке, улучшение скорости работы вашего приложения на 3 секунды сэкономит несколько тысяч часов, если им пользуются миллионы. Можно сказать, что я технарь до мозга костей, но, поверьте, всё куда сложнее. Одно из качеств, которые считаю своей сильной стороной — упорство (в разумной степени). Например, в CodeRun. В нашей с вами жизни не всегда удаётся побеждать, но главное начать, разве нет? Иногда я делюсь своими проектами с сообществом: например, решением для управления отзывами (и локализациями) или полузабавным способом посмотреть распределение ваших файлов в проекте. А игроки в спортивное ЧГК скорее всего знают о знатоке. В 2022 году произошли некоторые события в мире, которые заставили смотреть на мир иначе, хотя я и прежде не питал никаких иллюзий. Я очень хочу, чтобы этот канал стал ресурсом, где без грязи, фальши и сказок о простом попадании в IT вы смогли увидеть примеры собеседований, проектов и настоящих трудностей разработки. Для этого я пишу посты на хабр, делаю подборки из того, что вам пригодится: память, ссылки, side table и огромный пост про многопоточность и добавляю необычные материалы, например, как на самом деле реализовано управление громкостью в ваших наушниках. Я против токсичности, против обмана и навязанных мнений. А для решения задач важно выбрать подходящий инструмент. И если вам нужно забить гвоздь, не спрашивайте помощи у Chat GPT, а берите чёртов молоток. Для этого и нужен этот канал. 😃 iOS Dev

iOS Dev
7 876
Реализация эффекта Parallax в SwiftUI с использованием CoordinateSpace Хэдеры в Parallax-стиле — это популярный вариант дизайна, который можно использовать для создания визуально привлекательных интерфейсов в мобильных приложениях. Такой эффект создает иллюзию глубины и движения при использовании скролла пользователем. 📖 Тут есть пример реализации на SwiftUI. 📷 Для гифки использовал эту картинку. 📖 А вот тут можно узнать и другой способ создания такого эффекта. 😃 iOS Dev

iOS Dev
7 876
Слушайте, недавно же Telegram выкатил новую штуку — шаринг папок, и я просто не могу не показать свой список! 🤩 Топовые ресуры по iOS-разработке. Тут представлены и крутые сообщества (привет Coffee&Code) и авторы книг — все, что нужно для более простого и в то же время широкого изучения iOS. Выбирайте то, что нужно прямо сейчас, или отфильтруйте потом: 🔗 Всё, что нужно для разработки в одном списке. 😃 iOS Dev

iOS Dev
7 876
Как создать PDF Reader в iOS без сторонних библиотек Полезно будет узнать про базовый подход к отображению PDF-файла, а затем усовершенствать реализацию, используя UIDocumentPickerViewController для более удобного взаимодействия с пользователем. 📖 Для отображения файла PDF можно использовать использовать класс PDFView из фреймворка PDFKit. 📖 В этом пошаговом материале John Codeos на примерах объясняет все этапы создания несложного ридера. 🛠 Финальный проект доступен на Github. 😃 iOS Dev

iOS Dev
7 876
Weekend Offer для мобильных разработчиков от VK Получите возможность присоединиться к командам VK Мессенджера, VK Видео, Почт
Weekend Offer для мобильных разработчиков от VK Получите возможность присоединиться к командам VK Мессенджера, VK Видео, Почты Mail.ru и Облака Mail.ru всего за одни выходные — 20–21 мая. Разработчики требуются на направления iOS и Android. Отправляйте отклики до 18 мая на сайте. 😃 iOS Dev

iOS Dev
7 876
Реализация универсальных ссылок в iOS Универсальные ссылки позволяют вам ссылаться на контент внутри вашего приложения, когда
Реализация универсальных ссылок в iOS Универсальные ссылки позволяют вам ссылаться на контент внутри вашего приложения, когда пользователь открывает определенный URL-адрес. При этом рекомендуется перенаправлять пользователей внутрь, чтобы предоставить им наиболее интегрированный мобильный опыт. Разница между deeplinks и universal links может быть описана простым примером: Deeplink: recipeapp://open-recipe?name=recipename Universal Link: www.recipes.com/recipename 📖 А вот здесь можно прочесть о том, как корректно поддерживать такие ссылки и как их обрабатывать в вашем приложении. 📖 Не лишним будет напомнить и про способ реализации автозаполнения паролей. 😃 iOS Dev

iOS Dev
7 876
Понятное и доступное для поиска логирование в Swift с помощью OSLog Когда дело доходит до возможности логирования в приложени
Понятное и доступное для поиска логирование в Swift с помощью OSLog Когда дело доходит до возможности логирования в приложениях Swift и iOS, первым, что приходит на ум, могут быть print и NSLog. Однако не так давно Apple представила новый стандарт, доступ к которому осуществляется через OSLog. В настоящее время это рекомендуемый способ, обеспечивающий эффективный способ сбора информации в наших приложениях. Унифицированное ведение журнала обеспечивает ряд улучшений: 🔘 Каждое сообщение может быть зарегистрировано на соответствующем уровне, включая: default, error, debug и info. 🔘 Сообщения сгруппированы по подсистемам и категориям для эффективного поиска. 🔘 Система предназначена для повышения производительности, а журналы отображаются только при чтении. 🔘 Конфиденциальность пользователей тщательно соблюдается, при этом содержимое динамических строк должно быть явно помечено как public, иначе оно будет отредактировано в любых логах. 📖 В этом материале более детально разбираются опции и возможности OSLog. 😃 iOS Dev

iOS Dev
7 876
Популярность CocoaPods продолжает расти, несмотря на продвижение Swift Package Manager Казалось бы, с 2015 года использование
Популярность 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

iOS Dev
7 876
🏆 Я прошёл CodeRun, решив все задачи! Нужно организовать свой буткемп, получается?😅 В последнем апдейте про это приключение
🏆 Я прошёл CodeRun, решив все задачи! Нужно организовать свой буткемп, получается?😅 В последнем апдейте про это приключение мне оставалось несколько сложных и средних задач, а также одна простая. Максимум на одну задачу ушло несколько десятков попыток, зато некоторые сложные удалось сдать практически сразу после обработки корнеркейсов. Первый большой шаг вперёд был сделан в кажущейся лёгкой задаче про минусы. Очень много сил ушло и на задачу с разноцветными дорогами. Но после этого хотя бы замаячил горизонт, что с контестом получится справиться. Ровно до момента, пока не наткнулся на салон Health & Sun. Что может быть плохого в соляриях, спросите вы? А например, то, что вечера четверга и пятницы могут уйти на изучение: 📖 Раз, два, три, четыре. Но в итоге и этот узел был распутан. На этом пути было сложно, были извилистые повороты, но как известно: у страха глаза велики, и главное - начать. Про буткемп это, конечно же, шутка. 😎 😃 iOS Dev - я уважаю правила, и обязательно поделюсь решениями после окончания контеста, который будет идти до июля. Буду рад вашей поддержке! 🏆❤️‍🔥

iOS Dev
7 876
Продвинутые переходы в SwiftUI: анимации на примерах с кодом 🧑‍💻 Важно понимать, как создавать анимированные переходы. Как их настраивать, комбинировать и проверять работу. Для этого можно изучить уже существующие виды анимаций, и на их основе попробовать создать что-то своё. 📖 В этой статье наглядно разбираются различные варианты использования переходов, включая создание кастомных эффектов и их комбинаций. 👨‍💻 А вот здесь есть gist с кодом, который можно попробовать завести и кастомизировать. 😃 iOS Dev

iOS Dev
7 876
CoreData для базовых задач одним методом Системный фреймворк имеет высокий порог входа и много неочевидных моментов, которые
CoreData для базовых задач одним методом Системный фреймворк имеет высокий порог входа и много неочевидных моментов, которые обязательно всплывут при масштабировании приложения. Как устроить работу с CoreData таким образом, чтобы минимизировать потенциальные лаги при работе с данными? 1️⃣ Чтение должно происходить из main-очереди для достижения отзывчивого и актуального UI. 2️⃣ Запись, изменение и сохранение информации должно производиться вне main-очереди. 3️⃣ Необходимо иметь понимание, когда операция записи закончила свое выполнение и в БД все готово к выполнению дальнейших действий с актуальными данными. 4️⃣ Запись должна происходить синхронно друг за другом, чтобы избежать крешей и неконсистентности данных. 5️⃣ Решение должно предоставлять удобное понятное API для взаимодействия. 6️⃣ Решение должно быть щадящее для новичков и, насколько это возможно, защищено от выстрелов в ногу. 📖 В этой статье автор делится своим опытом работы с CoreData, и предлагает решение, упрощающее работу с фреймворком. 😃 iOS Dev

iOS Dev
7 876
Как быстро разобраться в основах Swift Concurrency 📖 Идеальная аудитория этого материала — опытный разработчик, знакомый с к
Как быстро разобраться в основах Swift Concurrency 📖 Идеальная аудитория этого материала — опытный разработчик, знакомый с концепциями параллелизма и заинтересованный в изучении синтаксиса и API Swift Concurrency. В нём перечислены примеры работы с async/await, интеграции с существующим кодом, а также описано, как работать с группами задач. 🧐 Кроме этого, доступно объясняется, как корректно задавать приоритеты задачам и проверять их при выполнении. 😃 iOS Dev

iOS Dev
7 876
Создание кастомного компонента на SwiftUI: Segmented Control Уверен, что практически каждый, кто пытался создавать свой контрол так, как нужно по дизайну, сталкивался с теми или иными подводными камнями. Иногда простое на первый взгляд решение в дизайне может заставить углубиться в системную реализацию и окажется, что проще создать своё. 📖 Именно об этом на хабре рассказывает Тёма Загоскин на примере создания Segmented Control. 🛠 А вот здесь пример финального кода. 😃 iOS Dev

iOS Dev
7 876
Оптимизация приложения при использовании Network Reachability Network Reachability — жизненно важный аспект приложений, работ
Оптимизация приложения при использовании Network Reachability Network Reachability — жизненно важный аспект приложений, работающих с использованием интернета. У пользователей не всегда будет хорошее (и стабильное) подключение, поэтому очень важно оптимизировать приложение для плохих условий. 📖 В этом материале рассматривается несколько важных аспектов: 1️⃣ Почему стоит дожидаться самого подключения вместо предварительной проверки. 2️⃣ timeoutIntervalForRequest и timeoutIntervalForResource, в чём их разница. 3️⃣ Как обрабатывать сетевые ошибки. 4️⃣ Когда именно следует воспользоваться проверкой доступности сети (спойлер, нужен NWPathMonitor). 😃 iOS Dev

iOS Dev
7 876
🎉 В Foundation открыли исходный код и теперь каждый iOS-разработчик лично может его улучшить Сегодня произошло важнейшее соб
🎉 В 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

iOS Dev
7 876
Последняя возможность попасть на обучение iOS в Школу Мобильной Разработки от Академии Яндекса🔥 За 3 месяца обучения вы прокачаете профессиональные скиллы, пообщаетесь с экспертами и другими увлечёнными студентами, погрузитесь в задачи IT-индустрии. Участие в школах бесплатное, занятия можно совмещать с работой или учёбой. Обучение состоит из двух этапов: 🔸 Первый этап (8 недель) — онлайн-часть с лекциями, семинарами и практическими занятиями; 🔸 Второй этап (4 недели) — офлайн-часть в офисах Яндекса: непрерывный хакатон и работа в командах над реальными проектами. Школа абсолютно бесплатная. На втором этапе для студентов из других городов компания оплатит перелет и проживание. После Школы у каждого студента есть возможность пройти отбор на стажировку или в штат по фаст-треку. 🌐 Чтобы попасть в школу, надо подать заявку и сделать тестовое. Прием заявок и тестовых открыт до 27 апреля включительно. Сами занятия начнутся в начале лета. Этот проект отличная возможность прокачать свои навыки, а уже после этого можно побороться и за призы в соревнованиях. 😃 iOS Dev