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,使 ScreenOrientationPlugin 及其方法在 JavaScript 中可用。
将以下代码复制到 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 在运行时能够看到类及其方法所必需的。