はじめに

iOS 26が2025年9月16日にリリースされました。今回はちょっとしたApple側の修正の一つに気づいたので紹介しようと思います。

併せて、内容に関連してApp Iconの実装変遷も追っていきます。

結論だけ見たい方は飛んでしまっても理解できます。安心して飛んでください。

要約

先に要点だけを説明すると

iOS 26ではホーム画面に細かいメモリチューニングの調整がされている(かもしれない)

App Iconについて

Xcode 26ではIcon Composerという新しいアイコン作成のアプリケーションに対応しています。これによりLiquid Glassに対応したアイコンを設定、iPhoneの設定に追従したアイコンを提供できます。

が、今回は昔ながらの方法の話です。

皆さんのプロジェクトのAssets.xcassetsの中のAppIconはどうなっているでしょうか。

IconComposerを除けば上の3つがあり得る形なのではないでしょうか。

実際はAppearance項目でDarkとTinted差分も増えました。ちゃんと対応すると上の項目数×3・・・なかなかです。

その手間を考慮してか、Xcode 14からは1024pxの素材があればXcode側でよしなにしてくれるようになりました。便利になりました。(画像3枚目- Xcode 14- Single Size)

では以前の詳細なサイズが必要ないかというと、一概には言えません。

https://developer.apple.com/documentation/xcode/configuring-your-app-icon

iOS, iPadOS, tvOS, and watchOS apps can auto-generate all icon variations from a single 1024×1024 pixel image. This is the default behavior when you create a new iOS, iPadOS, tvOS, and watchOS app, or a new icon in the asset catalog. If you have an existing project that provides multiple variants, consider providing a single size when that is all your icon requires. However, if you want to customize your app’s icon variants, such as to show more detail at a larger size, you can provide individual assets for the variations.

ドキュメントによると、

  • 1024pxの画像単体で、アプリは全てのアイコン種類を自動生成する
  • 現状で複数種類を自分で配置している場合、1枚にまとめる事を検討すべき
  • サイズが大きくなることに伴い情報量を増やしたいなどの場合、その限りではない

上で書いているような理由があるのであれば今のままでもよさそうです。

Assets

上で紹介したAppIconのバージョン変遷はどこで検知されているでしょうか。

それはAssets.xcassets > AppIcon.appiconset > Contents.jsonにあります。

Xcode 13以前のContents.json
{
  "images" : [
    {
      "filename" : "40x40.png",
      "idiom" : "iphone",
      "scale" : "2x",
      "size" : "20x20"
    },
    {
      "filename" : "60x60.png",
      "idiom" : "iphone",
      "scale" : "3x",
      "size" : "20x20"
    },
    {
      "filename" : "58x58.png",
      "idiom" : "iphone",
      "scale" : "2x",
      "size" : "29x29"
    },
    {
      "filename" : "87x87.png",
      "idiom" : "iphone",
      "scale" : "3x",
      "size" : "29x29"
    },
    {
      "filename" : "80x80.png",
      "idiom" : "iphone",
      "scale" : "2x",
      "size" : "40x40"
    },
    {
      "filename" : "120x120.png",
      "idiom" : "iphone",
      "scale" : "3x",
      "size" : "40x40"
    },
    {
      "filename" : "120x120-60.png",
      "idiom" : "iphone",
      "scale" : "2x",
      "size" : "60x60"
    },
    {
      "filename" : "180x180.png",
      "idiom" : "iphone",
      "scale" : "3x",
      "size" : "60x60"
    },
    {
      "filename" : "1024x1024.png",
      "idiom" : "ios-marketing",
      "scale" : "1x",
      "size" : "1024x1024"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
Xcode 14以降のContents.json
{
  "images" : [
    {
      "filename" : "40x40.png",
      "idiom" : "universal",
      "platform" : "ios",
      "scale" : "2x",
      "size" : "20x20"
    },
    {
      "filename" : "60x60.png",
      "idiom" : "universal",
      "platform" : "ios",
      "scale" : "3x",
      "size" : "20x20"
    },
    {
      "filename" : "58x58.png",
      "idiom" : "universal",
      "platform" : "ios",
      "scale" : "2x",
      "size" : "29x29"
    },
    {
      "filename" : "87x87.png",
      "idiom" : "universal",
      "platform" : "ios",
      "scale" : "3x",
      "size" : "29x29"
    },
    {
      "filename" : "76x76.png",
      "idiom" : "universal",
      "platform" : "ios",
      "scale" : "2x",
      "size" : "38x38"
    },
    {
      "filename" : "114x114.png",
      "idiom" : "universal",
      "platform" : "ios",
      "scale" : "3x",
      "size" : "38x38"
    },
    {
      "filename" : "80x80.png",
      "idiom" : "universal",
      "platform" : "ios",
      "scale" : "2x",
      "size" : "40x40"
    },
    {
      "filename" : "120x120.png",
      "idiom" : "universal",
      "platform" : "ios",
      "scale" : "3x",
      "size" : "40x40"
    },
    {
      "filename" : "120x120-60.png",
      "idiom" : "universal",
      "platform" : "ios",
      "scale" : "2x",
      "size" : "60x60"
    },
    {
      "filename" : "180x180.png",
      "idiom" : "universal",
      "platform" : "ios",
      "scale" : "3x",
      "size" : "60x60"
    },
    {
      "filename" : "128x128.png",
      "idiom" : "universal",
      "platform" : "ios",
      "scale" : "2x",
      "size" : "64x64"
    },
    {
      "filename" : "192x192.png",
      "idiom" : "universal",
      "platform" : "ios",
      "scale" : "3x",
      "size" : "64x64"
    },
    {
      "filename" : "136x136.png",
      "idiom" : "universal",
      "platform" : "ios",
      "scale" : "2x",
      "size" : "68x68"
    },
    {
      "filename" : "152x152.png",
      "idiom" : "universal",
      "platform" : "ios",
      "scale" : "2x",
      "size" : "76x76"
    },
    {
      "filename" : "167x167.png",
      "idiom" : "universal",
      "platform" : "ios",
      "scale" : "2x",
      "size" : "83.5x83.5"
    },
    {
      "filename" : "1024x1024.png",
      "idiom" : "universal",
      "platform" : "ios",
      "size" : "1024x1024"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}

項目ごとに比較すると

  • “filename” : “40×40.png”
  • “idiom” : “iphone”
  • “scale” : “2x”
  • “size” : “20×20”
  • “filename” : “40×40.png”
  • “idiom” : “universal”
  • “platform” : “ios”
  • “scale” : “2x”
  • “size” : “20×20”

idiomがiphoneからuniversalになり、platformにiosが分離しました。

macを追加したところidiomがmacになっていたので、iOSがiPad OSと分離した際に、リソース上は両方を兼ねるためUniversalになったものと推察しました。

試しに以下のようなものを追加したところ、iPadが分離してXcode 13のAll Sizesパターンが生成されました。

{
        "filename" : "40x40.png",
        "idiom" : "ipad",
        "scale" : "2x",
        "size" : "20x20"
},
Xcode 14以降のiPhone用定義とXcode 13以前のiPad用定義が共存する図

各リソースの利用先

複数解像度の画像はシステム上の適当な箇所で適宜利用されます。

ここまでXcode 13以前とXcode 14以降を見比べてきましたが、Xcode 13以前の方には20ptにiPhone Notificationsというタイトルがついており、Xcode 14以降の方にはiOSしか書いていないことに気づいたでしょうか。

Xcode 13以前では画面解像度が低く、20ptの画像がNotificationに使われる、などが定まっていたように思います。実際Notification,Settings,Spotlightはそれぞれの役割に使われていたと思われます。(手元に端末も、Xcode 13が動くMac もないので確認ができずでした)

端末の高解像度化に伴いベースの解像度が上がったためか、20ptを通知で使うことは無くなり、特定の要素、というルールが対応できなくなったため名称から姿を消しました。

iOS 26のリソースの使い方の改善

本題です。

iPhone 16 Pro、iOS 18.5とiOS 26のエミュレータ上で、どの解像度をホーム画面で利用しているかを確認してみましょう。具体的な値を知る必要はなく、色だけに注目してもらえれば大丈夫です。

上がiOS 18.5,下がiOS 26です。実際注目してもらいたいのはフォルダ内のアイコンです。

iOS 18.5では180×180のアイコンがホーム画面に表示されており、フォルダ内のサムネイルでは同じ色(=同じ解像度)のアイコンが利用されています。

一方iOS 26では192×192のアイコンがホーム画面に表示されており、フォルダ内のサムネイルでは60×60の赤いアイコンが利用されています。

つまり、

iOS 26にしてようやくフォルダのサムネイルでサイズに適した解像度が使われ、メモリ使用量が小さくなった(かもしれない)という話でした。

これでiOS 26が26.1になって戻っていたらバグだったかもしれません。その時は笑ってください。

まとめ

Xcode内部でリソースをどう持っているかが変わった様子を知っても特に意味はありませんが、iPadを今でもリソースを分けることができるのはまだ使えるテクニックかなと思います。

iOS 26までアップデートされ、デザインの変更が今回は特に目を惹きますが、今回のような細かいチューニングが今でもされていると思うと頭が上がりません。個人的にはリリースノートに書いて欲しいくらいですね。(とんでもない長さになりそうですが)

表面的なことだけではなく、細かい実装の差異に気づくことができると、これまで使っていたアプリの見方も変わるかもしれません。

長々読んでいただきありがとうございました。



ギャップロを運営しているアップフロンティア株式会社では、一緒に働いてくれる仲間を随時、募集しています。 興味がある!一緒に働いてみたい!という方は下記よりご応募お待ちしております。
採用情報をみる