【お知らせ】
SwiftUIで作った macOS Todo アプリ
ToDone
を100ダウンロードまで無料にしました。マニュアルページは、ToDone サポートページ です。
【本文】
この章では、アプリケーションにアイコンをつける方法と、アプリケーションのいろいろな設定ができる Info.plist などのアプリケーションバンドルについて説明します。
Xcode で作業している場合は、この章は関係ありません。 また別の機会を設けて Xcode 用に説明します。
このコーナーでは、任意のテキストエディタでコードを記述し、 ターミナルを使ってビルドする方法で作業を進めています。Xcode をお使いの場合は、Xcodeで作業する場合 をご一読ください。
なお、ターミナルを使う場合も、Swift コンパイラや SwiftUI フレームワークなどを Mac にインストールするために Xcode をインストールして、一度起動させなければなりません。インストールが終われば Xcode は終了しても大丈夫です。
また、作成したアプリケーションを App Storeに提出するためのファイルにするには、Xcode を使わなければならなかったかもしれません。どこかで Xcode を使わずに作る方法を見たような気もするのですが...
私の開発環境は次のとおりです。
更新履歴
2022/07/06 新しいアイコンが反映されない場合の対処法を追加しました。
新しいアイコンが反映されない場合
をお読みください。
この章では macOS アプリにアイコンをつける方法と、macOS アプリに プリケーションの名前を設定する方法を説明します。Xcode で作業を進める場合は、この章は関係ありません。Xcode でアイコンを付けたり、Info.plist を書き換える方法は、また機会を設けて説明したいと思います。
macOS では、アプリケーションを、「アプリケーションバンドル」 とよばれる特殊なフォルダで管理します。アプリケーションバンドルを使うと ダブルクリックでターミナルを開かずにアプリケーションを起動できたり、 アプリケーションにアイコンや画像をつけることができます。
アプリケーションバンドルは次のようなディレクトリ構成になります。
Foo.app
-Contents
--Info.plist
--MacOS
---foo
--Resources
---アイコン.icns
Foo.app/Contents
私は次のサイトから .icns ファイルをダウンロードしました。
フリーアイコンSVG、PNG、ICO、ICNS
<?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 には、いろいろな設定を書き込めますが、今回は三つだけ設定しました。
アプリケーションバンドルの名前が Foo のままですが、 これは Hello などの名前に自由に変えられます。ここではこのまま進めます。
アプリケーションの名前が Hello に変わっています。
アバウトボックスにも指定したアイコンとアプリケーション名がつきます。
ヘルプにも指定したアイコンとアプリケーション名がつきます。
ドックのアイコンも変更されています。
アプリケーションバンドルの名前が Foo のままですが、 これは Hello などの任意の名前に変えても大丈夫です。
新しいアイコンを用意して、Info.plist を書き換えても、 新しいアイコンが反映されない場合があります。その場合は次の作業をしてください。 ライブラリのファイルを操作するのは怖いという方には、 無理にはお勧めしません。
// ターミナルを起動して次のようにコマンドします。
cd /Library/Caches/com.apple.iconservices.store
sudo su
// パスワード入力を求められます。
ls
// 多くのアイコンがキャッシュされています。
// どれがどのアイコンのキャッシュなのか分からないのですべて削除します。
rm *
この作業でドックとアバウトボックスのアイコンは反映されたと思います。 アプリケーションバンドル自身のアイコンが反映されてない場合は、