Capacitor iOS 插件开发指南
为 iOS 构建 Capacitor 插件需要编写 Swift(或 Objective-C)代码来与苹果的 iOS SDK 进行交互。
快速开始
首先按照插件指南中的入门章节生成一个插件。
接着,在 Xcode 中打开 echo/ios/Plugin.xcworkspace
。然后导航到插件的 .swift 文件。
例如,对于插件类名为 Echo
的插件,你应该打开 EchoPlugin.swift
。
插件基础
iOS 上的 Capacitor 插件是一个继承自 CAPPlugin
的简单 Swift 类,包含一些可被 JavaScript 调用的导出方法。
简单示例
在生成的示例中,有一个简单的回声插件,其 echo
函数仅返回接收到的值。
这个示例展示了 Capacitor 插件的几个核心组件:从插件调用接收数据,并将数据返回给调用者:
EchoPlugin.swift
import Capacitor
@objc(EchoPlugin)
public class EchoPlugin: CAPPlugin {
@objc func echo(_ call: CAPPluginCall) {
let value = call.getString("value") ?? ""
call.resolve([
"value": value
])
}
}
访问调用数据
每个插件方法都会接收一个 CAPPluginCall
实例,其中包含客户端调用插件方法的所 有信息。
客户端可以发送任何可 JSON 序列化的数据,如数字、文本、布尔值、对象和数组。这些数据可以通过 options
字段访问,或使用便捷方法如 getString
或 getObject
。传递和访问这些值时需要注意一些特殊之处,详情可参考单独说明。
例如,以下是获取传递给方法的数据的方式:
@objc func storeContact(_ call: CAPPluginCall) {
let name = call.getString("yourName") ?? "default name"
let address = call.getObject("address") ?? [:]
let isAwesome = call.getBool("isAwesome") ?? false
guard let id = call.options["id"] as? String else {
call.reject("必须提供 id")
return
}
// ...
call.resolve()
}
注意 CAPPluginCall
实例上访问数据的各种方式,包 括如何使用 guard
要求选项。
返回数据
插件调用可以成功或失败。插件调用借鉴了 JavaScript Promise 的方法名:调用 resolve()
表示成功(可选择返回数据),使用 reject()
表示失败并附带错误信息。
CAPPluginCall
的 resolve()
方法接受一个字典并支持 JSON 可序列化的数据类型。以下是返回数据给客户端的示例:
call.resolve([
"added": true,
"info": [
"id": id
]
])
要表示失败或拒绝调用,调用 reject()
,传递错误字符串,可选择性地包含错误代码和 Error
实例:
call.reject(error.localizedDescription, nil, error)
插件加载时运行代码
有时,插件需要在首次加载时运行一些代码。例如,这是设置任何通知中心事件处理程序的好地方。
为此,提供 load()
方法的实现:
override public func load() {
}
导出到 Capacitor
为确保 Capacitor 能看到你的插件,插件生成器会做两件事:将你的 Swift 类导出到 Objective-C,并使用提供的 Capacitor Objective-C 宏进行注册。
要将 Swift 类导出到 Objective-C,插件生成器会在 Swift 类上方添加 @objc(EchoPlugin)
,并在 echo
方 法前添加 @objc
。
要注册插件,插件生成器会创建一个与你的插件对应的 .m
扩展文件(如 EchoPlugin.m
),并使用 CAP_PLUGIN
注册插件,使用 CAP_PLUGIN_METHOD
宏注册 echo
方法。
#import <Capacitor/Capacitor.h>
CAP_PLUGIN(EchoPlugin, "Echo",
CAP_PLUGIN_METHOD(echo, CAPPluginReturnPromise);
)
这使得 Echo
插件及其 echo
方法对 Capacitor Web 运行时可用,向 Capacitor 表明 echo
方法将返回一个 Promise。
要向插件添加更多方法,在 .swift
插件类中创建它们,在 func
关键字前添加 @objc
,并在 .m
文件中添加新的 CAP_PLUGIN_METHOD
条目。