macOS Catalina (10.15)에서 응용 프로그램 폴더가 두 개로 분리되어 있습니다.

요약


  • macOS Catalina에서 정품 앱을 System/Applications에 배치합니다.
  • 다른 앱은 전통적으로 Applications에 있습니다.

  • 참고



  • Catalina에서 파일 시스템이 이렇게 바뀝니다.
  • 상기의 기사가 상세합니다.


  • Catalina에서는 파일 액세스를 더욱 엄격화한다. APFS(Apple File System)로 포맷된 루트 볼륨(시동 디스크)은 시스템 영역과 데이터 영역으로 2분할되고, 그 중 시스템 영역은 완전히 리드 온리가 된다.

    순정 앱은 시스템 영역에서 읽기 전용, 그 외의 앱은 종래대로 데이터 영역에 할당되고 있다고 한다.

    확인



    macOS 10.15 환경


  • Finder에서는 지금까지와 같은 응용 프로그램 폴더이지만 ...


  • 터미널에서 확인하면 표준 항목이 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는 디렉토리를 검색하는 데 사용됩니다.

  • 참고


  • Persistence (2) ~ 디렉토리 경로 얻기
  • NSSearchPathForDirectoriesInDomains
  • NSSearchPathDomainMask
  • EZ-NET : iOS 샌드 박스 사용 : Objective-C 프로그래밍

  • 코드


    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 를 지정하고 있으면, 기대하는 동작과 다르기 때문에 주의입니다.
  • 좋은 웹페이지 즐겨찾기