iOS Dev
7.89K subscribers
1.19K photos
150 videos
1 file
1.48K links
👨‍💻Автор: Виктор Грушевский (@Viktorianec)

⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru

🍏Канал об iOS-разработке, алгоритмах и архитектурах

⭐️ Подготовка к собесам

⭐️ Код. Много кода.

#ios #mobile #swift
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Библиотека лоадеров для работы с Foundation Models

Когда-то я делился примерами красоты с помощью математики. Но если подрубить TimelineView, Canvas и немного воображения, сейчас можно создать намного более весёлые и интересные кейсы.

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

Для этого можно создать библиотеку компонентов и юзать любую комбинацию, хоть разбивать поэтапно и показывать последовательность, хоть показывать какой-то один из них.

Вот, например, кит, который используется на гифке, которую вы видите:

enum LoaderKit {
static let goldenAngle = Double.pi * (3 - (5.0).squareRoot())

static func fibonacciSphere(_ count: Int) -> [LDVec3] {
guard count > 1 else { return [LDVec3(x: 0, y: 0, z: 0)] }
var pts: [LDVec3] = []
pts.reserveCapacity(count)
for i in 0..<count {
let y = 1 - (Double(i) / Double(count - 1)) * 2 // 1 … -1
let r = (1 - y * y).squareRoot()
let phi = Double(i) * goldenAngle
pts.append(LDVec3(x: cos(phi) * r, y: y, z: sin(phi) * r))
}
return pts
}

static func rotateY(_ p: LDVec3, _ a: Double) -> LDVec3 {
let c = cos(a), s = sin(a)
return LDVec3(x: p.x * c + p.z * s, y: p.y, z: -p.x * s + p.z * c)
}

static func rotateX(_ p: LDVec3, _ a: Double) -> LDVec3 {
let c = cos(a), s = sin(a)
return LDVec3(x: p.x, y: p.y * c - p.z * s, z: p.y * s + p.z * c)
}

static func rotateZ(_ p: LDVec3, _ a: Double) -> LDVec3 {
let c = cos(a), s = sin(a)
return LDVec3(x: p.x * c - p.y * s, y: p.x * s + p.y * c, z: p.z)
}

static func dot(_ x: CGFloat, _ y: CGFloat, _ r: CGFloat) -> Path {
Path(ellipseIn: CGRect(x: x - r, y: y - r, width: r * 2, height: r * 2))
}

static func hash(_ i: Int, _ salt: Double = 0) -> Double {
let v = sin(Double(i) * 12.9898 + salt * 78.233 + 0.5) * 43758.5453
return v - v.rounded(.down)
}

static func lerp(_ a: Double, _ b: Double, _ t: Double) -> Double { a + (b - a) * t }
static func smoothstep(_ t: Double) -> Double { let x = min(max(t, 0), 1); return x * x * (3 - 2 * x) }
static func easeOut(_ t: Double) -> Double { 1 - pow(1 - min(max(t, 0), 1), 3) }
}


А целиком примеры уже доступны: ⭐️ здесь или 💰 тут.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
6😍28🔥98👍2👏2👾1
Как в Apple переписывают проекты на Swift

Анализаторы шрифтов обрабатывают данные из ненадежных источников, в результате чего TrueType оказывается уязвимым местом, критически важным с точки зрения безопасности.

Чтобы повысить отказоустойчивость формата на платформах Apple, инженеры приняли решение обновить проект с языка C на Swift.

Перед командой стояла амбициозная задача: обеспечить полную безопасность памяти, сохранить 100% попиксельную совместимость рендеринга и не допустить падения производительности.

Для проверки точности инженеры покрыли код тестами на 99,7% и прогнали 27 миллионов глифов из реальных PDF, сравнивая каждый битмап с эталоном.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥2014🏆4👍1
On-demand resources будут задепрекейчены в iOS 27

📖 Ресурсы по запросу (on-demand) это контент, который размещался в App Store и находился отдельно от соответствующего бандла. Они позволяли уменьшить размер приложения, ускорить загрузку и расширить функциональность.

Вместе с ними под deprecated попал и NSBundleResourceRequest.

Теперь Apple рекомендует использовать только Background Assets.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
4😢177😨6😎3👏1🕊1
А помните, как появился клод и кодекс, и сразу стало миллион инновационных приложений, каждое запускается за 0.25 секунд, 120 фпс у каждого, сам апстор очистился, и программисты все такие светлые вокруг и все друг другу улыбаются.

Вот и я не помню.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
5😁112🤣18🔥7😢32👍1
Давно себе хотел пополнить коллекцию необычных девайсов и в этот раз добавил себе trmnl - e-ink экран на максималках.

Ребята когда-то на кикстартере собрали 150к вместо требуемых 5к, а потом ещё и выиграли хакатон с решением в виде отдельной читалки (можно чекнуть на гитхабе) для контента в телеге.

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

⭐️ А у вас есть аналоги? Хотите поделиться? Или может даже делаете сами?

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥2510🤩3👍2💯2
Практическое руководство по совместимости Liquid Glass с UIKit

Осень приближается, а вместе с ней и новые требования к приложениям.

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
31673🙏1👻1
⚡️В России перестали работать «Яндекс», «Макс», сайты маркетплейсов и банков

Проблемы с сетевым соединением наблюдаются в сервисах маркетплейсов, разных IT-компаний и социальных платформ, а также операторов связи и банков.

📖 Новость на хабре.

[UPD] По данным сервиса мониторинга сейчас ситуация пришла в норму.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
😨22😢7🏆6🔥5🤩3😱2🕊2🤝1
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩13👻66🔥2
Протоколы в Swift и main actor

📖 В статье рассматриваются особенности использования атрибута @MainActor.

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
71383😴1😨1
⚡️ Помните, я шутил про специальную пометку приложений в AppStore, если для них использовались нейронки?

Мы сегодня стали на шаг ближе к этому.

Claude опубликовал свой подход к маркировке контента, и, внимание, отметки о том, что использовалась нейронка, будут даже в тексте.

Кстати, вотермарку в тексте нельзя увидеть, но она есть.

Каждое предложение, которое Клод пишет для вас (а вернее, за вас), теперь несет в себе подпись, которую вы никогда не увидите.

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

Ждём отдельный апстор для ИИ-приложений?

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
6😨2716😱10💯4👻4🔥2😎1
This media is not supported in your browser
VIEW IN TELEGRAM
Повторяем стопки карт как в Apple Wallet в 50 строк кода

На выхах залип на анимацию из Apple Wallet и решил попробовать воспроизвести с минимальным количеством кода.

Если всю физику жеста можно определить как единый прогресс, то когда тянем вниз, можно представить, что видимое смещение мы делим на длину нашего хода.

Но тут есть подводный камень. Если мы будем анимировать всю стопку одинаково, то на выходе получим скучную, приклеенную однотипную анимашку, это не круто.

Поэтому можно разбавить свои кэфом пружины (просто каждую чуть медленее, чем предыдущую)🎩

ForEach(Array(colors.enumerated()), id: \.offset) { index, color in
RoundedRectangle(cornerRadius: 26, style: .continuous)
.fill(color.gradient)
.offset(y: CGFloat(index) * (peek + (openStep - peek) * progress))
.animation(.interactiveSpring(response: 0.30 + Double(index) * 0.035,
dampingFraction: 0.74),
value: progress)
}


А на 💰 На бусти и ⭐️ в телеграме уже доступен не только этот пример, но ещё и расширенный и целая тонна полезных фишек.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
826🔥14👍6👾1
This media is not supported in your browser
VIEW IN TELEGRAM
Сеньор-разработчик, когда джун прислал ему очередной нейрослоп в мерж-реквесте на 10 000 строк

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣53😁9💯6👍1😱11
Как Polymarket написал своё приложение для Android на Swift

📖 Любопытную историю выложили на форуме эпла, в которой разработчики поделились своим опытом используя Skip (и к чему это привело).

Внутри приложения почти 170 000 строк кода Swift: модели, сетевые компоненты, бизнес-логика и более 120 ViewModels. Тот же код лежит в основе их приложения для iOS.

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
530😨9👍4💯2👾1
This media is not supported in your browser
VIEW IN TELEGRAM
Рекомендации от Apple по созданию хэдеров в App Store

На WWDC нам заспойлерили новую опцию для продвижения приложений, а сейчас Apple добавили гайдлайны, примеры и важные моменты, на которых нужно акцентировать внимание.

📖 Официальный анонс Apple.

Шаблоны заголовков:

🔗 Для фигмы.
🔗 Для фотошопа.
🔗 Для Pixelmator.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
617🔥63👍3💯1
This media is not supported in your browser
VIEW IN TELEGRAM
Эпичное возвращение стеклянных элементов управления окнами в новой macOS

В новой бете макоси вернули красоту (уже доступно, я поставил).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
532🔥10👾4🎉2😡21😈1
This media is not supported in your browser
VIEW IN TELEGRAM
Круговой слайдер с использованием CAShapeLayers и неожиданным компонентом

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

Под капотом используется приватный _UILiquidLensView и setLifted:animated:.

А знаете, кто ещё любит использовать приватные компоненты?

Конечно же, это телега! И у неё, например, с помощью этого апи реализован кастомный таббар.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥289😨5💯1👾1
🔔 Напоминаем про главный iOS-митап августа от hh.ru и Dodo Engineering!

Встречаемся уже в этот четверг, 20 августа, чтобы обсудить iOS-инфраструктуру, CI, аналитику и архитектуру.

В программе:
🍎 Виталий Барабанов (hh.ru) — покажет iOS-инфраструктуру hh.ru и весь путь фичи от коммита до релиза.
🍎 Алексей Березка (Dodo Engineering) — расскажет, как находить узкие места в CI и ускорять сборки приложения.
🍎 Андрей Максимкин (hh.ru) — разберет обновление мобильной аналитики и объединение подходов iOS и Android.
🍎 Тимур Шафигуллин (hh.ru) — поделится опытом развития архитектуры MVVM на большом проекте.

🗓 Когда: 20 августа в 18:30
💻 Формат: бесплатно, онлайн

👉 Успейте зарегистрироваться
Please open Telegram to view this post
VIEW IN TELEGRAM
12😴6😡6👍3🎄2😢1🍓1
Дизайн-системы для 200 лучших приложений в сторе

🛠 Нашёл репозиторий на гитхабе, в котором разработчик добавил наслопил описание дизайн-систем самых популярных приложений, уже готовых к интеграции с ИИ.

Каждый файл представляет собой описание с точными шестнадцатеричными значениями для цветов, описанием градиентов, состояниями компонентов, кривыми движения и тактильными эффектами.

Все описано в простом формате Markdown, который Claude, Cursor, Codex читают напрямую.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
623🎉9👍6😍1😨1
Знаете, что отличает крутого спеца от имитатора деятельности?

Способность задавать правильные вопросы.

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

Сомневаться.

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

Умение предвидеть проблемы это то, за что можно и нужно платить огромные деньги.

Способ находить оптимальное решение, которое, внимание - не самое правильное или объективно может более производительное, а именно оптимальное в условиях ресурсов (сил команды, пропускной способности серверов, добавьте любые N-факторов).

Не всегда извилистая архитектура (только не обижайся, дядюшка Боб, мы все тебя чтим) является оптимальной в условиях горящих дедлайнов или когда фичу нужно выкатить раньше остальных конкурентов по рынку. И уж тем более совсем редко решение продвинутого sol 5.7 (или что там сейчас царь горы у нас) является тем, что требуется. Про историю с крючком и подписками посмотрите мой пост.

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

Задавать вопросы - неудобно, замедляет команду, всегда вызывает споры и рассуждения. И наверняка у каждого были ситуации, когда вы думали, да нафига я вообще это спрашиваю, только время трачу. Нет, это нужно делать, как там говорил Роберт Невилл: «Если вы там... если кто-нибудь слышит меня... Вы не одни»

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

И особенно нужен именно сейчас, когда грань между нейрослопом и надёжной архитектурой становится такой тонкой.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
7❤‍🔥2412💯8👏3😁1
This media is not supported in your browser
VIEW IN TELEGRAM
И ещё: разбор, почему ИИ-пузырь и все компании несут просто лютые убытки доступным языком)

Полная версия

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣38😁11💯5👍1🤩1