2016년 11월 23일 수요일

2016년 11월 15일 화요일

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

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

2016년 11월 10일 목요일

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

풀스크린에 대한 글을 써 보려 했는데 사실 쓸 내용이 없다. 이제 모든 앱 프로젝트는 기본적으로 라이언 스타일 풀스크린이 기본 옵션이다.

... ?!! 응? 뭐? 끝이야?!

물론 이 글을 뜬금없이 끝낼 순 없으니 한가지 팁을 소개해 본다.

만약 윈도우가 툴바를 가지고 있다면, 그리고 풀스크린 환경에서 툴바를 숨기고 싶은 경우가 있을 수 있다. 예를 들어, 사파리는 풀스크린을 표시하면 메뉴바만 사라지는데, 사진(Photos)앱은 뷰어 모드에서는 툴바가 메뉴바와 동일하게 표시되지 않다가 마우스 커서를 상단에 가져가야 나타난다.

2016년 11월 8일 화요일

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

Xcode 의 유닛테스트 기능은 동기(Sync)코드 테스트에 최적화 되어있다. 당연하게도 비동기 루틴의 경우 해당 테스트 컨텍스트가 종료된 뒤에 비동기 결과가 들어오니 쉽게 판단할 수는 없을 것이다.

다행히도 Xcode 의 XCTest 모듈은 이런 비동기 콜(Asynchronous Call)에 대비하기 위한 약간의(?) 기능이 제공되고 있어서 소개해 본다.

2016년 10월 27일 목요일

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

macOS 10.12 시에라가 업데이트 된 후로 개발 중이던 맥 앱에서 DETECTED_MISSING_CONSTRAINTS 예외가 발생하는 상황을 겪었다. 물론 10.11 에서 개발할 당시에는 잘 돌아가던 앱이었는데 10.12 부터 이런 오류가 발생하기 시작했다.

다행인 점은 죽지는 않고 경고 수준으로 끝나는 오류였다는 점이다. 사람마다 느끼는 점은 다르겠지만, 나에겐 찝찝함을 남기는 메시지가 떴기에 그냥 넘길 수가 없었다.

2016년 9월 27일 화요일

2016년 9월 20일 화요일

Xcode 8 GM 으로 겪어보는 Swift 3 의 변화들 #2

Xcode 8이 드디어 베타 딱지를 떼고 GM 마크를 박고 올라왔다. 이제 기능 면에서 바뀔 일은 없을 것 같으니 마지막으로 마무리 하는 겸으로 무엇이 바뀌었는지에 대한 경험담을 이어서 적어본다.

이 글은 'Xcode 8 Beta 로 겪어보는 Swift 3 의 변화들' 글에서 정리한 내용을 제외하고 GM 버전에서 추가로 발견한 사항들을 정리한다.

이 글을 올리는 오늘 Xcode 8 이 정식 릴리즈 되었다는 것은 참 거시기하다

2016년 9월 13일 화요일

릴리즈 모드로 빌드한 앱이 죽는다

이 글은 튜토리얼이나 API소개글이 아니라 실제로 겪었던 일을 토로(?)하기 위한 글이다. 내용은 제목 처럼 릴리즈 모드로 빌드한 앱을 돌려보면 죽는다는 것이고 이를 해결하기 위해 거친 고난과 해결법에 대해 소개한다.

2016년 9월 6일 화요일

[Cocoa] 타이틀바는 없지만 툴바에 표준 버튼이 있는 윈도우 만들기

뭔가 제목이 좀 복잡한 감이 있는데, 영문으로 적으면 Unified Title and Toolbar 라는 형식의 윈도우를 만드는 방법에 대한 글이다. 내용 자체는 매우 간단한데 이번엔 영상으로 (콩글리쉬와 함께 -_-) 만들어봤다.

2016년 8월 9일 화요일

NSPopover Cheatsheet

NSPopover는 말풍선 모양의 팝업윈도우 컴포넌트이다. 미려한(?) UI를 구성하는데 필수적이기 때문에 정리해 본다.