내용으로 건너뛰기

__CAPGO_KEEP_0__ 만들기

GitHub

이 가이드는 Xcode에서 프로젝트 설정부터 시작하여 CapgoWatchSDK를 통합하고 SwiftUI를 사용하여 기능적인 watch 앱을 빌드하는 방법을 안내합니다.

시작하기 전에 다음을 확인하세요:

  • Xcode 15 이상 (Mac 앱 스토어에서 다운로드)
  • macOS Sonoma 이상 (최신 watchOS SDK)
  • 기존 Capacitor iOS 프로젝트 (run npx cap add ios 만약 아직도)
  • Apple Developer 계정 (개발을 위해 무료 계정이 작동합니다)

이 가이드를 완료한 후 프로젝트는 이 구조를 가집니다:

  • 폴더ios/
    • 폴더App/
      • 폴더App/ (iOS 메인 앱)
      • App.xcodeproj
      • App.xcworkspace (프로젝트를 열기 위해 사용하세요)
      • Podfile
    • 디렉토리MyWatch/ (새로운 시계 앱)
      • 디렉토리MyWatch/ (시계 앱 소스)
        • MyWatchApp.swift
        • ContentView.swift
        • 폴더Assets.xcassets/
      • MyWatch.xcodeproj

1단계: Xcode에서 iOS 프로젝트를 열기

1단계: Xcode에서 iOS 프로젝트를 열기
  1. Xcode에서 Capacitor 프로젝트의 ios/App 폴더
  2. 열기 App.xcworkspace (이미 열려 있으면) .xcodeprojXcode에서 프로젝트를 열기
  3. Xcode에서 프로젝트를 열기까지 기다리세요

워크스페이스에는 프로젝트가 필요로 하는 CocoaPods 의존성을 포함하고 있습니다.

2단계: watchOS Target 추가하기
  1. 2단계: watchOS Target 추가하기 Xcode에서

  2. 파일 → 새 항목 → Target…

    • 템플릿 선택기에서: watchOS 선택 상단 탭
    • 선택
    • 클릭 다음
  3. 시계 앱을 구성하세요:

    • 제품 이름: MyWatch (또는 선호하는 이름)
    • : Apple 개발자 팀을 선택하세요
    • 회사 식별자: iOS 앱과 일치해야 합니다 (예시: app.capgo)
    • Bundle 식별자: 자동으로 생성됩니다 (예를 들어, app.capgo.myapp.watchkitapp)
    • 언어: Capgo 마케팅 웹사이트의 영역입니다. 역할: UI 레이블. 표시되는 곳: LanguageSelect.astro 컴포넌트 문서. 메시지 키 `language_label` (언어 레이블).
    • : Swift사용자 인터페이스
    • : SwiftUIWatch 앱 유형
    • : 기존 iOS 앱을 위한 앱이 아닌 앱 취소 알림 장면 포함
    • (필요한 경우 제외) 설치 복잡성 포함 (필요한 경우 제외)
  4. 클릭 완료

  5. ‘MyWatch’ 스키마 활성화할까요?'라는 메시지가 표시되면 클릭 활성화

3단계: 시계 앱 설정 구성

3단계: 시계 앱 설정 구성 섹션
  1. 프로젝트 탐색기(왼쪽 사이드바)에서 프로젝트를 선택하세요(상단 blue 아이콘)

  2. 시계 대상(예: ‘MyWatch’)을 선택하세요

  3. 설정 일반 탭:

    • 표시 이름: 앱 아이콘 아래에 표시되는 이름 (예: "My App")
    • Bundle 식별자: 끝에 .watchkitapp
    • 버전: iOS 앱 버전과 일치
    • 빌드context: 페이지/영역: 홈페이지 랜딩 제품 기능 섹션. 역할: 짧은 UI 레이블 또는 네비게이션 아이템. 보이는 곳: 컴포넌트 랜딩/자동화 기능. astro. 메시지 키 `landing_automation_build` (랜딩 자동화 빌드).
  4. : iOS 앱 빌드 번호와 일치 바로 가기 서명 및 기능

    • 활성화 자동으로 서명 관리
    • 선택하세요
    • 컨텍스트: Capgo 마케팅 웹사이트. 역할: 짧은 UI 레이블 또는 네비게이션 아이템. 보이는 곳: 페이지 sla.astro. 메시지 키 `team_plan` (팀 플랜).
  5. Xcode는 자동으로 배포 프로파일을 생성합니다. 설정:

    • 배포 정보최소 배포

제목: 4단계: CapgoWatchSDK를 Swift Package Manager를 통해 추가하세요 WatchConnector 통신을 위한 클래스.

  1. In Xcode에서 다음을 클릭하세요. File → Add Package Dependencies…

  2. 검색란에 입력하세요:

    https://github.com/Cap-go/capacitor-watch.git
  3. Enter를 누르고 Xcode가 패키지를 가져올 때까지 기다리세요.

  4. 패키지를 구성하세요:

    • 의존성 규칙: '8.0.0'까지의 주요 버전까지'와 함께
    • 클릭 패키지를 추가
  5. 추가할 제품을 선택하세요:

    • 중요: 오직 선택 CapgoWatchSDK
    • 시작하기 전에 watch 대상에 추가되어야 합니다 (예: "MyWatch"), iOS 앱이 아닌
    • 클릭 패키지 추가

5단계: 시계 앱 구현

제목: 5단계: 시계 앱 구현

시계 앱을 만들 차례입니다. code. 다음 파일을 생성한 후 자동으로 생성된 파일을 대체하세요.

5.1 앱 진입점 만들기

제목: 5.1 앱 진입점 만들기

수정 MyWatch/MyWatchApp.swift:

import SwiftUI
import CapgoWatchSDK
@main
struct MyWatchApp: App {
init() {
// Activate WatchConnectivity when app launches
WatchConnector.shared.activate()
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}

5.2 메인 뷰 만들기

제목: 5.2 메인 뷰 만들기

수정 MyWatch/ContentView.swift:

import SwiftUI
import CapgoWatchSDK
struct ContentView: View {
// Observe the WatchConnector for automatic UI updates
@ObservedObject var connector = WatchConnector.shared
// Local state
@State private var messageText = ""
@State private var statusMessage = "Ready"
var body: some View {
ScrollView {
VStack(spacing: 16) {
// Connection Status
ConnectionStatusView(connector: connector)
Divider()
// Message Input
TextField("Message", text: $messageText)
.textFieldStyle(.roundedBorder)
// Send Buttons
HStack {
Button("Send") {
sendMessage()
}
.disabled(!connector.isReachable || messageText.isEmpty)
Button("Request") {
sendWithReply()
}
.disabled(!connector.isReachable || messageText.isEmpty)
}
Divider()
// Status
Text(statusMessage)
.font(.caption)
.foregroundColor(.secondary)
// Last Received Message
if !connector.lastMessage.isEmpty {
VStack(alignment: .leading) {
Text("Last Message:")
.font(.caption)
.foregroundColor(.secondary)
Text(formatMessage(connector.lastMessage))
.font(.caption2)
}
.frame(maxWidth: .infinity, alignment: .leading)
}
}
.padding()
}
}
private func sendMessage() {
connector.sendMessage(["text": messageText, "timestamp": Date().timeIntervalSince1970])
statusMessage = "Message sent"
messageText = ""
}
private func sendWithReply() {
connector.sendMessage(["text": messageText, "needsReply": true]) { reply in
DispatchQueue.main.async {
statusMessage = "Reply: \(formatMessage(reply))"
}
}
messageText = ""
}
private func formatMessage(_ message: [String: Any]) -> String {
message.map { "\($0.key): \($0.value)" }.joined(separator: ", ")
}
}
// Separate view for connection status
struct ConnectionStatusView: View {
@ObservedObject var connector: WatchConnector
var body: some View {
HStack {
Circle()
.fill(connector.isReachable ? Color.green : Color.red)
.frame(width: 12, height: 12)
Text(connector.isReachable ? "Connected" : "Disconnected")
.font(.headline)
Spacer()
if connector.isActivated {
Image(systemName: "checkmark.circle.fill")
.foregroundColor(.green)
}
}
}
}
#Preview {
ContentView()
}

6단계: WatchConnectivity를 위한 iOS 앱 구성

Step 6: WatchConnectivity를 위한 iOS 앱 구성하기

iOS 앱도 WatchConnectivity 기능이 필요합니다.

  1. 프로젝트 탐색기에서 프로젝트를 선택하세요

  2. 프로젝트 iOS 앱 목표 시계 목표가 아닌 iOS 앱 목표를 선택하세요

  3. Signing & Capabilities 탭으로 이동하세요 기능 추가

  4. 기능 추가 WatchConnectivity 기능 추가

  5. Search for and add WatchConnectivity capability WatchConnectivity (사용 가능할 경우) 또는 자동으로 추가될 수 있습니다.

  6. Capacitor 플러그인은 iOS 측을 자동으로 처리하지만, Info.plist에 다음 항목이 포함되어 있어야 합니다.

    <key>WKCompanionAppBundleIdentifier</key>
    <string>app.capgo.myapp.watchkitapp</string>

7단계: 빌드 및 실행

7단계: 빌드 및 실행

심уля터에서 실행

심уля터에서 실행
  1. Xcode 창 상단의 스케쥬 선택기에서 시계 스케쥬를 선택하세요.

  2. 시계 시뮬레이터를 선택하세요:

    • 디바이스 선택기 옆의 클릭하여 디바이스를 선택하세요.
    • Apple Watch 시뮬레이터를 선택하세요 (예: "Apple Watch Series 9 (45mm)")
  3. iPhone과 Apple Watch를 동시에 실행하는 iOS 시뮬레이터를 클릭하세요. 실행 버튼 (▶️) 또는 Cmd + R

  4. iPhone과 Apple Watch를 동시에 실행하는 iOS 시뮬레이터가 실행됩니다.

실제 기기에서 실행

실제 기기에서 실행하는 섹션
  1. iPhone과 Apple Watch를 연결하기 위해 USB를 사용하세요.

  2. iPhone과 Apple Watch가 pair되어 있어야 합니다.

  3. 시계 스키마를 선택하세요.

  4. 실제 Apple Watch를 선택하세요.

  5. 클릭 실행

  6. 처음 사용: 양쪽 기기에서 컴퓨터에 신뢰를 할당해야 할 수 있습니다

8단계: 통신 테스트

8단계: 통신 테스트

iPhone (Capacitor)에서 시계로

iPhone (Capacitor)에서 시계로

Capacitor 앱에서:

import { CapgoWatch } from '@capgo/capacitor-watch';
// Check connection
const info = await CapgoWatch.getInfo();
console.log('Watch reachable:', info.isReachable);
// Send a message
if (info.isReachable) {
await CapgoWatch.sendMessage({
data: { action: 'update', value: 'Hello from iPhone!' }
});
}

Watch에서 iPhone으로

Watch에서 iPhone으로

Watch 앱은 WatchConnector:

// Send message (fire and forget)
WatchConnector.shared.sendMessage(["action": "buttonTapped"])
// Send message with reply
WatchConnector.shared.sendMessage(["request": "getData"]) { reply in
print("Got reply: \(reply)")
}

iPhone에서 메시지 처리

iPhone에서 메시지 처리
// Listen for messages from watch
await CapgoWatch.addListener('messageReceived', (event) => {
console.log('Message from watch:', event.message);
// { action: 'buttonTapped' }
});
// Handle messages that need a reply
await CapgoWatch.addListener('messageReceivedWithReply', async (event) => {
console.log('Request from watch:', event.message);
// Send reply back
await CapgoWatch.replyToMessage({
callbackId: event.callbackId,
data: { status: 'success', items: ['item1', 'item2'] }
});
});

더 많은 제어를 원한다면 implement WatchConnectorDelegate:

import SwiftUI
import CapgoWatchSDK
class WatchHandler: WatchConnectorDelegate {
func didReceiveMessage(_ message: [String: Any]) {
print("Received: \(message)")
// Handle incoming message
}
func didReceiveMessageWithReply(_ message: [String: Any],
replyHandler: @escaping ([String: Any]) -> Void) {
print("Received request: \(message)")
// Process and send reply
replyHandler(["status": "processed"])
}
func didReceiveApplicationContext(_ context: [String: Any]) {
print("Context updated: \(context)")
}
func didReceiveUserInfo(_ userInfo: [String: Any]) {
print("User info received: \(userInfo)")
}
func reachabilityDidChange(_ isReachable: Bool) {
print("Reachability changed: \(isReachable)")
}
func activationDidComplete(with state: WCSessionActivationState) {
print("Activation completed: \(state.rawValue)")
}
}
// In your app setup:
let handler = WatchHandler()
WatchConnector.shared.delegate = handler
WatchConnector.shared.activate()

시계 앱이 시계에 나타나지 않습니다.

Section titled “시계 앱이 시계에 나타나지 않습니다.”
  1. 시계 앱과 iOS 앱의 번들 ID가 올바르게 연결되어 있는지 확인하세요. (시계 앱의 번들 ID는 iOS 앱의 번들 ID +) .watchkitapp)
  2. 두 앱이 동일한 팀으로 서명되어 있는지 확인하세요.
  3. 물리적 장치에서: iPhone에서 시계 앱을 열고 → My Watch → 앱을 찾으세요 → toggle ON
  1. 두 앱이 WCSession이 활성화되어 있는지 확인하세요.
  2. 확인하세요. isReachable 메시지를 전송하기 전에
  3. 보장된 전달을 위해 사용하세요. transferUserInfo 대신 sendMessage
  4. 다른 기기에서 메시지를 보내기 전에 리스너가 등록되어 있는지 확인하세요

세션 활성화되지 않은 오류

세션 활성화되지 않은 오류
  1. 호출 WatchConnector.shared.activate() 앱 라이프 사이클의 초기 단계에 호출하세요
  2. iOS에서 플러그인은 자동으로 활성화되므로 플러그인을 임포트하세요
  3. iOS 대상에 WatchConnectivity 기능이 추가되어 있는지 확인하세요

CapgoWatchSDK와 관련된 빌드 오류

CapgoWatchSDK와 관련된 빌드 오류
  1. 패키지가 watch 대상에 추가되어 있는지 확인하세요 watch 대상에 패키지를 추가하세요, iOS 목표가 아닌
  2. 빌드 폴더 청소: Product → 빌드 폴더 청소 (Cmd + Shift + K)
  3. 패키지 캐시 초기화: File → Packages → 패키지 캐시 초기화

Simulator 문제

Simulator 문제 섹션
  1. 심уля터 초기화: Device → 모든 콘텐츠 및 설정 삭제
  2. iOS 및 watchOS 시뮬레이터가 호환되는 pairs를 확인하십시오
  3. 두 시뮬레이터가 모두 실행 중이어야 통신이 작동합니다

다음 단계

다음 단계

만약에 당신이 사용하고 있다면 Creating a watchOS 앱 native 플러그인 작업을 계획하려면, 그것을 연결하세요. Using @capgo/capacitor-watch native 기능을 사용하는 @capgo/capacitor-watch Capgo 플러그인 디렉토리 제품 워크플로우를 사용하는 @Capgo 플러그인 디렉토리 Capacitor 플러그인들에 의해 Capgo 제품 워크플로우를 사용하는 @Capacitor 플러그인들에 의해 Capgo 플러그인 추가 또는 업데이트 플러그인 추가 또는 업데이트 구현 세부 정보 Ionic Enterprise 플러그인 대체 제품 워크플로우를 사용하는 Ionic Enterprise 플러그인 대체