[macOS] 개발중인 앱에서 키보드를 눌렀을 때 에러음(Beep)이 들리는 경우

macOS 용 앱에서 '드앵~' 이라고 들리는 에러비프음(Beep, NSBeep)이 들리는 경우는 대체로 사용자가 잘못된 동작을 하는 경우이다. 물론 이 경우 이런 소리가 들리는 건 맞겠지만, 앱에서 의도한 기능의 단축키를 NSView 가 아닌 NSEvent 의 local monitor 형태로 구현했다거나 혹은 다른 사정으로 소리가 안울리길 원할 수도 있다. 의도한 기능의 키를 누르면 시도 때도 없이 울리는 에러음이 좋을 리는 없다. 그렇다면 어떻게 하면 이 에러음을 잡을 수 있을까? 개인적으론 세 가지 요소가 필요하다고 본다. 다른 더 좋은 방법이 있을지도 모르겠지만 관련 자료가 부실(?)해서 삽질로 알아낸 내용임을 감안하자.

[macOS] 윈도우 위치와 크기를 자동으로 저장하고 복원하기

이미지
AppKit 을 활용해 만든 macOS 용 앱 윈도우의 크기와 위치를 보존하려면 autosave 이름을 지정해 주면 된다.

[macOS] 광역(?) 마우스 및 키보드 이벤트 인식

제목이 약간의 오해가 있을 수도 있어서 좀 더 자세히 적어보자면, 앱 내부의 마우스나 키 입력을 받는게 아니라 앱 윈도우에 포커스가 없는 상태에서 마우스나 키보드 이벤트를 받기 위한 내용이다. 흔히 쓰이는 윈도우의 '키보드 후킹'이라는 표현이 많이 비슷하기도 하다.

[macOS] 라이언 스타일 풀스크린 지원

풀스크린에 대한 글을 써 보려 했는데 사실 쓸 내용이 없다. 이제 모든 앱 프로젝트는 기본적으로 라이언 스타일 풀스크린이 기본 옵션이다. ... ?!! 응? 뭐? 끝이야?! 물론 이 글을 뜬금없이 끝낼 순 없으니 한가지 팁을 소개해 본다. 만약 윈도우가 툴바를 가지고 있다면, 그리고 풀스크린 환경에서 툴바를 숨기고 싶은 경우가 있을 수 있다. 예를 들어, 사파리는 풀스크린을 표시하면 메뉴바만 사라지는데, 사진(Photos)앱은 뷰어 모드에서는 툴바가 메뉴바와 동일하게 표시되지 않다가 마우스 커서를 상단에 가져가야 나타난다.

[Xcode] 비동기 루틴 유닛 테스트 (Asynchronous Unittest)

이미지
Xcode 의 유닛테스트 기능은 동기(Sync)코드 테스트에 최적화 되어있다. 당연하게도 비동기 루틴의 경우 해당 테스트 컨텍스트가 종료된 뒤에 비동기 결과가 들어오니 쉽게 판단할 수는 없을 것이다. 다행히도 Xcode 의 XCTest 모듈은 이런 비동기 콜(Asynchronous Call)에 대비하기 위한 약간의(?) 기능이 제공되고 있어서 소개해 본다.

우연히 발견한 macOS 10.12 NSAlert 버그(?) 삽질기

이미지
macOS 10.12 시에라가 업데이트 된 후로 개발 중이던 맥 앱에서 DETECTED_MISSING_CONSTRAINTS 예외가 발생하는 상황을 겪었다. 물론 10.11 에서 개발할 당시에는 잘 돌아가던 앱이었는데 10.12 부터 이런 오류가 발생하기 시작했다. 다행인 점은 죽지는 않고 경고 수준으로 끝나는 오류였다는 점이다. 사람마다 느끼는 점은 다르겠지만, 나에겐 찝찝함을 남기는 메시지가 떴기에 그냥 넘길 수가 없었다.

NSTextView Cheatsheet

개인적으로 필요해서 찾아봤던 NSTextView 관련 팁들을 별도로 정리해 본다.