Copilot for Xcode <img alt="Logo" src="https://raw.githubusercontent.com/intitni/CopilotForXcode/HEAD/AppIcon.png" align="right" height="50">
Screenshot
Copilot for Xcode는 GitHub Copilot, Codeium 및 ChatGPT 지원을 제공하는 Xcode Source Editor Extension입니다.
<a href="https://www.buymeacoffee.com/intitni" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
기능 (Features)
- 코드 제안 (Code Suggestions)
- 채팅 (Chat)
- 수정 (Modification)
- Chat 및 Modification을 확장하는 사용자 지정 명령어 (Custom Commands).
목차 (Table of Contents)
개발 지침은 Development.md를 확인하세요.
더 자세한 정보는 Wiki 페이지를 확인하세요.
필수 조건
제안 기능의 경우:
- GitHub Copilot 사용자:
- Copilot LSP 실행을 위한 Node 설치.
- 활성화된 GitHub Copilot 구독.
- Codeium 사용자:
- 기타 LLM 접근 권한.
채팅 및 프롬프트 투 코드 기능의 경우:
- 유효한 OpenAI API 키.
- 기타 LLM 접근 권한.
필요한 권한
- 폴더 접근(Folder Access)
- 접근성 API(Accessibility API)
키 로깅에 대해 우려하거나 바이너티를 신뢰할 수 없는 경우, 코드를 검토하고 직접 빌드하는 것을 권장합니다. 모든 우려 사항을 해결하려면 코드 내에서 CGEvent.tapCreate, AXObserver, AX___를 구체적으로 검색할 수 있습니다.
설치 및 설정
설치 과정이 다소 복잡합니다. 간략한 개요는 다음과 같습니다:
- 앱을 Applications 폴더에 설치하고 한 번 실행합니다.
- 소스 에디터 확장(source editor extension)을 활성화합니다.
- 확장 앱에 접근성 API 권한을 부여합니다.
- 호스트 앱에서 계정과 모델을 설정합니다.
- 선택적으로, 호스트 앱의 각 기능 설정을 업데이트하고 키 바인딩을 설정합니다.
설치
Homebrew를 통해 설치할 수 있습니다:
brew install --cask copilot-for-xcode
또는 최신 릴리스에서 Copilot for Xcode.app을 다운로드하여 수동으로 설치할 수 있습니다.
앱이 Applications 폴더 안에 있는지 확인해 주세요.
앱을 열면, 앱은 백그라운드에서 실제 작업을 수행하는 실행 에이전트(launch agent)를 생성합니다.
확장 활성화
System Settings.app에서 확장을 활성화하세요.
macOS 15
화면 왼쪽 상단에 있는 Apple 메뉴에서 시스템 설정을 클릭합니다. 일반으로 이동한 다음 로그인 항목 및 확장으로 이동합니다. Xcode Source Editor를 클릭하고 Copilot for Xcode를 체크합니다.
MacOS 14
화면 왼쪽 상단에 있는 Apple 메뉴에서 시스템 설정을 클릭합니다. 개인 정보 보호 및 보안으로 이동한 다음 아래쪽으로 스크롤하여 확장을 클릭합니다. Xcode Source Editor를 클릭하고 Copilot을 체크합니다.
이전 버전
macOS Monterey를 사용 중이라면, 전용 아이콘이 있는 시스템 환경설정.app의 확장 메뉴로 진입합니다.
앱에 권한 부여하기
앱과 명령을 처음 실행할 때 확장 프로그램이 필요한 권한을 요청합니다.
대안으로, 시스템 설정.app의 개인 정보 보호 및 보안 탭에서 필요한 권한을 수동으로 부여할 수 있습니다.
- 접근성 API(Accessibility API)에 대한 권한을 부여하려면
접근성을 클릭하고 CopilotForXcodeExtensionService.app를 목록으로 드래그합니다. 확장 프로그램 앱은 호스트 앱에서 Finder에서 확장 프로그램 앱 보기를 클릭하여 찾을 수 있습니다.
<img alt="Accessibility API" src="https://raw.githubusercontent.com/intitni/CopilotForXcode/HEAD/accessibility_api_permission.png" width="500px">
만약 이전에 권한을 부여했던 요청 알림이 나타나면, 목록에서 해당 권한을 제거한 후 다시 추가하여 필요한 권한을 재부여하십시오.
키 바인딩 설정하기
키 바인딩을 사용하면 확장 프로그램이 더 잘 작동합니다.
기본 키 바인딩을 명령에 추가하는 방법은 없는 것 같지만, Xcode 설정 > 키 바인딩에서 설정할 수 있습니다. 검색창에 copilot을 입력하여 목록을 필터링할 수 있습니다.
충돌이 발생하지 않아야 하는 권장 설정은
| Command | Key Binding |
|---|
| Accept Suggestions | ⌥} 또는 Tab |
| ... | |
본질적으로 모든 바인딩에 대해 ⌥⇧를 "접근(access)" 키 조합으로 사용합니다. | |
명령에 접근하는 또 다른 편리한 방법은 메뉴 표시줄에서 ⇧⌘/ 단축키를 사용하여 명령을 검색하는 것입니다.
전역 단축키 설정 (Setting Up Global Hotkeys)
현재 호스트 앱에서 General 탭 아래의 위젯을 표시/숨기기 위해 설정할 수 있는 전역 단축키는 하나뿐입니다.
이 단축키가 전역적으로 활성화(enabled globally)되지 않은 경우, 서비스 앱 또는 Xcode가 활성화되어 있을 때만 작동합니다.
제안 기능 설정 (Setting Up Suggestion Feature)
GitHub Copilot 설정 (Setting Up GitHub Copilot)
- 호스트 앱에서 "Service - GitHub Copilot"으로 이동하여 GitHub Copilot 계정 설정을 액세스합니다.
- 언어 서버를 설치하려면 "Install"을 클릭합니다.
- 선택적으로 Node의 경로를 설정합니다. 기본값은 단순히
node입니다. Copilot for Xcode.app은 다음 디렉토리에서 Node를 찾으려고 시도합니다: /opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin.
Node 설치 위치가 다른 경우, 터미널에서 which node을 실행하여 정확한 경로를 얻을 수 있습니다.
노드 버전 관리자(node version manager)를 사용하고 셰임 실행 파일(shim executable)을 제공하는 경우, 실제 실행 파일의 경로를 찾아야 합니다. 자세한 내용은 FAQ를 참조하십시오.
- "Sign In"을 클릭하면 GitHub에서 제공하는 인증 웹사이트로 리디렉션됩니다. 사용자 코드가 클립보드에 복사됩니다.
- 로그인 후 앱으로 돌아와 "Confirm Sign-in"을 클릭하여 프로세스를 완료합니다.
- "Feature - Suggestion"으로 이동하여 기능 제공업체(feature provider)를 "GitHub Copilot"으로 업데이트합니다.
설치된 언어 서버는 ~/Library/Application Support/com.intii.CopilotForXcode/GitHub Copilot/executable/에 위치합니다.
Codeium 설정 (Setting Up Codeium)
- 호스트 앱에서 "Service - Codeium"으로 이동하여 Codeium 계정 설정에 접속합니다.
- "Install"을 클릭하여 언어 서버를 설치합니다.
- "Sign In"을 클릭하면 codeium.com으로 리디렉션됩니다. 로그인 후 토큰이 제공되므로, 이 토큰을 복사하여 앱에 붙여넣어야 로그인 절차가 완료됩니다.
- "Feature - Suggestion"으로 이동하여 기능 제공자를 "Codeium"으로 업데이트합니다.
키는 키체인(keychain)에 저장됩니다. 헬퍼 앱이 해당 키에 처음 접근하려고 할 때, 키체인에 접근하기 위한 비밀번호를 입력하라는 메시지가 표시될 것입니다. 헬퍼 앱이 키에 접근하도록 "Always Allow"를 선택해 주세요.
설치된 언어 서버는 ~/Library/Application Support/com.intii.CopilotForXcode/Codeium/executable/ 경로에 위치합니다.
채팅 기능 설정하기 (Setting Up Chat Feature)
- 호스트 앱에서 "Service - Chat Model"로 이동합니다.
- OpenAI 모델을 업데이트하거나 필요한 경우 새로 만듭니다. 테스트 버튼을 사용하여 모델을 검증하세요.
- 선택적으로, 일부 채팅 기능에 필수적인 임베딩 모델(embedding model)을 "Service - Embedding Model"에서 설정합니다.
- "Feature - Chat"으로 이동하여 채팅/임베딩 기능 제공자를 방금 업데이트하거나 생성한 것으로 변경합니다.
CopilotForXcodeExtensionService.app 관리하기 (Managing CopilotForXcodeExtensionService.app)
이 앱은 Copilot for Xcode.app 또는 Xcode.app을 열 때마다 실행됩니다. 메뉴 바에 있는 촉수 모양의 항목으로 종료할 수 있습니다.
또한, 위의 두 앱이 닫힐 때 자동으로 종료되도록 설정할 수도 있습니다.
업데이트 (Update)
앱 내 업데이터를 사용하거나 최신 릴리스에서 수동으로 최신 버전을 다운로드하여 사용할 수 있습니다.
업데이트 후에는 확장이 다시 로드되도록 Copilot for Xcode.app을 한 번 열고 Xcode를 재시작해 주세요.
만약 일부 기능이 작동하지 않는 경우, 먼저 앱에 권한을 다시 부여해 보시기 바랍니다.
기능 (Feature)
gitignore에 있는 파일은 제안을 받지 못합니다. 채팅 기능과 프롬프트 기반 코드 작성 기능 모두 사용자가 수동으로 해당 코드를 선택하지 않는 한 접근할 수 없습니다.
제안 (Suggestion)
이 앱은 열려 있는 파일을 기반으로 실시간 코드 제안을 제공할 수 있습니다. 이 기능은 GitHub Copilot과 Codeium에 의해 구동됩니다.
이 기능은 두 가지 표시 모드를 제공합니다:
- 근처 텍스트 커서 (Nearby Text Cursor): 이 모드는 텍스트 커서의 위치를 기반으로 제안을 보여줍니다.
- 플로팅 위젯 (Floating Widget): 이 모드는 지표(indicator) 위젯 옆에 제안을 보여줍니다.
'근처 텍스트 커서' 모드를 사용할 때는 실시간 제안 디바운스(debounce)를 0.1로 설정하는 것이 좋습니다.
회사 프로젝트에서 작업하고 있으며 제안 기능이 트리거되는 것을 원하지 않는 경우, 전역적으로 비활성화한 다음 특정 프로젝트에 대해서만 활성화하도록 선택할 수 있습니다.
코드가 업데이트될 때마다 앱은 자동으로 제안을 가져오며, Escape 키를 눌러 이를 취소할 수 있습니다.
*: 도우미 앱이 시작되기 전에 파일이 이미 열려 있는 경우, 열린 파일 알림을 보내려면 해당 파일로 전환해야 합니다.
명령어 (Commands)
- 제안 가져오기 (Get Suggestions): 현재 커서 위치의 편집 파일을 위한 제안을 가져옵니다.
- 다음 제안 (Next Suggestion): 제안이 하나 이상 있는 경우, 다음 제안으로 전환합니다.
- 이전 제안 (Previous Suggestion): 제안이 하나 이상 있는 경우, 이전 제안으로 전환합니다.
- 제안 수락 (Accept Suggestion): 제안을 코드에 추가합니다.
- 제안 거부 (Reject Suggestion): 제안 주석을 제거합니다.
앱에서 호출하는 명령어:
- 실시간 제안 준비 (Prepare for Real-time Suggestions): Copilot for Xcode에 의해서만 호출됩니다. 제안이 성공적으로 가져와지면, Copilot for Xcode는 이 명령어를 실행하여 제안을 표시합니다.
- 제안 사전 가져오기 (Prefetch Suggestions): Copilot for Xcode에 의해서만 호출됩니다. 백그라운드에서 Copilot for Xcode는 실시간 제안을 미리 가져오기 위해 가끔 이 명령어를 실행합니다.
채팅 (Chat)
이 기능은 ChatGPT에 의해 구동됩니다. 사용하기 전에 OpenAI 계정을 설정했는지 확인하십시오.
채팅은 다음 정보를 알고 있습니다:
- 활성 에디터에서 선택된 코드.
- 파일의 상대 경로.
- 활성 에디터의 오류 및 경고 레이블.
- 텍스트 커서 위치.
현재 채팅 패널에는 두 개의 탭이 있습니다. 하나는 Xcode 전체에서 공유 가능하며, 다른 하나는 현재 파일에서만 사용 가능합니다.
채팅 패널은 단순히 드래그하여 분리할 수 있습니다. 한번 분리되면, Xcode가 비활성화되어도 채팅 패널은 계속 표시됩니다. 위젯에 다시 연결하려면, 인디케이터 위젯 옆에 있는 메시지 버블 버튼을 클릭하세요.
명령어 (Commands)
- 채팅 열기 (Open Chat): 채팅 탭을 엽니다.
키보드 단축키 (Keyboard Shortcuts)