脱机插件编写
提示
创建插件工程
- 选择Xcode,选择New - Project选项
- 选择iOS的Framework类型,然后选择Next
- 输入插件名称,不要用中文,录入这里使用hplugin,其他选项如图所示,Bundle Identifier改成自己想要的
- 工程结构如下:
加入框架
- 将下载的pluginhost.framework复制到工程目录下
- 在xcode中增加工程引用 pluginhost.framework
- 选择 + 号后,选择 Add Files,然后选择 pluginhost.framework
- 更改pluginhost.framework为 Do Not Embed
创建插件类
- 在xcode工程上,右键菜单,选择New File
- 选择 Swift File
- 命名为Plugin1,你可以使用其他名称,具体类内容如下
提示
到这里工程已经创建好了!
函数重载说明
// 这里用demo中的代码做注释解释
import Foundation
import pluginhost
import JavaScriptCore
import UIKit
// 继承 ECPlugin 代表接口是ECPlugin,作为反射的基础
// 继承 JSExport 代表可以这个类里面的函数方法都可以给js调用
public class Plugin1 : NSObject, ECPlugin,JSExport{
// 对应的是 pluginLoader.callMethodAny 函数
public func callMethodAny(_ methodName: String, _ data: Any) -> Any? {
print("callMethodAny --- ",data)
if(data is String){
print("any is string...")
}else if (data is UIImage){
print("any is ui image ...")
}
return ""
}
// 对应的是 pluginLoader.callMethodStr 函数
public func callMethodStr(_ methodName: String, _ args: String) -> String {
return " callMethodStr "+methodName + " "+args ;
}
// 对应的是 pluginLoader.callMethodData 函数
public func callMethodData(_ methodName: String, _ data: Data) -> String {
let a = String(data: data, encoding: .utf8)
return " callMethodData " + methodName + " "+(a ?? "");
}
// 对应的是 pluginLoader.callMethodReturnData 函数
public func callMethodReturnData(_ methodName: String, _ data: String) -> Data {
let a = "callMethodDataReturnData "+methodName;
return a.data(using: .utf8)!;
}
// 脚本结束的时候会调用这个函数进行 销毁资源
public func disposed() {
print("disposed plugin...")
}
// 这个是构造函数,实例化的时候使用
public required override init(){
}
}