LoginSignup
9
6

More than 3 years have passed since last update.

macOS Catalina(10.15)からアプリケーションフォルダが2つに別れています

Last updated at Posted at 2019-10-25

まとめ

  • macOS Catalinaから純正アプリがSystem/Applicationsに配置されるようになっています。
  • その他のアプリは従来どおりApplicationsに配置されています。

参考

Catalinaでは、ファイルアクセスをさらに厳格化する。APFS(Apple File System)でフォーマットされたルートボリューム(起動ディスク)はシステム領域とデータ領域に2分割され、そのうちシステム領域は完全にリードオンリーとなる。

純正アプリはシステム領域で読み込み専用、その他のアプリは従来どおりデータ領域に割り振られているとのこと。

確認

macOS 10.15環境

  • Finderでは今まで通りのアプリケーションフォルダだけど…

-w882

  • ターミナルで確認すると、標準のものはSystem/Applicationsに入っていることが確認できます。
pwd
/System/Applications
ls
App Store.app       Contacts.app        Image Capture.app   Music.app       Preview.app     System Preferences.app
Automator.app       Dictionary.app      Launchpad.app       News.app        QuickTime Player.app    TV.app
Books.app       FaceTime.app        Mail.app        Notes.app       Reminders.app       TextEdit.app
Calculator.app      FindMy.app      Maps.app        Photo Booth.app     Siri.app        Time Machine.app
Calendar.app        Font Book.app       Messages.app        Photos.app      Stickies.app        Utilities
Chess.app       Home.app        Mission Control.app Podcasts.app        Stocks.app      VoiceMemos.app
  • 自分で入れたものは従来どおりApplicationsにあります。
$ pwd
/Applications
ls
CotEditor.app               Safari.app              Xcode.app
Google Chrome.app           Numbers.app             Sourcetree.app              iMovie.app
...

macOS 10.13環境

  • 10.15未満では一緒くたにまとめられていることが確認できます。
cd /Applications 
ls 
Adobe Acrobat DC            Microsoft Outlook.app
Alfred.app              Microsoft PowerPoint.app
App Store.app               Microsoft Remote Desktop.localized
...

NSSearchPathForDirectoriesInDomainsの挙動変更

概要

  • 先述のアプリケーションフォルダが変更されたことに起因して、macOS 10.15からNSSystemDomainMaskで取得する値が変更されたようです。
    • macOS 10.15から/System/Applicationsが新たに追加されたからですね。
  • NSSearchPathForDirectoriesInDomainsはディレクトリの取得の際に使用されています。

参考

Code

NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSUserDomainMask,    YES);
NSArray *paths2 = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSLocalDomainMask,   YES);
NSArray *paths3 = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSNetworkDomainMask, YES);
NSArray *paths4 = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSSystemDomainMask,  YES);
NSArray *paths5 = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSAllDomainsMask,    YES);

NSLog(@"NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSUserDomainMask,    YES)\r\n%@", paths1.description);
NSLog(@"NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSLocalDomainMask,   YES)\r\n%@", paths2.description);
NSLog(@"NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSNetworkDomainMask, YES)\r\n%@", paths3.description);
NSLog(@"NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSSystemDomainMask,  YES)\r\n%@", paths4.description);
NSLog(@"NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSAllDomainsMask,    YES)\r\n%@", paths5.description);

macOS 10.15の実行結果

2019-10-25 19:09:31.542660+0900 Sample[64147:308796] Metal API Validation Enabled
2019-10-25 19:09:31.699039+0900 Sample[64147:308796] NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSUserDomainMask,    YES)
(
    "/Users/xxx/Library/Containers/jp.co.xxx.sample/Data/Applications"
)
2019-10-25 19:09:31.699109+0900 Sample[64147:308796] NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSLocalDomainMask,   YES)
(
    "/Applications"
)
2019-10-25 19:09:31.699155+0900 Sample[64147:308796] NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSNetworkDomainMask, YES)
(
    "/Network/Applications"
)
2019-10-25 19:09:31.699194+0900 Sample[64147:308796] NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSSystemDomainMask,  YES)
(
    "/System/Applications"
)
2019-10-25 19:09:31.699242+0900 Sample[64147:308796] NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSAllDomainsMask,    YES)
(
    "/Users/xxx/Library/Containers/jp.co.xxx.sample/Data/Applications",
    "/Applications",
    "/Network/Applications",
    "/System/Applications"
)

macOS 10.13の実行結果

2019-10-25 19:07:25.439859+0900 Sample[20257:3829737] NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSUserDomainMask,    YES)
(
    "/Users/username/Library/Containers/jp.co.username.sample/Data/Applications"
)
2019-10-25 19:07:25.439909+0900 Sample[20257:3829737] NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSLocalDomainMask,   YES)
(
    "/Applications"
)
2019-10-25 19:07:25.439932+0900 Sample[20257:3829737] NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSNetworkDomainMask, YES)
(
    "/Network/Applications"
)
2019-10-25 19:07:25.439948+0900 Sample[20257:3829737] NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSSystemDomainMask,  YES)
(
    "/Applications"
)
2019-10-25 19:07:25.439973+0900 Sample[20257:3829737] NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSAllDomainsMask,    YES)
(
    "/Users/username/Library/Containers/jp.co.username.sample/Data/Applications",
    "/Applications",
    "/Network/Applications"
)
  • もしApplicationのパスが取得したいのにパラメータでNSSystemDomainMaskを指定していたら、期待する動作と異なっちゃうので注意です。
9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6