アプリ開発日記 #182 だいぶ完成に近づいた

新しく作るアプリ

いつも期限前日に焦ってしまう人のためのスケジュール管理アプリを作ろうと考えています。

今日の作業

iOS版でデバッグすると途中で画面がフリーズしてしまうバグが発生していました。

Visual Studioのコンソールを見るとSQLiteのエラーが出ていたため、最初はSQLite関連のバグかと思っていました。
しかし、いろいろと調べていくうちに非同期処理の書き方が悪そうだということに気付きました。

そして、1か所だけ非同期処理の書き方を修正したところ、修正箇所が無事動くようになりました。。

そのため、async/awaitの処理をすべて書き直すことになりました。
とりあえず、以下のような書き方をしたらいけないことが分かったのでよかったということにします。

public async Task Sample()
{
    // 変数でTaskを受け取って、あとでawaitしても意味ないっぽい
    var a = Task.Run(() => {何らかの処理};
   await a;

    // awaitとTask.Resultは一緒に使ったらだめ
    // awaitとTask.Resultの両方で待機処理が実行されるらしい
    var returnVal = a.Result();
}

そして、下記のような書き方にしたことで、無事iOS版でもアプリが動くようになりました。

public async Task Sample()
{
    // Taskの戻り値がない場合
    await  Task.Run(() => {何らかの処理};

    // Taskの戻り値がある場合(変数aにTaskの戻り値が入る)
    var a = await  Task.Run(() => {何らかの処理};
}

ほかにも、画面の見た目の修正や、ダークモード対応などを進めました。
そして、アプリもだいぶ完成形に近づいてきました。

さらに、自分が全くasync/awaitを理解できていないことがわかりました。
ちゃんと勉強しなきゃな。。。

明日以降の作業

課金処理の実装

今後の課題

<<大量の設計書がなくても、過不足なく使用を説明できるようにしたい>>

アプリが複雑になると設計書の量が増えてしまいます。
しかし、すべての設計書の整合性を取りながら、アプリを修正することは結構大変だと思います。

今回も、複数の設計書の間で不整合が起きていたことで、バグを作りこむところでした。

そのため、仕様を説明するためのドキュメントについて、もっといい感じでまとめられるようにしたいです。<>
アプリケーションサービスや、ドメインモデル、ドメインサービスのそれぞれの役割を明確に定義できていなかった、そして十分に理解できていなかったため、実装時に実装するレイヤーが違うものがいくつか表れてしまいました。

そのため、改めてアプリケーションサービスや、ドメインモデル、ドメインサービスのそれぞれの役割を明確に定義できるようにしたいと思います。