全国の道の駅を検索 - RS Station for iOS ダークモード対応中

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

s_Simulator Screen Shot - iPhone 11 Pro - 2020-02-29 at 10.50.34.png

さて、これでダークモード(ダークテーマ)対応アプリもiOS/Androidあわせて6本目です。いい加減同じような作業で飽きてきましたが、残りはこのアプリのAndroid版の1本のみです。 ってことで、iOS版については現在最終確認中なので近々公開できます。

それで1つ残念なお知らせです。
Google maps(PlacePicker)を利用して近隣の施設を表示する機能ですが、Googleでサービスが終了となり利用出来なくなりました。このバージョンではこの機能は削除しています。
Android版についてはそのまま利用できます。
Android版もサービス終了となっているので、次のv1.6.0で機能削除となります。

iOSダークモード対応でのTIPSというかメモを1つ。
特定のViewのレイヤーを角丸のボーダーをつけたりしてるのですが、XCODEのstoryboardのプロパティでボーダーやら角丸やらを設定することがあるかと思います。
これらプロパティも最終的にはレイヤーに作画されるので、アピアランスを切り替えるタイミングで自前で再作画をリクエストしないとダメです。気が付かずにちょっとハマった…
これも対象View(もしくはViewを保持するView/Controllerクラス)の「traitCollectionDidChange」でボーダーのカラー等を変更してやればOKかと。

// アピアランスの変更
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    if #available(iOS 13.0, *) {
        let hasChanged = previousTraitCollection?.hasDifferentColorAppearance(comparedTo: traitCollection) ?? false
        if (hasChanged) {
            // ボーダーを変更
            hogehogeView.layer.borderColor = UIColor(named: "hogehoge")
        }
    }
}

タイド&天気ウィジット - SurfTideDeltaWidget v1.2.0 リリース

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

s_SurfTideDeltaWidget_dm_01.png

SurfTideΔ for Androidはウィジェットが別アプリとなっています。(iOS版はアプリにバンドル)
このウィジェットもダークテーマに対応させました。

ダークテーマを切り替えた後、数秒でウィジェットコンテンツは更新されます。
即時更新したい場合はウィジェットをタップして下さい。


今回、コードが短いので、ほぼ数時間で対応できましたが、軽い落とし穴が…
APIレベル28以上をTargetにする場合、Serviceを利用するときに以下のパーミッションをManifestに追加するの忘れずにね。忘れると、なんの警告もなしに落ちます。

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

SurfTideDeltaWidget 最終ベータテスト版

以下はテストバージョン(最終ベータ v1.2.0-R4)となります。
十分テストしていますが、ご利用については自己責任でお願いします。
Androidデバイス(利用できるのはAndroid6.0以上)からここをタップしてインストールして下さい。インストール時に「この提供元不明のアプリを許可」をONにする必要があります。
Android7.0以下の場合は、事前にAndroidの「設定>セキュリティ」から「提供元不明のアプリ」の設定をONにする必要があります。

SurfTideΔ for iOS v1.2.3 リリース

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

vader_001.png

昨日アナウンスした「SurfTideΔ for iOS v1.2.3」がAppStoreで公開されました。
いまのところダークモード切替の問題はおきていません。

v1.2.1 and 1.2.2 では、すこし違った実装をしていたのですが、セオリー通りにシンプルに「traitCollectionDidChange」にてアピアラインスの変更をフックするようにしました。
ちなみに、この手法でTodayExtensionでイメージをダイレクトに作画している場合も機能するようです。なので、通知エリアでタイドグラフを表示中にアピアランスを切り替えても正しく機能しています。

こんな実装ですね

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    if #available(iOS 13.0, *) {
        let hasChanged = previousTraitCollection?.hasDifferentColorAppearance(comparedTo: traitCollection) ?? false
        if (hasChanged) {
            // ここで必要なlayerを更新する
            hogehogeLayer.setNeedsDisplay()
        }
    }
}

SurfTideΔ for iOS v1.2.3 バージョンアップ申請中

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

s_surftieddelta_sad_01.png

どうもOSのバグなのか、アプリ起動中にダークテーマを切り替えると、タイド画面がアップデートされない場合が希にあります。
少しロジックを変更したバージョンを申請してます。テストバージョンでは今の所現象は出てないのですが、どうにもロジック的に釈然としないので、発生したときの対処ロジックも入れておきました。

もしダークモード切替時に画面が更新されない場合は、画面でスワップダウンしてみて下さい。本来は本日に移動する機能なのですが、そこに画面の更新する機能も仕込んでおきました。v1.2.3から有効な機能になります。

グラフィックを直接レイヤーに描いている処理で、テーマ切替をウオッチして更新しているのですが、なんとなく希にOSがその通知処理をサボっているような気がするなぁ…

SurfTideΔ for Android v1.2.0 リリース

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

s_std_android_dt_01.png

Android10からのダークテーマに対応した「SurfTideΔ v1.2.0」をリリースしました。
既にPlayStoreにて公開しているので適時ダウンロードできるようになると思います。


ナビゲーションメニューの機能もiOS版と同じくアップデートしています。
追加された機能は、ナビゲーションメニュー下部のアイコン左から

  • タイドグラフイメージを他アプリと共有する機能(GooglePhotoへのアップロード等)
  • 波乗り目覚まし「Surf’s UP」の起動
  • 世界のタイド「e-tide」の起動

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

SurfTideΔのWidgetについてはこれからダークモード対応する予定です。今しばらくお待ちを。

Androidで画像イメージを「SendTo」する時のメモ

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

s_std_share_dm.png

SurfTideΔ for Androidでタイドグラフ画像(Bitmap)を他アプリと連携するために実装した「共有(SendTo)」機能ですが、意外に面倒だったのメモしておきます。
主な目的はダークモード対応だったんだけど、そちらの方はそれほど難航せずにほぼカラーリソースの作成だけで1日位で実装できましたが、この「共有」機能がマジに時間かかった…

結構古い情報はネットで拾えるんだけど、Android-Q あたりでの実装だと色々変わってきててまとまった情報が無くて…
かといって公式なリファレンスで読み解くのもなぁ…

ってことで、あちこちの情報を集約して出来たのがこちらのロジック

if (bitmap != null) {
    // イメージをContentProviderへ保存
    var result = false
    val values = ContentValues()
    values.put(MediaStore.Images.Media.TITLE, "タイトル(これはほぼ使われない)")
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/png")
    val uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
    if (uri != null) {
        val ost: OutputStream?
        try {
            ost = contentResolver.openOutputStream(uri)
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, ost)
            ost?.close()
            result = true
        }
        catch (e: Exception) {
            // イメージ作成エラー
        }
    }
    if (result) {
        // メージを共有
        val share = Intent(Intent.ACTION_SEND)
        share.type = "image/jpeg"
        share.putExtra(Intent.EXTRA_STREAM, uri)
        startActivity(Intent.createChooser(share, "Send to"))
    }
}

解ってしまえばなんてことない処理ですね。

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アップデートで修正されるかもですけどね。