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

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
Download Telegram
🈸 Expedite an app review. Как ускорить проверку приложения в App Store
К моему удивлению, не все знают что в AppStore есть возможность несколько раз в год "пройти вне очереди" и запросить ускоренное ревью. Это возможно в случае:
🔵Возникновения ошибок в приложении, чтобы минимизировать последствия для пользователей и предотвратить падение рейтинга.
🔵Ускоренная проверка приложения может помочь ускорить процесс проверки и выпустить приложение быстрее.
🔵Для запроса ускоренной проверки необходимо перейти на портал разработчиков Apple и войти в свой аккаунт.
🔵Необходимо предоставить информацию о типе запроса, имени лица, запрашивающего проверку, адресе электронной почты, организации и названии приложения.
🔵Ускоренные проверки следует использовать только в исключительных случаях, таких как исправление критических ошибок или выпуск приложения в связи с событием.
🔵Не соблюдение руководства и чрезмерное ускорение запросов на проверку могут привести к игнорированию будущих запросов со стороны Apple

Это может оказаться вам актуальным в предверии самого загруженного сезона в App Store. В период с 22 по 27 декабря рассмотрение занимает сильно больше времени
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🔨 В iOS 18 Apple добавила необязательный параметр IsEnabled ко многим accessibility модификаторам
Apple добавила параметр isEnabled в .accessibilityLabel, .accessibilityInputLabels, .accessibilityValue, .accessibilityHint и другим модификаторам доступности. В результате модификатор применяется только в том случае, если параметр IsEnabled имеет значение true.
Это может оказаться полезным в ситуациях, когда вам нужно условно переопределить режим доступности по-умолчанию.
Небольшое, но полезное улучшение для работы с доступностью
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🔨 Миграция с Combine на AsyncAlgorithms
Очень необычная и глубокая статья. Автор статьи демонстрирует, как перенести реактивный Combine код на AsyncAlgorithms. Что приятно, автор разбирается в реактивном программировании и любит Combine, от этого статья раскрывается с интересной стороны. В самом начале автор знакомит нас с демо-проектом, написанным на Combine с классическими задачами, легко решаемыми Combine: инкремент бейджа из разных источников, отображение прогресса, работа с сетью. После чего начинает шаг за шагом внедрять Асинхронные алгоритмы:
🔘AsyncSequence предоставляет асинхронную версию протокола Iterator
🔘Использование combineLatest для объединения потоков
🔘Итерация по асинхронной последовательности с помощью for-await-in
🔘Преобразование объединенного потока в асинхронный поток с продолжением
🔘Использование AsyncStream для управления точкой приостановки
🔘Замена оператора .throttle() на эквивалент AsyncAlgorithms
🔘Использование performDownload() и @MainActor для потокобезопасности
🔘Перенос CurrentValueSubject в AsyncChannel
🔘Использование AsyncChannel для буферизации значений
🔘Изменение названия функции subscribeToUser на handleUserValues
🔘Использование AsyncChannel вместо CurrentValueSubject
🔘Применение операции compactMap для фильтрации нулевых значений

Проблемы с AsyncChannel
🔴AsyncChannel ведет себя как PassthroughSubject, а не как CurrentValueSubject
🔴AsyncIterator внутри AsyncSequence не поддерживает броадкаст и мультиплексирование

Преимущества AsyncAlgorithms
🟢Код проще для чтения и легче сочетается с остальной частью Swift Concurrency
🟢Снижается нагрузка на обслуживание кода в будущем

Я не могу согласиться с выводами автора. Действительно, он смог показать альтернативу Combine, для разработчиков, знакомых с Swift Concurrency, но:
🔵Combine это не какой-то забытый фреймворк, это известный всем ReactiveX, но в реализации Reactive Streams. Код Combine сможет читать любой инженер, знакомый с "реактивщиной"
🔵Swift Concurrency это часть Swift, как и Combine часть экосистемы Apple и SwiftUI (хоть и уже в меньшей степени)
🔵AsyncAlgorithms как раз внешняя зависимость, имеющая в этом свои преимущества, но не являющаяся частью экосистемы из коробки

После изучения статьи я смог найти кейсы использования AsyncAlgorithms в своих повседневных задачах, но мигрировать на него с Combine не вижу смысла, а вы?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
🍎 🔪 🐥 Apple убивает Swift.
Хочется в эту пятницу немного с вами похолливарить на тему развития Swift как языка, для этого нашел стаью, которая неплохо описывает развитие Swift как языка и его текущие эволюционные проблемы.

История Swift
🔵Swift был создан Крисом Латтнером в начале 2010-х годов.
🔵В 2015 году Латтнер убедил Apple перейти на Swift с открытым исходным кодом.
🔵В 2017 году Латтнер ушел, и управление Swift перешло к Apple.

Управление языками программирования
🔵Каждый язык программирования управляется кем-то или чем-то.
🔵Управление включает выбор, разработку и внедрение изменений.
🔵Примеры успешных языков: Python, Rust, Kotlin.

Python: Доброжелательный пожизненный диктатор
🔵Python управляется руководящим советом из 5 инженеров.
🔵Изменения предлагаются через PEPs и обсуждаются сообществом.
🔵Python медленно и осторожно продвигается к новым функциям.

Rust: Управляемый сообществом продукт с открытым исходным кодом
🔵Rust управляется сообществом разработчиков через RFC.
🔵Каждое важное решение начинается с запроса комментариев.
🔵Обсуждение в сообществе — секрет качества Rust.

Kotlin: Поддержка корпорации проекта с открытым исходным кодом
🔵Kotlin управляется фондом Kotlin Foundation.
🔵Совет директоров фонда назначает ведущего разработчика.
🔵Участники сообщества могут предлагать изменения и тестировать экспериментальные API.

Стимулы в управлении языками программирования
🔵Разработчики хотят работать с приятным языком.
🔵Сообщество стремится улучшить язык, но подчиняется другим силам.
🔵Руководящая группа имеет разные стимулы в зависимости от структуры управления.

Swift: Пожизненный корпоративный диктатор
🔵Apple является диктатором Swift, назначая членов руководящей команды.
🔵Apple стремится максимизировать прибыль, что противоречит сообществу разработчиков.
🔵Swift 5.1 представил непрозрачные типы результатов и сборщики функций без участия сообщества.
🔵SwiftUI выглядит проще, но усложнил язык в целом.

Приоритеты и задержки в Swift
🔵Внедрение новой платформы пользовательского интерфейса в 2019 году было приоритетом, что задержало параллелизм в Swift до 2021 года.
🔵Крис Латтнер, несмотря на уход из Apple в 2017 году, оставался в команде Swift до 2021 года, но его уход был пессимистичным.

Философия дизайна Криса Латтнера
🔵Латтнер стремился к простым вещам, создающим композицию, и постепенному раскрытию информации.
🔵В современном Swift эти принципы нарушены, что вызывает критику.

Проблемы с управлением и сообществом
🔵Латтнер критиковал Apple за игнорирование его комментариев и проблемы с прозрачностью.
🔵Сообщество разработчиков считает, что их мнения не учитываются, что приводит к сложной динамике.

Технический долг и компиляторы
🔵Латтнер говорил о технических задолженностях в компиляторе, которые накопились с момента его ухода.
🔵Современный Swift страдает от технических долгов, которые могут быть не решены.

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

Надежда на будущее Swift
🔵Apple и сообщество заметили уход Латтнера, что ускорило переход к менее диктаторской модели управления.
🔵Swift заимствует идеи у Rust и других языков, что дает надежду на его будущее.
🔵Apple внедряет Swift на Windows и Arduino, а также использует его на своих серверных системах.
🔵Apple переписывает Foundation в виде пакета Swift с открытым исходным кодом.

Лично я очень люблю Swift и радуюсь его развитию и внедрению всего нового, ведь не обязательно использовать все. Но и разделяю мнение что мы все дальше уходим от концепции простого языка с понятными конструкциями. Что вы думаете по этому поводу?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👏14
📱 Предотвращение скриншотов экрана в SwiftUI

Есть множество сценариев, в которых требуется изменять содержимое экрана или реагировать на попытку сделать скриншот экрана. Если в UIKit с этим все разобрались, то про SwiftUI многие забывают. В статье разбирается SwiftUI модификатор, интегрированный с UIKit, для скрытия контента во время создания снимков экрана
🔵SwiftUI предоставляет функцию конфиденциальности для предотвращения появления конфиденциального контента на скриншотах и записях экрана
🔵Функция полезна для приложений, обрабатывающих личные пользовательские данные
🔵Модификатор hideWithScreenshot будет создан на основе UITextField с isSecureTextEntry для скрытия содержимого
🔵Конечный результат - автоматическое скрытие конфиденциального контента
🔵Гибкое решение позволяет выборочно применять модификатор к определенным View для обеспечения конфиденциальности
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
iOS Broadcast
🔨 Миграция с Combine на AsyncAlgorithms Очень необычная и глубокая статья. Автор статьи демонстрирует, как перенести реактивный Combine код на AsyncAlgorithms. Что приятно, автор разбирается в реактивном программировании и любит Combine, от этого статья раскрывается…
Очень интересный пример, почему Combine актуален даже в мире Swift Concurrency. При миграции на Swift 6 включаются проверки на потенциальные проблемы с многопоточностью и работа с NotificationCenter требует обеспечения явной потокобезопасности. Эту ошибку легко исправить с Combine, интеграция с NotificationCenter у которого давно реализована:
🔵Объединяем 3 паблишера в один поток данных Publishers.MergeMany
🔵Явно указываем что хотим получать ивенты в главном потоке receive(on: DispatchQueue.main)
🔵Не забываем про то что assign захватывает сильной ссылкой и либо добавляем [weak self] либо вспомогательную функцию weakAssign
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍1