Как создать zip архив
Оказывается, в Foundation есть системный API, который позволяет создавать zip архив по переданному ему URL папки. Код можно посмотреть здесь.
Оказывается, в Foundation есть системный API, который позволяет создавать zip архив по переданному ему URL папки. Код можно посмотреть здесь.
Medium
How to easily create ZIP files in Swift without third-party dependencies
If you’ve ever worked on an iOS app with complex networking, sooner or later you’ll probably need to create ZIP archives from your files…
SpectreKit – библиотека для консольного UI
SpectreKit – пока еще сырая библиотека для того, чтобы собирать красивый UI для консольных приложений, написанных на Swift.
SpectreKit – пока еще сырая библиотека для того, чтобы собирать красивый UI для консольных приложений, написанных на Swift.
Обновление сертификата APNs
У Apple'ового сервиса пушей обновляется сертификат. Вам нужно не забыть добавить новый серт на свой сервер:
📆До 20 января 2025 для сендбокс окружения
📆До 24 февраля 2025 для продакшна
У Apple'ового сервиса пушей обновляется сертификат. Вам нужно не забыть добавить новый серт на свой сервер:
📆До 20 января 2025 для сендбокс окружения
📆До 24 февраля 2025 для продакшна
Apple
Apple Push Notification service server certificate update - Latest News - Apple Developer
The Certification Authority (CA) for Apple Push Notification service (APNs) is changing. APNs will update the server certificates in sandbox on January 20, 2025, and in production on February 24, 2025. All developers using APNs will need to update their application’s…
Почему UserDefaults может не возвращать данные
👉У вас включен флаг Sensitive Data Encryption, который не дает получать доступ к данным в залоченном телефоне, но вы пытаетесь обратиться к UserDefaults из виджета.
👉Автоматический преворминг приложения может включаться даже тогда, когда телефон заблокирован. Получается та же проблема, что и выше.
👉Если вы перезагрузили телефон с запущенной LiveActivity, при ее следующей загрузке данные не будут доступны.
👉У вас включен флаг Sensitive Data Encryption, который не дает получать доступ к данным в залоченном телефоне, но вы пытаетесь обратиться к UserDefaults из виджета.
👉Автоматический преворминг приложения может включаться даже тогда, когда телефон заблокирован. Получается та же проблема, что и выше.
👉Если вы перезагрузили телефон с запущенной LiveActivity, при ее следующей загрузке данные не будут доступны.
Christianselig
Beware UserDefaults: a tale of hard to find bugs, and lost data
Excuse the alarmist title, but I think it’s justified, as it’s an issue that’s caused me a ton of pain in both support emails and actually tracking it down, so I want to make others aware of it so they don’t similarly burned.
Brief intro For the uninitiated…
Brief intro For the uninitiated…
Почему приложения на Android весят меньше
Очень часто можно увидеть, что одно и то же приложение в App Store весит 100мб, а в Play Store – 10мб. В статье разбираются причины этого и то, что каждая из платформ понимает под "размером".
Очень часто можно увидеть, что одно и то же приложение в App Store весит 100мб, а в Play Store – 10мб. В статье разбираются причины этого и то, что каждая из платформ понимает под "размером".
Emergetools
Emerge Tools Blog | Are Android apps THAT much smaller than iOS?
An in-depth analysis of Android vs. iOS app sizes and why Android apps might be larger than they appear
ReactiveCollectionsKit – новая библиотека для коллекций
Помните легендарные библиотеки IGListKit и JSQDataSourcesKit? Их автор зарелизил еще одну библиотеку для отображения коллекций, по его словам, с учетом ощибок всех предыдущих итераций. Основная идея за библиотекой – коллекция реактивно реагирует на изменения вью модели, запуская нужные анимации в нужный момент.
👉Библиотека на GitHub
Помните легендарные библиотеки IGListKit и JSQDataSourcesKit? Их автор зарелизил еще одну библиотеку для отображения коллекций, по его словам, с учетом ощибок всех предыдущих итераций. Основная идея за библиотекой – коллекция реактивно реагирует на изменения вью модели, запуская нужные анимации в нужный момент.
👉Библиотека на GitHub
Jesse Squires
Introducing ReactiveCollectionsKit
I recently released a new open source project called ReactiveCollectionsKit. It is a modern, fast, and flexible library for building data-driven, declarative...
Как добавить номер версии приложения на скриншот
Разбираемся, как автоматически добавлять номера версии и билда приложения на скриншот, чтобы облегчить работу саппорта. Код получившейся библиотеки, работающий и с UIKit, и со SwiftUI, можно посмотреть тут.
Разбираемся, как автоматически добавлять номера версии и билда приложения на скриншот, чтобы облегчить работу саппорта. Код получившейся библиотеки, работающий и с UIKit, и со SwiftUI, можно посмотреть тут.
sidorov.tech
Ловим скриншоты
Как потратить целый день чтобы добавить версию приложения на экран. Простая задача превратилась в настоящий квест с масками, приватными API и хитрыми трюками UIKit и SwiftUI.
iPad как девайс для разработки
Каждый год находится человек, который рассказывает, как iPad полностью заменил ему ноутбук для iOS разработки. Автор статьи настолько сильно топит за то, что это – полноценная замена, что единственной существенной проблемой называет невозможность снятия скриншотов для App Store.
Каждый год находится человек, который рассказывает, как iPad полностью заменил ему ноутбук для iOS разработки. Автор статьи настолько сильно топит за то, что это – полноценная замена, что единственной существенной проблемой называет невозможность снятия скриншотов для App Store.
mutatingfunc.github.io
App development on iPad
In the last year, I’ve gone all-in on building apps using an iPad. I’ve never met another Playgrounds developer, and a lot of the community are surprised this is even possible!
This post should clear up what is and isn’t possible when it comes to app development…
This post should clear up what is and isn’t possible when it comes to app development…
gRPC сервер на Swift
Хорошего контента про Swift на сервере в этом году особенно много. Вот, например, туториал по тому, как собрать простой gRPC сервер с использованием grpc-swift-protobuf библиотеки.
Хорошего контента про Swift на сервере в этом году особенно много. Вот, например, туториал по тому, как собрать простой gRPC сервер с использованием grpc-swift-protobuf библиотеки.
Swiftonserver
Beginner's Guide to Protocol Buffers and gRPC with Swift - Swift on server
Learn Protocol Buffers and gRPC with Swift in this easy, step-by-step beginner's guide.
GitHub Copilot для Xcode
Главная новость прошлой недели – на ежегодной конференции GitHub Universe Microsoff анонсировали превью Copilot плагина для Xcode. Для работы требуется купленная лицензия, по фичам – все, к чему вы привыкли в других IDE. Отдельно доставляет то, как они реализовали автокомплит в отсутствии необходимого API у Xcode – поверх редактора накладывается отдельное прозрачное окно, и вот в нем уже и показываются результаты работы AI.
Главная новость прошлой недели – на ежегодной конференции GitHub Universe Microsoff анонсировали превью Copilot плагина для Xcode. Для работы требуется купленная лицензия, по фичам – все, к чему вы привыкли в других IDE. Отдельно доставляет то, как они реализовали автокомплит в отсутствии необходимого API у Xcode – поверх редактора накладывается отдельное прозрачное окно, и вот в нем уже и показываются результаты работы AI.
Планы swift-foundation на 2025
Команда, разрабатывающая версию Foundation на Swift, поделилась планами на следующий год:
👉Улучшение перфоманса библиотеки, в том числе – написание новых бенчмарков
👉Продолжать переписывать части Foundation с C на Swift
👉Помощь коммьюнити с исправлением небольших, но раздражающих проблем в дизайне и реализации
Команда, разрабатывающая версию Foundation на Swift, поделилась планами на следующий год:
👉Улучшение перфоманса библиотеки, в том числе – написание новых бенчмарков
👉Продолжать переписывать части Foundation с C на Swift
👉Помощь коммьюнити с исправлением небольших, но раздражающих проблем в дизайне и реализации
Swift Forums
Swift-Foundation 2024 Annual Update
Hi everyone, I'd like to share the first-ever yearly update from Swift-Foundation workgroup. Let's review what we've accomplished in the last year and look to what's next. Year in review This was a big year for the open source Swift-Foundation package!…
Аналог Cursor для Xcode
На одном Copilot новости не заканчиваются. В бету вышел стартап Alex Sidebar, позиционирующийся как Cursor для Xcode. Что он умеет:
👉По шоркату открывать чат, в контекст которого попадает выделенный фрагмент кода
👉В сайдбар, открытый рядом с Xcode, можно перетаскивать изображение, по которому будет сгенерирован код
👉Семантический поиск по всей кодовой базе
👉Автоматический фикс ошибок
👉Автоматическое создание новых файлов кода
Пока в бете, попробовать можно бесплатно.
На одном Copilot новости не заканчиваются. В бету вышел стартап Alex Sidebar, позиционирующийся как Cursor для Xcode. Что он умеет:
👉По шоркату открывать чат, в контекст которого попадает выделенный фрагмент кода
👉В сайдбар, открытый рядом с Xcode, можно перетаскивать изображение, по которому будет сгенерирован код
👉Семантический поиск по всей кодовой базе
👉Автоматический фикс ошибок
👉Автоматическое создание новых файлов кода
Пока в бете, попробовать можно бесплатно.
alexcodes.app
Alex Sidebar
The Cursor for Xcode
Swift против мемов
Ладно, а теперь – по-настоящему главная новость недели. На форуме Swift запретили мемы, так что, по свойству транзитивности, постить мемы теперь запрещено и всем айосерам.
Ладно, а теперь – по-настоящему главная новость недели. На форуме Swift запретили мемы, так что, по свойству транзитивности, постить мемы теперь запрещено и всем айосерам.
Жизненный цикл тестов в Swift Testing
В статье разбирается устройство лайфсайкла отдельных тестов и тест-сьютов в новом пакете swift-testing.
В статье разбирается устройство лайфсайкла отдельных тестов и тест-сьютов в новом пакете swift-testing.
Swift with Majid
Introducing Swift Testing. Lifecycle.
Any function marked with the @Test macro can be a test in the world of the Swift Testing framework. But how do you handle the lifecycle of the tests? How do you define test suites and provide setup and teardown functionality? This week, we will learn how…
Скидки на инди софт
Как всегда разработчики разного софта делают классные скидки на черную пятницу. Держите сайт с подборкой некоторых из них. Вот что там есть интересного из девтулов:
👉String Catalog – сервис, автоматически добавляющий локализацию вашему приложению
👉Helm – десктоп клиент для App Store Connect (но пишут, что скидка тут не работает 🤷♂️)
👉WishKit – SDK для сбора фидбэка в приложении
Как всегда разработчики разного софта делают классные скидки на черную пятницу. Держите сайт с подборкой некоторых из них. Вот что там есть интересного из девтулов:
👉String Catalog – сервис, автоматически добавляющий локализацию вашему приложению
👉Helm – десктоп клиент для App Store Connect (но пишут, что скидка тут не работает 🤷♂️)
👉WishKit – SDK для сбора фидбэка в приложении
Black Friday - Indie Goodies
Discover apps, books, courses deals during WWDC
swift-format в Xcode 16
В Xcode 16 появился встроенный автоформаттер для кода. Автор статьи сравнивает его результаты с SwiftLint и Prettier и разбирает, как его правильно сконфигурировать для вашего проекта.
В Xcode 16 появился встроенный автоформаттер для кода. Автор статьи сравнивает его результаты с SwiftLint и Prettier и разбирает, как его правильно сконфигурировать для вашего проекта.
Системный промпт для Apple Intelligence
Инженеры в Apple точно так же, как и все остальные, не очень хорошо понимают, как вообще работает LLM.
Инженеры в Apple точно так же, как и все остальные, не очень хорошо понимают, как вообще работает LLM.
Почему xcodebuild работает быстрее в GUI Xcode
Если вы собираете iOS приложение на CI или из консоли, не открывая Xcode, вы напрямую используете xcodebuild. И с ним есть концептуальная проблема – инкрементальные билды работают существенно медленнее, чем при сборке сразу из Xcode. В основном это вызвано тем, что Xcode использует набор приватных API для того, чтобы держать сервис все время прогретым, а в CLI его приходится каждый раз запускать вручную. Но есть несколько способов чуть улучшить ситуацию, которые и рассмотрены в статье.
Если вы собираете iOS приложение на CI или из консоли, не открывая Xcode, вы напрямую используете xcodebuild. И с ним есть концептуальная проблема – инкрементальные билды работают существенно медленнее, чем при сборке сразу из Xcode. В основном это вызвано тем, что Xcode использует набор приватных API для того, чтобы держать сервис все время прогретым, а в CLI его приходится каждый раз запускать вручную. Но есть несколько способов чуть улучшить ситуацию, которые и рассмотрены в статье.
Medium
Why is xcodebuild slower than the Xcode GUI?
There is a bug, but also it’s designed to be that way
Лучший способ искать вхождение строки по пользовательскому запросу
В различных языках часто встречаются разные написания для одного и того же термина. Поэтому, если вы реализуете поиск вхождений подстроки, взятой из пользовательского запроса, лучше всего использовать функцию
В различных языках часто встречаются разные написания для одного и того же термина. Поэтому, если вы реализуете поиск вхождений подстроки, взятой из пользовательского запроса, лучше всего использовать функцию
localizedStandardRange(of:)
, так как она повторяет поведение стандартного поиска в iOS, игнорируя особенности написания и диакритические знаки.Nil Coalescing
User-level string search in Swift
Use localizedStandardRange(of:) in Swift for flexible, locale-aware, case and accent-insensitive string searches, providing a user experience similar to system-wide searches.
Traits в Swift Testing
Traits в swift-testing – дополнительные параметры, которые передаются в макросах тестов. С их помощью можно отключать тесты по какому-то условию, устанавливать лимиты на время их исполнения, помечать тегами и аннотировать дополнительным контекстом.
Traits в swift-testing – дополнительные параметры, которые передаются в макросах тестов. С их помощью можно отключать тесты по какому-то условию, устанавливать лимиты на время их исполнения, помечать тегами и аннотировать дополнительным контекстом.
Swift with Majid
Introducing Swift Testing. Traits.
The most powerful feature of the Swift Testing framework is the trait system. Traits allow us to annotate a test or test suite to customize its behavior. This week, we will learn how to use built-in trait types to modify tests.