diff --git a/docs/plugins/creating-plugins/ios-guide.md b/docs/plugins/creating-plugins/ios-guide.md index 195fd218e..6fb2c2300 100644 --- a/docs/plugins/creating-plugins/ios-guide.md +++ b/docs/plugins/creating-plugins/ios-guide.md @@ -147,6 +147,12 @@ This makes the `echo` method available to the Capacitor web runtime, indicating To add more methods to your plugin, create them in the `.swift` plugin class with the `@objc` before the `func` keyword and add a new `CAPPluginMethod` entry in the `pluginMethods` array. +Capacitor currently exposes three `returnType` values in [`JSExport.swift`](https://github.com/ionic-team/capacitor/blob/main/ios/Capacitor/Capacitor/JSExport.swift) that control how the generated JavaScript proxies interact with native code: + +- `CAPPluginReturnNone`: Use for calls that don't return a value. The generated JS still returns a `Promise` that resolves with no value (and can reject on error), and it uses `nativeCallback` immediately without expecting further data. +- `CAPPluginReturnPromise`: The default. The generated JS returns a `Promise` that you must resolve or reject once per call. +- `CAPPluginReturnCallback`: Use when you want to push multiple updates back to the web side (for example, streaming or progress updates). The generated JS uses a callback-style API and keeps the callback alive while your native plugin keeps the associated `CAPPluginCall` alive (for example by setting `call.keepAlive = true` or using the “saving calls” API) and explicitly finishes it when no more updates will be sent. + ## Permissions If your plugin has functionality on iOS that requires permissions from the end user, then you will need to implement the permissions pattern. diff --git a/versioned_docs/version-v7/plugins/creating-plugins/ios-guide.md b/versioned_docs/version-v7/plugins/creating-plugins/ios-guide.md index 195fd218e..866f39f14 100644 --- a/versioned_docs/version-v7/plugins/creating-plugins/ios-guide.md +++ b/versioned_docs/version-v7/plugins/creating-plugins/ios-guide.md @@ -147,6 +147,12 @@ This makes the `echo` method available to the Capacitor web runtime, indicating To add more methods to your plugin, create them in the `.swift` plugin class with the `@objc` before the `func` keyword and add a new `CAPPluginMethod` entry in the `pluginMethods` array. +Capacitor defines three `returnType` values in [`JSExport.swift`](https://github.com/ionic-team/capacitor/blob/main/ios/Capacitor/Capacitor/JSExport.swift), and each one changes how the generated JavaScript wrapper calls into native code: + +- `CAPPluginReturnNone`: methods that don't return a value to JavaScript and complete immediately (mapped to `Promise`), without keeping a long‑lived callback open. +- `CAPPluginReturnPromise`: the standard promise-based bridge where you resolve or reject once per invocation. +- `CAPPluginReturnCallback`: for streaming or repeated data. Use the associated `CAPPluginCall` (for example, with `call.keepAlive = true` and the saving-calls pattern) to keep the JavaScript callback alive until you are done and release the call. + ## Permissions If your plugin has functionality on iOS that requires permissions from the end user, then you will need to implement the permissions pattern.