9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?