Release notes
This page provides the release notes of PlanetKit 7.0 for iOS/macOS.
PlanetKit 7.0
Release date: 2026-04-24
Unify logging path and level configuration
The logging and path configuration APIs in PlanetKitInitialSettingBuilder have been simplified.
- The separate
withEnableKitLogKey,withSetKitBasePathKey, andwithSetKitLogFilePathKeymethods are replaced withwithEnableLog(logOption:)andwithSetPlanetKitSystemDirectory(path:). - A new
PlanetKitLogOptionclass provides two factory methods for log configuration: size-limited logging with rotation, and unlimited logging with an optional custom file name.
API
Changed
-
PlanetKitInitialSettingBuilderclass 1-to-1 callGroup callPrevious 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
Added
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?
Removed
-
PlanetKitInitialSettingBuilderclass 1-to-1 callGroup callfunc withSetKitLogFilePathKey(filePath: String) -> PlanetKitInitialSettingBuilder
-
PlanetKitLogLevelenum 1-to-1 callGroup callcase silent
-
PlanetKitLogSizeLimitenum 1-to-1 callGroup callcase unlimited
Example code
Configure logging with size limit (rotation enabled)
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()
Configure logging without size limit
let logOption = PlanetKitLogOption.withSizeLimitUnlimited(
logDirectory: logDirectory.path,
logFileName: "myapp.log",
logLevel: .vital
)
let settings = PlanetKitInitialSettingBuilder()
.withEnableLog(logOption: logOption!)
.build()
Remove deprecated API key authentication and peer video/screen share request methods
Removed deprecated API key-based authentication, legacy peer video request methods, and legacy peer screen share request methods. Use access token-based authentication and methods of PlanetKitPeerControl instead.
API
Removed
-
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
Add detailed failure reasons for sending short data
The completion callback of sendShortData now returns a PlanetKitSendShortDataFailReason instead of Bool, providing detailed failure information such as invalid parameters, data size limits, rate limiting, and timeout.
API
Changed
-
PlanetKitCallclass 1-to-1 callPrevious 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 callPrevious 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)
Added
PlanetKitSendShortDataFailReasonenum 1-to-1 callGroup callcase none- No failurecase invalidParameter- Invalid input parameters (e.g., empty data)case tooLongDataType- Data type exceeds 100 bytescase tooLongData- Data payload exceeds 800 bytescase tooFrequent- Rate limit exceeded (max once per second)case timeout- Sending operation timed outcase internalError- Internal error
Deliver a screen share disabled reason
When a peer stops screen share, the disabledReason is now delivered to the other participants.
- In group calls,
PlanetKitPeerControlDelegate.didUpdateScreenShareandPlanetKitConferenceScreenShareUpdateParamnow includedisabledReason. - In 1-to-1 calls, the
reasonparameter type ofPlanetKitCallDelegate.peerDidStopScreenSharehas been changed fromInt32toNSNumber?. - Valid range for
disabledReason: 0–39.
API
Changed
-
PlanetKitPeerControlDelegateprotocol Group callPrevious 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 callPrevious PlanetKit 7.0 func peerDidStopScreenShare(_ call: PlanetKitCall, reason: Int32)func peerDidStopScreenShare(_ call: PlanetKitCall, reason: NSNumber?)
Added
PlanetKitConferenceScreenShareUpdateParamclass Group calllet disabledReason: NSNumber?
Restrict PlanetKitVideoBuffer member modification in the video modifier
All properties of PlanetKitVideoBuffer except sampleBuffer are now read-only to prevent unintended modifications in the video modifier.
- When modifying
sampleBuffer, the following constraints are enforced. If violated, the frame is dropped and an error is reported viadidEncounterError(_:):- Upscaling beyond the original resolution is not allowed.
- Changing the pixel format is not allowed.
API
Changed
-
PlanetKitVideoBufferclass 1-to-1 callGroup callPrevious 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
Added
-
PlanetKitVideoModifierDelegateprotocol 1-to-1 callGroup callfunc didEncounterError(_ error: PlanetKitVideoModifierError)
-
PlanetKitVideoModifierErrorenum 1-to-1 callGroup callcase videoFrameRejectedByUpscalingcase videoFrameRejectedByFormatChange
Example code
Handling video modifier errors
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.")
}
}
}
Improve video and screen share modifier APIs
Removed duplicated video modifier and receiver properties from PlanetKitCall and PlanetKitConference. Use PlanetKitCameraManager.modifier instead.
PlanetKitCameraManager.previewModifierhas been renamed tomodifierto reflect that it affects the outgoing video stream, not just preview.PlanetKitVideoStream.modifierhas been removed to avoid duplication withPlanetKitCameraManager.modifier.- For screen share modification, use the newly added
myScreenShareModifierproperty.
API
Changed
-
PlanetKitCameraManagerclass 1-to-1 callGroup callPrevious PlanetKit 7.0 var previewModifier: PlanetKitVideoModifierDelegate?var modifier: PlanetKitVideoModifierDelegate?
Added
-
PlanetKitCallclass 1-to-1 callweak var myScreenShareModifier: PlanetKitVideoModifierDelegate?
-
PlanetKitConferenceclass Group callweak var myScreenShareModifier: PlanetKitVideoModifierDelegate?
Removed
-
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?
Migration guide
Set video modifier
- Previous version:
// 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
- New version:
// Use CameraManager.modifier for all video modification
PlanetKitCameraManager.shared.modifier = myModifier
Set screen share modifier
- Previous version:
call.myScreenShareStream.modifier = myModifier
- New version:
call.myScreenShareModifier = myModifier
Rename custom audio device reset APIs
Renamed resetCustomMicToDefaultMic() and resetCustomSpeakerToDefaultSpeaker() to clearCustomMic() and clearCustomSpeaker().
API
Changed
-
PlanetKitAudioManagerclass 1-to-1 callGroup callPrevious PlanetKit 7.0 func resetCustomMicToDefaultMic()func clearCustomMic()func resetCustomSpeakerToDefaultSpeaker()func clearCustomSpeaker()
Replace preferred sample rate with presets
The type of sample rate properties in PlanetKitAudioManager has been changed from Float64 to the PlanetKitAudioSampleRate enum.
- The
PlanetKitAudioSampleRateenum provides a predefined set of supported sample rates. - The configured sample rate is a preferred value. PlanetKit will make a best effort to open the audio session at the configured rate, but may fall back to the nearest supported rate.
API
Changed
-
PlanetKitAudioManagerclass 1-to-1 callGroup callPrevious PlanetKit 7.0 var defaultMicSampleRate: Float64 { get set }var defaultMicSampleRate: PlanetKitAudioSampleRate { get set }var defaultSpeakerSampleRate: Float64 { get set }var defaultSpeakerSampleRate: PlanetKitAudioSampleRate { get set }
Added
PlanetKitAudioSampleRateenum 1-to-1 callGroup callcase sampleRate16k- 16,000 Hzcase sampleRate32k- 32,000 Hzcase sampleRate48k- 48,000 Hzvar floatValue: Float64
Correct typos in API names
Fixed typos in API names for correctness and naming consistency.
API
Changed
-
PlanetKitAudioManagerclass 1-to-1 callGroup callPrevious PlanetKit 7.0 func startMicPreview(_ preview: PlanetKitAudioMicPreviewDelegate, volumeInternal: TimeInterval) -> Boolfunc startMicPreview(_ preview: PlanetKitAudioMicPreviewDelegate, volumeInterval: TimeInterval) -> Bool -
PlanetKitStatistics.Videoclass 1-to-1 callGroup callPrevious PlanetKit 7.0 let witdh: UInt16let width: UInt16 -
PlanetKitStatistics.PeerVideoclass Group callPrevious PlanetKit 7.0 let subGroupName: String?let subgroupName: String? -
PlanetKitStatistics.PeerScreenShareclass Group callPrevious PlanetKit 7.0 let subGroupName: String?let subgroupName: String?
(iOS) Remove hardware in PlanetKitAutoGainControlMode
On iOS, the hardware case of PlanetKitAutoGainControlMode has been removed.
API
Removed
- (iOS only)
PlanetKitAutoGainControlModeenum 1-to-1 callGroup callcase hardware
(macOS) Add hardwareEchoTolerance in PlanetKitAutoGainControlMode
Added hardwareEchoTolerance case to PlanetKitAutoGainControlMode on macOS. It adjusts the input gain based on the speaker's voice level, even when echo is present in the environment.
API
Added
- (macOS only)
PlanetKitAutoGainControlModeenum 1-to-1 callGroup callcase hardwareEchoTolerance