TL;DR

  • Swift Chat AI Starter는 Swift Chat의 어시스턴트 스타일을 바탕으로 질문을 화면 위에 두고 Claude의 답변을 그 아래에 마크다운으로 스트리밍하는 오픈소스 iPhone 앱임.
  • Xcode 26에서 프로젝트를 실행하고 Anthropic API 키를 입력하면 텍스트 질문과 사진 첨부를 통해 Claude에 질의할 수 있음.
  • AssistantView.swift가 채팅 UI를 구성하고, Conversation.swift가 대화와 토큰 도착에 따른 답변 갱신을 처리함.
  • ClaudeRequest.swift가 사진을 포함한 Messages API 요청을 만들고, ClaudeClient.swift가 URLSession과 서버 전송 이벤트(SSE)로 답변을 스트리밍함.
  • 앱은 낮은 추론 노력 설정의 claude-opus-5-5를 요청하며 서버 측 대체 모델 사용을 선택하지만, 배포 시에는 API 키를 서버에 보관해야 함.

Swift Chat AI Starter

  • Swift Chat의 어시스턴트 스타일을 기반으로 Claude의 답변을 스트리밍하는 완전한 iPhone 채팅 앱임.
  • 질문이 화면 위쪽에 표시되고, 답변은 아래에서 마크다운으로 스트리밍되며 Siri와 ChatGPT의 응답 방식과 유사함.

실행 방법

  • SwiftChatAIStarter.xcodeproj를 Xcode 26에서 열고 iPhone 또는 시뮬레이터에서 실행함.
  • 표시되는 시트에 Anthropic API 키를 붙여 넣음.
  • 질문을 입력하고, 더하기 버튼으로 사진을 첨부하면 Claude가 사진을 확인함.

구성 요소

  • AssistantView.swift: .chatStyle(.assistant)와 몇 가지 수정자를 사용해 전체 UI를 구성함.
  • Conversation.swift: 대화 스레드를 보관하고 답변마다 항목 하나를 추가하며, 토큰이 도착할 때 답변 텍스트를 갱신함.
  • ClaudeRequest.swift: 사진을 포함해 대화 스레드로부터 Messages API 요청을 구성함.
  • ClaudeClient.swift: URLSession을 사용해 서버 전송 이벤트로 답변을 스트리밍함.
  • KeychainStore.swift: API 키를 키체인(Keychain)에 보관함.
  • UI는 대화 항목을 채팅 메시지로 표시하고, 대기 중 상태와 입력 기능을 설정하며, 전송된 텍스트와 미디어를 Conversation에 전달하는 구조임.

배포 전 확인 사항

  • 앱은 API 키를 api.anthropic.com으로 직접 전송함. 개인 iPhone에서 사용하는 경우에는 괜찮지만, 다른 사람이 설치하는 앱에서는 적절하지 않음.
  • API 앞에 소규모 서버를 두고 ClaudeClient가 해당 서버를 호출하도록 변경해 키를 서버에 보관해야 함.
  • 요청은 낮은 추론 노력 설정의 claude-opus-5-5를 사용함.
  • 요청은 서버 측 대체 모델을 선택하는 fallbacks: "default"를 사용함. 이에 따라 안전성 분류기가 거부한 요청은 실패하는 대신 다른 모델로 재시도됨.
  • 이러한 설정은 ClaudeRequest.swift에서 변경할 수 있음.

라이선스

  • 라이선스는 MIT임.
  • Swift Chat 자체도 모든 앱에서 무료로 사용할 수 있으며, 라이선스는 원문에서 안내하는 항목을 참조함.