이제 없으면 답답한 필수 앱 Fuwari와 최신 macOS간 문제를 해결했습니다.app
DINKIssTyle

Lv.1 DINKIssTyle (61.♡.73.102)

2025년 12월 17일 AM 10:32

조회 497 공감 0

물론 이 역시 안티그래비티가 해결해주었습니다.


이 앱은 Fuwari 라는 앱입니다.

https://github.com/kentya6/Fuwari


메뉴나 단축키를 통해 캡쳐하면 캡쳐한 위치에 항상위(Always on Top) 이미지를 띄워줍니다.

순간 순간 참고해야할 이미지나, 문서등을 바로 띄워 놓고 작업할 수 있는 매우 편리한 도구지요!


그런데 macOS의 스크린레코딩 보안이 강화된 시점부터 원래 위치가 아닌 곳에 이미지가 생성되는 불편함이 있었어요.


크게 불편하지는 않았지만.. 되게 거슬리는 문제였는데요..

뜨든!! 안티그래비티가 해결해주었습니다.



모든 작업이 완료되었습니다. 최종 결과물은 build/Fuwari.app에 준비되어 있으며, 코드 정리도 마쳤습니다.

수정 내역 및 해결 과정 요약
1. 문제 분석 (Root Cause Analysis)
증상: Fuwari 앱의 캡쳐 기능이 정상 작동하지 않고, 이미지가 화면의 엉뚱한 위치에 나타나는 문제가 발생했습니다.
원인:
초기: macOS 최신 버전(Sonoma/Sequoia)의 보안 정책 강화로 인해 screencapture CLI 명령어가 터미널 표준 출력(stdout)으로 좌표 정보를 더 이상 내보내지 않게 되었습니다. 이로 인해 앱이 캡쳐된 이미지의 위치를 파악할 수 없었습니다.
진행 중: 이를 해결하기 위해 CGWindowListCreateImage API를 통한 직접 캡쳐를 시도했으나, 좌표계 변환 문제와 메모리 관리(EXC_BAD_ACCESS) 이슈가 발생했습니다.
2. 해결 과정 (Step-by-Step Resolution)
자체 캡쳐 UI (SelectionOverlayWindow) 도입:
기존 시스템 인터랙티브 캡쳐(screencapture -i)에 의존하던 방식을 버리고, 앱 내에서 직접 전체 화면 오버레이 윈도우를 띄워 사용자가 영역을 선택할 수 있도록 구현했습니다.
ScreenshotManager.swift 내에 SelectionOverlayWindow 및 SelectionOverlayView 클래스를 추가하여 이 기능을 통합했습니다.
안정성 확보 (Crash Fix):
캡쳐 완료 후 윈도우가 닫히는 시점에서 델리게이트 호출 순서 문제로 인해 앱이 크래시되는 현상이 발견되었습니다.
mouseUp 및 keyDown 이벤트 핸들러에서 델리게이트 호출을 DispatchQueue.main.async로 감싸 비동기 처리함으로써, 모든 UI 이벤트 처리가 끝난 후 안전하게 윈도우를 닫도록 수정했습니다.
또한 isReleasedWhenClosed = false 설정을 통해 윈도우가 의도치 않게 메모리에서 해제되는 것을 방지했습니다.
좌표계 보정 (Coordinate System Correction):
macOS의 GUI 시스템(Cocoa)은 **좌측 하단(Bottom-Left)**을 원점으로 하지만, 캡쳐 시스템(Quartz/CoreGraphics) 및 screencapture 명령어는 **좌측 상단(Top-Left)**을 원점으로 합니다.
이로 인해 선택한 영역과 실제 캡쳐 위치가 상하 반전되거나 어긋나는 문제가 있었습니다.
캡쳐 영역(rect)을 screencapture 명령어로 넘길 때와, 결과 이미지를 화면에 띄우는 ViewController로 넘길 때 각각 올바른 좌표계로 변환하여 전달하도록 로직을 수정했습니다.
최종 캡쳐 방식 확정:
CGWindowListCreateImage API 사용 시 권한 문제 등이 발생할 소지가 있어, 가장 신뢰성 높은 시스템 Native 도구인 /usr/sbin/screencapture를 -R 옵션(영역 지정 캡쳐)과 함께 사용하는 방식으로 최종 구현했습니다.
3. 최종 상태
이제 앱은 자체 UI를 통해 부드럽게 영역을 선택할 수 있으며, 선택된 영역이 정확한 위치에 플로팅 윈도우로 뜹니다.
불필요한 디버그용 로그와 코드는 모두 정리되었습니다.
추가적인 질문이나 요청 사항이 있으시면 말씀해 주세요.

완벽하게 그 위치에 띄워줍니다. ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ 감동이에요~~


다행이도

MIT 라이센스임으로 다모앙에 올릴 수 있습니다!



This product includes software developed by Kengo Yokoyama

Licensed under the MIT License.

Copyright (c) 2021 Kengo Yokoyama



불행한것은 전 개발자 등록이 안되어 있어서 Gatekeeper가 작동한다는 점입니다.

xattr -cr fuwari.app 으로 게이트키퍼 우회하시는 불편함이 있겠습니다.


첨부파일

Fuwari.7z 6.4 MB

댓글 (0)

  • 아직 댓글이 없습니다. 첫 댓글을 작성해보세요!

댓글을 작성하려면 이 필요합니다.