SurfTideΔアプリ起動中にダークモードを切り替えたときのチラつき処理を改善しました。ウィジットでも正しく切替が表示されるように改善しました。タイドグラフを保存する機能を、他アプリへの共有処理に変更しました。これによりアルバムに保存する他に、Instagram等への投稿も簡単にできるようになりました。Android版もダークモード他同じ改修をしています。出来上がっており現在ベータ版のテスト中です。来週には公開できると思います。v1.2.1」がAppStoreにて公開されました。昨日報告した通りで、ウィジェットのカラー調整と、上記スクリーンショットのナビゲーションメニューに機能を追加しています。ナビゲーションメニューは、タイドグラフ部分を上にスワイプするか、左上のメニューアイコン(縦に3つドットが並ぶアイコン)をタップすると表示します。世界のタイド「e-tide」の起動となります。UP」と「e-tide」のアプリ起動は、未インストールの場合、AppStoreのアプリページへ誘導するのでダウンロード後に利用して下さい。前回のバージョンアップでやり残した部分を実装しました。e-tide」に連動するようにしています。ダークモードにしたときのウィジェットのカラーを最適化しました。現在申請中なので多分来週にはダウンロードできるようになると思います。v1.2.0」がAppStoreにて公開されました。それで、リリース後にどうにもウィジェット(TodayExtension)のカラーが気になり、数日中に再アップデートします。技術的な話になりますが、このウィジェット相当癖があってあまり凝ったことができません。シンプルなテキストとか固定イメージの表示とかなら問題ないのですが、SurfTideΔで使っているようなグラフィカルなUIはウィジットに向いてません。v1.2.0では少し妥協してアピアランスがダークでもライトでも同じカラーを使っていました。これはウィジェットをアップデートするタイミングをプログラム処理できないので(システム任せ)モードが変わったときにウィジェットを動的に更新できないためでした。v1.2.1(上記スクリーンショット)では各カラーに最適化しなおしました。1点問題が残ってて(というかこれはOSのバグっぽい)、ウィジェットを表示した状態でアピアランスモードをコントロールセンター(スクリーンの下部からプルアップするやつね)のボタンで切り替えてしまうとウィジェットが更新されません。(それ以外での表示では更新されます)このケースでも、テキストとかビューの背景とかはシステムが勝手に切り替えてくれるんだけど、動的にコードで作成してるイメージについてはシステムから何もトリガーが上がらないので、ユーザーがタップしないと画面が更新されません。プログラマ的視点だと、このTodayExtensionのダークモード対応はかなり中途半端な気がします...まぁそのうちOSアップデートで修正されるかもですけどね。先行してiOS版をDarkModeに対応させました。Android版はもうしばらくお待ちください。いくつか追加した機能がありましたが、とりあえず一端DarkMode対応版といしてリリースします。現在申請中なので、特に問題がなければ今週中くらいには公開となると思います。SurfTideΔだいたい出来上がってきて現在テスト中です。癖があって(iOS特有?)、TodayExtensionで途中でダークモードを変更すると、何故かDARK→LIGHTの場合だけイメージが更新されないとかあって面倒です。わけがわかりません...とりあえずは、どちらのモードでもそれなりに表示されるようにしてます。後、何故かTestFlightで新バージョンが公開されないとか、ライブラリを更新しただけでたまに落ちるとか、諸々の妨害(笑)にあってなかなかTestが進みません...やっぱAndroidの方が楽です。プログラムSurfTideΔで、ダークモード化も終わりベータ公開しようと思った矢先に原因不明のクラッシュ...それも、再現できないやつしょうがないので、クラッシュログをチェックすることにしました。release版ではなくdebug版で動かした場合のクラッシュログからの問題特定です。ターゲットデバイスの対象アプリのクラッシュログ「.crash」をEXPORTする。使っていたのだけど、どうもそのあたりの障害だったようです。実装を替えて問題を解決(たぶん)しました。以下、おまけたぶんrelease版からだともう1手間必要みたいです。dbg_work)を作成する。ターゲットアプリをCtrl+クリックでFinderに表示して以下の2ファイルを「dbg_work」フォルダにコピーしておく。アーキテクチャこれから先は先述と同じです。キーに使うのが違います。e-tideとまぁこんな感じで実装できましたが、いくつか面倒な(忘れちゃいそうな)実装があったのでメモしておきます。iOS13に限定で、CALayerに直接作画してなくて、オープンソースのUIライブラリを使ってないなら、ネットで探せる情報だけで十分なのですが、この条件以外だともう少し細かなUIの調整が必要です。Color.Assetが指定できなかったりするので、カラーを切り替えたいUIをViewに接続して自前でカラーを設定しなくてはなりません。CALayerで直接作画している処理があると、アプリ起動中に切り替えた場合、モードの切り替えを監視し、対象のレイヤーに「xx..setNeedsDisplay()」とかしないとダメです。これは複数の画面遷移があると、アプリ全体で切替を監視し、各ViewControllerに通知する必要があります。BackgroundにあるViewControllerもアップデートしないといけないので。このあたりは、リアクティブ(RxSwift等)なコーディングだとわりと楽に実装できます。あとはUIライブラリ系。初期設定でカラーを決定しているようなUIライブラリの場合は、ダイナミックな切替のタイミングで自前で更新しないとダメです。Mapsなんかも同じですね。Mapsは最新のライブラリを利用しないとダークモードに対応してません。ちなみに、この「e-tide」へのダークモードの実装ですが、カラー設定で1日位、コードの修正で3日位でした。主な画面数(ViewController)は4画面で、その他3つくらいポップアップ画面があります。Station」「SurfTideΔ」へもボチボチ対応していこうかと思います。他のアプリには対応予定はありませんが、iOS版のSurfTIde7は、OSがダークモードを取り入れるずいぶん前からナイトモードを実装していました。