💻 Позаботимся о памяти при использовании value-типов
С выходом Swift 5.9 была введена концепция некопируемости для структур и перечислений, что позволяет хранить уникальные ресурсы без необходимости использования кучи и ссылочной семантики. Однако полноценная реализация этого инструмента стала возможной только с поддержкой протоколов и дженериков в Swift 6.0.
В докладе, используя обновленную версию языка и проект Ozon Seller, будет рассмотрено, как некопируемость повышает прозрачность использования сущностей в коде и влияет на производительность приложения, включая потенциальную экономию памяти. Также автор расскажет об аналогичных подходах в других языках и обсудит возможные проблемы и перспективы их решения.
👉 Читать статью
#новость #ios
С выходом Swift 5.9 была введена концепция некопируемости для структур и перечислений, что позволяет хранить уникальные ресурсы без необходимости использования кучи и ссылочной семантики. Однако полноценная реализация этого инструмента стала возможной только с поддержкой протоколов и дженериков в Swift 6.0.
В докладе, используя обновленную версию языка и проект Ozon Seller, будет рассмотрено, как некопируемость повышает прозрачность использования сущностей в коде и влияет на производительность приложения, включая потенциальную экономию памяти. Также автор расскажет об аналогичных подходах в других языках и обсудит возможные проблемы и перспективы их решения.
👉 Читать статью
#новость #ios
❤4
👨💻 Как работать с Koin scopes в Jetpack Compose Navigation
При разработке современных Android-приложений важную роль играет удобная навигация между экранами и управление зависимостями. Jetpack Compose Navigation — это библиотека, предоставляющая декларативный способ организации навигации в приложениях, построенных на Jetpack Compose.
Koin — это лёгкий и удобный фреймворк для внедрения зависимостей (DI) в приложениях. Он предлагает декларативный синтаксис для определения модулей, а также поддержку scoping’а, который помогает управлять жизненным циклом зависимостей.
В статье автор рассматривает, как использовать Koin scopes в связке с Jetpack Compose Navigation, чтобы эффективно управлять зависимостями на разных уровнях навигационного графа.
👉 Читать статью
#новость #ios
При разработке современных Android-приложений важную роль играет удобная навигация между экранами и управление зависимостями. Jetpack Compose Navigation — это библиотека, предоставляющая декларативный способ организации навигации в приложениях, построенных на Jetpack Compose.
Koin — это лёгкий и удобный фреймворк для внедрения зависимостей (DI) в приложениях. Он предлагает декларативный синтаксис для определения модулей, а также поддержку scoping’а, который помогает управлять жизненным циклом зависимостей.
В статье автор рассматривает, как использовать Koin scopes в связке с Jetpack Compose Navigation, чтобы эффективно управлять зависимостями на разных уровнях навигационного графа.
👉 Читать статью
#новость #ios
🥰3
⚒️ Как устроен пользовательский интерфейс SwiftUI
iOS‑разработчикам приходится много работать с пользовательскими интерфейсами. Понимание различных аспектов пользовательского интерфейса, таких как жизненный цикл или компоновка, имеет решающее значение для работы с UIKit и SwiftUI.
Понимание внутренней работы фреймворка может дать значительные преимущества, например, помочь избежать проблем с производительностью, спорадических глюков, неожиданных анимаций или ошибок в вёрстке.
Автор статьи предоставляет полный обзор того, как SwiftUI устроен под капотом.
👉 Читать статью
#новость #ios #swift
iOS‑разработчикам приходится много работать с пользовательскими интерфейсами. Понимание различных аспектов пользовательского интерфейса, таких как жизненный цикл или компоновка, имеет решающее значение для работы с UIKit и SwiftUI.
Понимание внутренней работы фреймворка может дать значительные преимущества, например, помочь избежать проблем с производительностью, спорадических глюков, неожиданных анимаций или ошибок в вёрстке.
Автор статьи предоставляет полный обзор того, как SwiftUI устроен под капотом.
👉 Читать статью
#новость #ios #swift
🤩4🤔1
💻 Xmtp-ios — клиентский SDK для работы с XMTP
XMTP — крупнейшая и самая безопасная децентрализованная сеть обмена сообщениями. Xmtp-ios представляет собой Swift-реализацию клиента XMTP message API для использования в iOS-приложениях.
Используйте xmtp-ios для для отправки сообщений между блокчейн-аккаунтами, включая DM, уведомлений, анонсов и многого другого.
⚙️ Xmtp-ios на GitHub
#новость #ios
XMTP — крупнейшая и самая безопасная децентрализованная сеть обмена сообщениями. Xmtp-ios представляет собой Swift-реализацию клиента XMTP message API для использования в iOS-приложениях.
Используйте xmtp-ios для для отправки сообщений между блокчейн-аккаунтами, включая DM, уведомлений, анонсов и многого другого.
⚙️ Xmtp-ios на GitHub
#новость #ios
❤1
📱🧮 Как Android обошел iOS в создании идеального калькулятора
Когда в Google решили написать по-настоящему точный калькулятор для Android, они и не подозревали, что эта задача потребует участия выдающегося эксперта по C/C++ и создания гибридной математической системы.
👉 Читать статью
#новость #android #ios
Когда в Google решили написать по-настоящему точный калькулятор для Android, они и не подозревали, что эта задача потребует участия выдающегося эксперта по C/C++ и создания гибридной математической системы.
👉 Читать статью
#новость #android #ios
👾7👍4
👨💻 Embedded Swift Example Projects — примеры встраиваемого Swift
Embedded Swift Example Projects — этот репозиторий представляет собой набор демонстрационных проектов для встраиваемого Swift. Embedded Swift — это режим компиляции и языка, который позволяет разрабатывать на Swift baremetal, встраиваемые и автономные программы или игры.
⚙️ Embedded Swift Example Projects на GitHub
#новость #ios
Embedded Swift Example Projects — этот репозиторий представляет собой набор демонстрационных проектов для встраиваемого Swift. Embedded Swift — это режим компиляции и языка, который позволяет разрабатывать на Swift baremetal, встраиваемые и автономные программы или игры.
⚙️ Embedded Swift Example Projects на GitHub
#новость #ios
❤3👍1
📱 Осваиваем скроллинг в SwiftUI
Начиная с iOS 17 в SwiftUI появилась функция
В этой статье на реальном примере автор показывает, как использовать
👉 Читать статью
#новость #ios #swift
Начиная с iOS 17 в SwiftUI появилась функция
scrollTargetBehavior, позволяющая разработчикам управлять поведением прокрутки с большей точностью. Будь то выравнивание представлений или реализация пользовательских эффектов пагинации, ScrollTargetBehavior обеспечивает надежную поддержку. Что еще более важно, разработчики могут создавать собственные реализации функции для удовлетворения конкретных потребностей. В этой статье на реальном примере автор показывает, как использовать
scrollTargetBehavior и в конечном итоге реализовать пользовательскую логику управления прокруткой.👉 Читать статью
#новость #ios #swift
🥰4❤1
💬 Monal — открытый XMPP-клиент
Monal — кроссплатформенный современный открытый XMPP-клиент для iOS и macOS. Среди фич — отсутствие рекламы и отслеживания личной информации, зашифрованные чаты, работа с корпоративными XMPP-серверами, требующими VPN, поддержка групповых чатов, аудио/видео звонков.
⚙️ Monal на GitHub
#новость #ios
Monal — кроссплатформенный современный открытый XMPP-клиент для iOS и macOS. Среди фич — отсутствие рекламы и отслеживания личной информации, зашифрованные чаты, работа с корпоративными XMPP-серверами, требующими VPN, поддержка групповых чатов, аудио/видео звонков.
⚙️ Monal на GitHub
#новость #ios
🤩3
📱 Чем полезен Server Driven UI
Автор статьи рассказывает о Server Driven UI по такому плану:
• что это вообще за технология
• из чего она состоит
• рассмотрит подходы к ее реализации
👉 Читать статью
#новость #android #ios
Автор статьи рассказывает о Server Driven UI по такому плану:
• что это вообще за технология
• из чего она состоит
• рассмотрит подходы к ее реализации
👉 Читать статью
#новость #android #ios
🤩3
🍏 Yams — парсер YAML для Swift
Yams — парсер YAML для Swift (YAML — это удобный для человека язык сериализации данных). В Yams есть три группы API преобразований: одна для использования с типами Codable, другая — для типов стандартной библиотеки Swift, а третья — для нативного представления Yams.
⚙️ Yams на GitHub
#новость #ios
Yams — парсер YAML для Swift (YAML — это удобный для человека язык сериализации данных). В Yams есть три группы API преобразований: одна для использования с типами Codable, другая — для типов стандартной библиотеки Swift, а третья — для нативного представления Yams.
⚙️ Yams на GitHub
#новость #ios
🤩5
В iOS 18 в SwiftUI появились liquid glass-стили — полупрозрачные, «стеклянные» кнопки и элементы.
Обычная кнопка:
Button("Add", action: addItem)— рисуется в стандартном системном стиле.
Если применить
.glass:Button("Add", action: addItem)
.buttonStyle(.glass)кнопка получает эффект стекла, глубину и анимацию нажатия. Цвет можно задать через .tint, но система полностью контролирует размеры и отступы.
Есть вариант
.glassProminent для основных действий, но пока он не работает в Xcode 26.0 beta.Отдельно существует модификатор
.glassEffect(), который можно применить к любому виду:Text("Hello")
.padding()
.glassEffect()Это просто придаёт представлению полупрозрачный фон, без анимаций и встроенного стиля — всё остальное нужно оформить вручную.
В
Toolbar многие кнопки автоматически получают стеклянный стиль, особенно в слотах подтверждения или отмены, и отключить это пока нельзя.Стоит отметить, что стеклянные кнопки не заменяют пользовательские
ButtonStyles. Если нам нужны фирменные кнопки для конкретного приложения или динамические кнопки, внешний вид которых зависит от состояния, то пользовательские стили по-прежнему будут подходящим инструментом. Но если мы хотим использовать системный внешний вид и соответствовать развивающейся эстетике Apple, то стеклянные стили — это быстрый способ добиться желаемого.
А вы уже использовали .glass или .glassEffect()? Делитесь впечатлениями в комментариях
#MiddlePath #SwiftUI #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
Swift 6.2 — это релиз, нацеленный на повышение продуктивности каждого разработчика, независимо от среды и подхода к написанию кода. В новой версии представлен широкий набор возможностей для практической разработки на всех уровнях стека: от улучшенных инструментов и библиотек до усовершенствований в параллелизме и производительности.
#свежак #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2
Приложения с видео далеко ушли вперед за последнее время. AVPlayer не развивался и пригоден для кинотеатров с DRM. С ним сложно делать prefetch, контролировать загрузку и поддерживать кастомные форматы. В open source нет работоспособных решений, а написать плеер с нуля сложно.
Доклад будет полезен как разработчикам, интересующимся работой с медиа, так и тем, кто хочет лучше понять устройство видеоплеера под капотом.
#свежак #MiddlePath #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Большинство iOS-разработчиков используют Xcode Debugger только для банальных
breakpoint и просмотра переменных. Но в нём есть куда больше фишек, которые реально экономят время.🔹 Conditional breakpoints
Можно остановить выполнение не всегда, а только при выполнении условия.
Например, поставить брейкпоинт на метод и задать условие
userId == 42. Тогда дебаггер не будет дёргать вас на каждом вызове.🔹 Exception Breakpoint
Очень полезно для поиска падений — Xcode сразу остановит выполнение в момент выброса исключения, до того как приложение упадёт. Настраивается через вкладку Breakpoints Navigator → + Exception Breakpoint.
🔹 Symbolic breakpoints
Позволяют ловить вызовы по имени метода или функции, даже если кода у вас нет (например, методы UIKit). Можно отследить момент, когда система вызывает
viewDidAppear: или layoutSubviews.🔹 Debug view hierarchy
Через кнопку "Debug View Hierarchy" можно визуально исследовать всю иерархию вьюх, включая невидимые и перекрытые элементы. Отличный способ поймать «невидимую кнопку», которая блокирует тап.
🔹 LLDB команды прямо в консоли
po object — печатает объект с вызовом description.expr — позволяет выполнять произвольный Swift/ObjC код прямо во время остановки.watchpoint set variable foo — можно следить за изменением конкретной переменной.🔹 Runtime Issues
Xcode сам подсказывает баги вроде «UI update вне main thread» или «дважды добавили constraint». Не игнорируйте эти подсказки — они часто спасают кучу времени.
Что из этого вы используете?
#буст #MiddlePath #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Создание таблицы с различными типами ячеек достаточно стандартная задача. Конечно, можно использовать различное ветвление при помощи if, else или switch, но лучше и практичнее использовать Дженерики.
#свежак #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
В SwiftUI alert — это способ показать критически важную информацию или запросить решение у пользователя.
Используй их только для действительно важных случаев: ошибок, подтверждений (особенно разрушительных действий), запросов разрешений.
Самый простой способ — через
isPresented (булево значение):@State var isPresented = false
VStack {
// UI
}
.alert("Alert Title", isPresented: $isPresented) {
Button("OK") { /* action */ }
Button("Cancel") { }
}
Алёрт появляется, когда
isPresented = true, и автоматически закрывается после действия пользователя.Можно добавить поясняющий текст:
.alert("Alert Title", isPresented: $isPresented) {
Button("OK") { }
} message: {
Text("Подробнее о проблеме")
}Это помогает пользователю понять контекст и принять осознанное решение.
📦 Работа с данными
Для подтверждения действий над конкретными объектами есть параметр
presenting:.alert("Delete Document", isPresented: $isPresented, presenting: document) { document in
Button("Delete", role: .destructive) { delete(document) }
Button("Cancel", role: .cancel) { }
} message: { document in
Text("Удалить '\(document.name)'? Это действие нельзя отменить.")
}Так SwiftUI сохраняет корректные данные на время отображения диалога.
Если твои ошибки реализуют
LocalizedError, SwiftUI умеет красиво показывать их в алёртах:.alert(isPresented: $isPresented, error: error) {
Button("Retry") { }
Button("Cancel") { }
} message: { error in
Text(error.recoverySuggestion ?? "Попробуй позже.")
}Используй краткие заголовки и ясные действия.
Помечай кнопки ролями:
.cancel, .destructive.Не перегружай интерфейс — если это не критично, лучше показать баннер или inline-сообщение.
alert, banner или sheet?#АрхитектурныйКод #MiddlePath #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
SQLiteData — это быстрая и лёгкая замена SwiftData от Point-Free, включающая SQL и синхронизацию с CloudKit (и даже шаринг CloudKit), построенная на основе популярной библиотеки GRDB.
Пример:
@FetchAll
var items: [Item]
@Table
struct Item {
let id: UUID
var title = ""
var isInStock = true
var notes = ""
}
Этот пример извлекают элементы из внешнего хранилища данных с использованием типов данных Swift, и автоматически отслеживается SwiftUI, поэтому представления пересчитываются при изменении внешних данных. При этом SQLiteData работает непосредственно с SQLite и может использоваться откуда угодно, включая UIKit, модели @Observable и многое другое.
#буст #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
OptionSet — это протокол, который представляет параметры в виде битов (битовой маски). Он также предоставляет вашему типу операции, подобные операциям с множествами, такие как объединение и пересечение. OptionSet позволяет объединять несколько значений.Это отличное решение, если вам нужно предоставить какие-то параметры, настройки, разрешения, стили и т. д.
Давайте напишем код:
struct TasksListOptions: OptionSet {
let rawValue: Int
static let showFilter = TasksListOptions(rawValue: 1 << 0)
static let showSearch = TasksListOptions(rawValue: 1 << 1)
static let showSort = TasksListOptions(rawValue: 1 << 2)
static let showLayoutSelector = TasksListOptions(rawValue: 1 << 3)
}Каждый вариант
rawValue представляет собой один бит в одном и том же целом числе: 1 << 0 — это 0001, 1 << 1 — это 0010, 1 << 2 — это 0100 и так далее. При объединении вариантов Swift объединяет их биты с помощью оператора побитового ИЛИ (|), поэтому showFilter + showSort становится 0101. Таким образом, несколько вариантов объединяются в одно компактное число, в котором каждый бит чётко обозначает отдельный вариант.Как уже упоминалось, замечательной особенностью
OptionSet является возможность комбинировать параметры. Один из распространённых сценариев — объявление предустановок по умолчанию с комбинированными значениями. Например, можно создать all параметр для представления всех параметров. В нашем примере мы можем создать предустановки для разных типов списков:struct TasksListOptions: OptionSet {
...
static let today: TasksListOptions = [.showFilter, .showSearch]
static let allTasks: TasksListOptions = [.showFilter, .showSearch, .showSort, .showLayoutSelector]
}Теперь ваша модель представления может использовать один из этих шаблонов для включения или отключения некоторых функций.
@Observable
final class TasksListViewModel {
private let options: TasksListOptions
}
#буст #MiddlePath #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Папка Derived Data (производные данные) — один из важнейших каталогов, используемых iOS-разработчиком. Хотя вы не работаете с ней напрямую, Xcode активно использует её для кэширования информации и оптимизации разработки.
Тем не менее, у iOS-разработчиков есть множество возможностей максимально эффективно использовать Derived Data. Будь то удаление файлов для оптимизации сборки или просмотр информации о каталоге, все эти действия могут улучшить работу разработчиков.
#свежак #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
PostgresNIO — неблокирующий event-driven клиент Swift для PostgreSQL, построенный на SwiftNIO.
Фичи:
#буст #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1