Дорабатываю дизайн отображения слов.
1. Уровень изученности слова
2. Просмотр подробной информации по слову
Всё делается по фидбэку пользователей❤️ ❤️ ❤️
1. Уровень изученности слова
2. Просмотр подробной информации по слову
Всё делается по фидбэку пользователей
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Как мне рекомендовали в комментариях, я затрагиваю Firebase 🔥 (да, логотип у них уже сменился).
Решил посмотреть как работает инициализация в Objective-C проектах… Осмелюсь сказать, что я знаю базовый C, но что это???😮
После прочтения этого, я слышу зов Ктулху🙉
Решил посмотреть как работает инициализация в Objective-C проектах… Осмелюсь сказать, что я знаю базовый C, но что это???
После прочтения этого, я слышу зов Ктулху🙉
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
Что за прикол от Google? Они документируют iOS лучше, чем свой Android? 🤨
Или на Android настолько суровые ребята, что A/B тесты им не нужны?
Или на Android настолько суровые ребята, что A/B тесты им не нужны?
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
За прошедшие 2 вечера мне удалось реализовать:
🔸 Загрузку данных в Firestore Database
🔸 Скачивание обновленных записей в app
Как результат, не нужно ждать ревью (порой это занимает 2-3 дня), а просто обновлять контент приложения.
Дальше посмотрим на эти 2 майлстоуна чуть ближе. Совсем чуть-чуть🙈
Как результат, не нужно ждать ревью (порой это занимает 2-3 дня), а просто обновлять контент приложения.
Дальше посмотрим на эти 2 майлстоуна чуть ближе. Совсем чуть-чуть
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Загрузка данных в Firestore Database
Firebase предоставляет крутое SDK, как минимум для простых вещей оно подходит безупречно! На мой взгляд, таким и должно быть SDK - работает при минимальной конфигурации.
Python скрипт для загрузки документов. Схема создаётся на основе json объекта, который хранится в переменной
creds.json - скачивается с Firebase Console.
Обожаю Python👩💻 за его простоту и лаконичность 🟥
Firebase предоставляет крутое SDK, как минимум для простых вещей оно подходит безупречно! На мой взгляд, таким и должно быть SDK - работает при минимальной конфигурации.
Python скрипт для загрузки документов. Схема создаётся на основе json объекта, который хранится в переменной
word
.creds.json - скачивается с Firebase Console.
# Некоторые части я специально исключил для краткости.
from google.cloud import firestore
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = “path/creds.json”
db = firestore.Client()
with open(json_file_path, "r", encoding="utf-8") as f:
words = json.load(f)
for word in words:
# небольшая настройка word, чтобы привести некоторые поля к определенным типам
db.collection("words").document(doc_id).set(word)
Обожаю Python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Скачивание обновленных записей в app
SDK для iOS так же порадовало!
Для начала добавил в зависимости Firebase SDK, затем скачал файл с кредами
Дальше создал сервис, инкапсулирующий работу с Firestore:
Как я работаю с этим классом?
1️⃣ Переодически вызываю
2️⃣ Проверяю настало ли время идти в Firestore
3️⃣ Если да, то нахожу максимальное значение
4️⃣ Последним шагом иду в Firestore за обновленными записями
Это позволяет уменьшить нагрузку на базу (там есть лимиты).
Пока не посмотрел детально, но вроде можно не делать polling, а подписываться на обновления в Firestore. Возможно мне это и не нужно.
SDK для iOS так же порадовало!
Для начала добавил в зависимости Firebase SDK, затем скачал файл с кредами
GoogleService-Info.plist
, и в основном классе App добавил делегат, вызывающийFirebaseApp.configure()
. Всё! Настроено…Дальше создал сервис, инкапсулирующий работу с Firestore:
class FirebaseWordSyncService {
private let db = Firestore.firestore()
func fetchUpdatedWords(since lastUpdated: Date, completion: @escaping ([Word]) -> Void) {
print("Fetching words updated since \(lastUpdated)")
db.collection(collection)
.whereField("lastUpdated", isGreaterThan: lastUpdated)
.getDocuments { snapshot, error in
// handle docs
}
}
}
Как я работаю с этим классом?
fetchUpdatedWords
из приложенияlastUpdated
в базе Core DataЭто позволяет уменьшить нагрузку на базу (там есть лимиты).
Пока не посмотрел детально, но вроде можно не делать polling, а подписываться на обновления в Firestore. Возможно мне это и не нужно.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Тема с Firebase была предложена какое-то время назад одним из читателей. Если тебе хочется повлиять на контент этого канала - это возможно, я открыт к идеям 😇
Please open Telegram to view this post
VIEW IN TELEGRAM
Натолкнулся на байтклик статью на Medium
SwiftUI in 2025: Forget MVVM: https://dimillian.medium.com/swiftui-in-2025-forget-mvvm-262ff2bbd2ed
В ней рассказывается материал на основе доклада с wwdc 2019 😄
Сам доклад супер!🔥
https://developer.apple.com/videos/play/wwdc2019/226
Рассказывают про основную концепцию SwiftUI: View это функция от данных. Думаю, попробую в дальнейшем этот подход. Но переписывать готовое не буду😵💫
И еще упомянутые в статье (но их еще не посмотрел):
https://developer.apple.com/videos/play/wwdc2023/10149/
https://developer.apple.com/videos/play/wwdc2020/10040/
SwiftUI in 2025: Forget MVVM: https://dimillian.medium.com/swiftui-in-2025-forget-mvvm-262ff2bbd2ed
В ней рассказывается материал на основе доклада с wwdc 2019 😄
Сам доклад супер!
https://developer.apple.com/videos/play/wwdc2019/226
Рассказывают про основную концепцию SwiftUI: View это функция от данных. Думаю, попробую в дальнейшем этот подход. Но переписывать готовое не буду
И еще упомянутые в статье (но их еще не посмотрел):
https://developer.apple.com/videos/play/wwdc2023/10149/
https://developer.apple.com/videos/play/wwdc2020/10040/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Сегодня у меня знатно пригорело 🧨
Сижу я радостный, жду ревью версии с интеграцией с Firebase. Проверил на различных симуляторах, на физическом устройстве. Приходит реджект… 🙅♂️
Иду разбираться в чем дело. Они сообщили, что не работает на iPad Air (5th generation) - закрашилось при запуске. Приложили логи и инструкции как анализировать проблему. Запускаю симулятор локально… работает.
Начинаю смотреть логи👀 которые они прислали. Там при старте приложения что-то сломалось, но что не понятно! Указывает в трейсе имя моего приложения, а вместо названий методов просто адреса с какими-то сдвигами.
Порылся в интернете, ссылках что ревьюеры дали, у гпт поспрашивал, говорят нужен dSYM - в нем хранится информация для дебага, как раз сопоставление между адресами и названиями методов. Положил в рабочую директорию Xcode, результата нет. Добавил архив билда, скачав его из Xcode Cloud предварительно. То же самое…🤬
Загружаю в TestFlight пересобранную версию и буду смотреть в чем причина. Очень жаль, что воспроизвести не удалось. Ту зафейленную версию не смог через Internal Testing TestFlight проверить, т.к. интеграция сломалась и мне просто не дали потестировать тот билд.
Пока заметил через😮 ). Может каких-то полей при старте не было видно из-за этого…
На всякий случай, заменил имена моделей на что-то содержащее v1, v2, v3, …
Сижу я радостный, жду ревью версии с интеграцией с Firebase. Проверил на различных симуляторах, на физическом устройстве. Приходит реджект… 🙅♂️
Иду разбираться в чем дело. Они сообщили, что не работает на iPad Air (5th generation) - закрашилось при запуске. Приложили логи и инструкции как анализировать проблему. Запускаю симулятор локально… работает.
Начинаю смотреть логи
13 DerDieDas DE 0x102859e7c 0x102830000 + 171644
14 DerDieDas DE 0x102858a70 0x102830000 + 166512
15 SwiftUI 0x19d23eec0 static App.main() + 164
Порылся в интернете, ссылках что ревьюеры дали, у гпт поспрашивал, говорят нужен dSYM - в нем хранится информация для дебага, как раз сопоставление между адресами и названиями методов. Положил в рабочую директорию Xcode, результата нет. Добавил архив билда, скачав его из Xcode Cloud предварительно. То же самое…
Загружаю в TestFlight пересобранную версию и буду смотреть в чем причина. Очень жаль, что воспроизвести не удалось. Ту зафейленную версию не смог через Internal Testing TestFlight проверить, т.к. интеграция сломалась и мне просто не дали потестировать тот билд.
Пока заметил через
git status
, что Xcode менял активную Core Data модель на предыдущую версию (с чего бы вообще На всякий случай, заменил имена моделей на что-то содержащее v1, v2, v3, …
Please open Telegram to view this post
VIEW IN TELEGRAM
🤬1
Заметил следующую штуку
Краш репорты представлены файлами с расширением ips. Если открыть их в VS Code, то они выглядят как json. Но если открыть их с помощью Console (на скриншоте) или Xcode, то открывается отформатированный трейс по потокам, с заголовком (как на 2ой картинке).
Адреса там не найти, т.к. они представлены чуть в другом формате. Но суть в том, что json преобразуется в форматированный и более понятный человеку (пока не мне 🙈) вид.
Но в итоге я так и не понял, как заставить их сматчить адреса и дебаг информацию. Пробовал так же консольные инструменты, но не сработало.
Ужасное ощущение осталось, но я постараюсь на нем не зацикливаться. Ведь упало не у любимых пользователей🟥 🟥
Краш репорты представлены файлами с расширением ips. Если открыть их в VS Code, то они выглядят как json. Но если открыть их с помощью Console (на скриншоте) или Xcode, то открывается отформатированный трейс по потокам, с заголовком (как на 2ой картинке).
Адреса там не найти, т.к. они представлены чуть в другом формате. Но суть в том, что json преобразуется в форматированный и более понятный человеку (пока не мне 🙈) вид.
Но в итоге я так и не понял, как заставить их сматчить адреса и дебаг информацию. Пробовал так же консольные инструменты, но не сработало.
Ужасное ощущение осталось, но я постараюсь на нем не зацикливаться. Ведь упало не у любимых пользователей
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
tg_image_765229706.png
69.1 KB
С помощью утилиты ☕️
atos
получилось хоть что-то понять без кофейной гущи Please open Telegram to view this post
VIEW IN TELEGRAM
Я всё же не смогу уснуть не докопавшись до причины падения 🤣
Похоже, 146%, что приложение пыталось обратиться к новому полю в Core Data модели lastUpdated. Как раз его я и добавил, чтобы отслеживать обновления в данных при синке с Firebase.
Ну видимо, действительно, модель на Xcode Cloud переставилась на предыдущую версию, прям как у меня локально! Она переставилась именно там, в облаке, т.к. я делаю коммиты очень аккуратно, и даже под действием паранойи, я проверил по истории коммитов: там стоит новая версия в файле .xccurrentversion!!!!
Извините, конечно, но это какое-то магическое💩 и у меня просто нет слов 🪲🐛🪲
Без тестов по итогу никуда? Как с таким жить?
Похоже, 146%, что приложение пыталось обратиться к новому полю в Core Data модели lastUpdated. Как раз его я и добавил, чтобы отслеживать обновления в данных при синке с Firebase.
Ну видимо, действительно, модель на Xcode Cloud переставилась на предыдущую версию, прям как у меня локально! Она переставилась именно там, в облаке, т.к. я делаю коммиты очень аккуратно, и даже под действием паранойи, я проверил по истории коммитов: там стоит новая версия в файле .xccurrentversion!!!!
Извините, конечно, но это какое-то магическое
Без тестов по итогу никуда? Как с таким жить?
Please open Telegram to view this post
VIEW IN TELEGRAM
Начинаю реализацию приложения “Любимые товары” ⚫️
Думаю, что это момент, когда можно приостановить разработку DerDieDas,выдохнуть, и делать первые штрихи по экрану симулятора, чтобы, наконец, сделать приложение с задумки которого всё началось.
⌨️ Для начала нужно познакомиться как работать с камерой и библиотекой фото, т.к. это одна из самых важных функциональностей - создание или загрузка изображений.
Попробую немного другой формат изучения: https://developer.apple.com/tutorials/sample-apps/capturingphotos-camerapreview
Это официальные туториалы на основе проектов в Swift Playground. Некоторые части реализации можно будет взять прям оттуда📱
Думаю, что это момент, когда можно приостановить разработку DerDieDas,
Попробую немного другой формат изучения: https://developer.apple.com/tutorials/sample-apps/capturingphotos-camerapreview
Это официальные туториалы на основе проектов в Swift Playground. Некоторые части реализации можно будет взять прям оттуда
Please open Telegram to view this post
VIEW IN TELEGRAM
Изучаю код
Я думал, что❔
Capturing Photos
Я думал, что
@Binding
как раз позволяет не пересоздавать View каждый раз, а только пересчитывать body Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🤔1
Photo()
, оказалось метод takePhoto()
Это из оф. туториала https://developer.apple.com/tutorials/sample-apps/capturingphotos-captureandsave
Но в остальном туториал мне нравится 👍
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Чтобы минимизировать ошибку связанную с рандомным переключением версии модели, добавил Smoke Test. Тест очень простой - запустить приложение.
Когда погружусь в тестирование, смогу что-то уже “хорошее” писать. Но пользу смоук теста сложно переоценить😊
Когда погружусь в тестирование, смогу что-то уже “хорошее” писать. Но пользу смоук теста сложно переоценить
Please open Telegram to view this post
VIEW IN TELEGRAM