ru
Feedback
iOS Dev

iOS Dev

Открыть в Telegram

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

Больше
8 000
Подписчики
-124 часа
+467 дней
+7930 день
Архив постов
iOS Dev
8 001
Performance Trace Profiles: отладка проблем производительности, которые сложно воспроизвести Одна из самых сложных частей нашей работы — поиск багов, которые встречаются у единичных пользователей, но команда разработчиков не может их повторить. Среди них: фризы пользовательского интерфейса, проблемы с многопоточностью/параллелизм, проблемы ЦП/памяти и так далее. Как следует из названия, Performance Trace Profiles предоставляют возможности отслеживания производительности вашего устройства. Более того, с их помощью можно запускать системную трассировку всего, что в данный момент работает на телефоне, которую вы можете позже извлечь и открыть в «Инструментах». 📖 В этом материале рассматриваются нужные шаги для работы с профилями, инструкция для анализа и несколько советов. Но будьте осторожны, ведь трассировка будет фиксировать и избыточную информацию. 😃 iOS Dev

iOS Dev
8 001
О чистоте кода и японских урнах Даже плохой код может работать. Но с течением времени скорость разработки начнет снижаться и в какой-то момент может потребоваться активизация огромных ресурсов для того, чтобы все это починить и вернуться к нормальным темпам. 🇯🇵 Находясь в Японии, многие туристы обратят внимание на невероятную чистоту, а еще на практически полное отсутствие урн на улицах и это неспроста. Дело в том, что с ранних лет японцев учат воспринимать уборку не как наказание, а скорее как некую игру для формирования привычек. ☕️ Например, в «Книге о чае» Окакуры Какузо, классическом труде о чайной церемонии есть такая цитата «…всё абсолютно чисто. Ни пылинки в самом темном углу. Потому что если найти пылинку, то хозяин — не чайный мастер». В нашей разработке также стоит учитывать чистоту кода, и не стоит недооценивать правило трех. Но не нужно слишком рьяно относиться к этому, так как в гонке за бесконечными улучшениями кода бизнес не будет ждать. Поэтому как и в чайной церемонии, в разработке должен быть баланс. А куда будет склоняться чаша весов, можно определить в будущих спринтах. 😃 iOS Dev

iOS Dev
8 001
Реализация эффекта адаптивного блюра Многие пользователи iOS обращали внимание на необычный стиль блюра на системной шторке. Оказывается, его можно повторить с помощью приватного апи, используя CAFilter. 🛠Janum Trivedi, автор опенсорсного Wave, поделился тонкостями реализации в своем репозитории. В комментариях к посту заметили, что это можно сделать и комбинацией SceneKit + Metal, и с помощью visual effect view. Кстати, в своей реализации я использовал маску для градиентного блюра. 😃 iOS Dev

iOS Dev
8 001
Как связаны все репозитории об iOS-разработке на Github Оказывается, пользователь с ником @anvaka задумался об этом и создал интерактивную карту. На ней представлен целый остров под названием Swiftoria, на котором можно найти все репозитории, относящиеся к iOS, а еще кроме этого можно посмотреть на их взаимосвязи. 📖 Об идее и используемых технологиях для создания можно прочесть здесь. 🌐 А вот тут доступна интерактивная версия. 😃 iOS Dev

iOS Dev
8 001
Необычный способ найти причину проблемы из-за нехватки свободного места на девайсе Пока я нахожусь в отпуске (и делаю очень много фотографий), задумался над тем, как корректно обработать ситуации, когда на айфоне уже не остаётся доступного пространства и что с этим можно сделать при работе над мессенджером или каким-нибудь редактором. Оказывается, эту проблему можно воспроизвести и на симуляторе. Для этого нужно: 1️⃣ Обратиться к hdutil hdiutil create -size 1m -fs HFS+ /tmp/app-storage-test.dmg 2️⃣ Использовать созданный образ для симулятора, предварительно получив адрес documentsdirectory. hdiutil attach /tmp/app-storage-test.dmg -mountpoint “полученный путь” 3️⃣ Добавить контент как обычно. 4️⃣ После выявления проблемного кейса удалить тестовый образ, используя команду для получения списка diskutil list. И избавиться от него с помощью hdiutil detach. 🔗 Хороший разбор сценария целиком доступен тут. 😃 iOS Dev

iOS Dev
8 001
🎈Сегодня мой День Рождения В нашей жизни каждый день приходится решать задачи разной степени важности. Когда-то, только попав в школу, в своем родном поселке я ждал после уроков, чтобы в единственном компьютерном классе в радиусе 10 км попросить запустить Dune 2000, чтобы посмотреть на этот дивный новый мир! Получалось далеко не всегда, но до своего домашнего пк было очень далеко. Вообще у всех разный старт. И когда говорят, что Билл Гейтс бросил универ и стал миллиардером, уделите внимание его родителям: известному адвокату и члену совета директоров банка. Ах да, его дед был главной нацбанка США, но это мелочи. Для меня же образование было единственным способом пробиться куда-то, поэтому я до сих пор продолжаю учиться, и одно из следствий этого – канал, который вы читаете. Возвращаясь к истории с дюной, намного проще было собраться и поиграть в квадрат где-нибудь рядом. Кто-то сейчас знает, что это? Прошло много времени и сейчас среди рабочих тасок управление многопоточкой, шифрованием, анимациями и поддержание всего этого в нормальном состоянии. Для меня кажется обыденным постоянно быть на связи и решать что-то в срочном порядке, например, проблемы с эпловским ревью. Но знаете, через 10-20 лет о наших переработках будут помнить только близкие люди. А о рабочих подвигах только мы (возможно). Я не очень люблю отмечать день рождения. Для меня важнее не символическая дата, а то, что мы можем сказать о своих поступках в прошлом, настоящем и в будущем. ❤️ Спасибо, что читаете этот канал. Как и прежде, здесь я продолжу делиться своим опытом и знаниями. 👩‍🎓 И вы можете помочь мне сделать его лучше (обещаю прочесть каждый ваш ответ). 🌐 Сделать канал лучше. 😃 iOS Dev

iOS Dev
8 001
🇯🇵 Apple Marunouchi в Токио Сейчас я в отпуске, и наконец получилось добраться до страны восходящего солнца. Несмотря на не
+9
🇯🇵 Apple Marunouchi в Токио Сейчас я в отпуске, и наконец получилось добраться до страны восходящего солнца. Несмотря на невероятное количество достопримечательностей, невозможно было не зайти в крупнейший эпл стор в мегаполисе. Он открылся в 2019 году и более чем половина из 130 сотрудников приехали сюда из разных районов Японии. А если сложить их знания, окажется, что работники могут помочь вам аж на 15 разных языках. Внутри оконные проемы отделаны бамбуком, чтобы интегрировать высокий темп жизни снаружи и отдать дань уважения традициям страны. Атриум в центре выступает сердцем магазина и соединяет оба этажа. В отличие от моих прошлых постов о двух магазинах в Нью-Йорке и в Лос-Анджелесе можно сказать, что здесь торжествует минимализм. Но знаете, здесь это как нельзя кстати. 😃 iOS Dev

iOS Dev
8 001
Рендеринг сцены Моаны (мультфильма Диснея) менее чем за 10 000 строк кода Swift После того, как Walt Disney выпустила описани
Рендеринг сцены Моаны (мультфильма Диснея) менее чем за 10 000 строк кода Swift После того, как Walt Disney выпустила описание сцены острова в Моане, были предприняты некоторые усилия по его визуализации помимо Диснеевского Hyperion. Энтузиаст пошёл ещё дальше и выпустил собственный рендерер на Swift (с несколькими строками на C++ для вызова OpenEXR и Ptex). 📖 В большом исследовании он пишет, как пришёл к этому, какие оптимизации принял, и почему Swift оказался предпочтительным выбором. 📖 А в текущей версии он рассказывает, как он смог ускорить процесс рендеринга с 26 часов в начале до 78 минут. 🛠 Вы не поверите, но есть даже исходный код. 😃 iOS Devа что вы сможете делать с помощью Swift?

iOS Dev
8 001
Почему Apple запретила своим сотрудникам использовать ChatGPT и другие нейросети Некоторое время назад я писал, почему использование ChatGPT мешает жить StackOverflow и не только. Буквально сегодня в сторе появился официальный iOS-клиент, который уже на подступах к первым позициям во всех чартах. И как нельзя кстати появилась вот эта новость на базе информации от The Wall Street Journal. Мартовская ошибка позволяла пользователям видеть историю чатов других пользователей ChatGPT, и только после этого инцидента ChatGPT добавил возможность разрешить пользователям отключать историю чатов и не участвовать в обучении модели ИИ. Если инженеры Apple используют эти платформы, нет никакой гарантии, что их код (или ваш) не попадёт к кому-то другому или даже не будет использован конкурентами. То же самое относится и к другой конфиденциальной информации, поскольку сотрудники могут использовать ChatGPT, например, для составления электронных писем. Apple не единственная компания, запретившая ChatGPT. Например, JPMorgan Chase и Verizon также ограничили использование таких платформ. Кстати, в отчете упоминается, что Apple также работает над собственной моделью ИИ. Так оно или нет, узнаем совсем скоро, WWDC приближается. 😃 iOS Dev

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

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

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

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

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

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

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

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

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