ottijp blog

launchdでリムーバブルディスクへのrsyncバックアップがエラーになった場合の解決法 その2

以前こちらの記事で解決した問題がまた再発してしまったので,再解決しました.

環境

  • macOS: 26.6.1 (Tahoe)
  • launchd: 7.0.0

問題

.appファイルの元になるAppleScriptを紛失してしまったので,作り直してlaunchdで動作させたところ,バックアップの実行のたびに以下のような許可ダイアログが表示されるようになりました. .appファイル単体で起動しても毎回表示されます.

permission dialog

"media-backup.app" would like to access files on a removable volume.

原因

AppleScriptを.app化したものが未署名だったため,許可ダイアログでAllowを選んでもプライバシ設定が保存されていなかったようです.

codesign -dr - bin.local/media-backup.app
#> Executable=/Users/hoge/bin.local/media-backup.app/Contents/MacOS/applet
#> bin.local/media-backup.app: code object is not signed at all

動くバックアップ定期実行タスクの作り方

以下のように作ることで警告が表示されずに,正常に動作するようになりました.

セキュリティ設定のリセット

一応念のため,これまで許可した残骸が残っているかもしれないので,リセットしました.

mdls -name kMDItemCFBundleIdentifier bin.local/media-backup.app
#> kMDItemCFBundleIdentifier = "com.apple.ScriptEditor.id.media-backup"
tccutil reset SystemPolicyRemovableVolumes com.apple.ScriptEditor.id.media-backup
tccutil reset SystemPolicyAllFiles com.apple.ScriptEditor.id.media-backup

SystemPolicyAllFilesに対してもリセットしているのは,試行錯誤していたときに,システム設定のプライバシ設定におけるFull Disk Accessに.appを手動で入れたりしていたためです.

バックアップ実行用.appファイルの作成

Script Editorで,以下のようなAppleScriptのコードを作ります.media-backupは内部でrsyncを使っている自前のスクリプトです.

on run
	do shell script "/bin/zsh /Users/hoge/bin.local/media-backup"
end run

これを,File > Exportから.appとしてエクスポートします. このとき,Code SignSign to Run Locallyになっていることを確認してください.

export script as application

こうして出力した.appファイルには署名がされていることが確認できます.

codesign -dr - launchd/media-backup.app
#> Executable=/Users/hoge/Documents/backup/launchd/media-backup.app/Contents/MacOS/applet
#> # designated => cdhash H"ca78285eaa28017638e000000000000000000000" or cdhash H"f66d7116ab8f5dea424439f80000000000000000" or cdhash H"a3daf0956dc71fc2ff0000000000000000000000" or cdhash H"cb17b99302ef6c00000000000000000000000000"

File FormatApplicationを選んだ場合,Code SignSign to Run Locallyがデフォルトで選択されていると思いますが,私の環境では一度Code Signのセレクトボックスをクリックして開かないと,Sign to Run Locallyが選択されているにも関わらず署名がされない現象が起きました.上記のコマンドで,出力された.appの署名を確認することを推奨します.

この.appファイルを複数回実行したところ,2回目以降は許可ダイアログが表示されなくなりました!

launchdへの登録

ここからは以前の記事と内容は同じです. まずは,このようなplistを作成します.

my.mediabackup.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>my.mediabackup</string>
        <key>ProgramArguments</key>
        <array>
      <string>/usr/bin/open</string>
            <string>/Users/hoge/bin.local/media-backup.app</string>
        </array>
        <key>StartInterval</key>
        <integer>86400</integer>
</dict>
</plist>

これを~/Library/LaunchAgentsに置いて,lauchctlコマンドで登録します.

cp my.mediabackup.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/my.mediabackup.plist

おわり.


ottijp
都内でアプリケーションエンジニアをしています
© 2026, ottijp