iOS разработчик, который делится фишками, своим опытом и опытом других.
В этом канале вы сможете найти истории из жизни, подходы к реализации а также новости и тренды из мира iOS-разработки
Авторский канал, iOS разработка
Знали ли вы, что первоначально Swift назывался Shiny?
Так почему же мы называем его свифтом? Я решил поискать причины, и ниже расскажу вам короткую, но интересную историю, а поможет нам Крис Латтнер (создатель Swift, LLVM и компилятора Clang).Далее, с его слов.
На самом деле, изменение названия произошло уже тогда, когда дело близилось к запуску.
⭐️ Shiny было кодовым именем. Многие вещи в Apple тогда, да и вообще во многих компаниях, когда вы начинаете, имели временное название. Если быть более точным, то в 2010 году даже был каталог на ноутбуке Криса.
И когда вам нужно выбирать имя проекта, вы понятия не имели, во что оно превратится в итоге.
Название Shiny появилось потому, что язык можно было назвать новой блестящей штуковиной.
📺 Это была отсылка к «Светлячку» — телесериалу, который очень хорош (лично я подтверждаю, сериал смотрится легко даже спустя столько времени).
Но по мере развития проекта и вовлечения в него все большего количества людей стало ясно, что это не лучший способ представить и донести до разработчиков то, о чем идет речь. Ведь к тому времени команда уже гораздо лучше представляла, что именно они пытаются достичь.
За три месяца до запуска Крис с командой начали думать о том, какое название будет правильным. Приходилось заниматься поиском торговых марок; это очень сложно.
🤔 Оказалось, что есть еще один язык под названием Swift — маленький исследовательский язык, по сути. Как и в случае с именованием в компьютерных API, именование продуктов - это сложно, потому что все хорошие имена уже заняты, и это действительно очень, очень сложная проблема.
В итоге они остановились на слове Swift, так как оно подразумевает правильные вещи. Кроме того, оно оказалось точно такой же длины, как Shiny, так что это значительно упростило пересмотр истории в системе контроля версий!
Ещё один интересный факт со слов Джордан Роуз, магическое число для модулей Swift — это блестящий (shiny) или сверкающий эмодзи. Крис Латтнер добавил, что магические числа это старая школа Unix и, конечно, Swift будет использовать эмодзи.
Так что shiny всегда будет где-то там, вместе с нами.
@iOS Dev — ❤️, если вы смотрели «Светлячка»
Как 5 приложений для iOS могут сократить время запуска в среднем на 28%
📖 Занимательное исследование от Emerge tools поможет разобраться в этом.
Ведь важна каждая миллисекунда (или нет?).
ℹ️ Время запуска — важная метрика приложения, которую следует постоянно отслеживать и улучшать.
A/B-тесты в ведущих компаниях, занимающихся мобильными приложениями, постоянно показывают, что увеличение времени запуска всего лишь на долю секунды может значительно повредить основным показателям использования, таким как количество активных пользователей в день и время, затрачиваемое на приложение на пользователя в день.
Lyft сообщила об увеличении количества пользовательских сеансов на 5% благодаря сокращению времени запуска их приложения для водителей на 21%.
⏳ Apple сделала время запуска предметом многочисленных презентаций #WWDC (раз, два, три).
Плюс статьи в том, что это настоящие оптимизации, которые применяются к публичным сборкам App Store без участия разработчиков.
😳 Интересный факт!
Приложение Zoom фактически тратит 41 мс на usleep в основном потоке во время запуска.
В любом случае, управление производительностью мобильного приложения является чрезвычайно сложной задачей.
@iOS Dev
Отображение данных в реальном времени с помощью Live Activity и Dynamic Island
Материал о том, как создавать интерактивные действия, которые отображают самые последние данные вашего приложения в Dynamic Island и на экране блокировки.
Чтобы предлагать интерактивные действия, добавьте код в существующее расширение виджета или создайте новое.
Live Activity используют функциональность WidgetKit и SwiftUI для пользовательского интерфейса.
Роль ActivityKit заключается в управлении жизненным циклом каждого Live Activity: мы можем использовать его API для запроса, обновления и завершения Live Activity.
📖 В официальной документации Apple рассматриваются следующие аспекты:
🔘 Требования и ограничения Live Activity.
🔘 Как добавить поддержку Live Activity в свое приложение.
🔘 Как определить набор статических и динамических данных.
🔘 Создание конфига для вашей Live Activity.
🔘 Создание Lock Screen view.
🔘 Создание compact, minimal и expanded views.
🔘 Как стартовать и обновлять Live activity.
ℹ️ Важно!Live Activity в настоящий момент доступны только на iPhone.
ℹ️ Размер обновленных динамических данных как для обновлений ActivityKit, так и для push-уведомлений не может превышать 4 КБ.
@iOS Dev
Как обновить содержимое ячейки при использовании UIHostingConfiguration
🔄 Когда речь идет о работе с таблицей или коллекцией, важно убедиться, что модель данных всегда синхронизирована с тем, что отображается на экране.
При создании пользовательского интерфейса с использованием UITableView или UICollectionView всегда приходилось вручную следить за тем, чтобы все было синхронизировано.
С появлениемUIHostingConfiguration в iOS 16 мы наконец-то можем использовать возможности двустороннего биндинга (связывания), которое существует только в SwiftUI.
Благодаря этому iOS возьмет на себя тяжелую работу по синхронизации модели данных и содержимого ячейки.
Это означает, что нам больше не нужно вызывать reloadItems(at:) для обновления ячейки или вызывать reconfigureItems(at:) для обновления снэпшота.
📖 Изменения звучат интригующе, рекомендую прочесть этот материал, или сразу перейти к репозиторию с примерами кода.
@iOS Dev
Создание гистограммм с помощью SwiftUI Charts в iOS 16
На WWWDC 2022 Apple представила диаграммы SwiftUI, которые упрощают создание различных графиков в SwiftUI.
📖 В этой статье показано, как быстро создать и настроить диаграммы, содержащие несколько наборов данных.
@iOS Dev
P.S. В посте выше было скрыто поздравление с нашим профессиональным праздником 🎉 (подсказки ASCII и UTF-32, а дальше дело техники).
Кстати, справились с задачей и дошли до последнего шага двое читателей, моё почтение!
QUFBRUlRQUFBQ0FBQUFRVUFBQUVQUUFBQkZFQUFBUThBQUFBSUFBQUJCOEFBQVJBQUFBRVBnQUFCRE1BQUFSQUFBQUVNQUFBQkR3QUFBUThBQUFFT0FBQUJFRUFBQVJDQUFBRU1BQUFBQ0FBQUFRK0FBQUVRZ0FBQUNBQUFBQnBBQUFBVHdBQUFGTUFBQUFnQUFBQVJBQUFBR1VBQUFCMkFBQUFMQUFBQUNBQUFBUStBQUFFUndBQUJEVUFBQVE5QUFBRVRBQUFBQ0FBQUFRNkFBQUVRQUFBQkVNQUFBUkNBQUFFUGdBQUFDd0FBQUFnQUFBRVJ3QUFCRUlBQUFRK0FBQUFJQUFBQkVNQUFBQWdBQUFFUWdBQUJEVUFBQVF4QUFBRVR3QUFBQ0FBQUFRL0FBQUVQZ0FBQkRzQUFBUkRBQUFFUndBQUJEZ0FBQVE3QUFBRVBnQUFCRUVBQUFSTUFBQUFJQUFBQkVBQUFBUXdBQUFFTndBQUJETUFBQVF3QUFBRU5BQUFCREFBQUFSQ0FBQUVUQUFBQUNBQUFBUk5BQUFFUWdBQUJENEFBQVJDQUFBQUlBQUFCRG9BQUFRK0FBQUVOQUFBQUNFQUFBQUtBQUFFSHdBQUJENEFBQVJCQUFBRVFnQUFCREFBQUFReUFBQUVUQUFBQUNBQUFmUEdBQUFBSUFBQUJESUFBQUFnQUFBRVRRQUFCRUlBQUFRK0FBQUVQQUFBQUNBQUFBUS9BQUFFUGdBQUJFRUFBQVJDQUFBRU5RQUFBQ3dBQUFBZ0FBQUVSd0FBQkVJQUFBUStBQUFFTVFBQUJFc0FBQUFnQUFBRU5BQUFCRDRBQUFRNkFBQUVNQUFBQkRjQUFBUXdBQUFFUWdBQUJFd0FBQUFzQUFBQUlBQUFCRWNBQUFSQ0FBQUVQZ0FBQUNBQUFBUkRBQUFBSUFBQUJFSUFBQVExQUFBRU1RQUFCRThBQUFBZ0FBQUVQd0FBQkQ0QUFBUTdBQUFFUXdBQUJFY0FBQVE0QUFBRU93QUFCRDRBQUFSQkFBQUVUQUFBQUNrQUFBQWdBQUFBYUFBQUFIUUFBQUIwQUFBQWNBQUFBSE1BQUFBNkFBQUFMd0FBQUM4QUFBQjBBQUFBTGdBQUFHMEFBQUJsQUFBQUx3QUFBR2tBQUFCUEFBQUFVd0FBQUY4QUFBQkRBQUFBWVFBQUFISUFBQUJsQUFBQVpRQUFBSElBQUFBdkFBQUFNZ0FBQURNPQ==
Hint: Стандарт ISO 646 (ECMA-6) предусматривает возможность размещения национальных символов. -> Стандарт ISO 10646 определяет 31-битную форму кодировки, названную UCS-4.
Как использовать UIViewController в SwiftUI?
⏳ SwiftUI и UIKit будут сосуществовать еще долгое время.
Какой бы фреймворк вы ни использовали, вероятнее всего возникнут ситуации, когда вам нужно использовать оба.
К счастью, Apple упрощает перенос кода UIKit в SwiftUI.
📖 В этой статье объясняется, как использовать UIViewController в качестве View в SwiftUI.
@iOS Dev
Создание калькулятора в стиле Apple на SwiftUI с использованием MVVM
C помощью этих материалов вы сможете калькулятор в стиле Apple с нуля.
Если вы новичок, вы познакомитесь с некоторыми сложными концепциями, которые позволят вам стать лучше.
Если у вас средний уровень знаний, это руководство поможет вам освоить некоторые важные приемы создания масштабируемых и удобных в сопровождении приложений SwiftUI.
1️⃣ Создание интерфейса.
В этой части рассказывается как наиболее похоже воспроизвести калькулятор Apple, следуя некоторым лучшим практикам создания и управления вьюхами в проекте.
2️⃣ Бизнес-логика.
В этом материале исследуются принципы формирования бизнес-логики для калькулятора в Swift, используя модель MVVM с учетом лучших практик.
🛠 Код для первой части.
🛠 Код для второй части.
🛠 Репозиторий с проектом.
@iOS Dev
Создание кастомной UICollectionViewListCell с помощью SwiftUI
📖 В этой статье автор рассматривает, что нужно для создания следующего списка с использованием UICollectionView и SwiftUI.
Прочитав материал, вы узнаете:
1️⃣ Как использовать UIHostingConfiguration (уже был пост здесь).
2️⃣ Как регулировать высоту ячейки.
3️⃣ Как регулировать separator insets.
4️⃣ Как настраивать лэйаут для ячеек.
В конце статьи вы сможете использовать UIHostingConfiguration в таком виде:
let hostingConfiguration = UIHostingConfiguration {
MyFirstSwiftUICell(item: item)
}.margins(.horizontal, 50)
ℹ️ Важно помнить, что UIHostingConfigurationдоступен только в iOS 16 и выше. Если вашему приложению по-прежнему необходимо поддерживать версию iOS ниже, чем iOS 16, вы можете подумать об использовании иных способов.
@iOS Dev
Разбор вариантов рефакторинга в Xcode для async/awaitКак с лёгкостью внедрить асинхронные функции в свой кодXcode может предложить до трех вариантов рефакторинга при щелчке правой кнопкой мыши на функции:
1️⃣ Преобразовать функцию в асинхронную.Это критическое изменение, то есть сигнатура функции станет другой, и вам нужно обновить все места, в которых функция вызывается!
2️⃣ Добавить асинхронную альтернативу.Существующая сигнатура функции останется прежней, но реализация функции будет заменена для использования вновь созданной асинхронной функции.
3️⃣ Добавить асинхронную обёртку.Существующая функция останется неизменной, и добавится новая асинхронная функция, которая использует withCheckedThrowingContinuation для повторного использования существующей функции.
📖 В этом материале автор объясняет результат каждого варианта рефакторинга на примерах.
@iOS Dev
5 способов изменить размер изображения: простые и продвинутые техники
Существует несколько различных подходов к изменению размера изображения, каждый из которых имеет разные возможности и характеристики производительности.
📖 Примеры, которые рассматриваются в этой статье, охватывают фреймворки как низкого, так и высокого уровня, от Core Graphics, vImage до Core Image и UIKit:
⚪ Использование UIGraphicsImageRenderer.
⚪ Использование Core Graphics Context.
⚪ Создание миниатюр с помощью Image I/O.
⚪ Ресэмплинг Lanczos с помощью Core Image.
⚪ Масштабирование изображения с помощью vImage.
Вместо того, чтобы предписывать один подход для всего, в материале сравнивают эргономику с показателями производительности, чтобы лучше понять, когда следует использовать один подход вместо другого.
@iOS Dev
Невероятно, но факт — разрешение Apple Watch Ultra, больше чем у первого iPhone!Кто бы в это мог поверить несколько лет назад
😳 Часы, показанные на конференции, обладают разрешением 410x502 px, в то время как у первого iPhone разрешение было 320x480 px.
@iOS Dev — следим за прогрессом!
Трансляция Apple подошла к концу!
⏳ На протяжении полутора часов мы вместе следили за новинками.
Возможно, кто-то ждал большего, или чего-то нового. Что ж, по крайней мере несколько фич нам показали, и это уже неплохо.
Я постарался не ничего не упустить, и отразить самое важное в кратких постах.
Совсем скоро пора выкатывать фичи для iOS 16 в прод (запомните дату 12 сентября).
❤️ А пока что хочу сказать спасибо тем, кто читал трансляцию. Если вам понравился формат, поддержите любой реакцией, random() вполне подойдёт.
@iOS Dev
Улучшения для камеры ожидаемы, всё большее влияние отдаётся алгоритмам
Рассказывают о дополнительном режиме оптического зума, формате Apple ProRaw, всё большем влиянии нейросетей на фото (мы догадывались).
🟢 Камера — 48 мегапикселей.
🟢 Более качественная макросъёмка.
🟢 Улучшения при плохом освещении.
🟢 Режим 2x/3x для топовых моделей.
@iOS Dev
Always-On Display
С помощью новых крутых технологий энергоэффективности локскрин теперь будет не гаснуть, если вы захотите.
А ещё с учётом Live Activities, о которых я рассказывал в нашем канале, такое можно придумать, ух!
@iOS Dev