SurfTideΔ for iOS v1.2.2 リリース、そしてAndroid版も!

  • 投稿:
  • 更新:2020年2月22日
  • by
  • in

surftided_20200222.png

アプリ起動中にダークモードを切り替えたときのチラつき処理を改善しました。またウィジットでも正しく切替が表示されるように改善しました。
タイドグラフを保存する機能を、他アプリへの共有処理に変更しました。これによりアルバムに保存する他に、Instagram等への投稿も簡単にできるようになりました。

Android版もダークモード他同じ改修をしています。ほぼ出来上がっており現在ベータ版のテスト中です。
たぶん、来週には公開できると思います。

s_std_android_dm_001.png

SurfTideΔ for iOS v1.2.1 リリース

  • 投稿:
  • 更新:2020年2月17日
  • by
  • in

surftided_added_fnc_2.png

「SurfTideΔ for iOS v1.2.1」がAppStoreにて公開されました。
昨日報告した通りで、ウィジェットのカラー調整と、上記スクリーンショットのナビゲーションメニューに機能を追加しています。

ナビゲーションメニューは、タイドグラフ部分を上にスワイプするか、左上のメニューアイコン(縦に3つドットが並ぶアイコン)をタップすると表示します。

追加された機能は、ナビゲーションメニュー下部のアイコン左から

  • タイドグラフをクリップボードかアルバムに保存する機能
  • 波乗り目覚まし「Surf’s UP」の起動
  • 世界のタイド「e-tide」の起動

となります。

「Surf’s UP」と「e-tide」のアプリ起動は、未インストールの場合、AppStoreのアプリページへ誘導するのでダウンロード後に利用して下さい。

SurfTideΔ for iOS v1.2.1 申請中

  • 投稿:
  • 更新:2020年2月16日
  • by
  • in

s_surfdelta_new_nvmn.png

前回のバージョンアップでやり残した部分を実装しました。
タイドグラフをアルバムに保存したり、自前の別アプリ「サーフ目覚まし Surf’s UP」や「世界のタイドグラフ e-tide」に連動するようにしています。
またダークモードにしたときのウィジェットのカラーを最適化しました。

現在申請中なので多分来週にはダウンロードできるようになると思います。

SurfTideΔ for iOS v1.2.0 リリース and お知らせ

  • 投稿:
  • 更新:2020年2月13日
  • by
  • in

s_surftidedelta_widget.png

ダークモードに対応した「SurfTideΔ for iOS v1.2.0」がAppStoreにて公開されました。

それで、リリース後にどうにもウィジェット(TodayExtension)のカラーが気になり、数日中に再アップデートします。

少し技術的な話になりますが、このウィジェット相当癖があってあまり凝ったことができません。
シンプルなテキストとか固定イメージの表示とかなら問題ないのですが、SurfTideΔで使っているようなグラフィカルなUIはウィジットに向いてません。
v1.2.0では少し妥協してアピアランスがダークでもライトでも同じカラーを使っていました。これはウィジェットをアップデートするタイミングをプログラム処理できないので(システム任せ)モードが変わったときにウィジェットを動的に更新できないためでした。
少し調査して、なんとなく癖がわかったので、次の v1.2.1(上記スクリーンショット)では各カラーに最適化しなおしました。ただし1点問題が残ってて(というかこれはOSのバグっぽい)、ウィジェットを表示した状態でアピアランスモードをコントロールセンター(スクリーンの下部からプルアップするやつね)のボタンで切り替えてしまうとウィジェットが更新されません。(それ以外での表示では更新されます)
このケースでも、テキストとかビューの背景とかはシステムが勝手に切り替えてくれるんだけど、動的にコードで作成してるイメージについてはシステムから何もトリガーが上がらないので、ユーザーがタップしないと画面が更新されません。
プログラマ的視点だと、このTodayExtensionのダークモード対応はかなり中途半端な気がします…
まぁそのうちOSアップデートで修正されるかもですけどね。

SurfTideΔ for IOS ダークモード対応(申請中)

  • 投稿:
  • 更新:2020年2月12日
  • by
  • in

s_SurfTideDelta_DarkMode.png

先行してiOS版をDarkModeに対応させました。Android版はもうしばらくお待ちください。

いくつか追加した機能がありましたが、とりあえず一端DarkMode対応版といしてリリースします。
現在申請中なので、特に問題がなければ今週中くらいには公開となると思います。

SurfTideΔ for IOS ダークモード対応(テスト中)

  • 投稿:
  • 更新:2020年2月11日
  • by
  • in

だいたい出来上がってきて現在テスト中です。
色々癖があって(iOS特有?)、TodayExtensionで途中でダークモードを変更すると、何故かDARK→LIGHTの場合だけイメージが更新されないとかあって面倒です。わけがわかりません…
とりあえずは、どちらのモードでもそれなりに表示されるようにしてます。

後、何故かTestFlightで新バージョンが公開されないとか、ライブラリを更新しただけでたまに落ちるとか、諸々の妨害(笑)にあってなかなかTestが進みません…
やっぱAndroidの方が楽です。

XCODEで、クラッシュログからの問題特定

SurfTideΔで、ダークモード化も終わりベータ公開しようと思った矢先に原因不明のクラッシュ…
それも、再現できないやつ
しょうがないので、クラッシュログをチェックすることにしました。release版ではなくdebug版で動かした場合のクラッシュログからの問題特定です。
以下、忘れそうなので備忘録

clashファイルの抽出
デバイスをUSBで接続して
Xcode -> Window -> Organizer からターゲットデバイスの対象アプリのクラッシュログ「.crash」をEXPORTする。
EXPORTしたファイルから「Binary Images:」の行を探す

Binary Images:  
0x104d34000 - 0x10527ffff SurfTideDelta arm64  <8267be10a1c13ae5aca23824a8718b62> /var/containers/Bundle/Application/5A178E33-927C-4E39-

直下にあるアドレス(上記だと「0x104d34000」)で「.crash」ファイルを検索する

8   SurfTideDelta        0x0000000104df0d48 0x104d34000 + 773448  
9   SurfTideDelta        0x0000000104df26f0 0x104d34000 + 780016  
10  SurfTideDelta        0x0000000104db68e0 0x104d34000 + 534752

こんな感じの行がみつかるので以下のコマンドを実行

atos -o SurfTideDelta.app.dSYM/Contents/Resources/DWARF/SurfTideDelta -arch arm64 -l 0x104d34000 0x0000000104df0d48

ある程度何処でクラッシュしたか絞り込める(ハズ)

+[FIRInstanceIDTokenOperation requestWithAuthHeader:FISAuthToken:] (in SurfTideDelta) (FIRInstanceIDTokenOperation.m:206)

ちなみに、SurfTideDeltaはどうもADMOBのインプリメントで Firebase/Admob を使っていたのだけど、どうもそのあたりの障害だったようです。
なので、実装を替えて問題を解決(たぶん)しました。

以下、おまけ

たぶんrelease版からだともう1手間必要みたいです。
以下それのメモ

適当なワークフォルダ(ここでは dbg_work)を作成する。

必要ファイルの抽出
Xcode -> Window -> Organizer からターゲットアプリをCtrl+クリックでFinderに表示して以下の2ファイルを「dbg_work」フォルダにコピーしておく。

{buildAppName}.xcarchive/Products/Applications/{AppName}.app  
{buildAppName}.xcarchive/dSYMs/{AppName}.dSYM

dSYMからUUIDを抽出
「dbg_work」フォルダをルートにしてターミナルを開く
以下コマンドでUUIDを調べる

xcrun dwarfdump --uuid {AppName}.app.dSYM/Contents/Resources/DWARF/{AppName}

以下、「SurfTideDelta」アプリでのサンプルで説明

> UUID: 468864FD-FDD2-308B-B51F-57EE5F99XXZZ (arm64) SurfTideDelta.app.dSYM/Contents/Resources/DWARF/{AppName}

468864FD-FDD2-308B-B51F-57EE5F99XXZZ が固有のUUID
(arm64) がアーキテクチャ

これから先は先述と同じです。ただ「Binary Images:」を探すのに UUID をキーに使うのが違います。(たぶん)

"e-tide" for Android released and iOS version is updated.

  • 投稿:
  • 更新:2020年2月 4日
  • by
  • in

dm_e-tide-insta-en.png

“e-tide for Android” has been released. That app can be able to show tide of many places all around the world.
You can download new version app on the both App Store and Google Play Store.
Those apps has function of can show with “dark mode”.
Try it!


実践的な iOS ダークモード対応のメモ(e-tideへの実装時)

  • 投稿:
  • 更新:2020年2月 3日
  • by
  • in

とまぁこんな感じで実装できましたが、いくつか面倒な(忘れちゃいそうな)実装があったのでメモしておきます。
iOS13に限定で、CALayerに直接作画してなくて、オープンソースのUIライブラリを使ってないなら、ネットで探せる情報だけで十分なのですが、この条件以外だともう少し細かなUIの調整が必要です。

大抵はUIViewの背景に UIColor.systemBackgroundColorを設定すればOSがよしなにしてくれるのですが、iOS12以下にも対応しているアプリでstoryboardでUIに直接カラー設定していると Color.Assetが指定できなかったりするので、カラーを切り替えたいUIをViewに接続して自前でカラーを設定しなくてはなりません。

CALayerで直接作画している処理があると、アプリ起動中に切り替えた場合、モードの切り替えを監視し、対象のレイヤーに「xx..setNeedsDisplay()」とかしないとダメです。
これは複数の画面遷移があると、アプリ全体で切替を監視し、各ViewControllerに通知する必要があります。BackgroundにあるViewControllerもアップデートしないといけないので。
このあたりは、リアクティブ(RxSwift等)なコーディングだとわりと楽に実装できます。

あとはUIライブラリ系。
初期設定でカラーを決定しているようなUIライブラリの場合は、ダイナミックな切替のタイミングで自前で更新しないとダメです。これが以外に面倒くさい…
Google Mapsなんかも同じですね。Google Mapsは最新のライブラリを利用しないとダークモードに対応してません。

ちなみに、この「e-tide」へのダークモードの実装ですが、カラー設定で1日位、コードの修正で3日位でした。主な画面数(ViewController)は4画面で、その他3つくらいポップアップ画面があります。

とりあえず、iOS/Android共にダークモード(ダークテーマ)への対応が解ったので、残りのアプリ「RS Station」「SurfTideΔ」へもボチボチ対応していこうかと思います。

他のアプリには対応予定はありませんが、iOS版のSurfTIde7は、OSがダークモードを取り入れるずいぶん前からナイトモードを実装していました。