ユーザーが自分で、システム環境設定から追加することもできますが、アプリの中から、「ログイン時自動起動」みたいなオプションで設定してもらうのがよくあるパターンなので、そのための方法を説明します。
Sponsor Link
目次
やりたいこと
Macでログインし直したりした時に、自動でアプリを起動しておいてくれるオプションを作りたい。
ユーティリティ系のアプリでは、たいてい用意されている機能で、あるとないとでは、使い勝手に大きな差が出てしまいます。
背景から説明しようと思ったのですが、複雑&古い資料を読む必要がある ということで、そこは、スキップして、まずは、使い方を説明します。
LaunchAtLogin.framework
非常に、便利なフレームワークが公開されていました。LaunchAtLogin.frameworkです。
ドキュメントに従っていけば使えるようになるはずなのですが、念のため、各ステップの説明です。
メインとなるアプリケーションのプロジェクト作成
普通にMac Appのプロジェクトを作成します。自動起動される対象は、このアプリとなります。
お試しということで、”AutomaticLaunch”というアプリ名/プロジェクト名にしました。
carthageを使って、LaunchAtLogin.frameworkをインストール
プロジェクトディレクトリに、Cartfile を作成し、内容を以下のようにします。
1 2 3 |
github "sindresorhus/LaunchAtLogin" |
このCartfileファイルを、プロジェクトのディレクトリにコピーしてもOKです。
その後、以下のコマンドを実行します。
1 |
% carthage update --platform MacOS |
Carthage によって、プロジェクトディレクトリ下に、LaunchAtLogin が取得され、ビルドされています。
次に、ビルドされたframeworkをプロジェクトに追加します。
Target の Frameworks, Libraries, and Embedded Content の追加ボタンを使って、追加ダイアログを表示します。
表示されたダイアログには、Mac標準のライブラリのみ表示されているので、”Add Files”メニューを使って、ローカルのframeworkを追加します。
表示されたファイル選択ダイアログで、ビルドされているframeworkのフォルダを選択します。
LaunchAtLogin framework を使うためには、もう一手間必要です。
新しく “New Run Script” Phaseを追加して、”/bin/sh ${PROJECT_DIR}/Carthage/Build/Mac/LaunchAtLogin.framework/Resources/copy-helper.sh”を実行するように設定します。”Run Script”は、”Embed Frameworks” の後に追加することが必要です。
以下は、コピペ用です。
1 2 3 |
/bin/sh ${PROJECT_DIR}/Carthage/Build/Mac/LaunchAtLogin.framework/Resources/copy-helper.sh |
アプリの中での、LaunchAtLogin.frameworkの使い方
非常に簡単に使用できます。
import LaunchAtLogin
使いたい場所で、”import LaunchAtLogin”をします。
LaunchAtLogin
“LaunchAtLogin.isEnabled”が、ログイン時に自動起動するかどうかを制御するフラグとなっています。
もちろん、”true”と設定すれば、自動起動しますし、”false”と設定すれば、自動起動が解除されます。
コード例
ボタンで、ON/OFF を切り替えるアプリでテストしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
struct ContentView: View { @State private var automaticLaunch:Bool = false var body: some View { VStack { Text("Autolaunch Status: \(String(automaticLaunch))") Button(action: { self.toggleAutomaticLaunch() }, label: { Text("Toggle Automatic Launch setting") }) } } func toggleAutomaticLaunch() { if automaticLaunch { // turn off LaunchAtLogin.isEnabled = false automaticLaunch = false } else { // turn on LaunchAtLogin.isEnabled = true automaticLaunch = true } } } |
ちなみに、この自動起動の設定は、ユーザーの操作によって行われるものとMac App Store のガイドラインに記載されています。
ですので、そのようにUIを構築しないと、Mac App Store からは、Rejectされてしまいます。
説明は以上です。
余裕ができれば、そのうち、背景に使われているものも説明します。
Sponsor Link