shareplay-activities은(는) 무엇을 하나요?
GroupActivities와 SharePlay를 사용하여 공유 실시간 경험을 구축합니다. iOS, macOS, tvOS 또는 visionOS에서 공유 미디어 재생, 협업 앱 기능, 동기화된 게임 상태, FaceTime/iMessage 통합 그룹 활동을 구현할 때 사용하세요.
개요
이 스킬은 GroupActivities 프레임워크와 SharePlay를 기반으로 한 기능을 구현하기 위한 템플릿과 도우미를 제공합니다. SwiftUI와 Apple의 공유 세션 API를 사용하여 실시간 협업 경험을 쉽게 구축할 수 있습니다.
주요 기능
- GroupActivities 세션 설정:
GroupActivity프로토콜을 준수하는 커스텀 활동 타입을 생성합니다. - SharePlay 통합: FaceTime 통화 중 미디어 공유 경험을 구현합니다.
- 상태 동기화: 모든 참가자 간의 실시간 데이터 동기화를 처리합니다.
- 메시지 전송: 참가자 간 커스텀 메시지를 보내고 받습니다.
- 세션 생명주기 관리: 세션 시작, 참가, 종료를 처리합니다.
지원 플랫폼
iOS 15.0+, macOS 12.0+, tvOS 15.0+, visionOS 1.0+
시작하기
1. Xcode 프로젝트 설정
Xcode 프로젝트에서 Capabilities 탭으로 이동하여 "Group Activities"를 활성화하세요.
2. 커스텀 활동 타입 정의
import GroupActivities
struct SharePlayActivity: GroupActivity {
// 활동 메타데이터
var metadata: GroupActivityMetadata {
var metadata = GroupActivityMetadata()
metadata.title = "함께 보기"
metadata.subtitle = "친구와 실시간으로 콘텐츠를 경험하세요"
metadata.type = .generic
return metadata
}
}
3. 세션 시작
let activity = SharePlayActivity()
switch await activity.prepareForActivation() {
case .activationPreferred:
// 사용자가 활성화를 선택함
let _ = await activity.activate()
case .activationDisabled:
// GroupActivities를 사용할 수 없음
break
case .cancelled:
break
default:
break
}
4. 세션 모니터링
Task {
for await session in SharePlayActivity.sessions() {
// 새 세션 처리
handleSession(session)
}
}
고급 사용법
커스텀 메시지 보내기
struct CustomMessage: Codable {
let action: String
let timestamp: Date
}
// 메시지 보내기
try? await session?.send(CustomMessage(action: "play", timestamp: Date()))
// 메시지 수신
for await (message, _) in session.messages(of: CustomMessage.self) {
// 메시지 처리
}
상태 동기화
// 동기화된 상태
@Published var sharedState: AppState = AppState()
// 상태 변경 시 모든 참가자에게 전파
session?.send(sharedState)
문제 해결
- 세션을 시작할 수 없음: Capabilities에서 Group Activities가 활성화되었는지 확인하세요.
- 참가자 연결 끊김: 네트워크 연결을 확인하고 FaceTime 세션이 활성화되었는지 확인하세요.
- 메시지 전송 실패:
Codable프로토콜을 준수하는 커스텀 타입을 사용하고 있는지 확인하세요.