iOS Dev
7.8K subscribers
1.03K photos
92 videos
1 file
1.2K 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
Реализация шейдера с события Apple 9 сентября (Metal + SwiftUI)

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

Также добавил эффект затухания в зависимости от временной метки и небольшой эффект морфинга с объектами.

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

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

А ещё в трибьют-боте (условия приятнее).

📖 А стартовые посты для изучения Metal: вот этот, этот и этот.

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



😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥2116❤‍🔥1032👍2🤩2💯2
Как мигрировать UIKit-интерфейс на scene-based в iOS

Для iOS 18.4 и выше уже сейчас вы можете видеть сообщение в консоли для старых неадаптированных проектов:
This process does not adopt UIScene lifecycle.
This will become an assert in a future version.



А кто ставил бетку Xcode и пробовал собрать для 26 оси, наверняка видели и сообщения пострашнее:
UIScene lifecycle will soon be required.
Failure to adopt will result in an assert in the future.


В следующем за 26 осью мажорном релизе приложение, основанное не на сценах вообще не запустится.

Сейчас я работаю над большим проектом, в котором до сих пор не только многое на Objective-C, но и одна из задач в текущих релизах - заадоптить саппорт для CarPlay, так что здесь без корректного перехода на сцены ничего бы не получилось.

На самом деле всё довольно просто, для этого вам нужно всего лишь:

1. Добавляем саппорт сцен в plist:
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
<key>UISceneStoryboardFile</key>
<string>Main</string>
</dict>
</array>
</dict>
</dict>


// Скорее всего, в небольших проектах достаточно будет одной сцены, но если у вас mac catalyst, например - то поддержка мультисцен буквально мастхэв для многих кейсов.




2. Кроме этого, нужно задать конфиг для каждой из использующихся в проекте сцен:
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
configurationForConnecting connectingSceneSession: UISceneSession,
options: UIScene.ConnectionOptions
) -> UISceneConfiguration {


// Each UISceneConfiguration have a unique configuration name.
// The configuration name is a app-specific name
// you use to identify the scene, and it corresponds to entries
// in the `Info.plist` scene manifest.
var configurationName: String!

switch options.userActivities.first?.activityType {
case UserActivity.GalleryOpenInspectorActivityType:
// Create a photo inspector window scene.
configurationName = "Inspector Configuration"
default:
// Create a default gallery window scene.
configurationName = "Default Configuration"
}

return UISceneConfiguration(
name: configurationName,
sessionRole: connectingSceneSession.role
)
}
}


3. И запилить метод willConnectTo:
import UIKit
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?

func scene(
_ scene: UIScene,
willConnectTo session: UISceneSession,
options connectionOptions: UIScene.ConnectionOptions
) {
// Confirm the scene is a window scene in iOS or iPadOS.
guard let windowScene = scene as? UIWindowScene else { return }

window = UIWindow(windowScene: windowScene)
window?.rootViewController = YourRootViewController()
window?.makeKeyAndVisible()
}
}


Сама логика останется буквально той же, за небольшой поправкой, что ваш код из applicationDidBecomeActive(_:) надо перенести в sceneDidBecomeActive(_:), и так далее.

Целиком разбор и советы от Apple можно посмотреть здесь (в TN3187).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
824💯9👏6🔥42❤‍🔥22👍1🤯1🫡1
🍾 Бот для проверки знаний по iOS и подготовке к собеседованиям

У меня отличная новость! Открываю бета-тестирование бота по iOS.

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

Реализовал на firestore+cloud functions+telegram bot api на node.js.

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

🤖 Запустить и проверить себя можно здесь: @iOSIQBot

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

Не забудьте подписаться и вы 💰 с приятными условиями на бусти в ⭐️ в телеграме.

Ах да, специальный бонус тому, кто наберёт больше всех очков в конце недели: будет пасхалка от меня в буквальном смысле.

🎁 Поддержать разработку.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥3111❤‍🔥10👍62
Four Corners: первая игра, целиком написанная на Swift для Playdate

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

Например, из последней поездки притащил Game Boy Micro Anniversary Edition, пусть и немного потрёпанную временем).

Одна из приставок в коллекции - Playdate (и она как раз на фотке к этому посту).

И для неё с недавних пор можно писать на Swift!

Нашёл интересное интервью со Стивеном Чипманом, который рассказал о плюсах о всей боли, которая сопутствовало процессу переписывания приложения с Lua.

Например, недоступен Foundation, а ещё нет Codable, что превратило работу с JSON в нетривиальный таск.

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

📖 В общем, рекомендую почитать, особенно если вам интересен и embedded swift, в частности.

📺 А тут можно посмотреть и доклад на тему.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
15❤‍🔥12👍107🔥33🍓2
This media is not supported in your browser
VIEW IN TELEGRAM
А вы знали, что системный UIDatePicker (даже в напоминаниях и часах) - на самом деле не бесконечная лента?

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

Что делает в таком случае Apple?

Ответ - решают проблемы остальных 99.99% пользователей.

Да и вообще это что, в первый раз?

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥25🤯97👍431🎉1💯1🏆1🆒1