This media is not supported in your browser
VIEW IN TELEGRAM
Реализация эффекта Parallax в SwiftUI с использованием CoordinateSpace
Хэдеры в Parallax-стиле — это популярный вариант дизайна, который можно использовать для создания визуально привлекательных интерфейсов в мобильных приложениях.
Такой эффект создает иллюзию глубины и движения при использовании скролла пользователем.
📖 Тут есть пример реализации на SwiftUI.
📷 Для гифки использовал эту картинку.
📖 А вот тут можно узнать и другой способ создания такого эффекта.
😃 iOS Dev
Хэдеры в Parallax-стиле — это популярный вариант дизайна, который можно использовать для создания визуально привлекательных интерфейсов в мобильных приложениях.
Такой эффект создает иллюзию глубины и движения при использовании скролла пользователем.
📖 Тут есть пример реализации на SwiftUI.
📷 Для гифки использовал эту картинку.
📖 А вот тут можно узнать и другой способ создания такого эффекта.
Please open Telegram to view this post
VIEW IN TELEGRAM
Тут вот какое дело.
Этот канал был создан более трёх лет назад, но начал развиваться только в 2022. Об этом ниже.
Я Виктор Грушевский — автор этого канала, в iOS-разработке с 2011 года (примерно тогда был переход с iOS 4 на iOS 5).
На протяжении своего пути мне всегда нравилось создавать приложения, настраивать анимации, проектировать архитектуру и искать неочевидные пути выхода из сложных технических ситуаций.
Эти стремления отразились и в моём аккаунте разработчика, и в попытках участвовать в контестах среди крутых разработчиков.
Я никогда не считал алгоритмы лишними в разработке, улучшение скорости работы вашего приложения на 3 секунды сэкономит несколько тысяч часов, если им пользуются миллионы.
Можно сказать, что я технарь до мозга костей, но, поверьте, всё куда сложнее.
Одно из качеств, которые считаю своей сильной стороной — упорство (в разумной степени). Например, в CodeRun. В нашей с вами жизни не всегда удаётся побеждать, но главное начать, разве нет?
Иногда я делюсь своими проектами с сообществом: например, решением для управления отзывами (и локализациями) или полузабавным способом посмотреть распределение ваших файлов в проекте. А игроки в спортивное ЧГК скорее всего знают о знатоке.
В 2022 году произошли некоторые события в мире, которые заставили смотреть на мир иначе, хотя я и прежде не питал никаких иллюзий.
Я очень хочу, чтобы этот канал стал ресурсом, где без грязи, фальши и сказок о простом попадании в IT вы смогли увидеть примеры собеседований, проектов и настоящих трудностей разработки.
Для этого я пишу посты на хабр, делаю подборки из того, что вам пригодится: память, ссылки, side table и огромный пост про многопоточность и добавляю необычные материалы, например, как на самом деле реализовано управление громкостью в ваших наушниках.
Я против токсичности, против обмана и навязанных мнений.
А для решения задач важно выбрать подходящий инструмент. И если вам нужно забить гвоздь, не спрашивайте помощи у Chat GPT, а берите чёртов молоток.
Для этого и нужен этот канал.
😃 iOS Dev
Этот канал был создан более трёх лет назад, но начал развиваться только в 2022. Об этом ниже.
Я Виктор Грушевский — автор этого канала, в iOS-разработке с 2011 года (примерно тогда был переход с iOS 4 на iOS 5).
На протяжении своего пути мне всегда нравилось создавать приложения, настраивать анимации, проектировать архитектуру и искать неочевидные пути выхода из сложных технических ситуаций.
Эти стремления отразились и в моём аккаунте разработчика, и в попытках участвовать в контестах среди крутых разработчиков.
Я никогда не считал алгоритмы лишними в разработке, улучшение скорости работы вашего приложения на 3 секунды сэкономит несколько тысяч часов, если им пользуются миллионы.
Можно сказать, что я технарь до мозга костей, но, поверьте, всё куда сложнее.
Одно из качеств, которые считаю своей сильной стороной — упорство (в разумной степени). Например, в CodeRun. В нашей с вами жизни не всегда удаётся побеждать, но главное начать, разве нет?
Иногда я делюсь своими проектами с сообществом: например, решением для управления отзывами (и локализациями) или полузабавным способом посмотреть распределение ваших файлов в проекте. А игроки в спортивное ЧГК скорее всего знают о знатоке.
В 2022 году произошли некоторые события в мире, которые заставили смотреть на мир иначе, хотя я и прежде не питал никаких иллюзий.
Я очень хочу, чтобы этот канал стал ресурсом, где без грязи, фальши и сказок о простом попадании в IT вы смогли увидеть примеры собеседований, проектов и настоящих трудностей разработки.
Для этого я пишу посты на хабр, делаю подборки из того, что вам пригодится: память, ссылки, side table и огромный пост про многопоточность и добавляю необычные материалы, например, как на самом деле реализовано управление громкостью в ваших наушниках.
Я против токсичности, против обмана и навязанных мнений.
А для решения задач важно выбрать подходящий инструмент. И если вам нужно забить гвоздь, не спрашивайте помощи у Chat GPT, а берите чёртов молоток.
Для этого и нужен этот канал.
Please open Telegram to view this post
VIEW IN TELEGRAM
Измерение производительности приложений iOS в Uber: техники и советы
Для запуска приложения инженеры специально измеряют продолжительность холодного запуска приложения, которая состоит из создания первого процесса приложения, инициализации main.swift, различных сетевых вызовов для получения контента в реальном времени и первого прохода рендеринга для отрисовки экрана.
Это отличается от горячего запуска, когда приложение уже инициализировано в памяти и просто выведено на передний план из фона.
В дополнение к вышеперечисленному команда Uber создала конвейер данных для получения метрик частоты задержек и зависаний от Apple, что обеспечивает более глубокое понимание того, что происходит на уровне ОС.
📖 В этой исследовательской статье инженеры рассказывают, какие показатели производительности и какие инструменты и процессы были созданы.
Например, для измерения времени до
Из интересных решений: данные
Грамотное исследование этих метрик позволяет определять, что сотни изменений кода и десятки функций не замедлят запуск приложения.
Кроме того, эти данные используются для оценки импакта тех или иных фич на скорость запуска, и, как следствие, непосредственного влияния на бизнес.
😃 iOS Dev
Для запуска приложения инженеры специально измеряют продолжительность холодного запуска приложения, которая состоит из создания первого процесса приложения, инициализации 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 на серверную часть.Грамотное исследование этих метрик позволяет определять, что сотни изменений кода и десятки функций не замедлят запуск приложения.
Кроме того, эти данные используются для оценки импакта тех или иных фич на скорость запуска, и, как следствие, непосредственного влияния на бизнес.
Please open Telegram to view this post
VIEW IN TELEGRAM
Реализация мгновенного взаимодействия с pan-жестами
Это сложнее, чем кажется, поскольку
Если вы просто прикаснетесь пальцем к движущемуся объекту, технически это не «панорамирование», поэтому жест будет проигнорирован. И хоть это ожидаемое поведение согласно докам, в результате может получиться недостаточно отзывчивое взаимодействие.
🤩 У Натана Гиттера есть отличная статья, в которой показаны примеры кода для многих подобных ситуаций, в том числе с реализацией кастомного жеста.
Некоторое время это работало, но в последней версии iOS были внесены некоторые изменения. Например, снизу экрана может быть задержка между обновлением состояния до
Это около 0,75 секунды, что очень долго для жеста (на устройстве с частотой 120 Гц это 90 кадров, отображаемых до того, как ваш ввод будет распознан!).
📖 В этом материале Christian Selig (создатель Apollo — крутого клиента для Reddit) рассказывает о создании собственного распознавателя жестов, который работает поверх остальных и обходит проблему паузы при взаимодействии.
😃 iOS Dev
Это сложнее, чем кажется, поскольку
UIPanGestureRecognizer
не сразу распознает начало жеста. Если вы просто прикаснетесь пальцем к движущемуся объекту, технически это не «панорамирование», поэтому жест будет проигнорирован. И хоть это ожидаемое поведение согласно докам, в результате может получиться недостаточно отзывчивое взаимодействие.
Некоторое время это работало, но в последней версии iOS были внесены некоторые изменения. Например, снизу экрана может быть задержка между обновлением состояния до
.began
и уведомлением обработчика жестов. Это около 0,75 секунды, что очень долго для жеста (на устройстве с частотой 120 Гц это 90 кадров, отображаемых до того, как ваш ввод будет распознан!).
📖 В этом материале Christian Selig (создатель Apollo — крутого клиента для Reddit) рассказывает о создании собственного распознавателя жестов, который работает поверх остальных и обходит проблему паузы при взаимодействии.
Please open Telegram to view this post
VIEW IN TELEGRAM
Ranges в Swift: примеры и неочевидные моменты
Скорее всего в первый раз вы их использовали для выборки символов из строки, но на самом деле возможности куда шире.
Важно понимать, когда и какой тип оператора диапазона стоит использовать, и как именно можно избежать неприятностей с
📖 Antoine (создатель одноимённого сайта) в этой статье разбирает примеры, а также то, что может произойти, когда в вашей строке содержатся, например, эмодзи.
😃 iOS Dev
Ranges
позволяют нам писать элегантный код Swift с помощью операторов диапазона. Скорее всего в первый раз вы их использовали для выборки символов из строки, но на самом деле возможности куда шире.
Важно понимать, когда и какой тип оператора диапазона стоит использовать, и как именно можно избежать неприятностей с
index is out of range
.📖 Antoine (создатель одноимённого сайта) в этой статье разбирает примеры, а также то, что может произойти, когда в вашей строке содержатся, например, эмодзи.
Please open Telegram to view this post
VIEW IN TELEGRAM
1️⃣ При сборках с 14.3 девайсы на iOS 13, использующие протоколы Objective-C из Swift, крашились при запуске.
С этой проблемой мы столкнулись и на рабочем проекте.
2️⃣ Исправили краш на iOS 15, связанный со Swift Concurrency.
Кроме этого, избавились от проблем с отображением альтернативных иконок на планшетах и улучшили поведение на макоси.
🔗 Детально весь список обновлений здесь.
🛠 Скачать обновлённый Xcode уже можно на сайте.
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему Apple запретила своим сотрудникам использовать ChatGPT и другие нейросети
Некоторое время назад я писал, почему использование ChatGPT мешает жить StackOverflow и не только.
Буквально сегодня в сторе появился официальный iOS-клиент, который уже на подступах к первым позициям во всех чартах. И как нельзя кстати появилась вот эта новость на базе информации от The Wall Street Journal.
Мартовская ошибка позволяла пользователям видеть историю чатов других пользователей ChatGPT, и только после этого инцидента ChatGPT добавил возможность разрешить пользователям отключать историю чатов и не участвовать в обучении модели ИИ.
Если инженеры Apple используют эти платформы, нет никакой гарантии, что их код (или ваш) не попадёт к кому-то другому или даже не будет использован конкурентами.
То же самое относится и к другой конфиденциальной информации, поскольку сотрудники могут использовать ChatGPT, например, для составления электронных писем.
Apple не единственная компания, запретившая ChatGPT. Например, JPMorgan Chase и Verizon также ограничили использование таких платформ.
Кстати, в отчете упоминается, что Apple также работает над собственной моделью ИИ.
Так оно или нет, узнаем совсем скоро, WWDC приближается.
😃 iOS Dev
Некоторое время назад я писал, почему использование ChatGPT мешает жить StackOverflow и не только.
Буквально сегодня в сторе появился официальный iOS-клиент, который уже на подступах к первым позициям во всех чартах. И как нельзя кстати появилась вот эта новость на базе информации от The Wall Street Journal.
Мартовская ошибка позволяла пользователям видеть историю чатов других пользователей ChatGPT, и только после этого инцидента ChatGPT добавил возможность разрешить пользователям отключать историю чатов и не участвовать в обучении модели ИИ.
Если инженеры Apple используют эти платформы, нет никакой гарантии, что их код (или ваш) не попадёт к кому-то другому или даже не будет использован конкурентами.
То же самое относится и к другой конфиденциальной информации, поскольку сотрудники могут использовать ChatGPT, например, для составления электронных писем.
Apple не единственная компания, запретившая ChatGPT. Например, JPMorgan Chase и Verizon также ограничили использование таких платформ.
Кстати, в отчете упоминается, что Apple также работает над собственной моделью ИИ.
Так оно или нет, узнаем совсем скоро, WWDC приближается.
Please open Telegram to view this post
VIEW IN TELEGRAM
Рендеринг сцены Моаны (мультфильма Диснея) менее чем за 10 000 строк кода Swift
После того, как Walt Disney выпустила описание сцены острова в Моане, были предприняты некоторые усилия по его визуализации помимо Диснеевского Hyperion.
Энтузиаст пошёл ещё дальше и выпустил собственный рендерер на Swift (с несколькими строками на C++ для вызова OpenEXR и Ptex).
📖 В большом исследовании он пишет, как пришёл к этому, какие оптимизации принял, и почему Swift оказался предпочтительным выбором.
📖 А в текущей версии он рассказывает, как он смог ускорить процесс рендеринга с 26 часов в начале до 78 минут.
🛠 Вы не поверите, но есть даже исходный код.
😃 iOS Dev — а что вы сможете делать с помощью Swift?
После того, как Walt Disney выпустила описание сцены острова в Моане, были предприняты некоторые усилия по его визуализации помимо Диснеевского Hyperion.
Энтузиаст пошёл ещё дальше и выпустил собственный рендерер на Swift (с несколькими строками на C++ для вызова OpenEXR и Ptex).
📖 В большом исследовании он пишет, как пришёл к этому, какие оптимизации принял, и почему Swift оказался предпочтительным выбором.
📖 А в текущей версии он рассказывает, как он смог ускорить процесс рендеринга с 26 часов в начале до 78 минут.
🛠 Вы не поверите, но есть даже исходный код.
Please open Telegram to view this post
VIEW IN TELEGRAM
🇯🇵 Apple Marunouchi в Токио
Сейчас я в отпуске, и наконец получилось добраться до страны восходящего солнца. Несмотря на невероятное количество достопримечательностей, невозможно было не зайти в крупнейший эпл стор в мегаполисе.
Он открылся в 2019 году и более чем половина из 130 сотрудников приехали сюда из разных районов Японии. А если сложить их знания, окажется, что работники могут помочь вам аж на 15 разных языках.
Внутри оконные проемы отделаны бамбуком, чтобы интегрировать высокий темп жизни снаружи и отдать дань уважения традициям страны. Атриум в центре выступает сердцем магазина и соединяет оба этажа.
В отличие от моих прошлых постов о двух магазинах в Нью-Йорке и в Лос-Анджелесе можно сказать, что здесь торжествует минимализм. Но знаете, здесь это как нельзя кстати.
😃 iOS Dev
Сейчас я в отпуске, и наконец получилось добраться до страны восходящего солнца. Несмотря на невероятное количество достопримечательностей, невозможно было не зайти в крупнейший эпл стор в мегаполисе.
Он открылся в 2019 году и более чем половина из 130 сотрудников приехали сюда из разных районов Японии. А если сложить их знания, окажется, что работники могут помочь вам аж на 15 разных языках.
Внутри оконные проемы отделаны бамбуком, чтобы интегрировать высокий темп жизни снаружи и отдать дань уважения традициям страны. Атриум в центре выступает сердцем магазина и соединяет оба этажа.
В отличие от моих прошлых постов о двух магазинах в Нью-Йорке и в Лос-Анджелесе можно сказать, что здесь торжествует минимализм. Но знаете, здесь это как нельзя кстати.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🎈Сегодня мой День Рождения
В нашей жизни каждый день приходится решать задачи разной степени важности.
Когда-то, только попав в школу, в своем родном поселке я ждал после уроков, чтобы в единственном компьютерном классе в радиусе 10 км попросить запустить Dune 2000, чтобы посмотреть на этот дивный новый мир! Получалось далеко не всегда, но до своего домашнего пк было очень далеко.
Вообще у всех разный старт. И когда говорят, что Билл Гейтс бросил универ и стал миллиардером, уделите внимание его родителям: известному адвокату и члену совета директоров банка. Ах да, его дед был главной нацбанка США, но это мелочи.
Для меня же образование было единственным способом пробиться куда-то, поэтому я до сих пор продолжаю учиться, и одно из следствий этого – канал, который вы читаете.
Возвращаясь к истории с дюной, намного проще было собраться и поиграть в квадрат где-нибудь рядом. Кто-то сейчас знает, что это?
Прошло много времени и сейчас среди рабочих тасок управление многопоточкой, шифрованием, анимациями и поддержание всего этого в нормальном состоянии. Для меня кажется обыденным постоянно быть на связи и решать что-то в срочном порядке, например, проблемы с эпловским ревью.
Но знаете, через 10-20 лет о наших переработках будут помнить только близкие люди. А о рабочих подвигах только мы (возможно).
Я не очень люблю отмечать день рождения. Для меня важнее не символическая дата, а то, что мы можем сказать о своих поступках в прошлом, настоящем и в будущем.
❤️ Спасибо, что читаете этот канал. Как и прежде, здесь я продолжу делиться своим опытом и знаниями.
Ну вот вы и нашли ключевое слово для шифра Виженера: iosdevcypher
😃 iOS Dev
В нашей жизни каждый день приходится решать задачи разной степени важности.
Когда-то, только попав в школу, в своем родном поселке я ждал после уроков, чтобы в единственном компьютерном классе в радиусе 10 км попросить запустить Dune 2000, чтобы посмотреть на этот дивный новый мир! Получалось далеко не всегда, но до своего домашнего пк было очень далеко.
Вообще у всех разный старт. И когда говорят, что Билл Гейтс бросил универ и стал миллиардером, уделите внимание его родителям: известному адвокату и члену совета директоров банка. Ах да, его дед был главной нацбанка США, но это мелочи.
Для меня же образование было единственным способом пробиться куда-то, поэтому я до сих пор продолжаю учиться, и одно из следствий этого – канал, который вы читаете.
Возвращаясь к истории с дюной, намного проще было собраться и поиграть в квадрат где-нибудь рядом. Кто-то сейчас знает, что это?
Прошло много времени и сейчас среди рабочих тасок управление многопоточкой, шифрованием, анимациями и поддержание всего этого в нормальном состоянии. Для меня кажется обыденным постоянно быть на связи и решать что-то в срочном порядке, например, проблемы с эпловским ревью.
Но знаете, через 10-20 лет о наших переработках будут помнить только близкие люди. А о рабочих подвигах только мы (возможно).
Я не очень люблю отмечать день рождения. Для меня важнее не символическая дата, а то, что мы можем сказать о своих поступках в прошлом, настоящем и в будущем.
❤️ Спасибо, что читаете этот канал. Как и прежде, здесь я продолжу делиться своим опытом и знаниями.
Please open Telegram to view this post
VIEW IN TELEGRAM
Необычный способ найти причину проблемы из-за нехватки свободного места на девайсе
Пока я нахожусь в отпуске (и делаю очень много фотографий), задумался над тем, как корректно обработать ситуации, когда на айфоне уже не остаётся доступного пространства и что с этим можно сделать при работе над мессенджером или каким-нибудь редактором.
Оказывается, эту проблему можно воспроизвести и на симуляторе.
Для этого нужно:
1️⃣ Обратиться к hdutil
4️⃣ После выявления проблемного кейса удалить тестовый образ, используя команду для получения списка
📖 Хороший разбор сценария целиком доступен тут.
😃 iOS Dev
Пока я нахожусь в отпуске (и делаю очень много фотографий), задумался над тем, как корректно обработать ситуации, когда на айфоне уже не остаётся доступного пространства и что с этим можно сделать при работе над мессенджером или каким-нибудь редактором.
Оказывается, эту проблему можно воспроизвести и на симуляторе.
Для этого нужно:
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.
📖 Хороший разбор сценария целиком доступен тут.
Please open Telegram to view this post
VIEW IN TELEGRAM