iOS 平台实现
选择先实现 iOS 还是 Android 其实很随意——坦白说,你可以先写 Android 实现,然后 iOS,再然后是 Web 端。或者任意组合顺序。本教程恰好选择先实现 iOS 部分。
你可能想先实现 Web 端,因为它更接近插件的 API 定义。如果在 Web 层开发时发现需要对 API 进行调整,会更容易发现和修改。
向 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 在运行时能找到类和方法的必要标记。