본문으로 건너뛰기
Version: 7.0

릴리스 노트

iOS/macOS용 PlanetKit 7.0의 릴리스 노트입니다.

PlanetKit 7.0

릴리스 일자: 2026-04-24

로깅 경로 및 수준 설정 통합

PlanetKitInitialSettingBuilder의 로깅 및 경로 설정 API를 단순화했습니다.

  • 분리되어 있던 withEnableKitLogKey, withSetKitBasePathKey, withSetKitLogFilePathKey 메서드를 withEnableLog(logOption:)withSetPlanetKitSystemDirectory(path:)로 대체했습니다.
  • 새로운 PlanetKitLogOption 클래스는 로깅 설정을 위해 로테이션 기능이 있는 크기 제한 로깅과 선택적으로 커스텀 파일 이름을 지정할 수 있는 크기 무제한 로깅, 두 가지 팩토리 메서드를 제공합니다.

API

변경
  • PlanetKitInitialSettingBuilder class 1-to-1 callGroup call

    이전 버전PlanetKit 7.0
    func withEnableKitLogKey(level: PlanetKitLogLevel, enable: Bool, logSize: PlanetKitLogSizeLimit) -> PlanetKitInitialSettingBuilderfunc withEnableLog(logOption: PlanetKitLogOption) -> PlanetKitInitialSettingBuilder
    func withSetKitBasePathKey(path: String) throws -> PlanetKitInitialSettingBuilderfunc withSetPlanetKitSystemDirectory(path: String) throws -> PlanetKitInitialSettingBuilder
추가
  • PlanetKitLogOption class 1-to-1 callGroup call
    • let logDirectory: String
    • let logLevel: PlanetKitLogLevel
    • let 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?
삭제
  • PlanetKitInitialSettingBuilder class 1-to-1 callGroup call

    • func withSetKitLogFilePathKey(filePath: String) -> PlanetKitInitialSettingBuilder
  • PlanetKitLogLevel enum 1-to-1 callGroup call

    • case silent
  • PlanetKitLogSizeLimit enum 1-to-1 callGroup call

    • case 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

삭제
  • PlanetKitCallParam class 1-to-1 call

    • var APIKey: String?
    • init(myUserId: PlanetKitUserId, peerUserId: PlanetKitUserId, delegate: PlanetKitCallDelegate, APIKey: String)
  • PlanetKitCall class 1-to-1 call

    • let APIKey: String?
  • PlanetKitConferenceParam class Group call

    • var APIKey: String?
    • init(myUserId: PlanetKitUserId, roomId: String, roomServiceId: String, displayName: String?, delegate: PlanetKitConferenceDelegate, APIKey: String)
  • PlanetKitConference class Group call

    • let 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)
  • PlanetKitStartFailReason enum 1-to-1 callGroup call

    • case invalidAPIKey

짧은 데이터 전송에 상세 실패 이유 추가

이제 sendShortData의 완료 콜백은 Bool 대신 PlanetKitSendShortDataFailReason을 반환해 잘못된 파라미터, 데이터 크기 제한, 처리율 제한, 타임아웃 등과 같은 상세한 실패 정보를 제공합니다.

API

변경
  • PlanetKitCall class 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)
  • PlanetKitConference class 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)
추가
  • PlanetKitSendShortDataFailReason enum 1-to-1 callGroup call
    • case none - 성공
    • case invalidParameter - 잘못된 입력 파라미터(예: 빈 데이터)
    • case tooLongDataType - 데이터 타입이 100바이트를 초과함
    • case tooLongData - 데이터 페이로드가 800바이트를 초과함
    • case tooFrequent - 처리율 제한 초과(최대 초당 1회)
    • case timeout - 전송 작업 타임아웃 발생
    • case internalError - 내부 오류

화면 공유 비활성화 이유 전달

이제 피어가 화면 공유를 중지하면 다른 참가자들에게 disabledReason을 전달합니다.

  • 그룹 통화에서는 PlanetKitPeerControlDelegate.didUpdateScreenSharePlanetKitConferenceScreenShareUpdateParamdisabledReason이 포함됩니다.
  • 1대1 통화에서는 PlanetKitCallDelegate.peerDidStopScreenSharereason 파라미터 타입을 Int32에서 NSNumber?로 변경했습니다.
  • disabledReason의 유효 범위는 0~39입니다.

API

변경
  • PlanetKitPeerControlDelegate protocol Group call

    이전 버전PlanetKit 7.0
    func didUpdateScreenShare(_ peerControl: PlanetKitPeerControl, subgroup: PlanetKitSubgroup, status: PlanetKitScreenShareStatus)func didUpdateScreenShare(_ peerControl: PlanetKitPeerControl, subgroup: PlanetKitSubgroup, status: PlanetKitScreenShareStatus, disabledReason: NSNumber?)
  • PlanetKitCallDelegate protocol 1-to-1 call

    이전 버전PlanetKit 7.0
    func peerDidStopScreenShare(_ call: PlanetKitCall, reason: Int32)func peerDidStopScreenShare(_ call: PlanetKitCall, reason: NSNumber?)
추가
  • PlanetKitConferenceScreenShareUpdateParam class Group call
    • let disabledReason: NSNumber?

비디오 모디파이어에서 PlanetKitVideoBuffer 멤버 수정 제한

비디오 모디파이어 내에서 의도치 않은 수정이 발생하는 것을 막기 위해 sampleBuffer를 제외한 PlanetKitVideoBuffer의 모든 속성을 읽기 전용으로 변경했습니다.

  • sampleBuffer를 수정할 때는 다음 제약을 적용합니다. 이를 위반하면 프레임이 드롭되고 didEncounterError(_:)를 통해 오류가 보고됩니다.
    • 원본 해상도를 초과하는 업스케일링은 허용하지 않습니다.
    • 픽셀 포맷 변경은 허용하지 않습니다.

API

변경
  • PlanetKitVideoBuffer class 1-to-1 callGroup call

    이전 버전PlanetKit 7.0
    var timestamp: CMTimelet timestamp: CMTime
    var rotation: PlanetKitVideoRotationlet rotation: PlanetKitVideoRotation
    var position: PlanetKitCameraPositionlet position: PlanetKitCameraPosition
    var sender: PlanetKitUserId?let sender: PlanetKitUserId?
    var source: PlanetKitVideoSourcelet source: PlanetKitVideoSource
추가
  • PlanetKitVideoModifierDelegate protocol 1-to-1 callGroup call

    • func didEncounterError(_ error: PlanetKitVideoModifierError)
  • PlanetKitVideoModifierError enum 1-to-1 callGroup call

    • case videoFrameRejectedByUpscaling
    • case 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 개선

PlanetKitCallPlanetKitConference에 중복으로 존재하던 비디오 모디파이어 및 리시버 속성을 제거했습니다. 이제 PlanetKitCameraManager.modifier를 대신 사용하세요.

  • PlanetKitCameraManager.previewModifier는 미리보기뿐 아니라 송신 비디오 스트림에도 영향을 준다는 점을 반영해 modifier로 이름을 변경했습니다.
  • PlanetKitVideoStream.modifierPlanetKitCameraManager.modifier와 중복이므로 제거했습니다.
  • 화면 공유 수정은 새로 추가된 myScreenShareModifier 속성를 사용하세요.

API

변경
  • PlanetKitCameraManager class 1-to-1 callGroup call

    이전 버전PlanetKit 7.0
    var previewModifier: PlanetKitVideoModifierDelegate?var modifier: PlanetKitVideoModifierDelegate?
추가
  • PlanetKitCall class 1-to-1 call

    • weak var myScreenShareModifier: PlanetKitVideoModifierDelegate?
  • PlanetKitConference class Group call

    • weak var myScreenShareModifier: PlanetKitVideoModifierDelegate?
삭제
  • PlanetKitCall class 1-to-1 call

    • weak var myVideoModifier: PlanetKitVideoModifierDelegate?
  • PlanetKitConference class Group call

    • weak var myVideoModifier: PlanetKitVideoModifierDelegate?
    • weak var myVideoReceiver: PlanetKitVideoOutputDelegate?
  • PlanetKitVideoStream class 1-to-1 callGroup call

    • weak 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

변경
  • PlanetKitAudioManager class 1-to-1 callGroup call

    이전 버전PlanetKit 7.0
    func resetCustomMicToDefaultMic()func clearCustomMic()
    func resetCustomSpeakerToDefaultSpeaker()func clearCustomSpeaker()

선호 샘플링 레이트를 프리셋으로 대체

PlanetKitAudioManager의 샘플링 레이트 속성 타입을 Float64에서 PlanetKitAudioSampleRate enum으로 변경했습니다.

  • PlanetKitAudioSampleRate enum은 지원되는 샘플링 레이트의 사전 정의된 집합을 제공합니다.
  • 설정된 샘플링 레이트는 선호값입니다. PlanetKit은 설정된 레이트로 오디오 세션을 열기 위해 최선을 다하지만, 필요 시 지원되는 가장 가까운 레이트로 대체할 수 있습니다.

API

변경
  • PlanetKitAudioManager class 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 }
추가
  • PlanetKitAudioSampleRate enum 1-to-1 callGroup call
    • case sampleRate16k - 16,000 Hz
    • case sampleRate32k - 32,000 Hz
    • case sampleRate48k - 48,000 Hz
    • var floatValue: Float64

API 이름의 오타 수정

정확성과 네이밍 일관성을 높이기 위해 API 이름의 오타를 수정했습니다.

API

변경
  • PlanetKitAudioManager class 1-to-1 callGroup call

    이전 버전PlanetKit 7.0
    func startMicPreview(_ preview: PlanetKitAudioMicPreviewDelegate, volumeInternal: TimeInterval) -> Boolfunc startMicPreview(_ preview: PlanetKitAudioMicPreviewDelegate, volumeInterval: TimeInterval) -> Bool
  • PlanetKitStatistics.Video class 1-to-1 callGroup call

    이전 버전PlanetKit 7.0
    let witdh: UInt16let width: UInt16
  • PlanetKitStatistics.PeerVideo class Group call

    이전 버전PlanetKit 7.0
    let subGroupName: String?let subgroupName: String?
  • PlanetKitStatistics.PeerScreenShare class Group call

    이전 버전PlanetKit 7.0
    let subGroupName: String?let subgroupName: String?

(iOS) PlanetKitAutoGainControlMode에서 hardware 제거

iOS에서 PlanetKitAutoGainControlModehardware 케이스를 제거했습니다.

API

삭제
  • (iOS에만 해당) PlanetKitAutoGainControlMode enum 1-to-1 callGroup call
    • case hardware

(macOS) PlanetKitAutoGainControlModehardwareEchoTolerance 추가

macOS에서 PlanetKitAutoGainControlModehardwareEchoTolerance 케이스를 추가했습니다. 이 모드는 통화 환경에 에코가 존재하더라도 스피커 음성 레벨을 기준으로 입력 음량을 조절합니다.

API

추가
  • (macOS에만 해당) PlanetKitAutoGainControlMode enum 1-to-1 callGroup call
    • case hardwareEchoTolerance