macOS   SwiftUIプログラミング   アイコン

ホーム

【お知らせ】
SwiftUIで作った macOS Todo アプリ ToDone を100ダウンロードまで無料にしました。マニュアルページは、ToDone サポートページ です。

【本文】
この章では、アプリケーションにアイコンをつける方法と、アプリケーションのいろいろな設定ができる Info.plist などのアプリケーションバンドルについて説明します。

Xcode で作業している場合は、この章は関係ありません。 また別の機会を設けて Xcode 用に説明します。

このコーナーでは、任意のテキストエディタでコードを記述し、 ターミナルを使ってビルドする方法で作業を進めています。Xcode をお使いの場合は、Xcodeで作業する場合 をご一読ください。

なお、ターミナルを使う場合も、Swift コンパイラや SwiftUI フレームワークなどを Mac にインストールするために Xcode をインストールして、一度起動させなければなりません。インストールが終われば Xcode は終了しても大丈夫です。

また、作成したアプリケーションを App Storeに提出するためのファイルにするには、Xcode を使わなければならなかったかもしれません。どこかで Xcode を使わずに作る方法を見たような気もするのですが...

私の開発環境は次のとおりです。

  • MacBook Air 2018年モデル、メモリ8G
  • macOS Monterey 12.4
  • Xcode 13.4.1
  • Swift 5.6.1

更新履歴
2022/07/06 新しいアイコンが反映されない場合の対処法を追加しました。 新しいアイコンが反映されない場合 をお読みください。

アイコン

この章では macOS アプリにアイコンをつける方法と、macOS アプリに プリケーションの名前を設定する方法を説明します。Xcode で作業を進める場合は、この章は関係ありません。Xcode でアイコンを付けたり、Info.plist を書き換える方法は、また機会を設けて説明したいと思います。


アプリケーションバンドル

macOS では、アプリケーションを、「アプリケーションバンドル」 とよばれる特殊なフォルダで管理します。アプリケーションバンドルを使うと ダブルクリックでターミナルを開かずにアプリケーションを起動できたり、 アプリケーションにアイコンや画像をつけることができます。

アプリケーションバンドルは次のようなディレクトリ構成になります。


Foo.app
-Contents
--Info.plist
--MacOS
---foo
--Resources
---アイコン.icns
    

Foo.app/Contents

  1. Foo.app は、通常のフォルダの末尾に .app という拡張子をつけたものです。 〜.app というフォルダは単一のアプリケーションのように表示されます。
  2. アプリケーションバンドルを右クリックして「パッケージの内容を表示」を選ぶと、 アプリケーションバンドルの中身にアクセスできます。
  3. Foo.app の直下に Contents というフォルダを作ります。
  4. Contens フォルダの下に Info.plist というテキストファイルと、MacOS というフォルダと、Resources というフォルダを作ります。
  5. MacOS フォルダの中に、前章で作った foo 実行ファイルを入れます。
  6. Resources の中に、.icns という拡張子のついたアイコンファイルを入れます。

私は次のサイトから .icns ファイルをダウンロードしました。
フリーアイコンSVG、PNG、ICO、ICNS


Info.plist


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleExecutable</key>
	<string>foo</string>
	<key>CFBundleIconFile</key>
	<string>icon-macbook.icns</string>
	<key>CFBundleName</key>
	<string>Hello</string>
</dict>
</plist>
    

Info.plist には、いろいろな設定を書き込めますが、今回は三つだけ設定しました。

  1. CFBundleExecutable には、実行ファイルを指定します。
  2. CFBundleIconFile には、.icns 形式のアイコンファイルを指定します。
  3. CFBundleName には、アプリケーションの名前を指定します。 これを指定しないとアプリケーションバンドルの名前が アプリケーションの名前になります。

結果


Note
新しいアイコンを設定しても、実際には変わらない場合が多々あると思います。「どのディレクトリのどのアプリケーションバンドルのアイコンはこれだ。」という強力なキャッシュがかかっているみたいです。その場合は、新しいアイコンが反映されない場合 の操作をしてください。


アプリケーションバンドルの名前が Foo のままですが、 これは Hello などの名前に自由に変えられます。ここではこのまま進めます。

アプリケーションの名前が Hello に変わっています。

アバウトボックスにも指定したアイコンとアプリケーション名がつきます。

ヘルプにも指定したアイコンとアプリケーション名がつきます。

ドックのアイコンも変更されています。


アプリケーションバンドルの名前

アプリケーションバンドルの名前が Foo のままですが、 これは Hello などの任意の名前に変えても大丈夫です。


新しいアイコンが反映されない場合

新しいアイコンを用意して、Info.plist を書き換えても、 新しいアイコンが反映されない場合があります。その場合は次の作業をしてください。 ライブラリのファイルを操作するのは怖いという方には、 無理にはお勧めしません。


// ターミナルを起動して次のようにコマンドします。
cd /Library/Caches/com.apple.iconservices.store
sudo su
// パスワード入力を求められます。
ls
// 多くのアイコンがキャッシュされています。
// どれがどのアイコンのキャッシュなのか分からないのですべて削除します。
rm *
    

この作業でドックとアバウトボックスのアイコンは反映されたと思います。 アプリケーションバンドル自身のアイコンが反映されてない場合は、

  1. アプリケーションバンドルを他のディレクトリに移動して、また元の場所に戻す。
  2. アプリケーションバンドルの複製を作り、 元のアプリケーションバンドルを削除します。複製のアプリケーションバンドルの 名前を元の名前に戻します。
などを試してみてください。




43005 visits
Posted: Jun. 23, 2022
Update: Jul. 06, 2022

ホーム   目次