GestureClip (4) 복사가 안 될 때 뭐가 문제인지 구분하기
지난 글에서 오므리면 진짜 복사까지 되도록 만들었는데, 실제로 여러 번 써보니 “복사가 안 되는 것 같다”는 상황이 몇 가지 다른 이유로 겹쳐서 왔다. 원인을 하나씩 구분해서 정리했다.
어느 앱이 진짜 앞에 있었는지 확인하기
모니터를 여러 개 쓰다 보니, 화면에 사진 앱이 보이고 있어도 실제로 키보드 입력을 받는 앱은 다를 수 있다는 걸 알게 됐다. 마지막으로 클릭한 게 GestureClipMac 창이었다면, 눈에는 사진 앱이 보여도 Cmd+C는 GestureClipMac 자신한테 간다.
그래서 복사 명령을 보내기 전에 지금 실제로 활성화된 앱이 뭔지부터 확인하도록 했다. GestureClipMac 자신이면 애초에 기다릴 필요도 없이 바로 알 수 있다.
1
2
3
4
5
6
7
// MPCSender.swift (맥)
let frontmostApp = NSWorkspace.shared.frontmostApplication
if frontmostApp?.bundleIdentifier == Bundle.main.bundleIdentifier {
// 생략
lastResult = "GestureClipMac 창이 활성화돼 있어서 복사할 대상이 없습니다..."
return
}
다른 앱이 맞는데도 복사가 확인되지 않으면, 이번엔 그 앱 이름을 그대로 메시지에 찍는다. “복사가 안 됨”이라는 뭉뚱그린 메시지 대신 “사진에서 복사가 확인되지 않았습니다”처럼 나오니, 포커스 문제인지 다른 문제인지 바로 구분이 된다. 이미지는 텍스트보다 클립보드에 쓰는 데 시간이 더 걸릴 수 있어서 기다리는 시간도 0.4초에서 1.5초로 늘렸다.
재빌드할 때마다 권한이 풀리는 이유
Team을 고정해뒀는데도, 코드를 고쳐서 다시 빌드할 때마다 손쉬운 사용 권한을 다시 물어봤다. macOS는 이 권한을 앱의 코드 서명 단위로 신뢰하는데, 지금처럼 정식 배포용이 아니라 개발용으로 서명한 상태에서는 코드를 조금만 바꿔서 다시 빌드해도 서명 값이 미묘하게 달라진다. 그러니 macOS 입장에서는 매번 “새 앱”이 나타나는 셈이라, 권한이 무효화된다.
이건 앱 코드로 고칠 수 있는 부분이 아니고, 활발히 개발하는 동안에는 감수해야 하는 부분이다. 정식으로 서명해서 배포하면 서명 값이 고정되니 이런 일이 없어진다.
사진 앱은 마우스 클릭보다 화살표 키를 더 잘 알아듣는다
사진 앱에서 테스트하다가, 마우스로 사진을 클릭했을 때보다 화살표 키로 사진을 넘겼을 때 복사가 훨씬 잘 되는 걸 발견했다. CGEvent로 보내는 Cmd+C는 실제 키보드 입력과 똑같이 시스템에 들어가기 때문에, 이건 우리 코드 문제가 아니라 사진 앱 자체의 특성으로 보인다. 마우스로 클릭하는 것과 화살표 키로 옮기는 게 사진 앱 내부적으로는 “보고 있는 상태”와 “복사 대상으로 잡힌 상태”가 서로 다르게 처리되는 모양이다. 그래서 사진 앱에서 쓸 때는 화살표 키로 넘긴 다음 오므리는 쪽이 더 잘 된다.