iOS Broadcast
3.38K subscribers
1.72K photos
85 videos
985 links
Подборка новостей и статей для iOS разработчиков.

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
加入频道
This media is not supported in your browser
VIEW IN TELEGRAM
Глубокое погружение в Observation (13 мин)
На WWDC представили новый фреймворк призванный оптимизировать работу SwiftUI. Советую ознакомиться со статьей перед началом использования нового фреймворка

👉 Зачем нужен Observation
👉 Как объявить Observable Object
👉 Как работает макрос @Observable
👉 Как использовать Observable Object совместно с SwiftUI View

#Observation #SwiftUI #swift
👍1👎1
SSWG 2023 итоги полугодия
Каждый год группа по развитию Swift для сервера (SSWG) подводит итоги работы сообщества и определяет направление деятельности на следующий год. 
В 2022 году в экосистеме Swift появились следующие библиотеки:
👉 MongoKitten
👉 Kafka client library
👉 Cassandra client library
👉 GraphQL
👉 RabbitMQ library

В контексте туллинга: 
👉 Swift Extension for Visual Studio Code достиг мажорного релиза 1.0.0
👉 Swiftly повился для простой установки Swift на Linux и позволяет легко переключаться между версиями

Цели на 2023 год:
👉 Рост экосистемы библиотек
👉 Адаптировать структурированный параллелизм глубже
👉 Расширять документацию и туториалы
👉 Улучшать туллинг

#swift #server #sswg
👍6👎2
This media is not supported in your browser
VIEW IN TELEGRAM
Переворачиваем вечный SwiftUI календарь при помощи UIKit
Специально для вас сделал демо проект с которым можно переворачивать календарь прямо на своем телефоне
👉 70 строк кода
👉 UIPageViewController
👉 Всего 2 инстанса и полный реюз 3 сентября

#swift #swiftUI #UIKit #humor
👍31👎10
Потокобезопасность swift через - lock

Многие считают что Swift Concurrency это наше все и чтобы достичь потокобезопасности нужно использовать акторы. Это правильный ход мышления, но не всегда применимый. Для кейсов где Structured concurrency не подходит Apple добавили в iOS 16 OSAllocatedUnfairLock.
В приведенной статье автор приводить пример использования OSAllocatedUnfairLock и NSRecursiveLock в разрезе классической задачи хранилища в UDF

#swift #concurrency
👍7👎1
This media is not supported in your browser
VIEW IN TELEGRAM
⌨️ Продолжаем привыкать к новому доступному синтаксису Swift 5.9, 🐱SE-0380

Теперь можно использовать if в качестве выражения, например для динамического задания значения константы 🔥

#swift #evolution
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16👎1
⌨️ Продолжаем привыкать к новым возможностям Swift 5.9, 🐱 SE-0393, 🐱SE-0398 и 🐱SE-0399

В Swift 5.9 появились вариативные дженерики, которые решают важную проблему в Swift - дженерик функции для каждого набора аргументов.
Благодаря этому, например, в SwiftUI убрали лимит на 10 View 🎉.

#swift #proposal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👎1
📊 Мигрируем диаграммы на нативный Swift Charts

В этом году многие планируют поднять таргет до iOS 16 а это значит что можно мигрировать на нативный фреймворк Swift Charts.
Главное и безоговорочное преимущество - отсутствие сторонней зависимости, что позволяет уменьшить размер приложения.
Даже если ваш таргет iOS 15, уже можно планировать работу по миграции на нативные графики и включать их для пользователей на актуальных iOS, чтобы иметь обратную связь и возможность переключаться на старые графики по-небходимости

#swift #charts #migration
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👎1
🎉 Создаваем красивую документацию с помощью Swift-DocC

Внезапный инсайт с WWDC23, Apple доработала Swift-DocC так, что это теперь полноценный code-first редактор сайтов для инженеров, гораздо удобнее папок с .md файлами

➡️ Live preview документации
➡️ Шаблоны документации с темами и табличная верстка ‼️
➡️ Группировка по темам документации всего фреймворка
➡️ Возможность документировать расширения
➡️ Навигация в вебе как в Xcode

Вот теперь думаю, переводить всю документацию на новые релльсы или начать с новой 🤔
#Swift #DocC #wwdc23
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11👎1
😀 SE-0386 новый модификатор доступа package в Swift 5.9

В нововой версии Swift 5.9, которая идет с Xcode 15 появился новый модификотор доступа - package.
Этот модификатор будет полезен для выстраивания корректных доступов в подключаемых модулях, для случая когда вы не хотите, чтобы доступ к определенной функции осуществлялся из другого модуля, а только внутри того же модуля. В целом, этот модификатор доступа похож на internal, за исключением того, что он создан для модулей.
Актуальное ранжирование модификаторов доступа:
🔘 private
🔘 fileprivate
🔘 internal
🔘 package ✔️
🔘 public
🔘 open

#swift #proposal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👎1
🐥😺 Retainable
В своем посте на хабре "Насколько Swift удобен для DSL?", я вскользь упоминал про свои снипеты assignOnWeak и методе weakify. В представленной либе, автор пошел дальше и сделал простую библиотеку для всех возможных случаев с Readme и примерами

publisher
.sink(weak(ThisClass.handle))
.store(in: &cancellables)
var userNameBinding: Binding<String> = .init(
set: unowned(\.userName),
get: unowned(\.userName)
)
networkManager.performTask(weak(
capture: (userId, chatId), ThisClass.process)
)

#weak #swift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
Переворачиваем вечный SwiftUI календарь при помощи UIKit
У этого канала своя традиция на 3 сентября😅. Специально для вас сделал демо проект с которым можно переворачивать календарь прямо на своем телефоне
👉 70 строк кода
👉 UIPageViewController
👉 Всего 2 инстанса и полный реюз 3 сентября

#swift #swiftUI #UIKit #humor
👍6
🐥 Глоссарий по параллелизму Swift

Наткнулся на годный глоссарий по Swift Concurrency. Cодержит термины, ключевые слова и аннотации, связанные с параллелизмом. Содержит тип (ключевое слово, протокол, flow control), описание, ссылку на пропоузал и пример использования. Когда это может быть полезно? Пройтись и проверить что вы знакомы со всем что нужно, объяснить коллеге понятными словами, разобраться в MR, подготовиться к собесу.
Точно достойно 🔖
#swift #concurrency #glossary
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
🐥 Swift Collections package
Каждый раз, когда я вижу в MR очередную реализацию "более эффективной" коллекции, хочется бить по рукам. Даже если есть практическая необходимость, уже есть официальный пакет с открытым исходным кодом для расширения набора коллекций Swift. Цель проекта - служить испытательным полигоном для новых структур данных, улучшить дизайн и исправить ошибки до официального включения в библиотеку. Например, есть реализации для двусторонней очереди (Deque), упорядоченного набора (OrderedSet), упорядоченного словаря (OrderedDictionary), BitSet, BitArray, Heap, TreeSet и TreeDictionary.
Особенности коллекций:

Deque:
• Упорядоченная коллекция с произвольным доступом и изменяемостью
• Поддерживает эффективные вставки и удаления с обоих концов
• Обеспечивает удобные операции по вставке и выталкиванию элементов

OrderedSet:
• Гибрид массива и набора
• Поддерживает уникальные элементы и эффективные тесты на принадлежность
• Использует массив для хранения элементов и хэш-таблицу для индексов

OrderedDictionary:
• Альтернатива словарю для эффективного доступа к элементам в различных позициях
• Вставляет новые пары ключ-значение за постоянное время
• Обеспечивает произвольный доступ к парам ключ-значение
#swift #collections
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🐥 Локализуем списки в Swift правильно

Swift предоставляет множество встроенных форматтеров, один из которых форматтер списков ListFormatter (iOS 13+). Он помогает объединять списки элементов в удобочитаемые предложения:
🟢Форматировщик списка учитывает языковой стандарт пользователя.
🟢Можно принудительно установить языковой стандарт, изменив свойство place.
🟢Форматировщик списка поддерживает массивы любого типа, но элементы должны быть представлены в виде строк.
🟢Можно использовать настраиваемые типы, соответствующие протоколу CustomizableStringConvertible.
#swift #list #formatter #listformatter
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
9
🐥 [SE-0460] Явная специализация дженериков в Swift
Продолжаю разбирать пропоузалы Swift. В этом предложении вводится новый атрибут @specialized , который позволяет в дженерик функции генерировать предварительно специализированные версии этой функции для определенных типов. Эта специализация создает пользовательскую реализацию функции, где "дженерики" заменяются определенными типами. Это позволяет оптимизировать функции, под конкретные типы: когда неспециализированная версия функции вызывается с одним из этих типов, компилятор генерирует код, который будет повторно отправлен в эти предварительно специализированные версии, если таковые имеются. Врядли это пригодится где-то кроме Foundation и специализированных фреймворков, но идея интересная.
#swift #evolution
Please open Telegram to view this post
VIEW IN TELEGRAM
🐥 Использование групп задач в Swift Concurrency
Группы задач существовали всегда, в GCD, OperationQueue и Combine. Они есть и в Swift Concurrency. Группы задач позволяют динамически запускать несколько дочерних задач и ожидать их выполнения или отмены. Группы задач используют совместную отмену и требуют проверки свойства Task.isCancelled (привет OperaionQueue). В статье на примерах рассматривается использование групп задач и оптимизация при работе с ними:
🟢Задачи добавляются с помощью функции addTask и могут иметь определенный приоритет.
🟢Группы задач выполняются в совместном пуле потоков, что позволяет оптимизировать логику приложения.
🟢Добавление задач только после завершения предыдущих задач помогает сократить потребление памяти.
🟢Функция addTaskUnlessCancelled добавляет задачу только при отсутствии отмены группы задач.

#swift #concurrency #group
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
Ollama
Mattt продолжает вести блог NSHipster и я с удовольствием погружаюсь в старый добрый стиль и простоту статей. В этот раз тема актуальная - локальные LLM, на примере Ollama:
🟡Позволяет запускать большие языковые модели на Mac.
🟡Работает на основе llama.cpp, предоставляя удобное управление моделями.
🟡Использует файлы моделей для настройки поведения моделей.

📁 Преимущества локального запуска моделей:
🔘Конфиденциальность: данные не покидают устройство.
🔘Стоимость: работа 24/7 без учета времени использования.
🔘Задержка: отсутствие сетевых обращений, быстрое реагирование.
🔘Контроль: отсутствие черного ящика и цензуры.
🔘Надежность: отсутствие отключений и ограничений по квоте API.

🐥 Создание Swift приложений с помощью Ollama:
🟣Ollama предоставляет HTTP API для интеграции с другими инструментами.
🟣Мэт создал свой пакет Ollama Swift
🟣Этот пакет в первую очередь для того чтобы делать утилиты для себя
🟣Примеры реализации RAG-систем. Если для вас это новое сочетание букв-обязательно почитайте. Это способ использовать свою базу знаний при работе с LLM

#swift #llm #ollama
Please open Telegram to view this post
VIEW IN TELEGRAM
👍322