RORK LABEN
PLAY — Google Play の target API level 36 要件が昨日8月31日に発効しました。今日以降、新規アプリと既存アプリの更新は Android 16 対応が必須ですVISIBILITY — API 35 のままのアプリは掲載こそ続きますが、新しい Android 版のユーザーには表示されなくなります。エラーが出ないまま新規インストールだけが減る点に注意が要りますEXTENSION — 間に合わなかった場合は、Play Console から2026年11月1日までの延長申請が出せます。恒久対応の計画とセットで進めるのが実務的ですAPPLE — Apple 側は9月9日にイベント、iOS 27 の正式リリースは9月14日と報じられています。生成したアプリの iOS 27 実機確認はリリース週の前に済ませておきたいところですEXPO — Expo が expo-paste-input を公開しました(8月28日)。React Native の TextInput に画像・GIF・ステッカーの貼り付けを追加するネイティブモジュールですEAS — EAS Observe が8月20日に GA になりました。クラッシュや性能の観測を、ビルドや配信と同じ EAS 上で持てるようになっていますPLAY — Google Play の target API level 36 要件が昨日8月31日に発効しました。今日以降、新規アプリと既存アプリの更新は Android 16 対応が必須ですVISIBILITY — API 35 のままのアプリは掲載こそ続きますが、新しい Android 版のユーザーには表示されなくなります。エラーが出ないまま新規インストールだけが減る点に注意が要りますEXTENSION — 間に合わなかった場合は、Play Console から2026年11月1日までの延長申請が出せます。恒久対応の計画とセットで進めるのが実務的ですAPPLE — Apple 側は9月9日にイベント、iOS 27 の正式リリースは9月14日と報じられています。生成したアプリの iOS 27 実機確認はリリース週の前に済ませておきたいところですEXPO — Expo が expo-paste-input を公開しました(8月28日)。React Native の TextInput に画像・GIF・ステッカーの貼り付けを追加するネイティブモジュールですEAS — EAS Observe が8月20日に GA になりました。クラッシュや性能の観測を、ビルドや配信と同じ EAS 上で持てるようになっています
記事一覧/開発ツール
開発ツール/2026-05-01中級

Rork 製アプリで iOS 18 のダーク/ティントアイコンと Android のテーマアイコンに対応する

Rork で生成したアプリに iOS 18 のダーク/ティント表示と Android 13 以降のテーマアイコンを実装する手順。素材の作り方、Expo 設定、差し替え時のキャッシュ問題、ストア審査での見え方まで、実機で確認しながら整理しました。

Rork548App Icon2iOS 184Android 13Expo194テーマアイコンReact Native234

ホーム画面をダークモードに切り替えたとき、自分のアプリのアイコンだけが妙に主張して浮いて見える。iPhone の壁紙をモノクロにしたとき、システムアプリは薄い色味で馴染んでいるのに自分のアプリだけ原色で残ってしまう。私が運営している壁紙系アプリで実際にこの違和感に気づいたのは、ユーザーから「ダークモードでアイコンが眩しい」というメールをもらったときでした。

iOS 18 のダーク/ティント表示と Android 13 以降のテーマアイコンに対応すると、こうした「自分のアプリだけ浮いてしまう」状態が解消されます。Rork で生成したアプリでもこの対応は十分実用範囲で、必要なのはアイコン画像を数枚追加することと、app.json を 10 行ほど書き換えることだけです。

ここでは私が複数のアプリで実際に対応した手順をそのまま辿る形で書いています。素材の作り方から Expo 設定、差し替え後のキャッシュ問題、ストア審査での見え方まで一通りカバーします。

「対応する/しない」で何が変わるか

iOS 18 と Android 13 以降では、ホーム画面のアイコンが次の 3 種類に増えました。

  • ライト: 従来通りのフルカラーアイコン
  • ダーク: 暗い背景でも見やすいよう、明度・彩度を抑えたバリエーション
  • ティント(iOS)/テーマ(Android): ユーザーが選んだ単色に染まるモノクロ版

ユーザーが「外観」設定でダーク/ティントを選んでいるとき、未対応のアプリは「ライト用アイコンに自動的にダークオーバーレイをかぶせた見た目」で表示されます。これは多くのアプリで悪くない結果になりますが、明るい背景を前提にデザインしたロゴほど不自然になりやすく、特に白地に細いグラフィックを配置したアイコンはオーバーレイで埋もれます。

私のアプリでは、対応前と対応後で App Store のスクリーンショットセクションに「ダークモード対応」を載せたところ、レビューで「アイコンの見た目が綺麗」「他のアプリと馴染む」というコメントを複数いただきました。直接的な売上効果は測りづらいものの、初回の印象を整えるという意味では費用対効果がかなり高い対応だと感じています。

素材の準備 — 3 枚のアイコンに必要な仕様

iOS 18 と Android 13 以降の双方に対応する場合、最終的に用意するのは次の 3 枚です。

  • iOS Light: 1024×1024 PNG、フルカラー、不透明背景
  • iOS Dark: 1024×1024 PNG、フルカラー、不透明背景。ライトを単純反転するのではなく、暗い壁紙でも視認できるように再調整したもの
  • iOS Tinted / Android Monochrome: 1024×1024 PNG、モノクロ(グレースケール+アルファチャンネル)、背景は透過

ティント/モノクロ版の作り方が一番つまずきやすいので、ここだけ補足します。Apple のガイドラインは「白地のシルエットを濃淡で表現する」と明示しており、色を持たせず、明るさだけで形を作るのがコツです。実際に私が使っているのは次の手順です。

  1. ライトアイコンの主要グラフィックだけをグレースケール化する
  2. 全体を白〜中間グレーに置き換え(黒は使わない)
  3. 不要な背景は完全に透過させる
  4. Apple のプレビューツールでティント色を試して、視認性を確認する

ロゴが繊細なグラデーションを使っている場合、ティント変換でディテールが潰れがちです。私のアプリではこのタイミングで「ティント版だけ少しだけ太字にする」という調整を入れました。アイコンデザインの基準を整理した記事として AI で App Store/Google Play 審査に通るアイコンを作る も合わせて読むとイメージしやすいと思います。

Rork プロジェクトの app.json を更新する

Rork が生成するプロジェクトは Expo 管理(managed workflow)が前提になっているため、ネイティブの Asset Catalog を直接いじる必要はなく、app.json(または app.config.js)で完結します。Expo SDK 52 以降であれば、次のような設定で 3 枚のアイコンを認識させられます。

{
  "expo": {
    "name": "MyRorkApp",
    "icon": "./assets/icons/icon-light.png",
    "ios": {
      "icon": {
        "light": "./assets/icons/icon-light.png",
        "dark": "./assets/icons/icon-dark.png",
        "tinted": "./assets/icons/icon-tinted.png"
      },
      "supportsTablet": true
    },
    "android": {
      "adaptiveIcon": {
        "foregroundImage": "./assets/icons/icon-light.png",
        "monochromeImage": "./assets/icons/icon-monochrome.png",
        "backgroundColor": "#FFFFFF"
      }
    }
  }
}

ポイントは 2 つあります。1 つは iOS の icon フィールドを文字列ではなくオブジェクト形式で書くこと。古い書き方(icon: ./assets/icon.png)のままだとライト版しか取り込まれません。もう 1 つは Android の monochromeImage を必ず別ファイルにすることforegroundImage を流用するとテーマアイコン表示時に色が反転して読めなくなるパターンに何度かハマりました。

設定後、npx expo prebuild --clean でネイティブプロジェクトを再生成し、EAS Build か Rork のビルドメニューから新しいバイナリを作ります。OTA だけでは反映されないので、必ずストアバイナリを更新する点に注意してください。

OTA まわりの基礎知識は Rork × EAS Update で OTA アップデートを配信する にまとめてあるので、配信戦略を整理したい方はそちらも参照してください。

動作確認とよくあるつまずき

実機での確認手順は次の通りです。

  • iOS 18 端末: 設定 → ホーム画面とアプリライブラリ → ライト/ダーク/ティント を切り替え、各モードでアイコンの見え方を確認する
  • Android 13 以降の端末: 長押しでアイコンを選択 → 「テーマアイコン」をオン → 壁紙の色を変えて視認性を確認する
  • シミュレータ: iOS Simulator は 17.4 以降のみダーク/ティント対応。古いシミュレータでは確認できない

差し替え後にアイコンが古いまま表示される場合の典型は、iOS デバイスに残った旧バイナリのキャッシュです。アプリを削除して再インストールするだけでは更新されないこともあり、私は最終的に「端末を再起動」で解決することが多いです。同種の問題は Rork のアプリアイコンが反映されないキャッシュ問題の修正手順 でも詳しく扱っています。

App Store Connect 側では、ビルドアップロード時に「Light」「Dark」「Tinted」の各バリエーションが自動的に検出されます。プレビュー画面で 3 枚並んで表示されていれば成功で、検出されない場合はほぼ確実に 画像サイズが 1024×1024 になっていない か、iOS Tinted のアルファチャンネルが残っていないかのどちらかです。

ダークモード対応全般のテクニックは Rork Max のダークモード/カラーテーマ実装ガイド でアプリ UI 側の話を扱っているので、アイコンと UI を同時に整えたい方はセットで参照すると効率的です。

アセット生成を少しだけ自動化する

3 つ目のアプリで同じ作業を繰り返したあたりで、sharp を使った簡単な Node.js スクリプトに切り出しました。ライト版を入力にして、トーンカーブとわずかな背景調整でダーク版を出力し、グレースケール化と背景透過でティント版を出力する、というだけの内容です。完全に自動化できるわけではなく、最終的な目視チェックは必ず必要ですが、「Photoshop を開いて 3 回書き出す」状態から「スクリプト 1 本を回して、ティント版だけ微調整する」状態に変わって、1 アプリあたりの所要時間が 20 分から 5 分くらいに縮みました。

公開アプリが年に 2〜3 本以上のペースなら、このタイプの自動化は早めに整えておく価値があります。同じスクリプトで assets/icons/ 以下の正しいパスに直接書き出してしまえば、ファイル名の typo でビルドが崩れる事故も減らせます。Rork で運用する場合、マスター画像を Rork が参照する場所と同じ位置に置いておけば、ブランドマークの変更時に Rork 側を触らずに 3 種類を更新できるのがありがたいところです。

さらに踏み込んで学びたい方へ

Expo 管理ワークフローでネイティブ機能を扱う際の考え方が体系的にまとまっており、Rork が裏側で何をしているのかを理解する助けになりました。

次の一歩

themed icon の対応は、コードを書くわけではないので「面倒だが効果は出る作業」の代表格です。すでに公開しているアプリがあるなら、まずはダークアイコン 1 枚だけでも作って次回のリリースに混ぜてみるのが個人的にはおすすめです。ライト版に画像処理を 10 分加えるだけで作れる場合が多く、ユーザーの初見の印象が一段引き締まります。

Rork で新規に作るアプリでも、初回ビルド前に 3 枚揃えておけば、あとから差し替えてキャッシュに振り回される手間を避けられます。アイコンはアプリの第一印象を 1 秒で決める要素なので、最初に少し時間を投資する価値は十分にあります。

シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

開発ツール2026-08-22
一括置換は全ファイル成功しました。壊れたのは、消さなかった行のほうです
生成コードに一括置換をかけると、一致した行ではなく隣の行が壊れます。運用中のプロジェクトで実際に起きた破損と、置換の不変条件を検査する20行のガードスクリプトをまとめました。
開発ツール2026-07-30
Renovate が触ってよい依存と、触ってはいけない依存 — Expo SDK 57 の123パッケージを機械的に切り分ける
Rork 生成アプリに依存の自動更新を入れると、Expo が版を管理している123パッケージまで巻き込まれます。2026年7月30日時点の実測では、うち6件が npm の最新版へメジャー更新される差でした。除外リストを手で書かず SDK から機械生成する手順をまとめます。
開発ツール2026-07-28
prebuild --clean で消える手入れを、上げる前に数える — Expo SDK 57 移行の棚卸し
Expo SDK 57 への移行前に、ios/ へ加えた手入れが prebuild の再生成でいくつ失われるかを数える手順をまとめました。素の差分649行のうち意味を持つのは3行。ノイズを正規化して実質的な変更だけを抽出するスクリプトと、config plugin への移し替えを実測つきで共有します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →