Swift Testing: Разбор API и макроса
Новый понятный и выразительный API делает написание тестов более простым, а в самом интерфейсе Xcode сделали большой шаг вперёд для оповещений при ошибках (или же корректном выполнении).
📖 В этой статье уделено внимание написанию тестов с использованием новых возможностей, а также разобрана миграция с XCTests.
🔗 А вот тут можно детальнее познакомиться с улучшениями и преимуществами по сравнению с XCTests.
😃 iOS Dev
#expect
Новый понятный и выразительный API делает написание тестов более простым, а в самом интерфейсе Xcode сделали большой шаг вперёд для оповещений при ошибках (или же корректном выполнении).
📖 В этой статье уделено внимание написанию тестов с использованием новых возможностей, а также разобрана миграция с XCTests.
🔗 А вот тут можно детальнее познакомиться с улучшениями и преимуществами по сравнению с XCTests.
Please open Telegram to view this post
VIEW IN TELEGRAM
iOS Dev
🥳 Нужен будет только один набор скриншотов при загрузке приложения в App Store (как для iPhone, так и для iPad). 📖 Отличная новость для дизайнеров, инди-разработчиков, да и для компаний тоже. А ещё доступ к запросу фичеринга будет более явным (конечно же…
Обновление App Store Connect
C сегодняшнего дня обязателен только один набор скриншотов для приложений (и для iPhone, и для iPad).
🤩 Теперь выкладывать приложения будет проще (и быстрее).
😃 iOS Dev
C сегодняшнего дня обязателен только один набор скриншотов для приложений (и для iPhone, и для iPad).
Please open Telegram to view this post
VIEW IN TELEGRAM
Оптимизация использования памяти для SwiftUI+CoreData
Несмотря на наличие lazy containers в SwiftUI, и в целом механизмов для оптимизации CoreData, по мере увеличения сложности приложений могут возникнуть ситуации, когда можно поймать краши из-за слишком большого использования памяти.
Важно понимать не только особенности работы с вьюхами, но и свойства самой CoreData.
📖 В этом проекте рассмотрен пошаговый процесс оптимизации работы с памятью для демонстрационного приложения (изначально использующего 1,6 ГБ памяти для отображения всего лишь 100 элементов данных), которое в итоге сможет работать с сотнями объектов и юзать всего 200 МБ.
🛠 Код приложения доступен на GitHub.
✅ Кстати, если вы хотите почитать в целом про память: ARC, side table, флаги, утечки и многое другое (и поотвечать на вопросы) — доступ можно получить здесь.
😃 iOS Dev
Несмотря на наличие lazy containers в SwiftUI, и в целом механизмов для оптимизации CoreData, по мере увеличения сложности приложений могут возникнуть ситуации, когда можно поймать краши из-за слишком большого использования памяти.
Важно понимать не только особенности работы с вьюхами, но и свойства самой CoreData.
📖 В этом проекте рассмотрен пошаговый процесс оптимизации работы с памятью для демонстрационного приложения (изначально использующего 1,6 ГБ памяти для отображения всего лишь 100 элементов данных), которое в итоге сможет работать с сотнями объектов и юзать всего 200 МБ.
🛠 Код приложения доступен на GitHub.
Please open Telegram to view this post
VIEW IN TELEGRAM
Подборка вопросов по Swift и iOS с технических собеседований 2024
Я продолжаю обновлять базу знаний, а также собирать материалы (и новые темы) для будущего обновления приложения iOS IQ.
Сегодня готов поделиться здесь огромным материалом (а в ноушене комментариями, дополнениями и примерами).
1. В чем разница между статической переменной и переменной класса?
Почему их природа схожа, и при чём здесь наследование?
2. Вычисляются ли ленивые переменные более одного раза?
И почему потокобезопасность важна.
3. В чём разница между self и Self?
Разница же в Swift заключается в их использовании и контексте. Если вы писали на других языках, то наверняка знаете для чего там использовался this или typeof (в ноушне много примеров).
4. Как сделать методы опциональными в протоколе?
Есть два подхода - optional и extension (а вот как их использовать - в разборе вот здесь).
5. Как происходит оптимизация использования памяти в UITableView?
В канале я регулярно делюсь проблемами и решениями для оптимизации. Например, как быть, если у нас очень много ячеек. В Notion есть пример разбора и таких ситуаций.
6. Что такое Dependency Injection и каковы его преимущества?
Здесь, как вы уже догадались, речь про Constructor injection/Property injection/Method injection. Ну и про описание преимуществ, конечно.
7. Объясните разницу между throws и rethrows в Swift
Как правильно использовать do-catch и многое другое.
8. Объясните типы сессий и задач, поддерживаемые классом URLSession.
Default Session/Ephemeral Session/Background Session. В этой теме рассмотрено, есть ли у нас способ повторить неудавшиеся запросы.
9. Сравните статические и динамические библиотеки
Про то, что может включать каждый тип либ, что происходит при компиляции, как быть с обновлениями.
10. Как бы вы реализовали список с бесконечной прокруткой?
Большой разбор на примерах.
11. Что такое copy-on-write в Swift? Объясните, как настроить его реализацию.
Конечно, эта техника позволяет значительно сократить использование памяти и повысить производительность. Но вот что внутри?
12. Объясните, как используется паттерн Factory и какую проблему решает этот паттерн.
Тут можно не забыть об использовании этой подборки
13. Что такое APNS и как он работает?
14. Объясните назначение ключевого слова «mutating» в Swift.
15. В чем разница между
16. Что такое Mocks и Stubs и в чем разница между ними?
Назначение/Поведение/Использование.
17. Объясните протоколы Equatable, Hashable и Comparable в Swift.
18. Что означает UIApplicationMain?
19. Объясните, почему Swift является типобезопасным языком?
Все о Strong Type, Type Inference, Type Casting, optional, дженериках.
20. Зачем вам нужны escaping closures и когда их следует использовать?
✅ Напомню, что в бусти продолжает действовать выгодное предложение (а если вам нравится канал — то ещё и здесь, в телеграм), и вы уже сейчас можете получить доступ не только к этому материалу, но и к большому количеству тем для собеседований и разбору практических задач.
😃 iOS Dev
Я продолжаю обновлять базу знаний, а также собирать материалы (и новые темы) для будущего обновления приложения iOS IQ.
Сегодня готов поделиться здесь огромным материалом (а в ноушене комментариями, дополнениями и примерами).
1. В чем разница между статической переменной и переменной класса?
Почему их природа схожа, и при чём здесь наследование?
2. Вычисляются ли ленивые переменные более одного раза?
И почему потокобезопасность важна.
3. В чём разница между self и Self?
Разница же в Swift заключается в их использовании и контексте. Если вы писали на других языках, то наверняка знаете для чего там использовался this или typeof (в ноушне много примеров).
4. Как сделать методы опциональными в протоколе?
Есть два подхода - optional и extension (а вот как их использовать - в разборе вот здесь).
5. Как происходит оптимизация использования памяти в UITableView?
В канале я регулярно делюсь проблемами и решениями для оптимизации. Например, как быть, если у нас очень много ячеек. В Notion есть пример разбора и таких ситуаций.
6. Что такое Dependency Injection и каковы его преимущества?
Здесь, как вы уже догадались, речь про Constructor injection/Property injection/Method injection. Ну и про описание преимуществ, конечно.
7. Объясните разницу между throws и rethrows в Swift
Как правильно использовать do-catch и многое другое.
8. Объясните типы сессий и задач, поддерживаемые классом URLSession.
Default Session/Ephemeral Session/Background Session. В этой теме рассмотрено, есть ли у нас способ повторить неудавшиеся запросы.
9. Сравните статические и динамические библиотеки
Про то, что может включать каждый тип либ, что происходит при компиляции, как быть с обновлениями.
10. Как бы вы реализовали список с бесконечной прокруткой?
Большой разбор на примерах.
11. Что такое copy-on-write в Swift? Объясните, как настроить его реализацию.
Конечно, эта техника позволяет значительно сократить использование памяти и повысить производительность. Но вот что внутри?
12. Объясните, как используется паттерн Factory и какую проблему решает этот паттерн.
Тут можно не забыть об использовании этой подборки
13. Что такое APNS и как он работает?
14. Объясните назначение ключевого слова «mutating» в Swift.
15. В чем разница между
@StateObject
и @ObservedObject
в SwiftUI?16. Что такое Mocks и Stubs и в чем разница между ними?
Назначение/Поведение/Использование.
17. Объясните протоколы Equatable, Hashable и Comparable в Swift.
18. Что означает UIApplicationMain?
19. Объясните, почему Swift является типобезопасным языком?
Все о Strong Type, Type Inference, Type Casting, optional, дженериках.
20. Зачем вам нужны escaping closures и когда их следует использовать?
Please open Telegram to view this post
VIEW IN TELEGRAM
Кастомизация тем в SwiftUI с использованием ShapeStyle
В SwiftUI настройка внешнего вида приложения на базе кастомной темы безусловно улучшит пользовательский опыт.
Первоначальный подход к управлению этими настройками предполагает монотонное повторение одних и тех же действий для разных экранов.
📖 В этой статье рассмотрен способ с использованием кастомного ShapeStyle для создания собственных тем во всем приложении.
😃 iOS Dev
В SwiftUI настройка внешнего вида приложения на базе кастомной темы безусловно улучшит пользовательский опыт.
Первоначальный подход к управлению этими настройками предполагает монотонное повторение одних и тех же действий для разных экранов.
📖 В этой статье рассмотрен способ с использованием кастомного ShapeStyle для создания собственных тем во всем приложении.
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Swift 6 официально анонсирован!
И хотя мы с вами используем язык для разработки приложений, он подходит и для много другого: написания библиотек, интернет-сервисов и критичного к производительности и безопасности кода.
Swift 6 расширился ещё и за счёт новых функций низкоуровневого программирования, расширенной поддержки Linux и Windows, новых кроссплатформенным API, включая новую библиотеку тестирования Swift.
📖 На макро-уровне изменения разобраны в этой статье.
А в канале уже сейчас можно прочитать про:
🔗 Новый метод count(where:) в Swift 6
🔗 DebugDescription в Xcode 16: новый макрос для упрощения отладки
🔗 Обновлённый Foundation
🔗 Swift Testing: Разбор API и макроса #expect
🔗 Миграция на Swift 6. И ещё: Swift 6: подготовка ваших проектов Xcode к будущему
😃 iOS Dev
И хотя мы с вами используем язык для разработки приложений, он подходит и для много другого: написания библиотек, интернет-сервисов и критичного к производительности и безопасности кода.
Swift 6 расширился ещё и за счёт новых функций низкоуровневого программирования, расширенной поддержки Linux и Windows, новых кроссплатформенным API, включая новую библиотеку тестирования Swift.
📖 На макро-уровне изменения разобраны в этой статье.
А в канале уже сейчас можно прочитать про:
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание секундомера и таймера на базе SystemFormatStyles в Xcode 16
Вкратце, стили форматирования (format styles) — это замена на Swift старых классов Objective-C Formatter от Apple.
Они позволяют быстро и легко создавать локализованные отображения различных типов данных.
Они безопасны, производительны и очень просты в использовании в коде для преобразования одного типа в другой.
Но документация Apple не всегда описывает все нововведения сразу же (или вообще никогда).
📖 В этом примере уже сейчас можно познакомиться с двумя новыми стилями
😃 iOS Dev
Вкратце, стили форматирования (format styles) — это замена на Swift старых классов Objective-C Formatter от Apple.
Они позволяют быстро и легко создавать локализованные отображения различных типов данных.
Они безопасны, производительны и очень просты в использовании в коде для преобразования одного типа в другой.
Но документация Apple не всегда описывает все нововведения сразу же (или вообще никогда).
📖 В этом примере уже сейчас можно познакомиться с двумя новыми стилями
SystemFormatStyle.Stopwatch
и SystemFormatStyle.Timer
.Please open Telegram to view this post
VIEW IN TELEGRAM
AVAudioEffectNode: создание низкоуровневых аудиоэффектов в Swift
При создании аудиоэффектов можно использовать Audio Units.
И хотя Apple предоставляет примеры того, как это сделать, они могут быть сложными для новичков.
Следуя аналогичному подходу из либы Novocaine, автор делится примером удобного API для создания аудиоэффектов в Swift с помощью AVFoundation.
📖 Исследование доступно здесь, а код — вот тут.
✅ Ещё больше эффектов, анимаций и разборов кода вы можете получить здесь.
😃 iOS Dev
При создании аудиоэффектов можно использовать Audio Units.
И хотя Apple предоставляет примеры того, как это сделать, они могут быть сложными для новичков.
Следуя аналогичному подходу из либы Novocaine, автор делится примером удобного API для создания аудиоэффектов в Swift с помощью AVFoundation.
📖 Исследование доступно здесь, а код — вот тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание крупномасштабных приложений на SwiftUI: Руководство по модульной архитектуре
Архитектура — это всегда тема для жарких споров, особенно когда у нас есть много вариантов.
В фундаментальной статье вы сможете найти:
🔗 Что представляет собой модульная архитектура?
🔗 Какие могут быть проблемы с MVVM со SwiftUI
🔗 Как можно понимать паттерн MV
🔗 Screens vs Views (плюсы и минусы наименований)
🔗 Примеры создания и использования моделей
🔗 View-специализированная логика
🔗 Валидация
🔗 Навигация (и пример с TabView)
🔗 Отображение ошибок
🔗 Группировка событий
🔗 Форматирование
🔗 Тестирование
В канале уже были примеры и других реализаций, напомню про эти посты:
1️⃣ Реализация модульной архитектуры на примере Spotify
2️⃣ Опенсорсный клиент на SwiftUI для Mastodon: демонстрация реализованных методов и фич
3️⃣ Пример реализации модульной архитектуры в компании Just Eat
И, конечно, если вы хотите найти ещё больше информации, примеров и разборов конкретных архитектур, подписывайтесь:
💰 Boosty • 💬 Telegram
😃 iOS Dev
Архитектура — это всегда тема для жарких споров, особенно когда у нас есть много вариантов.
В фундаментальной статье вы сможете найти:
В канале уже были примеры и других реализаций, напомню про эти посты:
1️⃣ Реализация модульной архитектуры на примере Spotify
2️⃣ Опенсорсный клиент на SwiftUI для Mastodon: демонстрация реализованных методов и фич
3️⃣ Пример реализации модульной архитектуры в компании Just Eat
И, конечно, если вы хотите найти ещё больше информации, примеров и разборов конкретных архитектур, подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
Как вы относитесь к перфоманс ревью?
Anonymous Poll
32%
👍 Положительно
31%
🧑💻 Нейтрально
14%
👎 Негативно
23%
Не используется внутри компании
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация перетаскивания элементов с помощью жестов в SwiftUI
📖 Несложный пример, в котором показан один из возможных подходов, как работать с перетаскиванием элементов интерфейса с помощью жестов в SwiftUI.
🛠 Само решение доступно на github.
😃 iOS Dev
📖 Несложный пример, в котором показан один из возможных подходов, как работать с перетаскиванием элементов интерфейса с помощью жестов в SwiftUI.
🛠 Само решение доступно на github.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как делать великолепные приложения
Я очень редко делюсь роликами c интервью (только если речь не про персон калибра Барбары Лисков).
В канале очень много примеров анимаций, поэтому пройти мимо автора вот этого протипа (и этого, и многих других) нельзя.
📺 В этом видео Джанум делится многими деталями (и своим опытом в Apple, Netflix, Airbnb), в том числе:
- Уровни анимации.
- Почему шейдеры имеют большое значение (и как они работают)
- Как реализована анимация загрузки для Arc.
- Про собственный анимационный движок Wave (есть обзорный пост в канале).
- Изучение принципов флюидного дизайна при работе на iPad и многим другим.
Рекомендую посмотреть не только разработчикам, но и поделиться с дизайнерами подходами Джанума к созданию по-настоящему уникальных анимаций.
✅ Кстати, вот тут есть целый раздел, в котором разобраны необычные и сложные анимации на реальных примерах.
😃 iOS Dev
Я очень редко делюсь роликами c интервью (только если речь не про персон калибра Барбары Лисков).
В канале очень много примеров анимаций, поэтому пройти мимо автора вот этого протипа (и этого, и многих других) нельзя.
📺 В этом видео Джанум делится многими деталями (и своим опытом в Apple, Netflix, Airbnb), в том числе:
- Уровни анимации.
- Почему шейдеры имеют большое значение (и как они работают)
- Как реализована анимация загрузки для Arc.
- Про собственный анимационный движок Wave (есть обзорный пост в канале).
- Изучение принципов флюидного дизайна при работе на iPad и многим другим.
Рекомендую посмотреть не только разработчикам, но и поделиться с дизайнерами подходами Джанума к созданию по-настоящему уникальных анимаций.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Janum Trivedi - What makes a software product feel great (Dive Club Ep. 72)
This week’s episode is with Janum Trivedi (https://janum.co/) who makes some of the most stunning prototypes in all of design. So the main goal of this conversation is to answer the question “what makes a piece of software feel great?”
Some of the key talking…
Some of the key talking…
Как работать с MeshGradient в iOS 18
В iOS 18 появилась возможность создавать mesh-градиенты.
В целом, это лёгкий в использовании способ создания необычных эффектов.
Например, вы можете посмотреть на мою реализацию или на вариант создания анимации в стиле Siri.
📖 В этом посте довольно подробно описано, что из себя представляют mesh-градиенты, как их можно использовать и анимировать, чтобы они выглядели действительно приятно.
😃 iOS Dev
В iOS 18 появилась возможность создавать mesh-градиенты.
В целом, это лёгкий в использовании способ создания необычных эффектов.
Например, вы можете посмотреть на мою реализацию или на вариант создания анимации в стиле Siri.
📖 В этом посте довольно подробно описано, что из себя представляют mesh-градиенты, как их можно использовать и анимировать, чтобы они выглядели действительно приятно.
Please open Telegram to view this post
VIEW IN TELEGRAM
Реализация загрузчика файлов в SwiftUI
Вполне вероятно, что вам приходилось решать задачу отслеживания прогресса загрузки нескольких файлов.
📖 Маттео Манфердини в своём блоге написал огромный материал о своём подходе к созданию загрузчика файлов (и дополнил свою прошлую реализацию).
Статья разбита на несколько частей:
1️⃣ Загрузка файлов и как трекать прогресс скачивания.
2️⃣ Реализация архитектуры для загрузки нескольких файлов.
3️⃣ Трекаем прогресс с помощью Swift Concurrency.
4️⃣ Создание интерфейса SwiftUI для управления загрузкой.
🛠 Код проекта доступен на github
😃 iOS Dev
Вполне вероятно, что вам приходилось решать задачу отслеживания прогресса загрузки нескольких файлов.
📖 Маттео Манфердини в своём блоге написал огромный материал о своём подходе к созданию загрузчика файлов (и дополнил свою прошлую реализацию).
Статья разбита на несколько частей:
1️⃣ Загрузка файлов и как трекать прогресс скачивания.
2️⃣ Реализация архитектуры для загрузки нескольких файлов.
3️⃣ Трекаем прогресс с помощью Swift Concurrency.
4️⃣ Создание интерфейса SwiftUI для управления загрузкой.
🛠 Код проекта доступен на github
Please open Telegram to view this post
VIEW IN TELEGRAM
Подборка докладов с iOS Conf SG 2024
🤩 Наш читатель посетил iOS-конференцию в Сингапуре и поделился своим топом лучших докладов:
📺 Understanding our users – полезное видео, в котором разбираются основы того, что спрашивать у пользователей, чтобы развивать продукт в нужном направлении.
📺 Swift beyond Apple platforms — о возможностях и проблемах использования Swift от веб-разработки до работы во embedded-системах.
📺 The Swift Actor Pitfall: Understanding and Managing Reentrancy – разбор неочевидной и простой ошибки, связанной со swift concurrency.
Нельзя пройти стороной и миграцию кодовой базы на async/await.
🔗 А весь плейлист с докладами доступен вот тут.
Кстати, в канале есть обзоры и других конференций:
🔗 Подборка докладов с конференции Swift Craft
🔗 Доклады с конференции try! Swift Tokyo 2024
😃 iOS Dev
📺 Understanding our users – полезное видео, в котором разбираются основы того, что спрашивать у пользователей, чтобы развивать продукт в нужном направлении.
📺 Swift beyond Apple platforms — о возможностях и проблемах использования Swift от веб-разработки до работы во embedded-системах.
📺 The Swift Actor Pitfall: Understanding and Managing Reentrancy – разбор неочевидной и простой ошибки, связанной со swift concurrency.
Нельзя пройти стороной и миграцию кодовой базы на async/await.
Кстати, в канале есть обзоры и других конференций:
🔗 Подборка докладов с конференции Swift Craft
🔗 Доклады с конференции try! Swift Tokyo 2024
Please open Telegram to view this post
VIEW IN TELEGRAM
Утечка памяти: детектив в Xcode
Недавно Джейкоб Бартлетт столкнулся с забавной ошибкой, связанной с диплинками.
🔎 Суть проблемы была в том, что при нажатии на push-уведомление некоторые пользователи сообщали, что экран пушился дважды (приложение открывалось, но сам переход дублировался).
📖 В итоге разработчик провел целое расследование, а к чему оно привело, можно прочитать тут.
Спойлер:для поиска пригодится этот пост .
😃 iOS Dev
Недавно Джейкоб Бартлетт столкнулся с забавной ошибкой, связанной с диплинками.
📖 В итоге разработчик провел целое расследование, а к чему оно привело, можно прочитать тут.
Спойлер:
Please open Telegram to view this post
VIEW IN TELEGRAM
Расширенный поиск с помощью AI по сессиям WWDC
🤩 Неплохая идея (автор - Мэтт Спир), с помощью которой можно сразу получить саммари по фичам и посмотреть доступные сессии по теме.
📖 А вот тут можно посмотреть на подборку лучших сессий с WWDC24 (Swift, Perfomance, Debugging).
😃 iOS Dev
📖 А вот тут можно посмотреть на подборку лучших сессий с WWDC24 (Swift, Perfomance, Debugging).
Please open Telegram to view this post
VIEW IN TELEGRAM
ReviewBuddy — приложение для трекинга оценок в AppStore или как сменить регион, не внося изменения в Apple ID
Время от времени я стараюсь облегчить жизнь в разработке и для своих проектов, и для целей компании (раз, два).
Иногда необходимо видеть, как приложение выглядит в том или ином аппсторе, но нативной опции для переключения у нас нет (либо можно чекать в браузере каждый раз через несколько действий).
Поэтому около месяца назад я решил потратить выходные и часть отпуска на исследование возможностей, как же можно переключать аппстор (и вообще, что на это говорит Apple, спойлер — можно, но со скрипом).
Наверняка, многие знают про опцию поиска приложений (и способ для проверки доступности новой версии через
Поэтому я внедрил несложный механизм запросов с помощью уже не такого новомодного async/await и написал алгоритм трекинга оценок для любого приложения в аппсторе. Бонусом впилил историю, просмотр отзывов (а отвечать на них можно в Starly), копирование айдишников и урлов и возможность шаринга оценок по любому приложению.
А вот с переключением аппсторов вышло интереснее (для этого можно использовать кастомные схемы, если кому интересно — покопайте вот тут) и с помощью этого можно переключать дефолтный стор (но, конечно, без возможности скачивания приложений или покупок). Цель — для девелоперов чекнуть их (и не только их приложения) в других странах.
В итоге поставленных целей удалось добиться, для хранения истории юзал SwiftData, а самый сложный момент — было биться с ревью-командой, в итоге потратил на переписку около месяца, чтобы показать, как именно запрашиваются рейтинги и что происходит внутри.
🔗 Скачать приложение можно здесь.
🎆 Поддержать — вот тут.
💸 Промокод (для инди-разработчиков и тех, кому нужно — можно использовать этот на фулл-версию на год).
😃 iOS Dev
Время от времени я стараюсь облегчить жизнь в разработке и для своих проектов, и для целей компании (раз, два).
Иногда необходимо видеть, как приложение выглядит в том или ином аппсторе, но нативной опции для переключения у нас нет (либо можно чекать в браузере каждый раз через несколько действий).
Поэтому около месяца назад я решил потратить выходные и часть отпуска на исследование возможностей, как же можно переключать аппстор (и вообще, что на это говорит Apple, спойлер — можно, но со скрипом).
Наверняка, многие знают про опцию поиска приложений (и способ для проверки доступности новой версии через
https://itunes.apple.com/search
). Но ведь её можно использовать и для поиска оценок/формирования средневзвешенной.Поэтому я внедрил несложный механизм запросов с помощью уже не такого новомодного async/await и написал алгоритм трекинга оценок для любого приложения в аппсторе. Бонусом впилил историю, просмотр отзывов (а отвечать на них можно в Starly), копирование айдишников и урлов и возможность шаринга оценок по любому приложению.
А вот с переключением аппсторов вышло интереснее (для этого можно использовать кастомные схемы, если кому интересно — покопайте вот тут) и с помощью этого можно переключать дефолтный стор (но, конечно, без возможности скачивания приложений или покупок). Цель — для девелоперов чекнуть их (и не только их приложения) в других странах.
В итоге поставленных целей удалось добиться, для хранения истории юзал SwiftData, а самый сложный момент — было биться с ревью-командой, в итоге потратил на переписку около месяца, чтобы показать, как именно запрашиваются рейтинги и что происходит внутри.
💸 Промокод (для инди-разработчиков и тех, кому нужно — можно использовать этот на фулл-версию на год).
Please open Telegram to view this post
VIEW IN TELEGRAM
Будьте внимательны к UserDefaults: история о труднодоступных ошибках и потерянных данных
Хотя UserDefaults и удобный инструмент (и стандарт, который использует все или почти все) с массой удобных фич (просто обмениваться данными, автоматическая сериализация/десериализация и так далее), есть кейсы, когда стоит использовать что-то ещё.
Например, два пункта, при которых точно стоит избегать использования UserDefaults:
🔘 Не нужно хранить конфиденциальные данные в UserDefaults (для этого есть кейчейн).
🔘 Следует избегать больших объемов данных в UserDefaults (правильнее юзать Core Data или Swift Data, или Realm, хотя поддержка большей части экосистемы остановлена).
📖 Вышла отличная статья от Кристиана Селига с разбором таких примеров, а ещё там есть интересные ситуации, когда данные могут быть недоступны (и при чём тут prewarming), и как предотвратить потерю вашей информации в UserDefaults.
😃 iOS Dev
Хотя UserDefaults и удобный инструмент (и стандарт, который использует все или почти все) с массой удобных фич (просто обмениваться данными, автоматическая сериализация/десериализация и так далее), есть кейсы, когда стоит использовать что-то ещё.
Например, два пункта, при которых точно стоит избегать использования UserDefaults:
📖 Вышла отличная статья от Кристиана Селига с разбором таких примеров, а ещё там есть интересные ситуации, когда данные могут быть недоступны (и при чём тут prewarming), и как предотвратить потерю вашей информации в UserDefaults.
Please open Telegram to view this post
VIEW IN TELEGRAM
Исследование причин зависаний приложений — серия уроков от Apple
📖 Вышла новая серия туториалов от Apple, в которой новички могут узнать, как использовать Instruments для анализа производительности, ресурсов и поведения приложений.
Затронуты темы, связанные с улучшением как отзывчивости, потребления памяти и анализ сложных ситуаций во время работы приложения.
Для удобства отметил главы в формате теории (📖) и практики (🛠)
Первая часть
📖 Начало работы с инструментами
🛠 Идентификация причины зависания
Вторая часть
🛠 Анализ активности главного потока
📖 Определение частоты выполнения
🛠 Сокращение нагрузки на основной поток
🛠 Выполнение работы асинхронно
📖 Понимание синхронных (и асинхронных зависаний)
🛠 Обеспечение выполнения работы в фоновом потоке
✅ Кстати, в закрытой базе знаний есть большой раздел, в котором можно посмотреть на разные подходы к отладке приложений (и узнать про некоторые приёмы и советы).
😃 iOS Dev
📖 Вышла новая серия туториалов от Apple, в которой новички могут узнать, как использовать Instruments для анализа производительности, ресурсов и поведения приложений.
Затронуты темы, связанные с улучшением как отзывчивости, потребления памяти и анализ сложных ситуаций во время работы приложения.
Для удобства отметил главы в формате теории (📖) и практики (🛠)
Первая часть
📖 Начало работы с инструментами
🛠 Идентификация причины зависания
Вторая часть
🛠 Анализ активности главного потока
📖 Определение частоты выполнения
🛠 Сокращение нагрузки на основной поток
🛠 Выполнение работы асинхронно
📖 Понимание синхронных (и асинхронных зависаний)
🛠 Обеспечение выполнения работы в фоновом потоке
Please open Telegram to view this post
VIEW IN TELEGRAM