iOS uni-app原生插件开发
<div class="note-text md"><h2 dir="auto" data-sourcepos="17:1-17:32">iOS uni-app原生插件开发</h2>
<h3 dir="auto" data-sourcepos="19:1-19:16">开发准备</h3>
<ul dir="auto" data-sourcepos="21:1-35:231">
<li data-sourcepos="21:1-21:15">
<p data-sourcepos="21:3-21:15">OS X 10.14.0+</p>
</li>
<li data-sourcepos="22:1-22:13">
<p data-sourcepos="22:3-22:13">Xcode 11.0+</p>
</li>
<li data-sourcepos="23:1-35:231">
<p data-sourcepos="23:3-23:76">weex扩展API for iOS</p>
<ul data-sourcepos="25:4-35:231">
<li data-sourcepos="25:4-32:0">
<p data-sourcepos="25:6-25:24">Native 对外接口</p>
<ul data-sourcepos="27:6-32:0">
<li data-sourcepos="27:6-28:0">
<p data-sourcepos="27:8-27:58">注册 SDK 默认的 Module、Handler 和 Component</p>
</li>
<li data-sourcepos="29:6-30:0">
<p data-sourcepos="29:8-29:53">注册自定义 module、Handler 和 Component</p>
</li>
<li data-sourcepos="31:6-32:0">
<p data-sourcepos="31:8-31:25">重置 JSFramework</p>
</li>
</ul>
</li>
<li data-sourcepos="33:4-34:0">
<p data-sourcepos="33:6-33:51">Handler (对应于 Android 的 Adapter) 介绍</p>
</li>
<li data-sourcepos="35:5-35:231">
<p data-sourcepos="35:7-35:231">WXImgLoaderDefaultImpl 图片下载 handler。Weex 会把需要设置图片的 View 和 URL 透露出来,Native 端需要实现这个接口进行图片下载。WeexSDK kernel 本身没有提供图片下载的默认实现。</p>
</li>
</ul>
</li>
</ul>
<pre class="code highlight js-syntax-highlight plaintext white"><code><span id="LC1" class="line" lang="plaintext">@protocol WXImgLoaderProtocol <WXModuleProtocol>
<span id="LC2" class="line" lang="plaintext">/**
<span id="LC3" class="line" lang="plaintext">* @abstract Creates a image download handler with a given URL
<span id="LC4" class="line" lang="plaintext">*
<span id="LC5" class="line" lang="plaintext">* @param imageUrl The URL of the image to download
<span id="LC6" class="line" lang="plaintext">*
<span id="LC7" class="line" lang="plaintext">* @param imageFrameThe frame of the image you want to set
<span id="LC8" class="line" lang="plaintext">*
<span id="LC9" class="line" lang="plaintext">* @param options : The options to be used for this download
<span id="LC10" class="line" lang="plaintext">*
<span id="LC11" class="line" lang="plaintext">* @param completedBlock : A block called once the download is completed.
<span id="LC12" class="line" lang="plaintext">* image : the image which has been download to local.
<span id="LC13" class="line" lang="plaintext">* error : the error which has happened in download.
<span id="LC14" class="line" lang="plaintext">* finished : a Boolean value indicating whether download action has finished.
<span id="LC15" class="line" lang="plaintext">*/
<span id="LC16" class="line" lang="plaintext">- (id<WXImageOperationProtocol>)downloadImageWithURL:(NSString *)url imageFrame:(CGRect)imageFrame userInfo:(NSDictionary *)options completed:(void(^)(UIImage *image,NSError *error, BOOL finished))completedBlock;
<span id="LC17" class="line" lang="plaintext">@end
<span id="LC18" class="line" lang="plaintext"></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<ul dir="auto" data-sourcepos="57:4-58:0">
<li data-sourcepos="57:4-58:0">Native 和 JS 通信</li>
</ul>
<pre class="code highlight js-syntax-highlight plaintext white"><code>- 自定义通知事件 用于 native 自定义部分和 js 进行实践通知,比如传递下拉事件到 js,这个是在 component 基类的方法,可以直接使用</code></pre>
<pre class="code highlight js-syntax-highlight plaintext white"><code><span id="LC1" class="line" lang="plaintext">/**
<span id="LC2" class="line" lang="plaintext">* @abstract Fire an event to the component and tell Javascript which value has been changed.
<span id="LC3" class="line" lang="plaintext">* @param eventName 事件名称,可以在weex文件某个标签组件监听,命名规范为 onXXX
<span id="LC4" class="line" lang="plaintext">* @param params 数据
<span id="LC5" class="line" lang="plaintext">* @param domChanges 发生改变的数据
<span id="LC6" class="line" lang="plaintext">**/
<span id="LC7" class="line" lang="plaintext">- (void)fireEvent:(NSString *)eventName params:(NSDictionary *)params domChanges:(NSDictionary *)domChanges
<span id="LC8" class="line" lang="plaintext"></span></span></span></span></span></span></span></span></code></pre>
<ul dir="auto" data-sourcepos="72:4-73:0">
<li data-sourcepos="72:4-73:0">事件回调 多用于 Module 回调结果给 js,回调类型分为下面两种:</li>
</ul>
<pre class="code highlight js-syntax-highlight plaintext white"><code><span id="LC1" class="line" lang="plaintext">- WXModuleCallback 为了性能考虑,该回调只能回调通知js一次,之后会被释放,多用于一次结果
<span id="LC2" class="line" lang="plaintext">
<span id="LC3" class="line" lang="plaintext">- WXModuleKeepAliveCallback 该回调可以设置是否为多次回调类型,多次回调的场景如持续监听位置的变化,并返回给 js。</span></span></span></code></pre>
<pre class="code highlight js-syntax-highlight plaintext white"><code><span id="LC1" class="line" lang="plaintext">@implementation WXEchoModule
<span id="LC2" class="line" lang="plaintext">@synthesize weexInstance; // 让该module 获得当前instance
<span id="LC3" class="line" lang="plaintext">WX_EXPORT_METHOD(@selector(echo:))
<span id="LC4" class="line" lang="plaintext">- (void)echo:(NSString *)param callback:(WXModuleKeepAliveCallback)callback
<span id="LC5" class="line" lang="plaintext">{
<span id="LC6" class="line" lang="plaintext">callback(param,ture);// 此处设置true,该回调function 可以多次回调执行,可以写循环测试.
<span id="LC7" class="line" lang="plaintext">}</span></span></span></span></span></span></span></code></pre>
<ul dir="auto" data-sourcepos="88:4-89:0">
<li data-sourcepos="88:4-89:0">动态适配容器</li>
</ul>
<pre class="code highlight js-syntax-highlight plaintext white"><code>- WeexSDK 在 WXSDKInstance 类中提供了方法 setFrame(CGRect) 来改变容器的大小。如:在导航栏从有到无过程,需要 weexView 的变化, 可以在此时 native 调用该方法设置</code></pre>
<ul dir="auto" data-sourcepos="92:4-93:0">
<li data-sourcepos="92:4-93:0">降级使用</li>
</ul>
<pre class="code highlight js-syntax-highlight plaintext white"><code><span id="LC1" class="line" lang="plaintext">- Weex 处于发展阶段会增加一些新的特性和功能,但是这些新的特性和功能都必须升级 SDK 才能实现,对于没有升级的应用应该怎么处理呢?可以使用降级功能。
<span id="LC2" class="line" lang="plaintext">
<span id="LC3" class="line" lang="plaintext">- 所谓降级功能就是 Weex 无法运行的版本或者手机,可以用 Weex h5 来代替。
<span id="LC4" class="line" lang="plaintext">
<span id="LC5" class="line" lang="plaintext">- Native 端可以通过接口 WXSDKInstance 中的 onFailed 回调进行处理,如果是主动降级则返回的错误 domain 为 TemplateErrorType,Native 端可以跳转到对应的 H5 页面,或者用其他的方式提示用户当前环境不支持 Weex。</span></span></span></span></span></code></pre>
<ul dir="auto" data-sourcepos="100:1-109:0">
<li data-sourcepos="100:1-103:0">
<p data-sourcepos="100:3-100:90">最新版本的SDK包</p>
<ul data-sourcepos="102:4-103:0">
<li data-sourcepos="102:4-103:0">找到里面的HBuilder-uniPluginDemo文件夹,里面包含HBuilder-uniPlugin插件开发工程,后面会用到。</li>
</ul>
</li>
<li data-sourcepos="104:1-107:0">
<p data-sourcepos="104:3-104:74">js代码的开发工具HBuilderX</p>
<ul data-sourcepos="106:4-107:0">
<li data-sourcepos="106:4-107:0">下载哪个版本的HBuilderX需要注意下,保持和上条中提到的SDK包(在下载SDK包的下载界面中有版本相关的文字描述如下图),它提到的版本号一致。</li>
</ul>
</li>
<li data-sourcepos="108:1-109:0">
<p data-sourcepos="108:3-108:120">确定SDK包里的Xcode工程HBuilder-uniPlugin内是否引用了SDK包里的liblibWeex.a库和weex-main-jsfm.js文件</p>
</li>
</ul>
<h3 dir="auto" data-sourcepos="110:1-110:16">插件开发</h3>
<ul dir="auto" data-sourcepos="112:1-116:80">
<li data-sourcepos="112:1-116:80">
<p data-sourcepos="112:3-112:69">首先用Xcode创建静态.a库工程或(静态Framework工程)</p>
<ul data-sourcepos="114:4-116:80">
<li data-sourcepos="114:4-115:0">
<p data-sourcepos="114:6-114:67">iOS如何制作.a库</p>
</li>
<li data-sourcepos="116:4-116:80">
<p data-sourcepos="116:6-116:80">iOS如何制作静态Framework库</p>
</li>
</ul>
</li>
</ul>
</div><br><br>
来源:https://www.cnblogs.com/liuxiaokun/p/12686295.html
頁:
[1]