macOS 맥북에서 특정 앱 이름과 Bundle ID 확인하는 방법

macOS Bundle ID 확인 방법은 앱 이름이 언어 설정이나 표시 이름에 따라 달라지는 문제를 줄이고, 자동화 스크립트에서 앱을 정확하게 지정하기 위한 기본 절차입니다. macOS에서 앱 이름 확인과 Bundle ID 확인을 함께 익혀두면 AppleScript, Hammerspoon, 단축어, 쉘 스크립트 등에서 대상 앱을 안정적으로 지정할 수 있습니다.

macOS에서 앱의 자동화를 위해 설정을 진행하다 보면 눈에 보이는 앱 이름만으로는 원하는 앱을 정확히 찾기 어려운 경우가 있습니다. 특히 시스템 언어가 한국어와 영어 사이에서 달라지거나, 앱 이름이 비슷한 프로그램이 여러 개 설치되어 있으면 스크립트가 예상과 다르게 동작할 수 있습니다.

필자의 경우에도 앱 단위로 자동화 설정을 만들 때 처음에는 앱 이름을 기준으로 처리했지만, 환경이 바뀌거나 다른 Mac에서 같은 설정을 사용할 때 문제가 생기는 경우가 있었습니다. 이런 상황에서는 앱의 고유 식별자인 Bundle ID를 기준으로 확인하고 적용하는 것이 훨씬 안정적이며 다음 과정으로 터미널과 Hammerspoon을 이용해 macOS 앱 이름과 Bundle ID를 확인할 수 있습니다.

본문은 아래 튜토리얼 환경에서 comeinsidebox.com에 의해 직접 작성되었으며, 다른 환경과 기타 외부 요인 등에 의해 설명과 다른 결과가 나타날 수 있으니 참고 자료로만 활용합니다.

튜토리얼 환경: macOS Sequoia 15.x, Hammerspoon 0.9.100 이상

터미널에서 osascript 명령어로 확인하기

터미널에서 macOS 앱 이름 확인과 Bundle ID 확인을 할 때는 AppleScript를 실행할 수 있는 osascript 명령어를 사용할 수 있습니다. Apple 공식 터미널 사용 설명서에서도 터미널에서 osascript 명령어로 AppleScript 스크립트를 실행할 수 있다고 안내하고 있습니다. osascript macOS 자동화 명령어 기본 사용법 더 알아보기

macOS에서 DNS 서버 변경하기

시스템 명칭 확인하기

이 방식은 별도의 앱 설치 없이 macOS 기본 도구만으로 확인할 수 있다는 점이 장점입니다. 다만 앱 이름을 어느 정도 정확히 알고 있어야 하며, 앱이 설치되어 있지 않거나 이름이 다르면 오류가 발생할 수 있습니다.

osascript로-시스템-명칭-확인
osascript로 시스템 명칭 확인

터미널에서 앱 이름을 확인하려면 AppleScript의 application 객체를 대상으로 name 값을 조회하면 됩니다. 예를 들어 Google Chrome의 시스템상 앱 이름을 확인하려면 터미널을 열고 프롬프트에 다음 명령어를 입력 후 Enter키를 눌러 실행합니다. 정상적으로 실행되면 macOS가 인식하는 앱 이름이 출력됩니다.

osascript -e 'get name of application "Google Chrome"'
참고: 앱 이름 확인 시 다음 사항을 함께 확인하는 것이 좋습니다.

  • Finder의 응용 프로그램 폴더에서 직접적으로 보여지는 이름과 AppleScript에서 인식하는 이름이 다를 수 있습니다.
  • 앱 이름을 사용자가 직접 변경했거나, 앱이 다른 경로에 설치된 경우 명령어가 실패할 수 있습니다.
  • 시스템 언어 설정에 따라 일부 앱 이름이나 표시 문구가 다르게 보일 수 있습니다.
  • 이름이 비슷한 앱이 여러 개 있는 경우에는 Bundle ID를 기준으로 확인하는 것이 안전합니다.

Bundle ID 확인하기

위 방식은 스크립트에서 앱을 이름으로 지정할 때 참고할 수 있지만, 자동화 스크립트의 기준값으로는 Bundle ID보다 안정성이 떨어질 수 있습니다. 자동화 스크립트에서 앱을 정확히 지정할 때 가장 자주 사용되는 방식은 Bundle ID입니다. Bundle ID는 앱 번들에 부여되는 고유 식별자이며, Apple 개발자 문서에서도 kMDItemCFBundleIdentifier 항목을 번들의 CFBundleIdentifier 값으로 설명하고 있습니다.

osascript로-bundle-ID확인-가능
osascript로 bundle ID확인 가능

Google Chrome의 Bundle ID를 확인하려면 Terminal을 열고 프롬프트에 다음 명령어를 작성 하고 Enter키로 실행 합니다. 본문에서는 Google Chrome이라고 조회하였으며, 결과는 com.google.Chrome와 같이 출력 되는 것을 볼 수 있습니다.

osascript -e 'id of application "Google Chrome"'

이 값은 앱 이름보다 자동화에 더 적합합니다. 예를 들어 Hammerspoon에서 특정 앱을 실행하거나 전환할 때도 Bundle ID를 기준으로 지정하면, 앱 이름 표기나 언어 설정 변화에 덜 영향을 받습니다. Hammerspoon 공식 문서에서도 Bundle ID로 앱을 실행하거나 포커스할 수 있는 launchOrFocusByBundleID 기능을 제공한다고 안내하고 있습니다.

Bundle ID를 기준으로 사용하는 것이 좋은 이유는 다음과 같습니다.

  • 일반적으로 앱 이름이 바뀌어도 Bundle ID는 유지됩니다.
  • macOS 언어 설정이 바뀌어도 동일한 앱을 식별할 수 있습니다.
  • 스크립트를 다른 사용자나 다른 Mac으로 옮길 때 오류 가능성이 줄어듭니다.
  • 앱 이름이 비슷한 프로그램 사이에서도 대상 앱을 더 정확하게 구분할 수 있습니다.

실행 중이지 않은 앱의 Bundle ID를 확인해야 한다면 Spotlight 메타데이터를 조회하는 mdls 명령어를 사용할 수도 있습니다. 응용 프로그램 폴더에 설치된 앱이라면 다음과 같이 입력합니다.

mdls -name kMDItemCFBundleIdentifier /Applications/Google\ Chrome.app

경로에 공백이 포함된 경우에는 공백 앞에 역슬래시를 입력하거나 전체 경로를 따옴표로 감싸야 합니다. 다만 여기서는 후가공 편의를 위해 코드 예시는 기본 형태 위주로 정리했습니다.

macOS 맥북 Gatekeeper 특정 앱 우회 또는 비활성화하기

Hammerspoon 콘솔과 단축키 활용하기

위 방식은 앱 이름이나 경로를 미리 알아야 한다는 제약이 있습니다. 반면 Hammerspoon 방식은 마우스 커서가 올라가 있는 창을 기준으로 앱 정보를 확인할 수 있어, 실제로 자동화하려는 앱을 눈으로 확인하면서 Bundle ID를 얻을 수 있습니다.

참고: Hammerspoon은 Lua 스크립트를 통해 macOS의 여러 시스템 기능을 제어하는 도구이며, 공식 문서에서도 hs.application은 실행 중인 앱을 다루고, hs.window는 창 정보를 다루는 모듈로 제공됩니다. Hammerspoon 사용법과 Lua 스크립트 설정 정리에 관해 알아보기

마우스 위치 기준으로 앱 이름과 Bundle ID 확인하기

일반적으로 Hammerspoon 콘솔에서 실행 중인 앱 목록을 모두 출력하면 사용자가 직접 실행한 앱뿐만 아니라 백그라운드에서 동작하는 서비스나 보이지 않는 앱까지 함께 섞여 나올 수 있습니다. 이 경우 원하는 앱의 이름과 Bundle ID를 찾기 위해 목록을 직접 확인해야 하므로 오히려 번거로울 수 있습니다.

또한 현재 활성화된 창의 정보를 확인하는 방식은 명령을 입력하기 위해 Hammerspoon 콘솔을 클릭하는 순간 포커스가 Hammerspoon으로 옮겨가는 문제가 있습니다. 그러면 실제로 확인하려던 앱이 아니라 Hammerspoon의 정보가 출력될 수 있습니다. 이런 불편을 줄이기 위해 마우스 커서가 올라가 있는 창을 기준으로 앱 정보를 확인하는 단축키를 사용할 수 있습니다. 확인하려는 앱 창 위에 마우스만 올려둔 뒤 단축키를 누르면, 해당 창을 가진 앱의 이름과 Bundle ID가 화면 알림으로 표시됩니다.

Console-메뉴-선택
Console 메뉴 선택

콘솔 명령을 실행하기 위해 먼저 Hammerspoon가 실행 중인 상태에서 메뉴 막대Hammerspoon 아이콘해머스푼 메뉴 막대 아이콘을 클릭하고 Console...을 선택합니다.

Enabled-hotkey
Enabled hotkey

Hammerspoon Console 창이 열리면 하단 입력필드에 다음과 같이 명령어를 입력 후 Enter 키를 눌러 실행합니다. 해당 방식은 한 줄 코드이기 때문에 Hammerspoon 콘솔에서 빠르게 붙여넣고 테스트하기 좋습니다. 특히 임시로 앱 이름과 Bundle ID를 확인하려는 경우에는 설정 파일을 수정하지 않아도 바로 사용할 수 있습니다.

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "W", function() local m = hs.mouse.absolutePosition(); for _, w in ipairs(hs.window.orderedWindows()) do local a = w:application(); if a and a:bundleID() ~= "com.apple.finder" then local f = w:frame(); if m.x >= f.x and m.x <= f.x + f.w and m.y >= f.y and m.y <= f.y + f.h then hs.alert.show(string.format("Name: %s\nID: %s", a:title(), a:bundleID())); return end end end end)

위 코드는 cmd, option, ctrl, W 단축키를 누르면 현재 마우스 포인터의 위치를 가져온 뒤, 화면에 보이는 창 목록을 순서대로 확인합니다. 마우스 위치가 특정 창의 영역 안에 포함되어 있으면 해당 창을 가진 앱의 이름과 Bundle ID를 알림으로 표시합니다.

코드에서 사용되는 주요 흐름은 다음과 같습니다.

  • hs.hotkey.bind는 지정한 키 조합에 동작을 연결합니다.
  • hs.mouse.absolutePosition은 현재 마우스 커서의 화면 좌표를 가져옵니다.
  • hs.window.visibleWindows는 현재 화면에 보이는 창 목록을 가져옵니다.
  • win:frame은 각 창의 위치와 크기 정보를 가져옵니다.
  • 마우스 좌표가 창 영역 안에 있는지 비교한 뒤, 해당 창의 앱 정보를 표시합니다.
  • app:title은 앱 이름을, app:bundleID는 Bundle ID를 반환합니다.
단축키로 앱 정보를 확인 가능

위 코드는 간단히 확인하는 목적에 맞춘 형태이므로, 마우스 위치에서 창을 찾지 못하거나 앱 정보를 가져오지 못했을 때 별도의 안내 메시지를 표시하지 않습니다. 일반적인 상황에서는 충분히 사용할 수 있지만, 장기적으로 다음 스크립트를 init.lua에 넣어두고 계속 사용할 예정이라면 아래처럼 예외 처리를 추가한 형태를 사용하는 것이 더 안정적입니다.

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "W", function()
    local mouse = hs.mouse.absolutePosition()

    for _, win in ipairs(hs.window.orderedWindows()) do
        local frame = win:frame()

        if mouse.x >= frame.x and mouse.x <= frame.x + frame.w and mouse.y >= frame.y and mouse.y <= frame.y + frame.h then
            local app = win:application()

            if app then
                hs.alert.show(string.format("Name: %s\nID: %s", app:title(), app:bundleID()))
            else
                hs.alert.show("앱 정보를 확인할 수 없습니다.")
            end

            return
        end
    end

    hs.alert.show("마우스 위치에서 창을 찾을 수 없습니다.")
end)

이 코드는 화면에 표시되는 창 목록을 확인하면서 마우스 위치가 포함된 창을 찾고, 해당 창의 애플리케이션 객체를 가져온 뒤 앱 이름과 Bundle ID를 표시합니다. 기본 코드와 비교하면 다음과 같은 차이가 있습니다.

  • 변수명을 mouse, win, frame, app처럼 풀어서 작성해 코드 구조를 이해하기 쉽습니다.
  • app 객체가 없는 경우 앱 정보를 확인할 수 없습니다라는 안내를 표시합니다.
  • 마우스 위치에 해당하는 창을 찾지 못한 경우 마우스 위치에서 창을 찾을 수 없습니다라는 안내를 표시합니다.
  • 여러 줄로 작성되어 init.lua에 저장해 두고 관리하기 좋습니다.
  • hs.window.orderedWindows를 사용해 창 순서를 기준으로 확인하므로 겹쳐진 창이 있을 때 앞쪽 창을 기준으로 판단하기 쉽습니다.
UTM 네트워크 연결 모드 Bridge Host Only 변경하기

FAQ

앱 이름과 Bundle ID 중 어떤 것을 사용하는 것이 좋은가요.

자동화 스크립트를 작성할 때는 가능한 한 Bundle ID를 사용하는 것이 좋습니다. 앱 이름은 사용자가 변경하거나 macOS 언어 설정, 앱 표시 방식, 설치 경로에 따라 달라질 수 있지만 Bundle ID는 앱을 식별하기 위한 고유 값으로 사용되기 때문입니다.

  • 앱 이름은 사람이 보기 쉬운 표시 이름에 가깝습니다.
  • Bundle ID는 시스템과 자동화 도구가 앱을 구분하는 기준값으로 사용하기 좋습니다.
  • Hammerspoon이나 AppleScript에서 앱을 반복적으로 지정할 때는 Bundle ID 기반 설정이 더 안정적입니다.
  • 같은 이름의 앱이 여러 개 있거나 베타 버전과 정식 버전을 함께 설치한 경우에는 Bundle ID 확인이 더 중요합니다.

시스템 언어가 한국어일 때 앱 이름이 한글로 인식되는 문제는 어떻게 하나요.

macOS 시스템 언어가 한국어로 설정되어 있으면 일부 앱이나 시스템 항목의 표시 이름이 한국어로 보일 수 있습니다. 이때 영문 앱 이름을 기준으로 작성한 스크립트가 정상적으로 작동하지 않는다면 Bundle ID를 확인해 기준값을 바꾸는 것이 좋습니다.

  • 앱 이름 기준 스크립트는 표시 이름 변화에 영향을 받을 수 있습니다.
  • Bundle ID 기준 스크립트는 언어 설정이 바뀌어도 같은 앱을 가리킬 가능성이 높습니다.
  • 여러 사용자가 같은 자동화 설정을 공유해야 한다면 앱 이름보다 Bundle ID를 안내하는 편이 좋습니다.
  • 자동화 설정 문서에는 앱 이름과 Bundle ID를 함께 적어두면 나중에 유지보수하기 쉽습니다.

실행 중이지 않은 앱의 정보를 미리 확인할 방법이 있나요.

실행 중이지 않은 앱의 Bundle ID는 앱 설치 경로를 알고 있다면 mdls 명령어로 확인할 수 있습니다. 이 방식은 앱을 직접 실행하지 않고도 번들 메타데이터를 조회할 수 있어, 설치된 앱의 식별자를 미리 정리할 때 유용합니다.

  • 응용 프로그램 폴더에 설치된 앱은 /Applications/앱이름.app 경로를 기준으로 확인할 수 있습니다.
  • 경로에 공백이 있으면 역슬래시로 공백을 처리하거나 전체 경로를 감싸서 입력해야 합니다.
  • 앱이 사용자 Applications 폴더나 별도 폴더에 설치되어 있다면 실제 설치 경로를 기준으로 입력해야 합니다.
  • Spotlight 메타데이터가 없거나 손상된 경우에는 결과가 비어 있을 수 있으므로, 이때는 앱을 실행한 뒤 osascript나 Hammerspoon 방식으로 확인하는 것이 좋습니다.

Hammerspoon 단축키를 눌러도 아무 반응이 없으면 어떻게 확인하나요.

Hammerspoon 단축키가 동작하지 않는다면 먼저 Hammerspoon이 실행 중인지, 설정 파일을 다시 불러왔는지, macOS 권한이 허용되어 있는지 확인해야 합니다. 특히 창과 입력을 다루는 자동화는 손쉬운 사용 권한이 없으면 제대로 동작하지 않을 수 있습니다.

  • 시스템 설정에서 개인정보 보호 및 보안 항목을 열고 손쉬운 사용 권한에 Hammerspoon이 포함되어 있는지 확인합니다.
  • Hammerspoon 메뉴에서 Reload Config를 실행해 init.lua 변경 사항을 다시 적용합니다.
  • 같은 단축키를 다른 앱이나 macOS 기능이 이미 사용하고 있는지 확인합니다.
  • 콘솔에 오류 메시지가 표시되는지 확인하고, 코드 복사 과정에서 괄호나 쉼표가 빠지지 않았는지 점검합니다.

Bundle ID를 확인한 뒤 어디에 활용할 수 있나요.

Bundle ID는 앱을 정확히 지정해야 하는 자동화 작업에서 활용할 수 있습니다. 예를 들어 특정 앱 실행, 앱 전환, 앱별 단축키 처리, 입력 소스 전환, 창 배치 자동화 같은 작업에서 앱 이름 대신 Bundle ID를 기준으로 사용하면 안정성을 높일 수 있습니다.

  • Hammerspoon에서 특정 앱을 실행하거나 포커스할 때 사용할 수 있습니다.
  • AppleScript나 쉘 스크립트에서 앱을 구분하는 기준으로 활용할 수 있습니다.
  • 앱별 설정을 나누는 자동화 코드에서 조건문 기준값으로 사용할 수 있습니다.
  • 여러 Mac에서 같은 설정을 공유할 때 앱 이름 차이로 인한 오류를 줄이는 데 도움이 됩니다.

마치며

macOS Bundle ID 확인은 자동화 설정을 안정적으로 만들기 위한 기본 작업입니다. 앱 이름만 기준으로 삼으면 언어 설정이나 표시 이름 변경에 따라 스크립트가 흔들릴 수 있지만, Bundle ID를 기준으로 하면 같은 앱을 더 정확하게 지정할 수 있습니다. 특히 여러 앱을 동시에 다루는 자동화에서는 처음부터 Bundle ID를 확인해 두는 편이 나중에 관리하기 쉽습니다.

터미널의 osascript 명령어는 별도의 도구 없이 바로 사용할 수 있다는 점에서 가장 간단한 확인 방법입니다. 앱 이름을 알고 있거나 실행 중인 앱을 빠르게 확인할 때 적합하며, 설치 경로를 알고 있다면 mdls 명령어로 실행 전 Bundle ID를 확인하는 것도 가능합니다. 다만 앱 이름이나 경로를 모를 때는 직접 눈으로 보고 확인하기 어렵다는 한계가 있습니다.

Hammerspoon을 이미 사용하고 있다면 마우스 커서가 올라간 창의 앱 이름과 Bundle ID를 바로 확인하는 단축키를 만들어 두는 것이 편리합니다. 필자의 경우 새 앱을 자동화 설정에 추가할 때 이 방식을 먼저 사용하면, 잘못된 앱 이름을 입력해 생기는 오류를 줄일 수 있었습니다. 자동화 작업을 자주 한다면 터미널 방식과 Hammerspoon 방식을 함께 익혀 두는 것이 좋습니다.

macOS에서 Thorium 브라우저 설치하기

관련 글

댓글로 남기기 어려운 내용은 Mail로 문의 하실 수 있습니다. 해당 글과 연관 된 내용은 여기를 클릭하거나 터치해 현재 페이지의 주소를 복사 후 함께 전달하시면 보다 정확한 답을 얻을 수 있습니다.

댓글 남기기