[MacOS] アプリの自動起動を実装する方法

Swift

Mac でログインした時に、アプリを自動で起動できるようにするための方法を説明します。

ユーザーが自分で、システム環境設定から追加することもできますが、アプリの中から、「ログイン時自動起動」みたいなオプションで設定してもらうのがよくあるパターンなので、そのための方法を説明します。

やりたいこと

Macでログインし直したりした時に、自動でアプリを起動しておいてくれるオプションを作りたい。

ユーティリティ系のアプリでは、たいてい用意されている機能で、あるとないとでは、使い勝手に大きな差が出てしまいます。

背景から説明しようと思ったのですが、複雑&古い資料を読む必要がある ということで、そこは、スキップして、まずは、使い方を説明します。




LaunchAtLogin.framework

非常に、便利なフレームワークが公開されていました。LaunchAtLogin.frameworkです。

ドキュメントに従っていけば使えるようになるはずなのですが、念のため、各ステップの説明です。

メインとなるアプリケーションのプロジェクト作成

普通にMac Appのプロジェクトを作成します。自動起動される対象は、このアプリとなります。

お試しということで、”AutomaticLaunch”というアプリ名/プロジェクト名にしました。

carthageを使って、LaunchAtLogin.frameworkをインストール

プロジェクトディレクトリに、Cartfile を作成し、内容を以下のようにします。

Cartfileの中身

このCartfileファイルを、プロジェクトのディレクトリにコピーしてもOKです。

その後、以下のコマンドを実行します。

コード

Carthage によって、プロジェクトディレクトリ下に、LaunchAtLogin が取得され、ビルドされています。

次に、ビルドされたframeworkをプロジェクトに追加します。
Target の Frameworks, Libraries, and Embedded Content の追加ボタンを使って、追加ダイアログを表示します。

frameworkaddbutton

表示されたダイアログには、Mac標準のライブラリのみ表示されているので、”Add Files”メニューを使って、ローカルのframeworkを追加します。

SelectFrameworkFile

表示されたファイル選択ダイアログで、ビルドされているframeworkのフォルダを選択します。

AddFrameworkfile

LaunchAtLogin framework を使うためには、もう一手間必要です。
新しく “New Run Script” Phaseを追加して、”/bin/sh ${PROJECT_DIR}/Carthage/Build/Mac/LaunchAtLogin.framework/Resources/copy-helper.sh”を実行するように設定します。”Run Script”は、”Embed Frameworks” の後に追加することが必要です。

RunScript setting

以下は、コピペ用です。

New Run Scriptで追加するスクリプト




アプリの中での、LaunchAtLogin.frameworkの使い方

非常に簡単に使用できます。

import LaunchAtLogin

使いたい場所で、”import LaunchAtLogin”をします。

LaunchAtLogin

“LaunchAtLogin.isEnabled”が、ログイン時に自動起動するかどうかを制御するフラグとなっています。

もちろん、”true”と設定すれば、自動起動しますし、”false”と設定すれば、自動起動が解除されます。

コード例

ボタンで、ON/OFF を切り替えるアプリでテストしました。

コード例

AutomaticLaunchApp

ちなみに、この自動起動の設定は、ユーザーの操作によって行われるものとMac App Store のガイドラインに記載されています。

ですので、そのようにUIを構築しないと、Mac App Store からは、Rejectされてしまいます。

説明は以上です。

余裕ができれば、そのうち、背景に使われているものも説明します。




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です