Swift로 문맥을 인식하는 메뉴바 앱 'Conscio' 제작기 - Xcode 프로젝트 없이, 오프라인, 온디바이스 AI
요약
macOS 메뉴바 앱 'Conscio'를 개발하여 문맥 인식, 온디바이스 AI 키워드 추출, 지능형 알림 억제 기능을 구현했습니다. 이 과정에서 Xcode 없이도 macOS 앱 번들을 직접 만들고, Accessibility API와 Apple NaturalLanguage framework 같은 네이티브 프레임워크를 깊이 있게 다루는 경험을 공유합니다.
핵심 포인트
- Xcode 없이 Info.plist 수작업으로 .app 번들 생성 가능
- Accessibility API 사용 시 C 기반 반환값 처리의 어려움 극복
- Apple NaturalLanguage로 온디바이스 NLP 키워드 추출 구현
- macOS 앱 개발에 대한 고정관념을 깨는 과정 공유
※본 기사는 AI의 도움을 받아 작성되었으며, 인간이 내용을 확인하여 공개했습니다. 프로젝트 라이선스는 MIT이며 무료로 이용할 수 있습니다.
Mac으로 작업하다 보면 이런 순간이 없지 않으신가요?
- 에디터를 열어둔 채 '그 자료 어디였더라…'
- 검색을 위해 브라우저를 켜자 → 다른 탭에 빠져 집중력이 흐트러짐
- 알림이 울리고 돌아왔을 때 이미 10분이 지나가 있음
이런 '문맥이 끊기는' 시간을 조금이라도 줄이고 싶어서, **Conscio(콘시오)**라는 macOS 메뉴바 앱을 만들고 공개했습니다.
- 실시간 문맥 인식 — 2초마다 최전면 앱과 열려 있는 문서를 감지 (Accessibility API + NSWorkspace) -
- 온디바이스 AI 키워드 추출 — Apple NaturalLanguage framework가 작업 중인 문맥에서 중요한 단어를 뽑아 '지금 필요한 검색'을 제안합니다. 처리 과정은 모두 기기 내에서 이루어지며, 외부 전송은 없습니다. -
- 지능형 알림 억제 — 집중 모드 앱을 감지하는 동안에는 알림을 조용히 하고, 해제할 때 '억제된 건수'를 한 번에 1건으로만 알려줍니다.
- 디지털 습관 리포트 — 누적된 집중 시간, 문맥 전환 횟수, 앱별 사용 시간을 시각화합니다. 최근 7일간의 집중 시간을 Swift Charts 막대 그래프로 표시합니다.
개발 기간은 이 정도로 짧았고, 전체 코드는 GitHub에서 공개 중입니다(MIT).
Swift Package Manager로 swift build를 실행한 실행 파일은, 그대로는 알림 등이 작동하지 않고 구동도 불안정합니다. 원인은 번들(bundle)이 없기 때문입니다. 그래서 Info.plist 파일을 손으로 작성하여 정식 .app 번들을 디렉토리 구조만으로 직접 만들었습니다.
Conscio.app/
├── Contents/
│ ├── Info.plist ← 수작업 (LSUIElement=true로 Dock 숨김)
...
codesign --deep --sign -을 하면 임시적으로 로컬 배포도 가능합니다. 'Mac 앱 개발은 Xcode로 열어야 한다'는 고정관념이 깨진 것이 가장 큰 수확이었습니다.
AXUIElementCopyAttributeValue는 C 기반 API라 반환값 처리에 까다로운 부분이 있습니다. Optional의 이중 중첩이나 AnyObject의 캐스팅을 세심하게 풀어야 했고, 여기가 Swift에서 가장 'C 언어를 만지고 있다'는 느낌이었습니다. 권한은 AXIsProcessTrustedWithOptions로 프롬프트를 띄울 수 있습니다.
v1.1부터 구현한 온디바이스 NLP(자연어 처리)는 이 한 단계로 확실하게 안정화되었습니다.
let recognizer = NLLanguageRecognizer()
recognizer.processString(text)
let tagger = NLTagger(tagSchemes: [.lexicalClass])
...
언어를 명시적으로 설정하지 않으면 URL 플래그먼트 같은 짧은 문장에서는 품사 태깅이 불안정해집니다. 일본어는 2글자 명사도 의미를 가지기 때문에, 키워드의 최소 글자 수를 언어별로 나누어 처리합니다.
Accessibility만으로 title 속성은 가져올 수 있지만, URL을 가져오는 것은 Safari/Chrome이 AppleScript를 공개하고 있기 때문에 그쪽이 확실합니다.
tell application
- GitHub: https://github.com/Andy234-andy/conscio
- 다운로드: https://github.com/Andy234-andy/conscio/releases/latest
- 공식 사이트: https://andy234-andy.github.io/conscio/
필요 환경은 macOS 13+ / Apple Silicon입니다. 미서명 빌드(unsigned build)이므로 첫 실행 시에는 마우스 오른쪽 버튼 클릭 → '열기'를 부탁드립니다. 개선 아이디어 및 버그는 Issue에서 알려주시면 감사하겠습니다🙏
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기