callbundle_ios 1.1.1 copy "callbundle_ios: ^1.1.1" to clipboard
callbundle_ios: ^1.1.1 copied to clipboard

PlatformiOS

iOS implementation of the CallBundle plugin using CallKit. Handles PushKit, audio session, and missed call notifications inside the plugin.

1.1.1 #

  • Fix: declined is now emitted when the user rejects an incoming CallKit call (#5). CallKit reports both "Decline" and "End" as CXEndCallAction; the plugin now tracks unanswered incoming calls, so declining an unanswered call emits declined while hanging up an answered (or outgoing) call still emits ended. A programmatic CallBundle.endCall() continues to emit ended with isUserInitiated: false.
  • Fix: CallKit's speaker button now switches the audio output (#6). The audio category is applied when a call is reported/answered/started — before CallKit activates the session — instead of for the first time inside provider(_:didActivate:), which left the speaker button toggling its UI state without changing the route (most visible when answering from the lock screen after a cold start).
  • Fix: the call audio category no longer uses .defaultToSpeaker or .mixWithOthers. CallKit owns the output route while a call is up: .defaultToSpeaker makes "speaker off" resolve back to the speaker, and .mixWithOthers marks the session as non-primary so CallKit's port override does not stick. Outgoing calls therefore start on the receiver, like a normal phone call.
  • Fix: the speaker/receiver choice is re-applied when another audio client (a WebRTC engine initializing after a cold start, HMS/100ms, …) reconfigures AVAudioSession mid-call. External routes — headphones, Bluetooth, CarPlay — are never overridden.
  • Fix: a decline that arrives before Dart is ready is persisted (CallStore.savePendingDecline) and delivered on the next configure(), matching the Android cold-start behaviour.
  • Fix: when a call is reported twice (PushKit reports it, then Dart's showIncomingCall reports it again), the duplicate-report error no longer discards the UUID → callId mapping, so accept/decline events still resolve to the original callId and its extra.
  • Fix: added the missing import UIKit to CallKitController.swift (used by iconTemplateImageName).

1.1.0 #

  • Terminated-state VoIP calls — PKPushRegistry is now registered in register(with:) at plugin startup (before Dart configure()), so incoming calls are delivered when the app has been terminated, without any AppDelegate setup (#3). Thanks @RekanAnwar.

1.0.14 #

  • Caller avatar support — profile photos attached to missed call notifications via UNNotificationAttachment.
  • PushKitHandler reads callerAvatar / caller_avatar from VoIP push payload.
  • CallStore.addCall and addOrUpdateCall now accept and persist callerAvatar.
  • MissedCallNotificationManager downloads avatar image and attaches it to the notification.
  • Documentation updates — new Caller Avatar section, updated APNs payload format.

1.0.13 #

  • Version alignment — all CallBundle packages now share the same version number.
  • Documentation rewrite — VoIP certificate setup (PEM file), PushKit integration, CallKit architecture, audio session, and cold-start docs.

1.0.9 #

  • Fix: reportCallConnected() was ending the call immediately — removed destructive reportCall(with:endedAt:reason:.remoteEnded) that killed the CallKit audio session right after the user accepted.
  • Fix: CXEndCallAction always reported isUserInitiated: true — added programmaticEndUUIDs tracking so programmatic endCall() from Dart is correctly flagged as isUserInitiated: false, preventing duplicate end-call dispatch loops.
  • Fix: providerDidReset cleanup — now clears programmaticEndUUIDs tracking set.

1.0.8 #

  • Fix incoming call UI not showing when app is in killed state — CXProvider now created eagerly in init() instead of waiting for configure().
  • Store and thread extra metadata through CallStore for all call types.
  • sendCallEvent auto-resolves extra from CallStore when not explicitly provided.
  • savePendingAccept / consumePendingAccept now preserve extra for cold-start event delivery.

1.0.7 #

  • Version bump to align with pub.dev score fixes.

1.0.6 #

  • Comprehensive README with PushKit flow, CallKit integration, audio session, and cold-start details.

1.0.5 #

  • Version bump to align with Android cold-start fix.

1.0.4 #

  • Add checkPermissions native handler — returns permission status without prompting.
  • Fix requestPermissions to return NativeCallPermissions format instead of simple map.

1.0.3 #

  • Version bump to align with Android permission fix.

1.0.2 #

  • Fix handleType and hasVideo reading from nested ios params instead of top-level args.
  • Fix endCall and setCallConnected to accept plain string callId (matching Dart MethodChannel contract).
  • Determine video calls from callType field correctly.

1.0.1 #

  • Documentation updates and metadata cleanup.

1.0.0 #

  • Initial release of the CallBundle iOS implementation.
  • CallKit integration via CXProvider and CXCallController.
  • PushKit VoIP push handling inside the plugin (no AppDelegate code).
  • AudioSessionManager with .mixWithOthers to prevent HMS audio conflicts.
  • CallStore with thread-safe serial queue and cold-start persistence.
  • Missed call local notifications via UNUserNotificationCenter.
  • Deterministic UUID mapping for string-based callIds.
0
likes
150
points
66
downloads

Documentation

API reference

Publisher

verified publisherikolvi.com

Weekly Downloads

iOS implementation of the CallBundle plugin using CallKit. Handles PushKit, audio session, and missed call notifications inside the plugin.

Homepage
Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

callbundle_platform_interface, flutter

More

Packages that depend on callbundle_ios

Packages that implement callbundle_ios