脱机插件编写
提示
创建插件工程
- 选择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(){
}
}
打包插件
xcode编译
- 使用xcode顶部菜单的Product编译插件
- 点击
Build
会编译插件,点击Show Build Folder in Finder
,进入插件编译的目录,复制.framework文件出来即可
命令编译
- 已经写好的命令,将
helloworldplugin
替换为你的插件名称,编译完成后在你当前工程下
#!/bin/bash
WORK_DIR= `pwd`
echo `$WORK_DIR`
build_plugin_frame(){
rm -rf /tmp/derivedDataPath/*
xcodebuild build -project helloworldplugin.xcodeproj -scheme helloworldplugin -sdk iphoneos -configuration Release -derivedDataPath /tmp/derivedDataPath -allowProvisioningUpdates
cp -r /tmp/derivedDataPath/Build/Products/Release-iphoneos/helloworldplugin.framework ./
cd $WORK_DIR
}
build_plugin_frame
使用插件
- 写代码的时候使用
- 在EC iOS开发插件中 新建一个工程,选择打一个调试包,然后选择
新增三方插件
,选择framework文件 - 打包完成后,把ipa签名后,安装到手机,就可以进行调试写代码了
- 在EC iOS开发插件中 新建一个工程,选择打一个调试包,然后选择
- 发布加入插件
- 操作和上面写代码一样选择插件文件,发布的时候选择
普通版本打包或者企业版本打包
- 操作和上面写代码一样选择插件文件,发布的时候选择