릴리스 노트
iOS/macOS용 PlanetKit 7.0의 릴리스 노트입니다.
PlanetKit 7.0
릴리스 일자: 2026-04-24
로깅 경로 및 수준 설정 통합
PlanetKitInitialSettingBuilder의 로깅 및 경로 설정 API를 단순화했습니다.
- 분리되어 있던
withEnableKitLogKey,withSetKitBasePathKey,withSetKitLogFilePathKey메서드를withEnableLog(logOption:)및withSetPlanetKitSystemDirectory(path:)로 대체했습니다. - 새로운
PlanetKitLogOption클래스는 로깅 설정을 위해 로테이션 기능이 있는 크기 제한 로깅과 선택적으로 커스텀 파일 이름을 지정할 수 있는 크기 무제한 로깅, 두 가지 팩토리 메서드를 제공합니다.
API
변경
-
PlanetKitInitialSettingBuilderclass 1-to-1 callGroup call이전 버전 PlanetKit 7.0 func withEnableKitLogKey(level: PlanetKitLogLevel, enable: Bool, logSize: PlanetKitLogSizeLimit) -> PlanetKitInitialSettingBuilderfunc withEnableLog(logOption: PlanetKitLogOption) -> PlanetKitInitialSettingBuilderfunc withSetKitBasePathKey(path: String) throws -> PlanetKitInitialSettingBuilderfunc withSetPlanetKitSystemDirectory(path: String) throws -> PlanetKitInitialSettingBuilder
추가
PlanetKitLogOptionclass 1-to-1 callGroup calllet logDirectory: Stringlet logLevel: PlanetKitLogLevellet logFileName: String?static func withSizeLimitUnlimited(logDirectory: String, logFileName: String?, logLevel: PlanetKitLogLevel = .simple) -> PlanetKitLogOption?static func withSizeLimit(logDirectory: String, logLevel: PlanetKitLogLevel = .simple, logSizeLimit: PlanetKitLogSizeLimit = .large) -> PlanetKitLogOption?
삭제
-
PlanetKitInitialSettingBuilderclass 1-to-1 callGroup callfunc withSetKitLogFilePathKey(filePath: String) -> PlanetKitInitialSettingBuilder
-
PlanetKitLogLevelenum 1-to-1 callGroup callcase silent
-
PlanetKitLogSizeLimitenum 1-to-1 callGroup callcase unlimited
예제 코드
크기 제한이 있는 로깅 설정(로테이션 활성화 상태)
let logDirectory = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask).first!
.appendingPathComponent("PlanetKitLogs")
try! FileManager.default.createDirectory(at: logDirectory, withIntermediateDirectories: true)
let logOption = PlanetKitLogOption.withSizeLimit(
logDirectory: logDirectory.path,
logLevel: .simple,
logSizeLimit: .small
)
let settings = PlanetKitInitialSettingBuilder()
.withEnableLog(logOption: logOption!)
.build()
크기 제한이 없는 로깅 설정
let logOption = PlanetKitLogOption.withSizeLimitUnlimited(
logDirectory: logDirectory.path,
logFileName: "myapp.log",
logLevel: .vital
)
let settings = PlanetKitInitialSettingBuilder()
.withEnableLog(logOption: logOption!)
.build()
더 이상 사용되지 않는 API 키 인증 및 피어 비디오/화면 공유 요청 메서드 제거
더 이상 사용되지 않는 API 키 기반 인증과 레거시 피어 비디오 요청 메서드 및 피어 화면 공유 요청 메서드를 제거했습니다. 대신 액세스 토큰 기반 인증과 PlanetKitPeerControl의 메서드를 사용하세요.
API
삭제
-
PlanetKitCallParamclass 1-to-1 callvar APIKey: String?init(myUserId: PlanetKitUserId, peerUserId: PlanetKitUserId, delegate: PlanetKitCallDelegate, APIKey: String)
-
PlanetKitCallclass 1-to-1 calllet APIKey: String?
-
PlanetKitConferenceParamclass Group callvar APIKey: String?init(myUserId: PlanetKitUserId, roomId: String, roomServiceId: String, displayName: String?, delegate: PlanetKitConferenceDelegate, APIKey: String)
-
PlanetKitConferenceclass Group calllet APIKey: String?func requestPeerVideo(id: PlanetKitUserId, maxResolution: PlanetKitVideoResolution, delegate: PlanetKitVideoOutputDelegate, subgroupName: String?, completion: @escaping (Bool)->Void)func requestPeerVideo(id: PlanetKitUserId, maxResolution: PlanetKitVideoResolution, delegate: PlanetKitVideoOutputDelegate, subgroupName: String?, resolution: @escaping (Bool, PlanetKitVideoResolution, PlanetKitVideoResolution, String)->Void)func stopPeerVideo(id: PlanetKitUserId, subgroupName: String?, completion: @escaping (Bool)->Void)func requestPeerScreenShare(peerId: PlanetKitUserId, subgroupName: String?, completion: @escaping (Bool)->Void)func stopPeerScreenShare(peerId: PlanetKitUserId, subgroupName: String?, completion: @escaping (Bool)->Void)
-
PlanetKitStartFailReasonenum 1-to-1 callGroup callcase invalidAPIKey
짧은 데이터 전송에 상세 실패 이유 추가
이제 sendShortData의 완료 콜백은 Bool 대신 PlanetKitSendShortDataFailReason을 반환해 잘못된 파라미터, 데이터 크기 제한, 처리율 제한, 타임아웃 등과 같은 상세한 실패 정보를 제공합니다.
API
변경
-
PlanetKitCallclass 1-to-1 call이전 버전 PlanetKit 7.0 func sendShortData(type: String, data: Data, completion: @escaping (Bool)->Void)func sendShortData(type: String, data: Data, completion: @escaping (PlanetKitSendShortDataFailReason)->Void) -
PlanetKitConferenceclass Group call이전 버전 PlanetKit 7.0 func sendShortData(peerId: PlanetKitUserId, type: String, data: Data, completion: @escaping (Bool)->Void)func sendShortData(peerId: PlanetKitUserId, type: String, data: Data, completion: @escaping (PlanetKitSendShortDataFailReason)->Void)func sendShortData(type: String, data: Data, completion: @escaping (Bool)->Void)func sendShortData(type: String, data: Data, completion: @escaping (PlanetKitSendShortDataFailReason)->Void)
추가
PlanetKitSendShortDataFailReasonenum 1-to-1 callGroup callcase none- 성공case invalidParameter- 잘못된 입력 파라미터(예: 빈 데이터)case tooLongDataType- 데이터 타입이 100바이트를 초과함case tooLongData- 데이터 페이로드가 800바이트를 초과함case tooFrequent- 처리율 제한 초과(최대 초당 1회)case timeout- 전송 작업 타임아웃 발생case internalError- 내부 오류
화면 공유 비활성화 이유 전달
이제 피어가 화면 공유를 중지하면 다른 참가자들에게 disabledReason을 전달합니다.
- 그룹 통화에서는
PlanetKitPeerControlDelegate.didUpdateScreenShare와PlanetKitConferenceScreenShareUpdateParam에disabledReason이 포함됩니다. - 1대1 통화에서는
PlanetKitCallDelegate.peerDidStopScreenShare의reason파라미터 타입을Int32에서NSNumber?로 변경했습니다. disabledReason의 유효 범위는 0~39입니다.
API
변경
-
PlanetKitPeerControlDelegateprotocol Group call이전 버전 PlanetKit 7.0 func didUpdateScreenShare(_ peerControl: PlanetKitPeerControl, subgroup: PlanetKitSubgroup, status: PlanetKitScreenShareStatus)func didUpdateScreenShare(_ peerControl: PlanetKitPeerControl, subgroup: PlanetKitSubgroup, status: PlanetKitScreenShareStatus, disabledReason: NSNumber?) -
PlanetKitCallDelegateprotocol 1-to-1 call이전 버전 PlanetKit 7.0 func peerDidStopScreenShare(_ call: PlanetKitCall, reason: Int32)func peerDidStopScreenShare(_ call: PlanetKitCall, reason: NSNumber?)
추가
PlanetKitConferenceScreenShareUpdateParamclass Group calllet disabledReason: NSNumber?
비디오 모디파이어에서 PlanetKitVideoBuffer 멤버 수정 제한
비디오 모디파이어 내에서 의도치 않은 수정이 발생하는 것을 막기 위해 sampleBuffer를 제외한 PlanetKitVideoBuffer의 모든 속성을 읽기 전용으로 변경했습니다.
sampleBuffer를 수정할 때는 다음 제약을 적용합니다. 이를 위반하면 프레임이 드롭되고didEncounterError(_:)를 통해 오류가 보고됩니다.- 원본 해상도를 초과하는 업스케일링은 허용하지 않습니다.
- 픽셀 포맷 변경은 허용하지 않습니다.
API
변경
-
PlanetKitVideoBufferclass 1-to-1 callGroup call이전 버전 PlanetKit 7.0 var timestamp: CMTimelet timestamp: CMTimevar rotation: PlanetKitVideoRotationlet rotation: PlanetKitVideoRotationvar position: PlanetKitCameraPositionlet position: PlanetKitCameraPositionvar sender: PlanetKitUserId?let sender: PlanetKitUserId?var source: PlanetKitVideoSourcelet source: PlanetKitVideoSource
추가
-
PlanetKitVideoModifierDelegateprotocol 1-to-1 callGroup callfunc didEncounterError(_ error: PlanetKitVideoModifierError)
-
PlanetKitVideoModifierErrorenum 1-to-1 callGroup callcase videoFrameRejectedByUpscalingcase videoFrameRejectedByFormatChange
예제 코드
비디오 모디파이어 오류 처리
class MyVideoModifier: PlanetKitVideoModifierDelegate {
func videoOutput(_ videoBuffer: PlanetKitVideoBuffer) {
guard let sampleBuffer = videoBuffer.sampleBuffer else { return }
// Apply filter with resolution <= original and same pixel format
videoBuffer.sampleBuffer = applyFilter(to: sampleBuffer)
}
func didEncounterError(_ error: PlanetKitVideoModifierError) {
switch error {
case .videoFrameRejectedByUpscaling:
print("Upscaling is not allowed.")
case .videoFrameRejectedByFormatChange:
print("Changing pixel format is not allowed.")
}
}
}
비디오 및 화면 공유 모디파이어 API 개선
PlanetKitCall과 PlanetKitConference에 중복으로 존재하던 비디오 모디파이어 및 리시버 속성을 제거했습니다. 이제 PlanetKitCameraManager.modifier를 대신 사용하세요.
PlanetKitCameraManager.previewModifier는 미리보기뿐 아니라 송신 비디오 스트림에도 영향을 준다는 점을 반영해modifier로 이름을 변경했습니다.PlanetKitVideoStream.modifier는PlanetKitCameraManager.modifier와 중복이므로 제거했습니다.- 화면 공유 수정은 새로 추가된
myScreenShareModifier속성를 사용하세요.
API
변경
-
PlanetKitCameraManagerclass 1-to-1 callGroup call이전 버전 PlanetKit 7.0 var previewModifier: PlanetKitVideoModifierDelegate?var modifier: PlanetKitVideoModifierDelegate?
추가
-
PlanetKitCallclass 1-to-1 callweak var myScreenShareModifier: PlanetKitVideoModifierDelegate?
-
PlanetKitConferenceclass Group callweak var myScreenShareModifier: PlanetKitVideoModifierDelegate?
삭제
-
PlanetKitCallclass 1-to-1 callweak var myVideoModifier: PlanetKitVideoModifierDelegate?
-
PlanetKitConferenceclass Group callweak var myVideoModifier: PlanetKitVideoModifierDelegate?weak var myVideoReceiver: PlanetKitVideoOutputDelegate?
-
PlanetKitVideoStreamclass 1-to-1 callGroup callweak var modifier: PlanetKitVideoModifierDelegate?
마이그레이션 가이드
비디오 모디파이어 설정
- 이전 버전
// Option A: via Call/Conference session
call.myVideoModifier = myModifier
// Option B: via VideoStream
call.myVideoStream.modifier = myModifier
// Option C: via CameraManager (preview only)
PlanetKitCameraManager.shared.previewModifier = myModifier
- 새 버전
// Use CameraManager.modifier for all video modification
PlanetKitCameraManager.shared.modifier = myModifier
화면 공유 모디파이어 설정
- 이전 버전
call.myScreenShareStream.modifier = myModifier
- 새 버전
call.myScreenShareModifier = myModifier
커스텀 오디오 디바이스 리셋 API 이름 변경
resetCustomMicToDefaultMic()와 resetCustomSpeakerToDefaultSpeaker()의 이름을 각각 clearCustomMic()와 clearCustomSpeaker()로 변경했습니다.
API
변경
-
PlanetKitAudioManagerclass 1-to-1 callGroup call이전 버전 PlanetKit 7.0 func resetCustomMicToDefaultMic()func clearCustomMic()func resetCustomSpeakerToDefaultSpeaker()func clearCustomSpeaker()
선호 샘플링 레이트를 프리셋으로 대체
PlanetKitAudioManager의 샘플링 레이트 속성 타입을 Float64에서 PlanetKitAudioSampleRate enum으로 변경했습니다.
PlanetKitAudioSampleRateenum은 지원되는 샘플링 레이트의 사전 정의된 집합을 제공합니다.- 설정된 샘플링 레이트는 선호값입니다. PlanetKit은 설정된 레이트로 오디오 세션을 열기 위해 최선을 다하지만, 필요 시 지원되는 가장 가까운 레이트로 대체할 수 있습니다.
API
변경
-
PlanetKitAudioManagerclass 1-to-1 callGroup call이전 버전 PlanetKit 7.0 var defaultMicSampleRate: Float64 { get set }var defaultMicSampleRate: PlanetKitAudioSampleRate { get set }var defaultSpeakerSampleRate: Float64 { get set }var defaultSpeakerSampleRate: PlanetKitAudioSampleRate { get set }
추가
PlanetKitAudioSampleRateenum 1-to-1 callGroup callcase sampleRate16k- 16,000 Hzcase sampleRate32k- 32,000 Hzcase sampleRate48k- 48,000 Hzvar floatValue: Float64
API 이름의 오타 수정
정확성과 네이밍 일관성을 높이기 위해 API 이름의 오타를 수정했습니다.
API
변경
-
PlanetKitAudioManagerclass 1-to-1 callGroup call이전 버전 PlanetKit 7.0 func startMicPreview(_ preview: PlanetKitAudioMicPreviewDelegate, volumeInternal: TimeInterval) -> Boolfunc startMicPreview(_ preview: PlanetKitAudioMicPreviewDelegate, volumeInterval: TimeInterval) -> Bool -
PlanetKitStatistics.Videoclass 1-to-1 callGroup call이전 버전 PlanetKit 7.0 let witdh: UInt16let width: UInt16 -
PlanetKitStatistics.PeerVideoclass Group call이전 버전 PlanetKit 7.0 let subGroupName: String?let subgroupName: String? -
PlanetKitStatistics.PeerScreenShareclass Group call이전 버전 PlanetKit 7.0 let subGroupName: String?let subgroupName: String?
(iOS) PlanetKitAutoGainControlMode에서 hardware 제거
iOS에서 PlanetKitAutoGainControlMode의 hardware 케이스를 제거했습니다.
API
삭제
- (iOS에만 해당)
PlanetKitAutoGainControlModeenum 1-to-1 callGroup callcase hardware
(macOS) PlanetKitAutoGainControlMode에 hardwareEchoTolerance 추가
macOS에서 PlanetKitAutoGainControlMode에 hardwareEchoTolerance 케이스를 추가했습니다. 이 모드는 통화 환경에 에코가 존재하더라도 스피커 음성 레벨을 기준으로 입력 음량을 조절합니다.
API
추가
- (macOS에만 해당)
PlanetKitAutoGainControlModeenum 1-to-1 callGroup callcase hardwareEchoTolerance