DCloud_IOS_CLP
DCloud_IOS_CLP
  • 发布:2018-12-26 17:23
  • 更新:2019-07-04 11:39
  • 阅读:8207

iOS uni-app原生插件开发文档

分类:uni-app

iOS uni-app原生插件开发文档

一、文档概述

本文档主要介绍如何在uni-app中基于WeexSDK 开发iOS原生插件。
更多说明请参考uni-app原生插件开发指南

1.1、阅读对象

在您阅读此文档时,首先要知道uni-app支持weex插件,同时我们假定您已经具备了相应iOS应用开发经验,学习过 weex 知识并能够理解相关概念。此外,您也应该对HTML,JavaScript,CSS等有一定的了解,并且熟悉在JavaScript和Objective-C环境下的JSON格式数据操作等。

1.2、开发环境需求

  • OS X 10.13.5+
  • Xcode 9.3+
  • 确定开发工程内是否引用了离线sdk包里的liblibWeex.a库和weex-main-jsfm.js文件

1.3、下载开发js的开发工具HBuilderX(下载地址

1.4、前往最新iOS平台SDK下载 最新版本的工程包,找到里面的HBuilder-uniPluginDemo文件夹,里面包含HBuilder-Integrate插件开发工程及DCloud-RichAlert 插件示例。

二、 插件开发(以RichAlert插件为例)

2.1、 用Xcode创建静态.a库工程libWeexDCRichAlert 或(静态Framework工程)

iOS如何制作.a库
iOS如何制作静态Framework库

2.2、 在下载的工程包里打开HBuilder-Integrate工程,把刚创建的静态库工程引入到HBuilder-Integrate工程,如下图所示:

然后,修改iOS Deployment Target为8.0,如下图所示:

然后,在静态库工程libWeexDCRichAlert的 Header Search Paths 中添加引用如下图所示:

然后,在HBuilder-Integrate工程的Link Binary With Libraries中添加libWeexDCRichAlert.a库;然后,在Target Dependencies 中,添加插件工程的libWeexDCRichAlert的target,如下图所示:

2.3、 配置需要注册的插件,打开HBuilder-Integrate工程里的info.plist 文件 加入节点,需要严格按要求配置,如下图所示:

其中,hooksClass的值是类名,是给有些插件需要在app启动时做初始化或者获取系统事件用的,如果没有可以不填为空;
plugins下的每一项是weex的模块相关的配置信息,里面包含name(填weex模块类或组件类对应的js层用到的字符串,JS中通过该字符串来使用模块),class(填weex模块类或组件类名),type(填modulecomponent,一定不能配置错)。

2.4 开始具体代码开发,分三步:其中第二步看情况(有需要在app启动时初始化或者获取系统事件用的,可以有第2步,如果没有则跳过这步)

注意:因为 uni 框架机制,module 的 weexInstance 没有绑定 viewController,故 weexInstance.viewController 值为 nil,如果想通过 UIViewController 来跳转页面可使用下面的方法获取 UIViewController

// 获取栈顶 UIViewController  
- (UIViewController *)findVisibleVC {  
    UIViewController *visibleVc = nil;  
    UIWindow *visibleWindow = nil;  
    NSArray *windows = [[UIApplication sharedApplication] windows];  
    for (UIWindow *window in windows) {  
        if (!window.hidden && !visibleWindow) {  
            visibleWindow = window;  
        }  
        if ([UIWindow instancesRespondToSelector:@selector(rootViewController)]) {  
            if ([window rootViewController]) {  
                visibleVc = window.rootViewController;  
                break;  
            }  
        }  
    }  

    return visibleVc ?: [[UIApplication sharedApplication].delegate window].rootViewController;  
}  

第一步,在静态库libWeexDCRichAlert工程里,新建weex插件扩展模块类DCRichAlertModule,注意命名加前缀防止冲突(和weex官方插件扩展方式一样,链接


第二步,在静态库libWeexDCRichAlert工程里,新建DCRichAlertProxy类(注意命名加前缀防止冲突),继承 NSObject
遵守UniPluginProtocol协议 ,用来在app启动时初始化或者获取系统事件用的,这个类尽量不要有其他的过多代码逻辑。如下图:


第三步,下载HBuilderX开发工具(下载地址), 然后用HBuilderX开发工具 新建uni-app项目,在.nvue文件或.vue文件里面编写js代码如下, 注意:.vue暂时只能使用module,不能使用component,.nvue两者都可以使用。component的使用可参考weex写法。

示例

 引用方式  
const dcRichAlert = uni.requireNativePlugin('DCloud-RichAlert');  
 调用  
dcRichAlert.show({  
                    position: 'bottom',  
                    title: "提示信息",  
                    titleColor: '#FF0000',  
                    content: "<a href='https://uniapp.dcloud.io/' value='Hello uni-app'>uni-app</a> 是一个使用 Vue.js 开发跨平台应用的前端框架!\n免费的\n免费的\n免费的\n重要的事情说三遍",  
                    contentAlign: 'left',  
                    checkBox: {  
                        title: '不再提示',  
                        isSelected: true  
                    },  
                    buttons: [{  
                            title: '取消'  
                        },  
                        {  
                            title: '否'  
                        },  
                        {  
                            title: '确认',  
                            color: '#3F51B5'  
                        }  
                    ]  
                }, result => {  
                    switch (result.type) {  
                        case 'button':  
                            console.log("callback---button--" + result.index);  
                            break;  
                        case 'checkBox':  
                            console.log("callback---checkBox--" + result.isSelected);  
                            break;  
                        case 'a':  
                            console.log("callback---a--" + JSON.stringify(result));  
                            break;  
                        case 'backCancel':  
                            console.log("callback---backCancel--");  
                            break;  
                    }  
                });  

然后运行导出,得到编译后的代码,

然后把这些代码考到HBuilder-Integrate工程的Pandora目录下的www目录下

如下图,其中红矩形框起来的control.xml里的appid和代码的值及目录的值都是appid,是从HBuilderX开发工具中导出来的 资源包里的manifest.json的appid,四者appid需要一致

三、调试代码

然后就可以运行HBuilder-Integrate工程调试代码了,效果如下图所示:

如果调试过程中遇到问题,修改了.nvue或.vue的代码需要重新导出编译后的代码,拷贝到HBuilder-Integrate工程的Pandora目录下的www目录下,务必删除之前的app,再重新运行工程

四、生成插件包

此步骤应该在您插件所有接口封装完毕,并在调试工程中测试完成后,再进行以下操作,说明中均以示例插件libWeexDCRichAlert为例进行的操作。在实际操作时,需将所有出现的libWeexDCRichAlert替换成您自己的插件名字,而且在插件开发过程中给文件命名或类命名时提倡增加前缀,以避免和其它模块冲突
如示例中插件类Module的类名是“DCRichAlertModule” ,其中“DC”就是前缀(作者标识)!
Module扩展和Component扩展在引用中的name 需要前缀加入你自己的标识,防止插件冲突。
如示例中配置的name为“DCloud-RichAlert”,其中“DCloud”就是标识!

4.1 编译生成插件静态库.a文件

.a库必须是真机环境的,并且需要支持armv7和arm64架构,且Build Active Architecture Only设置为NO,您可以在终端用以下命令查看.a库支持的架构:
lipo -info libWeexDCRichAlert.a

4.2 编写package.json文件,按下列链接配置

点击查看详细配置说明
iOS平台 package.json 详细说明请查看这篇文档前面部分,会帮助您更好的理解如何配置 https://ask.dcloud.net.cn/article/35764

iOS 插件包 至少需要包含:package.json文件 和 ios文件夹(名称必须是小写的ios)里面包含 .a (.a库必须是lib开头命名,比如libWeexDCRichAlert.a)或framework。


4.3 生成.zip包

将DCloud-RichAlert文件夹打成zip包,zip包的名称为(DCloud-RichAlert.zip)然后准备提交插件市场,其中DCloud-RichAlert文件夹名和package.json 里id的值一致,zip包的名称是id值

五、如果想要共享给其他开发者,把这个插件提交插件市场

不提交插件市场,也可以在HBuilderX里提交云端打包。

欢迎有原生开发能力的朋友入群一起交流学习(入群请提供注册邮箱):
DCloud原生开发者群:
1群:256775471(已满)
2群:814228233

Android原生插件开发参考:https://ask.dcloud.net.cn/article/35416
更多uni-app原生插件文档参考:uni-app原生插件开发指南

3 关注 分享
DCloud_iOS_XHY zgh035@qq.com 君心

要回复文章请先登录注册

DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 756880346@qq.com:
有 在inc文件夹里,你是怎么确定没有这。h文件的???
2019-07-04 11:39
756880346@qq.com

756880346@qq.com

最新SDK 跑demo的时候 UniPluginProtocol.h 没有这个
2019-07-04 11:14
顺丰啊

顺丰啊

作者你好,我有个问题问下,为什么我插件在UIWindow下添加了全屏的UI视图,他显示出来的时候只有一半?
2019-05-30 17:35
顺丰啊

顺丰啊

回复 DCloud_IOS_CLP:
好的 谢谢
2019-05-16 11:26
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 顺丰啊:
你把这个库 libMiOauth.a 删除了是吗,libMiOauth.a这个库要不要,不要加删除
2019-05-16 11:12
顺丰啊

顺丰啊

回复 DCloud_IOS_CLP:
我把MiPassport库删了就运行不了了报错是我没有这个库,我现在不用这个库,还需要设置那里?
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_MiPassport", referenced from:
objc-class-ref in libMiOauth.a(PGMiOauth.o)
ld: symbol(s) not found for architecture arm64
2019-05-16 09:18
顺丰啊

顺丰啊

回复 DCloud_IOS_CLP:
我已经导入了,这个已经可以了,我现在 有个问题就是你项目中的第三方库从下载的demo中有个SDK的文件夹,里面的libs是自己手动导入的吗? 我现在因为整个项目缺少一个第三方库,我直接加入到SDK文件夹中,然后去Add 这样会影响我真实项目的使用吗?就是我写好的framework静态库,是不允许添加第三方库的,我只能通过手动导入到主工程中才能正常运行,这样写的插件你们平台支持吗? 那我SDK中需要的库是直接保存在DCRichAlert文件夹下一起打包?这样项目能识别到吗
2019-05-16 08:40
635835286@qq.com

635835286@qq.com

作者你好,插件已经开发好了,但是打包成ZIP给到uni-app使用,提示找不到插件,但是都对过了JSON感觉没错啊
2019-05-15 21:29
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 顺丰啊:
工程里有liblibWeex.a 这个库吗? 和WXModuleProtocol.h ?
2019-05-15 18:43
顺丰啊

顺丰啊

回复 DCloud_IOS_CLP:
#import <Foundation/Foundation.h>
#import "WXModuleProtocol.h"

@interface DCRichAlertModule : NSObject<WXModuleProtocol>



@end

你好,我这个位置WXModuleProtocol.h not find 是为什么?
2019-05-15 17:32
zqzn_lele

zqzn_lele

回复 DCloud_IOS_CLP:
你发的还是开发插件的文档呀,我得意思是用户是HBuilder,他不会Xcode。我自定义基座添加本地插件到HBuilder点击调不起来,配置方面有什么注意的吗
2019-05-15 11:51
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 zqzn_lele:
https://ask.dcloud.net.cn/article/35428
2019-05-15 11:17
顺丰啊

顺丰啊

回复 DCloud_IOS_CLP:
作者,我问个问题,如果我做的插件静态库是需要包含其他第三方静态库文件的,这样我们的demo是不是没法实现? 因为有些第三方静态库是没法直接添加到我们自己制作的静态库中,需要在demo中重新添加
2019-05-15 11:16
zqzn_lele

zqzn_lele

回复 DCloud_IOS_CLP:
没有报错,这个是开发插件的文档。我想问一下,如果我要提交插件市场,我该怎么模拟用户在HBuilderX中使用插件的情况,有没有参考文档
2019-05-15 11:11
635835286@qq.com

635835286@qq.com

我有一张png的图片包含在framework里面,允许的时候没有显示出来是为什么
2019-05-14 22:23
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 顺丰啊:
看环境对不对 plist文件配置了吗,有没有报错, weex的2个 js有吗
2019-05-14 21:20
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 zqzn_lele:
有报错吗,配置plist了吗
2019-05-14 21:18
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 Wujunjie0109@163.com:
你是不是缺liblibWeexDCRichAlert.a库啊
2019-05-14 21:17
顺丰啊

顺丰啊

回复 顺丰啊:
我做成静态Framework库插件之后,掉不起那个demo里的弹窗,DCRichAlertModule,DCRichAlertProxy两个里面的方法都不执行,你知道为什么吗?
2019-05-14 17:26
顺丰啊

顺丰啊

作者在吗? 我想知道下我不用.a用,静态Framework库做插件的步骤和上面一样吗? 有么有哪里不一样 或者需要注意的
2019-05-14 16:52
Wujunjie0109@163.com

Wujunjie0109@163.com

回复 DCloud_IOS_CLP:
或者您能告诉我,用你的demo怎么真机运行,因为我开发的sdk是需要真机环境下
2019-05-14 15:10
Wujunjie0109@163.com

Wujunjie0109@163.com

回复 DCloud_IOS_CLP:
作者,我如果要用demo在我手机真机运行的话,你知道报了这些错误是为什么吗

"_OBJC_CLASS_$_DssSDK_PlayWindow", referenced from:
objc-class-ref in liblibWeexDCRichAlert.a(CellPlayWindow.o)
"Json::Reader::Reader()", referenced from:
-[IvsDraw PosDataEvent_ParseIn:Out:size:returned:] in liblibWeexDCRichAlert.a(IvsDraw.o)
"Json::Value::Value(Json::ValueType)", referenced from:
-[IvsDraw PosDataEvent_ParseIn:Out:size:returned:] in liblibWeexDCRichAlert.a(IvsDraw.o)
"Json::Value::isUInt() const", referenced from:
-[IvsDraw PosDataEvent_ParseIn:Out:size:returned:] in liblibWeexDCRichAlert.a(IvsDraw.o)
"Json::Value::operator=(Json::Value const&)", referenced from:
-[IvsDraw PosDataEvent_ParseIn:Out:size:returned:] in liblibWeexDCRichAlert.a(IvsDraw.o)
"Json::Value::operator[](unsigned int)", referenced from:
-[IvsDraw PosDataEvent_ParseIn:Out:size:returned:] in liblibWeexDCRichAlert.a(IvsDraw.o)
"Json::Value::Value(Json::Value const&)", referenced from:
-[IvsDraw PosDataEvent_ParseIn:Out:size:returned:] in liblibWeexDCRichAlert.a(IvsDraw.o)
"Json::Reader::parse(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Json::Value&, bool)", referenced from:
-[IvsDraw PosDataEvent_ParseIn:Out:size:returned:] in liblibWeexDCRichAlert.a(IvsDraw.o)
"Json::Value::asString() const", referenced from:
-[IvsDraw PosDataEvent_ParseIn:Out:size:returned:] in liblibWeexDCRichAlert.a(IvsDraw.o)
"Json::Value::size() const", referenced from:
-[IvsDraw PosDataEvent_ParseIn:Out:size:returned:] in liblibWeexDCRichAlert.a(IvsDraw.o)
"Json::Value::operator[](char const*)", referenced from:
-[IvsDraw PosDataEvent_ParseIn:Out:size:returned:] in liblibWeexDCRichAlert.a(IvsDraw.o)
"Json::Value::type() const", referenced from:
-[IvsDraw PosDataEvent_ParseIn:Out:size:returned:] in liblibWeexDCRichAlert.a(IvsDraw.o)
"_OBJC_CLASS_$_DssSDK_AudioTalk", referenced from:
objc-class-ref in liblibWeexDCRichAlert.a(AudioTalkTalkerListener.o)
objc-class-ref in liblibWeexDCRichAlert.a(MobileMediaPlayManager.o)
"Json::Value::asUInt() const", referenced from:
-[IvsDraw PosDataEvent_ParseIn:Out:size:returned:] in liblibWeexDCRichAlert.a(IvsDraw.o)
"Json::Value::~Value()", referenced from:
-[IvsDraw PosDataEvent_ParseIn:Out:size:returned:] in liblibWeexDCRichAlert.a(IvsDraw.o)
2019-05-14 14:53
zqzn_lele

zqzn_lele

回复 DCloud_IOS_CLP:
就是uni-app原生插件,开发完提交插件市场的,现在按照iOS开发文档配置,调不起来js端约定的方法
2019-05-14 09:47
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 zqzn_lele:
你先仔细阅读文档,然后看看我们的示例是怎么弄的。 你到底是什么应用场景,是在自己的工程使用插件,还是什么? https://ask.dcloud.net.cn/article/35428
2019-05-13 20:57
zqzn_lele

zqzn_lele

我用自定义基座把原生模块打包成.a添加到nativeplugins目录下后,制作自定义基座提示插件[DCloud-ySKAuth(__UNI__23011E9)]不合法:该插件在nativePlugins目录下不存在
2019-05-13 17:40
zqzn_lele

zqzn_lele

按文档配置以后,没调用WX_EXPORT_METHOD声明的方法,具体是什么原因呢,js代码生成本地打包资源加入xcode运行界面正常显示,调用WX_EXPORT_METHOD声明方法的按钮没响应,别的按钮能正常跳转
2019-05-13 17:15
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 Wujunjie0109@163.com:
应该是没有关系,你可以看下demo里用到了什么库,可以把不需要的库删除,试试
2019-05-13 11:14
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 635835286@qq.com:
环境对不对,开发插件的环境全不全?
2019-05-13 11:02
Wujunjie0109@163.com

Wujunjie0109@163.com

回复 DCloud_IOS_CLP:
SDK用到OpenGL渲染播放出现的问题,跟你demo的线程有没有关系?
2019-05-13 10:32
635835286@qq.com

635835286@qq.com

我使用的是HBuilder-uniPluginDemo,目前确定4个地方配置appid都一致,点击进去我的uni-app项目,只出来底部tabBar和顶部Nav,主页面是空白的,请问是少了什么步骤吗
2019-05-12 12:03
635835286@qq.com

635835286@qq.com

作者你好,目前遇到的问题是,新增对应的文件夹以及www资源文件,运行后出现白屏界面,文档中的4个地方配置Key现在似乎只用3个地方?有一个api被弃用了。具体可能是什么问题导致的呢?
2019-05-12 11:17
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 Wujunjie0109@163.com:
这个方法是异步的
2019-05-11 11:43
Wujunjie0109@163.com

Wujunjie0109@163.com

回复 DCloud_IOS_CLP:
作者会不会是因为我的原生代码都是异步的,项目需要异步调用原生层,如果同步调用会阻塞? 我现在用的方法是你demo下的js代码 引用方式
const dcRichAlert = uni.requireNativePlugin('DCloud-RichAlert');
调用
dcRichAlert.show({
position: 'bottom',
title: "提示信息",
titleColor: '#FF0000',
content: "<a href='https://uniapp.dcloud.io/' value='Hello uni-app'>uni-app</a> 是一个使用 Vue.js 开发跨平台应用的前端框架!\n免费的\n免费的\n免费的\n重要的事情说三遍",
contentAlign: 'left',
checkBox: {
title: '不再提示',
isSelected: true
},
buttons: [{
title: '取消'
},
{
title: '否'
},
{
title: '确认',
color: '#3F51B5'
}
]
}, result => {
switch (result.type) {
case 'button':
console.log("callback---button--" + result.index);
break;
case 'checkBox':
console.log("callback---checkBox--" + result.isSelected);
break;
case 'a':
console.log("callback---a--" + JSON.stringify(result));
break;
case 'backCancel':
console.log("callback---backCancel--");
break;
}
});
这样会有问题吗
2019-05-11 11:10
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 Wujunjie0109@163.com:
这些警告没什么,weex的东西
2019-05-10 18:18
Wujunjie0109@163.com

Wujunjie0109@163.com

回复 DCloud_IOS_CLP:
Main Thread Checker: UI API called on a background thread: -[UIApplication statusBarFrame]
PID: 38892, TID: 560790, Thread name: com.taobao.weex.bridge, Queue name: com.apple.root.default-qos.overcommit, QoS: 0
Backtrace:
4 HBuilder 0x0000000110485a54 __23+[WXCoreBridge install]_block_invoke + 702
5 libdispatch.dylib 0x000000011b593602 _dispatch_client_callout + 8
6 libdispatch.dylib 0x000000011b5950c4 _dispatch_once_callout + 66
7 HBuilder 0x0000000110485794 +[WXCoreBridge install] + 34
8 HBuilder 0x0000000110547991 -[WXBridgeContext registerGlobalFunctions] + 143
9 HBuilder 0x0000000110547896 -[WXBridgeContext jsBridge] + 320
10 HBuilder 0x000000011054d6ba -[WXBridgeContext executeJsFramework:] + 96
11 HBuilder 0x0000000110629721 __38-[WXBridgeManager executeJsFramework:]_block_invoke + 74
12 HBuilder 0x000000011062853e +[WXBridgeManager _performBlockOnBridgeThread:] + 215
13 Foundation 0x0000000117e0fc7b __NSThreadPerformPerform + 330
14 CoreFoundation 0x000000011a2ae721 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
15 CoreFoundation 0x000000011a2adf93 __CFRunLoopDoSources0 + 243
16 CoreFoundation 0x000000011a2a863f __CFRunLoopRun + 1263
17 CoreFoundation 0x000000011a2a7e11 CFRunLoopRunSpecific + 625
18 Foundation 0x0000000117dfa322 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 277
19 HBuilder 0x0000000110628222 -[WXBridgeManager _runLoopThread] + 259
20 Foundation 0x0000000117e0f732 __NSThread__start__ + 1221
21 libsystem_pthread.dylib 0x000000011b98333d _pthread_body + 126
22 libsystem_pthread.dylib 0x000000011b9862a7 _pthread_start + 70
23 libsystem_pthread.dylib 0x000000011b982425 thread_start + 13
2019-05-10 16:55:47.264096+0800 HBuilder[38892:560790] [reports] Main Thread Checker: UI API called on a background thread: -[UIApplication statusBarFrame]
PID: 38892, TID: 560790, Thread name: com.taobao.weex.bridge, Queue name: com.apple.root.default-qos.overcommit, QoS: 0
Backtrace:
4 HBuilder 0x0000000110485a54 __23+[WXCoreBridge install]_block_invoke + 702
5 libdispatch.dylib 0x000000011b593602 _dispatch_client_callout + 8
6 libdispatch.dylib 0x000000011b5950c4 _dispatch_once_callout + 66
7 HBuilder 0x0000000110485794 +[WXCoreBridge install] + 34
8 HBuilder 0x0000000110547991 -[WXBridgeContext registerGlobalFunctions] + 143
9 HBuilder 0x0000000110547896 -[WXBridgeContext jsBridge] + 320
10 HBuilder 0x000000011054d6ba -[WXBridgeContext executeJsFramework:] + 96
11 HBuilder 0x0000000110629721 __38-[WXBridgeManager executeJsFramework:]_block_invoke + 74
12 HBuilder 0x000000011062853e +[WXBridgeManager _performBlockOnBridgeThread:] + 215
13 Foundation 0x0000000117e0fc7b __NSThreadPerformPerform + 330
14 CoreFoundation 0x000000011a2ae721 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
15 CoreFoundation 0x000000011a2adf93 __CFRunLoopDoSources0 + 243
16 CoreFoundation 0x000000011a2a863f __CFRunLoopRun + 1263
17 CoreFoundation 0x000000011a2a7e11 CFRunLoopRunSpecific + 625
18 Foundation 0x0000000117dfa322 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 277
19 HBuilder 0x0000000110628222 -[WXBridgeManager _runLoopThread] + 259
20 Foundation 0x0000000117e0f732 __NSThread__start__ + 1221
21 libsystem_pthread.dylib 0x000000011b98333d _pthread_body + 126
22 libsystem_pthread.dylib 0x000000011b9862a7 _pthread_start + 70
23 libsystem_pthread.dylib 0x000000011b982425 thread_start + 13
xxx set_core_side is runing and 0x60000290c7a0=================================================================
Main Thread Checker: UI API called on a background thread: -[UIApplication statusBarOrientation]
PID: 38892, TID: 560786, Thread name: (none), Queue name: io.dcloud.background (QOS: UNSPECIFIED), QoS: 0
Backtrace:
4 HBuilder 0x00000001106fb5aa +[PTDeviceDisplayInfo displayInfo] + 90
5 HBuilder 0x00000001106fbe7a -[PTDevice update] + 67
6 HBuilder 0x000000011070c5e9 -[PGDeviceStatusJSBuilder bulitJSCode] + 51
7 HBuilder 0x0000000110715160 __59-[PDRCoreAppResource load5PlusApiJsForLoader:withDelegate:]_block_invoke + 149
8 HBuilder 0x0000000110715ab5 __64-[PDRCoreAppResourceLoader loadResourceWithHandle:withDelegate:]_block_invoke + 71
9 HBuilder 0x00000001106b3aec __26+[PDRCore runInBackgroud:]_block_invoke + 25
10 Foundation 0x0000000117de3f9e __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 7
11 Foundation 0x0000000117de3ea5 -[NSBlockOperation main] + 68
12 Foundation 0x0000000117de0c14 -[__NSOperationInternal _start:] + 689
13 Foundation 0x0000000117de6c4b __NSOQSchedule_f + 227
14 libdispatch.dylib 0x000000011b592595 _dispatch_call_block_and_release + 12
15 libdispatch.dylib 0x000000011b593602 _dispatch_client_callout + 8
16 libdispatch.dylib 0x000000011b59654d _dispatch_continuation_pop + 565
17 libdispatch.dylib 0x000000011b595927 _dispatch_async_redirect_invoke + 859
18 libdispatch.dylib 0x000000011b5a400a _dispatch_root_queue_drain + 351
19 libdispatch.dylib 0x000000011b5a49af _dispatch_worker_thread2 + 130
20 libsystem_pthread.dylib 0x000000011b9826ee _pthread_wqthread + 619
21 libsystem_pthread.dylib 0x000000011b982415 start_wqthread + 13
2019-05-10 16:57
Wujunjie0109@163.com

Wujunjie0109@163.com

回复 DCloud_IOS_CLP:
作者我问下,你们项目一运行会跳出一大段线程警告是什么原因呢我能不能发截图给你?
2019-05-10 16:57
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 Wujunjie0109@163.com:
我们这个原生的插件开发,不支持weex的组件,.vue暂时只能使用module,不能使用component
2019-05-10 16:55
Wujunjie0109@163.com

Wujunjie0109@163.com

回复 DCloud_IOS_CLP:
我播放的是实时监控的视频,我整个SDK有列表进入详情,然后再播放实时视频,js调用的只是我进入的地址
2019-05-10 16:36
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 Wujunjie0109@163.com:
一般来说是会的
2019-05-10 16:30
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 Wujunjie0109@163.com:
你把你js调用播放的api 怎么写的发下
2019-05-10 16:26
Wujunjie0109@163.com

Wujunjie0109@163.com

回复 DCloud_IOS_CLP:
我如果在你这个demo下运行闪退了,是不是我在实际的项目中运行也是会闪退的?
2019-05-10 16:26
Wujunjie0109@163.com

Wujunjie0109@163.com

回复 DCloud_IOS_CLP:
我如果用自己新建的IOS项目导入我这个静态库,可以正常播放
2019-05-10 16:22
Wujunjie0109@163.com

Wujunjie0109@163.com

回复 DCloud_IOS_CLP:
一点击播放 就直接闪退了
2019-05-10 16:22
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 Wujunjie0109@163.com:
不会,你说的闪退是什么操作下闪退的,比如点击播放,还是进入到播放页面,还是全屏的时候?
2019-05-10 16:22
Wujunjie0109@163.com

Wujunjie0109@163.com

我想问下,你这个项目,他整个项目的线程有没有可能阻断我是怕播放的线程?
2019-05-10 16:16
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 Wujunjie0109@163.com:
有没有详细的报错信息
2019-05-10 16:15
Wujunjie0109@163.com

Wujunjie0109@163.com

我知道是线程问题、可是断点不到位置,
2019-05-10 16:10
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 Wujunjie0109@163.com:
Xcode工程里打全局断点也断不到位置吗?另外,仔细查看插件写法是否正确,同步和异步等等
2019-05-10 11:23
Wujunjie0109@163.com

Wujunjie0109@163.com

我做的静态库文件自己放在iOS项目下调用视频播放功能正常,可是植入你的原生插件方式视频播放就闪退了,还没有报错点,改如何解决呢
2019-05-10 10:23
2047185642@qq.com

2047185642@qq.com

你好,升级HBuilderX1.8版本后,在vue文件中导入原生插件(即添加const util = uni.requireNativePlugin('插件名称'))后会报错:[WARN] : Page[pages/xxx/xxx/.....] not found. May be caused by: 1. Forgot to add page route in pages.json. 2. Invoking Page() in async task. 该如何解决?多谢
2019-04-11 10:00
2047185642@qq.com

2047185642@qq.com

升级HBuilderX1.8版本后,在vue文件中导入原生插件(即添加const util = uni.requireNativePlugin('插件名称'))后会导致页面渲染失败,该如何解决?
2019-04-03 16:14
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 邹婉玉:
示例里有调用方法,用HBuilderX 随便建立一个uniapp的工程,如何用示例的方法就行
2019-04-02 17:15
邹婉玉

邹婉玉

请问最新的iOS sdk文件下(2019年3月5日发布),HBuilder-uniPluginDemo 这个工程内的www文件下文件,hbuilderX编译前的源码有么?
2019-04-02 13:59
aimei111

aimei111

回复 DCloud_IOS_CLP:
没有报错,不过后来新建了一个工程,重新导入了一遍插件就好了,可能是那个工程部分设置的问题
2019-04-01 09:20
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 aimei111:
module里方法不执行 有报什么错吗?
2019-03-30 12:11
aimei111

aimei111

回复 DCloud_IOS_CLP:
项目可以正常运行 不报错,起初我是onCreateUniPlugin这个方法都没执行,后来是缺少了liiblibweex.a这个文件,加进去就好了,现在就是 module里方法不执行,所以我猜想我是不是还缺少其他的文件
2019-03-29 13:05
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 aimei111:
onCreateUniPlugin 这个执行说明不了 module里的方法执行,没报错吗?
2019-03-29 11:41
aimei111

aimei111

回复 DCloud_IOS_CLP:
嗯 刚才检查了一遍 都有配置,因为我的这个方法onCreateUniPlugin已经执行了,现在就是Module.m文件里的方法不执行,是不是可能少了其他库的问题额?
2019-03-29 11:11
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 aimei111:
看文档plist文件配置对了吗? liiblibweex。a有吗
2019-03-29 11:07
aimei111

aimei111

你好 我想问下Module.m文件里的方法已经实现了
// 暴露给外界uni层的方法
WX_EXPORT_METHOD(@selector(XXXX:callback:))
,并且js也添加了该事件,但是程序运行时就是不走该方法呢,请问这可能是什么原因,plist文件也已经配置好了,onCreateUniPlugin方法也已经走了,就是Module.m类里的实现方法不走呢
2019-03-29 10:59
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 294096179@qq.com:
plist文件没配置对
2019-03-27 17:34
294096179@qq.com

294096179@qq.com

Xcode按照文档的描述去配置了,可是在调用插件的时候提示我插件未注册,请问要怎么解决?
2019-03-27 17:27
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 shiguangqi:
去开个帖子,不问题描述清楚
2019-03-20 15:14
shiguangqi

shiguangqi

插件封装第三方sdk一直打包不成功
2019-03-20 15:11
2047185642@qq.com

2047185642@qq.com

回复 DCloud_IOS_CLP:
确实是少了这个库,加了这个库以后调试正常了,非常感谢
2019-03-20 14:42
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 2047185642@qq.com:
应该是少liblibweex.a库
2019-03-20 11:58
2047185642@qq.com

2047185642@qq.com

回复 DCloud_IOS_CLP:
刚刚调试发现,在AppDelegate中的-(void)UniCoreEventWithApplication:(UIApplication*)app withMethod:(NSString*)method :(id)parameter1 :(id)parameter2方法中的第一行代码Class uniwxCore = NSClassFromString(@"UniWXCore");在我自己的工程中获取到uniwxCore的值是null,在示例工程中是能获取到的,请问这个原因可能是啥?谢谢!
2019-03-20 11:51
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 2047185642@qq.com:
仔细和示例工程对比吧
2019-03-20 11:48
2047185642@qq.com

2047185642@qq.com

回复 DCloud_IOS_CLP:
proxy类遵守了UniPluginProtocol协议,还是没有被调用...
2019-03-20 11:21
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 2047185642@qq.com:
可能是没有遵守协议吧
2019-03-20 10:32
2047185642@qq.com

2047185642@qq.com

回复 DCloud_IOS_CLP:
没有相关的日志报错,但是在Info.plist中配置的hooksClass中的方法-(void)onCreateUniPlugin和- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions没有被调用,但是在SDK中的示例工程中这两个方法在app启动时是被调用了的。这两个方法没有被调用的原因可能是啥?谢谢!
2019-03-20 09:55
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 2047185642@qq.com:
有日志报错吗?
2019-03-19 18:42
2047185642@qq.com

2047185642@qq.com

回复 DCloud_IOS_CLP:
好的,谢谢!我现在的问题是调用原生方法无效果(原生方法不执行)。Xcode中的所有配置都已经按照文档要求去配置,用模拟器工程也能够正常跑起来,就是方法没有被调用到,能提供一些思路么,谢谢!
2019-03-19 17:20
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 2047185642@qq.com:
sdk包里的示例有const dcRichAlert = uni.requireNativePlugin('DCloud-RichAlert'); 这行代码写在哪里,看文档和示例代码工程能更好的理解。 正常创建uni-app项目就行,不需要额外的配置
2019-03-19 16:48
2047185642@qq.com

2047185642@qq.com

你好,我想问一下:在“第三步,下载HBuilderX开发工具(下载地址), 然后用HBuilderX开发工具 新建uni-app项目,在.nvue文件或.vue,里面编写js代码如下, 注意:.vue暂时只能使用module,不能使用component,.nvue两者都可以使用。component的使用可参考weex写法。” 这一步操作中创建uni-app项目需要额外配置其他东西么?
还有就是这行代码const dcRichAlert = uni.requireNativePlugin('DCloud-RichAlert'); 应该写在哪?
2019-03-19 16:15
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 nonoroazoro@gmail.com:
可以
2019-02-27 11:06
nonoroazoro@gmail.com

nonoroazoro@gmail.com

"修改iOS Deployment Target为8.0" 必须是 8.0 吗?可不可以设置成 10.0 我们自己的 sdk 仅支持 10.0 以上的
2019-02-26 21:41
lukamodric

lukamodric

回复 DCloud_IOS_CLP:
谢谢你的回复,经过我仔细筛查,发现是Main_iphone.storyboard里面没有在viewcontroller里添加那两个按钮,希望在下一版中能够加入这个,谢谢
2019-02-25 16:24
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 lukamodric:
文档中文字描述了啊也配置图了:其中红矩形框起来的control.xml里的appid和代码的值及目录的值都是appid,是从HBuilderX开发工具中导出来的 资源包里的manifest.json的appid,四者appid需要一致
2019-02-25 15:25
lukamodric

lukamodric

回复 DCloud_IOS_CLP:
感谢您的回复,可是在最新的SDK版本中HBuilder-uniPluginDemo这个项目里也是会出现没有运行结果的状态,就是一个导航栏下面都是白色。
2019-02-25 15:22
DCloud_IOS_CLP

DCloud_IOS_CLP (作者)

回复 lukamodric:
最新的sdk版本HBuilder-uniPluginDemo目录下的工程才是uni-app原生插件开发的demo
2019-02-25 15:13
lukamodric

lukamodric

开发人员你好,看了SDK开发原生iOS插件的Demo,HBuilder-Integrate这个文件夹下的项目虽然可以正常运行,但是pandora/apps/www文件夹下的内容与webviewcontroller和config.xml的配置不相同,导致运行起来只能在设备上出现一个没名字的导航栏和下方空白。希望能更新项目,让其他开发人员能够正常运行demo并看到DCRichAlert这个例子是如何正确使用的,期待得到您的回复,谢谢
2019-02-25 15:05