实现 iOS 版插件
先实现 iOS 还是 Android 其实并无硬性规定——老实说,你也可以先写 Android 实现,再写 iOS,最后写 web 端。或者任意组合顺序。本教程只是恰巧选择先实现 iOS 版本。
你可能会倾向于先实现 web 端,因为它更接近插件的 API 定义。如果在 API 层面需要调整,在 web 层工作时更容易发现问题。
向 Capacitor 注册插件
前提条件: 继续之前请先熟悉 Capacitor 自定义 iOS 原生代码文档。
通过运行 npx cap open ios
在 Xcode 中打开 Capacitor 应用的 iOS 项目。右键点击 App 分组(位于 App 目标下),从上下文菜单中选择 New Group。将新分组命名为 plugins。接着在 plugins 下创建 ScreenOrientation 子分组。
完成后,你将得到路径 /App/App/plugins/ScreenOrientation/
。右键点击 ScreenOrientation 分组,选择 New File… 添加以下文件:
ScreenOrientation.swift
ScreenOrientationPlugin.swift
ScreenOrientationPlugin.m
如果 Xcode 提示创建桥接头文件,请点击 Create Bridging Header。
将以下代码复制到 ScreenOrientationPlugin.m
:
#import <Foundation/Foundation.h>
#import <Capacitor/Capacitor.h>
CAP_PLUGIN(ScreenOrientationPlugin, "ScreenOrientation",
CAP_PLUGIN_METHOD(orientation, CAPPluginReturnPromise);
CAP_PLUGIN_METHOD(lock, CAPPluginReturnPromise);
CAP_PLUGIN_METHOD(unlock, CAPPluginReturnPromise);
)
这些 Objective-C 宏将插件注册到 Capacitor,使 JavaScript 可以调用 ScreenOrientationPlugin
及其 方法。
将以下代码复制到 ScreenOrientationPlugin.swift
:
import Foundation
import Capacitor
@objc(ScreenOrientationPlugin)
public class ScreenOrientationPlugin: CAPPlugin {
@objc public func orientation(_ call: CAPPluginCall) {
call.resolve()
}
@objc public func lock(_ call: CAPPluginCall) {
call.resolve()
}
@objc public func unlock(_ call: CAPPluginCall) {
call.resolve();
}
}
注意 @objc
装饰器的使用,它们确保 Capacitor 在运行时能识别类及其方法。