Домашняя бухгалтерия
HausHaltsBuch
Прогресс...
1. Пропустил момент критической ошибки баз данных, не смог исправить, пришлось откатиться через git на несколько шагов назад.
Потерял прогресс за ВС. Весь ПН восстанавливал потерянное. Восстановил не до конца, решил отчеты пока не делать.
2. Со вчера нырнул в "кроличью нору" реализации совместного доступа:
✔️ Авторизация через Apple ID
- Приглашения для совместного доступа
- Синхронизация данных через CloudKit
Про авторизацию через Apple ID
- Оказывается данные и email пользователя передаются от apple ID один раз при первой верификации.
Соотвественно надо сохранять имя пользователя на случай если пользователь разлогиниться и залогиниться снова.
Если сохранить локально, то при переустановке приложения данные потеряются.
Решение:
- при первой авторизации сохранил локально в UserDefaults
- синхронизировал сразу в iCloud (CloudKit)
HausHaltsBuch
Прогресс...
1. Пропустил момент критической ошибки баз данных, не смог исправить, пришлось откатиться через git на несколько шагов назад.
Потерял прогресс за ВС. Весь ПН восстанавливал потерянное. Восстановил не до конца, решил отчеты пока не делать.
2. Со вчера нырнул в "кроличью нору" реализации совместного доступа:
- Приглашения для совместного доступа
- Синхронизация данных через CloudKit
Про авторизацию через Apple ID
- Оказывается данные и email пользователя передаются от apple ID один раз при первой верификации.
Соотвественно надо сохранять имя пользователя на случай если пользователь разлогиниться и залогиниться снова.
Если сохранить локально, то при переустановке приложения данные потеряются.
Решение:
- при первой авторизации сохранил локально в UserDefaults
- синхронизировал сразу в iCloud (CloudKit)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥1
Открытие недели: Swift Data не умеет делать совместный доступ 🥲
Большую часть недели посвятил миграции с Swift Data на Core Data.
В процессе думал, что создать с нуля на Core Data было бы проще, но решил получить опыт миграции.
Почти закончил миграцию:
- все справочники
- все транзакции
- единственный отчет
Осталось мигрировать:
- авторизацию через Apple ID
- работа с Siri
Потом исправить мелкие ошибки UI и навигации и можно приступать к реализации совместного доступа.
Большую часть недели посвятил миграции с Swift Data на Core Data.
В процессе думал, что создать с нуля на Core Data было бы проще, но решил получить опыт миграции.
Почти закончил миграцию:
- все справочники
- все транзакции
- единственный отчет
Осталось мигрировать:
- авторизацию через Apple ID
- работа с Siri
Потом исправить мелкие ошибки UI и навигации и можно приступать к реализации совместного доступа.
Shared zone в CloudKit
Миграцию на Core Data завершил.
Перешел к реализации совместного доступа, который реализуется через Shared zone в CloudKit.
Создал включение Общей зоны.
Сейчас вношу правки в Транзакции и Справочники, чтобы данные читались и записывались в зависимости от текущего режима: Личный или Общий.
Что это значит для пользователя:
- могу вести часть расходов/доходов не показывая супругу (так же и в обратную строну)
- другая часть - общие расходы/доходы видны обоим.
В планах июль, который внезапно начался сегодня, уже полностью вести в этом приложении.
Миграцию на Core Data завершил.
Перешел к реализации совместного доступа, который реализуется через Shared zone в CloudKit.
Создал включение Общей зоны.
Сейчас вношу правки в Транзакции и Справочники, чтобы данные читались и записывались в зависимости от текущего режима: Личный или Общий.
Что это значит для пользователя:
- могу вести часть расходов/доходов не показывая супругу (так же и в обратную строну)
- другая часть - общие расходы/доходы видны обоим.
В планах июль, который внезапно начался сегодня, уже полностью вести в этом приложении.
Сводил домашнюю бухгалтерию за июнь вчера.
Основная мысль: как же я хочу уже весть учет в своем приложении, как же это будет удобнее, чем сейчас в Гугл Таблице.
Заношу все расходы в таблицу Гугл:
- данные оплат по картам на основании смс (в приложении транзакции часто проводятся позже до 3-х дней)
- данные наличных оплат вносим с супругой в общий чат в ТГ, переношу в Гугл таблицу.
Часть оплат наличкой забываем вносить, судорожно пытаемся вспомнить.
Для снижения трудоемкости статьи расходов достаточно крупные, для детальной аналитики надо фильтровать, искать по комментариям, не удобно.
С нетерпением жду когда смогу упростить себе жизнь и сделать ее чуточку счастливее с моим новым приложением.
Основная мысль: как же я хочу уже весть учет в своем приложении, как же это будет удобнее, чем сейчас в Гугл Таблице.
Заношу все расходы в таблицу Гугл:
- данные оплат по картам на основании смс (в приложении транзакции часто проводятся позже до 3-х дней)
- данные наличных оплат вносим с супругой в общий чат в ТГ, переношу в Гугл таблицу.
Часть оплат наличкой забываем вносить, судорожно пытаемся вспомнить.
Для снижения трудоемкости статьи расходов достаточно крупные, для детальной аналитики надо фильтровать, искать по комментариям, не удобно.
С нетерпением жду когда смогу упростить себе жизнь и сделать ее чуточку счастливее с моим новым приложением.
Совместный доступ - это ад какой-то
Все перепробовал, закопался. Но никак общий доступ не создается. 3 недели бьюсь.
Сделал аутентификацию Apple ID, оказалось можно без нее. Сделал приглашения, научился передавать их без проверки приложения в App Store. Приглашение принимается, но делиться можно, а полноценно пользоваться одной БД - нет.
Создал пустой проект, чтобы на минималках шаг за шагом реализовать функционал общего доступа, совместной работы с БД.
Фиг вам.
Всеми ИИ-шками перепроверил, их ответ:
"Ты сделал всё идеально, но ошибка всё равно появляется.
Ты сделал всё идеально, код безупречен,
ошибка уже не в коде, а в слое между NSPersistentCloudKitContainer и iCloud-контейнером."
Остается только:
- Новый пустой проект
- Новый контейнер БД
- Скопировать код и запустить без старых следов разработки
...
Все перепробовал, закопался. Но никак общий доступ не создается. 3 недели бьюсь.
Сделал аутентификацию Apple ID, оказалось можно без нее. Сделал приглашения, научился передавать их без проверки приложения в App Store. Приглашение принимается, но делиться можно, а полноценно пользоваться одной БД - нет.
Создал пустой проект, чтобы на минималках шаг за шагом реализовать функционал общего доступа, совместной работы с БД.
Фиг вам.
Всеми ИИ-шками перепроверил, их ответ:
"Ты сделал всё идеально, но ошибка всё равно появляется.
Ты сделал всё идеально, код безупречен,
ошибка уже не в коде, а в слое между NSPersistentCloudKitContainer и iCloud-контейнером."
Остается только:
- Новый пустой проект
- Новый контейнер БД
- Скопировать код и запустить без старых следов разработки
...
Победил совместный доступ
Забросил приложение Домашней бухгалтерии, пытаясь решить ключевую задачу – совместный доступ и синхронизация данных через CloudKit
Тренировался на кошк.. ой на простых данных: список покупок, трекер привычек, для простой и удобной отладки.
Проблема пришла откуда не ждали:
Данные приглашенного пользователя корректно сохранялись и синхронизировались у других пользователей, а владелец (создатель) общей зоны данных вылетал с ошибкой: записи по умолчанию сохранялись в private zone, а не shared zone.
Все перерыл: от прав доступа, до создания записей по умолчанию в приватной зоне.
Оказалось, что неверно извлекались значения зависимостей полей (reference).
Сейчас задача перенести это решение в приложения Домашней бухгалтерии.
Хочется уже заняться UI/UX задачами и выпустить MVP версию.
Забросил приложение Домашней бухгалтерии, пытаясь решить ключевую задачу – совместный доступ и синхронизация данных через CloudKit
Тренировался на кошк.. ой на простых данных: список покупок, трекер привычек, для простой и удобной отладки.
Проблема пришла откуда не ждали:
Данные приглашенного пользователя корректно сохранялись и синхронизировались у других пользователей, а владелец (создатель) общей зоны данных вылетал с ошибкой: записи по умолчанию сохранялись в private zone, а не shared zone.
Все перерыл: от прав доступа, до создания записей по умолчанию в приватной зоне.
Оказалось, что неверно извлекались значения зависимостей полей (reference).
Сейчас задача перенести это решение в приложения Домашней бухгалтерии.
Хочется уже заняться UI/UX задачами и выпустить MVP версию.
Локальный MVP
…– это когда уже можно использовать для собственных нужд, но еще рано для публикации.
Что уже реализовано:
- создание, редактирование, удаление всех транзакций (расходы, доходы, перемещения, обмен валют, ввод остатков);
- синхронизация в iCloud
- несколько пространств, с возможностью совместного доступа
- справочники (статьи доходов, расходов, кошельки и карты, валюты, теги)
- автозаполнение расхода на основании текста смс от банка из буфера обмена (справочник магазинов с категориями)
Далее…
- тестирование на реальных данных
- улучшение и добавление новых способов ввода данных (голосовые команды Siri, интеграция Apple Pay, автоматизация через команды)
- выгрузка данных csv и google таблицы
- создание отчетов и графиков
- большой модуль Бюджетирование
…– это когда уже можно использовать для собственных нужд, но еще рано для публикации.
Что уже реализовано:
- создание, редактирование, удаление всех транзакций (расходы, доходы, перемещения, обмен валют, ввод остатков);
- синхронизация в iCloud
- несколько пространств, с возможностью совместного доступа
- справочники (статьи доходов, расходов, кошельки и карты, валюты, теги)
- автозаполнение расхода на основании текста смс от банка из буфера обмена (справочник магазинов с категориями)
Далее…
- тестирование на реальных данных
- улучшение и добавление новых способов ввода данных (голосовые команды Siri, интеграция Apple Pay, автоматизация через команды)
- выгрузка данных csv и google таблицы
- создание отчетов и графиков
- большой модуль Бюджетирование
Какие проблемы решает приложение для ведения бюджета?
Давеча смотрел на YouTube iOS-разработчика Chris Raroque, который полтора года назад начал создавать свое приложение для ведения бюджета.
Его проблема, которую хотел решить приложением, - много тратит денег на питание вне дома.
Его приложение получилось с уклоном именно в эту строну: бюджет - расход - остаток по нужным ему статьям расходов. Ему не нужны ни мультивалютность, ни счета (карты, кошельки) - для решения его задачи не нужен большой и сложный "комбайн".
Какие проблемы с учетом хочу я решить своим приложением для ведения учета?
1️⃣ Проблема
Я свожу свой (своей семьи) бюджет раз в неделю или даже раз в две недели. За это время часть расходов забываются, теряются.
Из-за этого при сведении бюджета всегда стресс: "Ааа, куда ушли деньги?"
Решение
Приложение, при помощи которого удобно, легко записывать расходы и другие движения денег.
Как это решается (будет решаться) в приложении?
- минимум касаний и других действия для ввода: кнопки проще тапнуть чем раскрыть выпадающий список со скроллом внутри; то что часто используется идет первым и сразу на виду; фокус/курсор сразу устанавливается в поле ввод = минус один тап и тп
- автозаполнение из смс для оплат картами: скопировать смс, распарсить текст и автозаполнить поля формы (можно настроить автоматизацию через Команды)
- голосовые команды SIRI: конструктор шаблонов для голосовых команд - заполнил форму, сохранил шаблон, создал под него голосовую команду. Идеально для регулярных расходов наличными: "Привет, Siri, я купил фрукты" - открывается приложение, форма ввода расходов, выбирается мой кошелек, категория Продукты, Подкатегория Рынок, текущая дата, фокус/курсор в поле ввода суммы - остается ввести сумму и сохранить.
- совместный доступ с супругой: спрашивать, напоминать: куда потратил(а)? - не нужный стресс. Каждый вносит свои расходы на своем iPhone в общую базу данных. Каждый видит и итоги в реальном времени.
2️⃣ Проблема
Достаточно ли у меня денег до следующего поступления? Мне надо экономить или можно побаловать себя?
Чтобы ответить на эти вопросы надо потратить два-три часа на сведение расходов и сверку с планами.
Как эту проблему решает (будет решать) мое приложение?
Сопоставление с бюджетом (планами) в реальном времени (при условии ввода расходов сразу)
Для решения этих задач мне не нужна интеграция с банками для получения выписок и загрузка их в приложение.
Для решения этих задач мне не нужен учет финансовых вложений или криптовалюты.
Что получаем в результате:
- трекер расходов
- бюджетирование
- совместный доступ (DB CloudKit Share)
- максимальная автоматизация ввода данных
- приятный UI/UX
Последнее важно, приложением должно быть приятно пользоваться.
Надеюсь поменять стресс на кайф!
Давеча смотрел на YouTube iOS-разработчика Chris Raroque, который полтора года назад начал создавать свое приложение для ведения бюджета.
Его проблема, которую хотел решить приложением, - много тратит денег на питание вне дома.
Его приложение получилось с уклоном именно в эту строну: бюджет - расход - остаток по нужным ему статьям расходов. Ему не нужны ни мультивалютность, ни счета (карты, кошельки) - для решения его задачи не нужен большой и сложный "комбайн".
Какие проблемы с учетом хочу я решить своим приложением для ведения учета?
Я свожу свой (своей семьи) бюджет раз в неделю или даже раз в две недели. За это время часть расходов забываются, теряются.
Из-за этого при сведении бюджета всегда стресс: "Ааа, куда ушли деньги?"
Решение
Приложение, при помощи которого удобно, легко записывать расходы и другие движения денег.
Как это решается (будет решаться) в приложении?
- минимум касаний и других действия для ввода: кнопки проще тапнуть чем раскрыть выпадающий список со скроллом внутри; то что часто используется идет первым и сразу на виду; фокус/курсор сразу устанавливается в поле ввод = минус один тап и тп
- автозаполнение из смс для оплат картами: скопировать смс, распарсить текст и автозаполнить поля формы (можно настроить автоматизацию через Команды)
- голосовые команды SIRI: конструктор шаблонов для голосовых команд - заполнил форму, сохранил шаблон, создал под него голосовую команду. Идеально для регулярных расходов наличными: "Привет, Siri, я купил фрукты" - открывается приложение, форма ввода расходов, выбирается мой кошелек, категория Продукты, Подкатегория Рынок, текущая дата, фокус/курсор в поле ввода суммы - остается ввести сумму и сохранить.
- совместный доступ с супругой: спрашивать, напоминать: куда потратил(а)? - не нужный стресс. Каждый вносит свои расходы на своем iPhone в общую базу данных. Каждый видит и итоги в реальном времени.
Достаточно ли у меня денег до следующего поступления? Мне надо экономить или можно побаловать себя?
Чтобы ответить на эти вопросы надо потратить два-три часа на сведение расходов и сверку с планами.
Как эту проблему решает (будет решать) мое приложение?
Сопоставление с бюджетом (планами) в реальном времени (при условии ввода расходов сразу)
Для решения этих задач мне не нужна интеграция с банками для получения выписок и загрузка их в приложение.
Для решения этих задач мне не нужен учет финансовых вложений или криптовалюты.
Что получаем в результате:
- трекер расходов
- бюджетирование
- совместный доступ (DB CloudKit Share)
- максимальная автоматизация ввода данных
- приятный UI/UX
Последнее важно, приложением должно быть приятно пользоваться.
Надеюсь поменять стресс на кайф!
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Реальные данные сильно помогают в разработке.
Автозаполнение по смс реально удобная фича, данные за месяц внес очень быстро.
Сразу стало понятно что не хватает фильтров в журнале транзакций - реализовал и проверил на реальных данных.
Помогает настроить отчеты и увидеть как будут выглядеть при полных данных.
Автозаполнение по смс реально удобная фича, данные за месяц внес очень быстро.
Сразу стало понятно что не хватает фильтров в журнале транзакций - реализовал и проверил на реальных данных.
Помогает настроить отчеты и увидеть как будут выглядеть при полных данных.
Обнаружил существенную ошибку в бэкэнде - данные, которые заполнялись из справочников сохранялись как строки, а не ссылки на справочники.
Отсюда поимел кучу проблем:
- при изменении названия элемента справочника, теряются данные,
- нет доступа к другим полям справочника
Чтобы не разрабатывать миграцию данных, решил все потереть и внести данные за месяц снова, после исправлений.
Нахожу в этом еще один плюс: после первого опыта ввода накопились идеи как улучшить UI/UX для еще более удобного ввода данных, например:
Добавил банковским картам список доступных валют, теперь в форму получаю только те карты, у которых есть выбранная валюта - меньше неиспользуемых элементов на экране, легче ориентироваться, быстрее и приятнее ввод данных!
Добавил сортировку категорий по частоте использования для выбранного типа кошельков. Если например я наличкой обычно расплачиваюсь на продуктовом рынке, то эти категории будут первыми в списке, для карт другие категории будут выше в списке.
Скрываю другие категории, если одна из уже выбрана - сокращаем количество элементов на экране.
Ошибки - это ж опыт!
Отсюда поимел кучу проблем:
- при изменении названия элемента справочника, теряются данные,
- нет доступа к другим полям справочника
Чтобы не разрабатывать миграцию данных, решил все потереть и внести данные за месяц снова, после исправлений.
Нахожу в этом еще один плюс: после первого опыта ввода накопились идеи как улучшить UI/UX для еще более удобного ввода данных, например:
Добавил банковским картам список доступных валют, теперь в форму получаю только те карты, у которых есть выбранная валюта - меньше неиспользуемых элементов на экране, легче ориентироваться, быстрее и приятнее ввод данных!
Добавил сортировку категорий по частоте использования для выбранного типа кошельков. Если например я наличкой обычно расплачиваюсь на продуктовом рынке, то эти категории будут первыми в списке, для карт другие категории будут выше в списке.
Скрываю другие категории, если одна из уже выбрана - сокращаем количество элементов на экране.
Ошибки - это ж опыт!
Сегодня восстановил данные в приложении за месяц – около 200 транзакций.
Предварительно улучшив некоторые моменты по вводу данных.
Надо будет потом заполнить данными за несколько месяцев, чтобы доработать отчеты и графики.
После работал над формой для ввода плановых данных (бюджетирование).
Форму бюджета осилил, завтра буду пилить работу с данными: сохранение, редактирование, удаление, синхронизация.
Предварительно улучшив некоторые моменты по вводу данных.
Надо будет потом заполнить данными за несколько месяцев, чтобы доработать отчеты и графики.
После работал над формой для ввода плановых данных (бюджетирование).
Форму бюджета осилил, завтра буду пилить работу с данными: сохранение, редактирование, удаление, синхронизация.