devch

만든 것 / BarNook

BarNook 앱 아이콘

BarNook

노치 뒤로 사라진 메뉴바 앱을 꺼내 쓰는 macOS 앱

MacBook 노치 때문에 메뉴바 오른쪽 앱이 노치 뒤로 숨어 버리는 문제를 풉니다. 아이콘을 누르면 숨겨 둔 앱이 메뉴바 아래 띠에 나타나고 필요한 앱은 잠깐 메뉴바에 고정해 바로 누를 수 있습니다. 쓰던 오픈소스 앱 Ellipsis를 포크해 새 이름으로 공개했습니다.

2026.09~10개인 프로젝트Apache-2.0 SwiftSwiftUImacOS AccessibilitySparkle
devch.co.kr/barnook열기 ↗
BarNook 랜딩 페이지 전체 화면
릴리스9

v0.1.0부터 v0.6.2까지, 3주

핀 공간 계산 PR의 테스트213

노치 레이아웃 재현 테스트 7개 포함

로그로 본 제한 전환390회

약 2시간 동안 숨김 제한이 켜졌다 꺼진 횟수

왜 만들었나

메뉴바 도구들의 권한을 정리하다가 메뉴바 앱 일부가 아예 보이지 않는 문제를 겪었습니다. 당시 macOS 27에서는 널리 쓰이던 Ice와 Thaw가 동작하지 않았고 저는 기본 기능만 있는 오픈소스 Ellipsis를 쓰고 있었습니다.

Ellipsis는 숨긴 앱을 메뉴바 아래 띠에 보여 주지만 띠의 앱을 누르는 순간 띠가 닫혀 그 앱의 메뉴를 열 수 없었습니다. 띠에 보이는 아이콘이 진짜 메뉴바 항목이 아니었기 때문입니다. 매일 쓰는 도구에서 막힌 것이라 직접 고치기로 했습니다. 원본에 핀 기능을 PR로 보냈지만 제가 원하는 방향이 원본 작자의 방향과 달라 보여 PR을 닫고 따로 가기로 했습니다.

띠에서 고른 앱을 진짜 메뉴바에 고정하기

띠에서 대신 눌러 주는 방법은 쓰지 않았습니다. 고른 앱을 BarNook 아이콘 왼쪽의 실제 메뉴바에 잠깐 고정해 사용자가 그 항목을 누르게 했습니다. 고정은 세 개까지 두고 네 번째를 고르면 가장 오래된 것을 바꿉니다. 단위 테스트 51건을 통과했고 노치 MacBook에서 세 개 고정을 확인했습니다. 숨김 제한이 걸린 동안 허용 목록 밖의 앱은 고정해도 보이지 않는다는 한계는 README에 적었습니다.

고정 공간을 만드는 방식은 한 번 더 고쳤습니다. 노치 MacBook에서 캡처 앱 하나를 고정하자 클립보드 앱과 배터리 표시까지 다른 앱이 모두 숨겨졌습니다. 정작 주 화면인 외장 모니터에는 공간이 남아 있었습니다. 지금은 고정을 누른 화면의 메뉴바 배치만 읽고 고정 항목이 접혔을 때만 필요한 너비만큼 왼쪽부터 숨깁니다. 앱 너비는 추정값이라 그래도 접히면 다시 읽고 하나씩 더 숨깁니다. 실제 노치 배치를 기록해 만든 테스트 7개를 포함해 213건을 통과하고 v0.6.2로 배포했습니다. 외장 화면에서 고정한 뒤 노치 화면으로 옮기면 다시 계산하지 않습니다.

알림 센터를 열 때 비치던 숨긴 앱

시계를 눌러 알림 센터를 열 때 숨겨 둔 앱이 잠깐씩 드러났습니다. 로그를 보니 약 2시간 동안 숨김 제한이 390번 켜지고 꺼졌습니다. 처음에는 제한을 풀지 않고 알림 센터만 여는 방법을 시도했습니다. 알림 배너와 열린 알림 센터가 같은 창 정보를 보여서 둘을 구분하지 못해 실패했습니다.

그래서 메뉴바를 먼저 가리기로 했습니다. 시계 왼쪽 메뉴바를 직전 화면 이미지로 덮은 다음 제한을 잠깐 풀고 클릭을 넘깁니다. 알림 센터가 열리면 다시 숨깁니다. 포인터가 시계에 60ms 머물면 미리 풀어 두고 메뉴바 위에 포인터가 있는 동안에는 자동 숨김을 미룹니다. 대신 화면 기록 권한이 추가로 필요해져서 권한을 두 개 받아야 설정이 열리도록 첫 실행 안내를 바꿨습니다.

이름과 배포

원본 이름과 업데이트 피드를 그대로 쓰면 원본 설치본과 업데이트가 섞일 수 있었습니다. 이름, 아이콘, 번들 ID, 업데이트 피드를 BarNook 하나로 맞췄고 원본이 Apache-2.0이라 저작권과 수정한 파일 표시는 유지했습니다. 서명, 공증, 업데이트 피드 검증은 태그를 만들기 전 단계에 넣었습니다. 기존 Ellipsis 설치본은 자동으로 넘어오지 않아 한 번 새로 설치해야 합니다.

BarNook 한국어 공유 이미지
한국어 랜딩의 공유 이미지