DCloud_App_Array
DCloud_App_Array
  • 发布:2014-10-29 15:20
  • 更新:2019-07-02 14:35
  • 阅读:46925

IOS平台以WebView方式集成HTML5+SDK方法

分类:5+ SDK

开发者可参考SDK中示例 “HBuilder-Integrate”
最新SDK下载地址

1 概述

HTML5+ SDK 可以按照“独立应用”、“Widget”和“WebView”三种方式进行集成,三种集成方式各有优点。
独立应用集成方式: 使用独立应用方式,开发者需要将HTML5+SDK生成的首页面设置为当前View的subView。HTML5+ SDK将对应用进行管理。
Widget集成方式: 运行方式和独立运行方式类似,开发者在集成时可在需要的位置启动HTML5+ SDK,显示指定的HTML5+应用。
Webview集成方式: 用户可在任何页面将HTML5+ SDK的页面以Webview的形式独立显示,显示的Webview页面。

2 导入SDK Lib文件和头文件

在工程中引入HTML5+ SDK扩展功能的.a文件,开发者可以根据需求添加不同的扩展插件。必须要引入的是liblibPDRCore.a 和libcoreSupport.a,liblibPDRCore.a库是HTML5+SDK运行的基础库文件,libcoreSupport文件是PDRCore依赖的文件。
在引入lib文件将SDK/libs目录下的静态库文件拖入到Xcode工程里即可

注意开发者在使用示例工程时建议不要把工程从SDK目录里挪出来,如果要移动工程可以通过修改library search path ,framework search path 和head search path来解决报错。
在集成5+SDK时必须在Other link flags 里添加 -ObjC, 同时还需要引入如下几个库文件
liblibUI.a
liblibPDRCore.a
libcoreSupport.a
liblibNavigator.a

工程中引入HTML5+ SDK 中提供的头文件。
头文件在目录 IOS-SDK/SDK/Inc目录下

工程中必须要引入的系统库
点击TARGETS->General->Linked Frameworks and Librarys 添加工程依赖的库文件

WebKit.framework
CoreLocation.framework
AVFoundation.framework
QuickLook.framework
JavaScriptCore.framework
UserNotifications.framework (设置Status 为 Optional)
StoreKit.framework
AssetsLibrary.framework
AddressBook.framework
SystemConfiguration.framework
UIKit.framework
Foundation.framework
CFNetwork.framework
CoreAudioKit.framework
CoreAudio.framework
CoreMedia.framework
MediaPlayer.framework
CoreFoundation.framework
AudioToolbox.framework
CoreTelephony.framework
MobileCoreServices.framework
libstdc++.tbd
libxml2.tbd
libz.tbd

3 添加代码编译测试

使用Webview方式进行集成HTML5+SDK,开发者可以在任意位置显示支持HTML5+扩展API的WebView页面,具体步骤如下
1.获取PDRCore句柄
2.设置HTML5+ SDK运行方式
3.设置默认启动应用的APPID
4.创建PDRCoreAppFrame,并指定Webview的ID和URL,并指定打开的WebView的Frame。
5.设置PDRCoreFrame的WebView的Request,Webview会显示Request返回的页面
6.将PDRCoreFrame句柄设置为指定View的WebView

-(IBAction)ShowWebViewPageOne:(id)sender  
{  
    // 获取PDRCore句柄  
    PDRCore* pCoreHandle = [PDRCore Instance];  
    if (pCoreHandle != nil)  
    {  

        [pCoreHandle start];  
        // 设置拼写Webview将要打开文件的url  
        NSString* pFilePath = [NSString stringWithFormat:@"file://%@/%@", [NSBundle mainBundle].bundlePath, @"Pandora/apps/HelloH5/www/plus/audio.html"];  

        CGRect StRect = CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height - 20);  

        appFrame = [[PDRCoreAppFrame alloc] initWithName:@"WebViewID1" loadURL:pFilePath frame:StRect];  

        // 设置webview的Appframe  
            PDRCoreApp* activeApp= (PDRCoreApp*)pCoreHandle.appManager.activeApp;  
            [activeApp.appWindow registerFrame:appFrame];  

        // 将AppFrame设置为当前View的Subview  
        [self.view addSubview:appFrame];  
    }  
}  

4 导入应用并配置

4.1 添加应用

在离线打包之前,用户需要将已经开发完成的HTML5+ 应用导入到Xcode工程中。

4.1.1 应用导入

需要将开发完成的HTML5+ 应用拷贝到Pandora/apps/[appid]/www目录下。

4.1.2 manifes.json文件编写

请参考manifest.json 文件配置指导手册

4.2 配置应用的插件功能

开发者需要将html5+ SDK里的PandoraAPI.bundle引入到开发中的工程中。开发者如开发了HTML5+扩展插件,需要修改PandoraAPI.bundle下的feature.plist文件,在文件中添加扩展插件JS类名和原生类名的对应关系。

5 常用类说明

PDRCore

常用接口说明:

+ (PDRCore*)Instance;  

获取Core单例对象
返回值:
PDRCore 单例的PDRCore对象

- (int)setAppsRunPath:(NSString*)workPath;  

设置应用运行时目录,应用运行时产生的文件在该目录下生成,当应用 runmode为liberate时将把资源拷贝到该目录
参数说明:
workPath 应用运行时目录
返回值:
int 0 成功

- (int)setAppsInstallPath:(NSString*)installPath;  

设置runtime应用的安装目录,该地址为安装包中携带的应用资源位置
参数说明:
installPath 应用的安装目录
*返回值:**
int 0 成功

- (void)setInnerVersion:(NSString*)innerVersion;  

设置HTML5+ SDK运行版本
参数说明:
innerVersion HTML5+ SDK运行版本号

- (int)setDocumethPath:(NSString*)documentPath;  

设置HTML5+ SDK文档目录
参数说明:
documentPath 应用的文档目录
返回值:
int 0 成功

- (int)setDownloadPath:(NSString*)downlaodPath;  

设置runtime下载目录
参数说明:
downloadPath 应用下载文件的路径
返回值:
int 0 成功

- (int)setAutoStartAppid:(NSString*)appid;  

设置runtiem启动时自动运行的APP
参数说明:
appid 默认启动应用的APPID
返回值:
int 0 成功

- (int)setContainerView:(UIView*)containerView;  

设置runtime根视图的父亲View
参数说明:
containerView 要显示HTML5+SDK的父View
返回值:
int 0 成功

- (int)setApp:(NSString*)appid documentPath:(NSString*)doucmentPath;  

设置指定app的文档目录
参数说明:
appid 要设置的appid
doucmentPath 要设置的路径
返回值:
int 0 成功

- (int)regPluginWithName:(NSString*)pluginName  
             impClassName:(NSString*)impClassName  
                    type:(PDRExendPluginType)pluginType  
               javaScript:(NSString*)javaScript;  

注册第三方扩展的HTML5+插件
参数说明:
pluginName 插件名称JS文件中定义的名字
impClassName 插件对应的实现类名
pluginType 插件类型 详情: PDRExendPluginType
javaScript js实现 为javascript文本
返回值:
int 0 成功

- (int)start;  

正常启动runtime,使用改方法启动runtime具有全部功能,包括具有应用管理、窗口管理、插件管理、权限管理、资源管理等功能

- (int)startAsWebClient;  

启动runtime,使用该方法启动的runtime不具有应用管理窗口管理功能,当需要显示页面时,需要自己创建PDRCoreAppFrame

PDRCoreAppFrame

常用接口说明

- (PDRCoreAppFrame*)initWithId:(NSString*)frameID loadURL:(NSString*)pagePath  frame:(CGRect)frame;  

创建runtime页面
参数说明:
frameID 页面标示
pagePath 页面地址 支持http:// file:// 本地地址
frame 页面位置

@property(nonatomic, readonly)UIWebView *webView;  

应用页面的WebView对象

0 关注 分享

要回复文章请先登录注册

1031588364@qq.com

1031588364@qq.com

我的怎么没有 nav 没有tabbar 的?
2019-07-02 14:35
641139721@qq.com

641139721@qq.com

各位 为什么我出现大白页
2019-06-25 10:39
641139721@qq.com

641139721@qq.com

各位 为什么我出现大白页
2019-06-25 10:39
641139721@qq.com

641139721@qq.com

各位 为什么我出现大白页
2019-06-25 10:39
回首半生仍年少

回首半生仍年少

js调用iOS中的SDK封装页报这个线程问题怎么解决“Multiple locks on web thread not allowed! Please file a bug. Crashing now”
2018-12-29 19:16
610066482@qq.com

610066482@qq.com

这个源码不提供的对吧?
里面有些内容需要修改,否则安全扫描通不过,希望可以提供源码或者处理安全问题之后再提供一份SDK
2018-11-20 10:25
objcat

objcat

恕我直言 官方demo `HBuilder-Integrate` 中的webview模式写的跟垃圾一样
所以我写了下面的文章供大家参考 项目要遵循规范从最基础的功能开始做起
https://www.jianshu.com/p/d7b0bd44cecc
2018-10-24 15:37
李晓峰

李晓峰

iOS集成成功 附上Demo https://blog.csdn.net/lixianyue1991/article/details/81705870
2018-08-30 15:25
www.124780540@qq.com

www.124780540@qq.com

回复 727372745@qq.com:
牛皮
2018-06-25 16:05
小姐姐诶

小姐姐诶

麻烦写文档的人 写的全面一点. 根据反应的错误来写对应的方法,就不会有这么多负面差评了
2018-06-19 12:31
未知zr

未知zr

您好 我是iOS新手 最近在集成5+sdk 出现了打包时未添加Storage模块 希望各位大神们可以指点一二
2018-04-23 18:32
18692489258@163.com

18692489258@163.com

运行官方HBuilder-Integrate 的demo, PDRCoreAppFrame集成本地html都无法显示..外部链接可以打开,有没有大神告诉我一下怎么解决
2018-04-12 09:53
2966497308@qq.com

2966497308@qq.com

PDRCoreAppFrame 集成本地html都不可以显示出来。。网站可以也不知道怎么样解决
2018-04-11 18:06
2966497308@qq.com

2966497308@qq.com

一堆乱七八糟的问题。。为啥不全部开源sdk
2018-04-11 18:06
未知zr

未知zr

回复 renxingyang1018@qq.com:
您好 请问您现在已经集成了吗?
2018-03-30 15:05
未知zr

未知zr

您好 iOS新手上路 最近在集成5+sdk 总发生集成时路径找不到的问题 相同的从sdk里找到的示例demo 别人的xcode就可以运行 我的就不可以 请问各位大神有没有遇到类似的问题 求教
2018-03-30 15:04
未知zr

未知zr

回复 青花瓷的平方:
您好 请问您已经集成了吗?
2018-03-30 15:01
青花瓷的平方

青花瓷的平方

按照文档上面的加载本地路径并且初始化,之后发现po appFrame.webEngine=nil,请问为什么,demo就是官方的一样
2017-12-23 17:04
1063061138@qq.com

1063061138@qq.com

WebView集成方式,以下是集成时报的错,有哪位遇到 过的,请教下。
Showing Recent Messages
"_CGImageSourceCreateWithData", referenced from:


-[PTGIF initWithGIFData:] in liblibPDRCore.a(PDRToolSystemEx.o)


"_OBJC_CLASS_$_WKUserContentController", referenced from:


objc-class-ref in liblibPDRCore.a(H5WEWKWebview.o)


"_CGImageSourceCreateImageAtIndex", referenced from:


-[PTGIF initWithGIFData:] in liblibPDRCore.a(PDRToolSystemEx.o)


"_kCGImagePropertyGIFUnclampedDelayTime", referenced from:


-[PTGIF initWithGIFData:] in liblibPDRCore.a(PDRToolSystemEx.o)


"_OBJC_CLASS_$_WKProcessPool", referenced from:


objc-class-ref in liblibPDRCore.a(H5WEWKWebview.o)


"_OBJC_CLASS_$_WKUserScript", referenced from:


objc-class-ref in liblibPDRCore.a(H5WEWKWebview.o)


"_OBJC_CLASS_$_WKWebView", referenced from:


objc-class-ref in liblibPDRCore.a(PDRToolSystemEx.o)


objc-class-ref in liblibPDRCore.a(H5WEWKWebview.o)


"_CGImageSourceGetCount", referenced from:


-[PTGIF initWithGIFData:] in liblibPDRCore.a(PDRToolSystemEx.o)


"_kCGImagePropertyGIFDelayTime", referenced from:


-[PTGIF initWithGIFData:] in liblibPDRCore.a(PDRToolSystemEx.o)


"_OBJC_CLASS_$_WKWebViewConfiguration", referenced from:


objc-class-ref in liblibPDRCore.a(H5WEWKWebview.o)


"_CGImageSourceCopyPropertiesAtIndex", referenced from:


-[PTGIF initWithGIFData:] in liblibPDRCore.a(PDRToolSystemEx.o)


"_kCGImagePropertyGIFDictionary", referenced from:


-[PTGIF initWithGIFData:] in liblibPDRCore.a(PDRToolSystemEx.o)


ld: symbol(s) not found for architecture arm64


clang: error: linker command failed with exit code 1 (use -v to see invocation)
2017-11-06 00:15
4006676@qq.com

4006676@qq.com

把写demo的开除行吗? 都不能运行,还能发?????
2017-11-01 18:32
shimeifang

shimeifang

集成后怎么获取到所有的子webview对象呀?
2017-10-25 13:33
shimeifang

shimeifang

回复 1247918007@qq.com:
请问知道怎么获取WEBVIEW中所有的对象吗
2017-10-25 13:31
aabbhh

aabbhh

Apple Mach-O Linker Error Group
clang: error: linker command failed with exit code 1 (use -v to see invocation)
集成有遇到这样的错误吗?各位大神帮帮忙
2017-08-21 11:42
727372745@qq.com

727372745@qq.com

回复 SDK_骁骑:
参考你妈逼的
2017-07-27 15:08
matian

matian

回复 renxingyang1018@qq.com:
你好!能给一份你集成的Dome吗?
2017-05-08 14:31
renxingyang1018@qq.com

renxingyang1018@qq.com

回复 renxingyang1018@qq.com:
已解决,希望文档写清楚些,这样后来者应该就不会错了
2017-05-02 16:28
renxingyang1018@qq.com

renxingyang1018@qq.com

有人和我一样,跟着这个说明问题,配置跑步起来的人有吗?为什么这个网页的方法和下载SDK中的配置方法不一样。在“2 导入SDK Lib文件和头文件”liblibUI.a
liblibPDRCore.a
libcoreSupport.a
liblibNavigator.a
这几个配置了search Path还是找不到他们,还有就是上面的截图了面Other Linker Flags要加的东西,和上面几个是不一样的吗?
2017-05-02 10:30
wzlsquall@126.com

wzlsquall@126.com

回复 wzlsquall@126.com:
Sorry,看到例子了。
2017-04-16 23:01
wzlsquall@126.com

wzlsquall@126.com

regPluginWithName这个方法的参数使用不是很明白,最后一个参数是做什么用呢?因为没有例子,所以想不明白。将OC的Class注册为JS插件就可以了,最后一个参数的JS是什么样子的呢,有没有例子可以参考一下?
2017-04-16 22:52
czkyes

czkyes

回复 专注APP开发:
不错,大神能留下qq方便交流吗
2017-03-11 16:09
Costword

Costword

能不能弄个cocopod啥的,每次集成都要倒入大量的库,而且还容易弄错
2017-02-27 10:22
766255988@qq.com

766255988@qq.com

官方能不能重新写一个配置教程文档?这个有点旧,最好是能够以swift 的方式来集成
2017-01-06 16:16
Henry_Wang

Henry_Wang

DCloud项目集成到iOS后, 启动程序后怎么调用DCloud的页面啊?
2017-01-04 22:26
363712861@qq.com

363712861@qq.com

回复 SDK_骁骑:
你好,按照你的方法我在iOS上成功了,但是打开速度好慢,那个启动图得等好久跟HBuilder直接运行的速度完全不一样
2016-12-29 15:26
Henry_Wang

Henry_Wang

回复 SDK_骁骑:
编写iOS插件的文档看不懂啊, 流程有点混乱, 可否指点一下
2016-11-30 15:48
SDK_骁骑

SDK_骁骑

回复 Henry_Wang:
设置静态库搜索路径参考SDK里的doc文档
2016-11-17 15:34
Henry_Wang

Henry_Wang

为什么我添加依赖库之后运行报错啊?
添加好liblibUI.a
liblibPDRCore.a
libcoreSupport.a
liblibNavigator.a
这几个静态库之后,一运行就报错找不到liblibUI
2016-11-11 16:33
425611381@qq.com

425611381@qq.com

回复 laolv_0914@163.com:
感觉集成这个没什么 卵用。 有好多原声的webView 可以提供的信息都获取不到
2016-10-31 10:49
laolv_0914@163.com

laolv_0914@163.com

回复 result那么少:
你的问题解决了吗?我也是出现这个问题,求帮助。
2016-09-11 12:47
reader

reader

上面文档写到“在引入lib文件时需要将Debug-iphoneos、Release-iphoneos和Release-iphonesimulator引入,分别为真机调试,真机编译和模拟器调试使用。”
请问,这三个文件在哪里?怎么没找到?
2016-08-21 08:51
reader

reader

白皮书不够详细,能不能给一个创建实际案例的具体流程啊!
2016-08-20 14:35
psea

psea

回复 1247918007@qq.com:
同样的问题,你搞定了吗?
2016-08-08 18:49
DavidQianKun

DavidQianKun

回复 红日:
太赞成了!文档不行啊!
2016-07-24 21:59
h5开发初学者

h5开发初学者

回复 那小韩:
没弄好,按照新sdk白皮书一样弄不好
2016-07-18 13:23
那小韩

那小韩

网页能加载出来,本地html加载不出来,有人知道为什么?提示信息如下:
DiskCookieStorage changing policy from 2 to 0, cookie file: file:///Users/heyanan/Library/Developer/CoreSimulator/Devices/A28D1EF3-D3B8-4EF0-8501-EFDF2A7E02C8/data/Containers/Data/Application/683ED207-4ACF-4220-BCEF-598BEB8979CC/Library/Cookies/hyn.Test1.binarycookies
2016-07-18 09:42
那小韩

那小韩

有没有集成成功的???
2016-07-16 10:46
那小韩

那小韩

回复 h5开发初学者:
你现在弄好了么
2016-07-16 10:46
那小韩

那小韩

回复 result那么少:
你现在弄好了么
2016-07-16 10:45
那小韩

那小韩

回复 老肥:
你最后弄好了没
2016-07-16 10:03
1247918007@qq.com

1247918007@qq.com

已经继承了5+sdk,现在项目中需要获取到webview,找了一下没有找到相关的webview,但看这篇文档的最后却是有 应用页面的WebView对象,求问怎么获取到这个对象呢。
2016-07-07 13:36
SDK_骁骑

SDK_骁骑

回复 熊猫123:
请参考SDK内的5+SDK技术白皮书
2016-07-06 16:46
熊猫123

熊猫123

回复 result那么少:
我也是,,你是怎么解决的??方便告诉一下吗
2016-07-06 09:49
h5开发初学者

h5开发初学者

一步步弄,绝逼报错
2016-07-01 09:10
折颜

折颜

这个文档好老啊 , 集成不了啊
2016-06-06 11:15
邵森森

邵森森

有些方法都弃用了,也不更新下文档
2016-04-22 14:48
LD_hb

LD_hb

完全没办法集成
2016-04-20 13:23
bulegebug

bulegebug

回复 老肥:
我也遇到这问题了 你怎么解决的 求赐教啊
2016-03-24 15:57
bulegebug

bulegebug

确实写的不够细 集成遇到很多问题 都不知道怎么解决
2016-03-23 18:38
result那么少

result那么少

配置没出错,为什么会不显示页面,我单加载个百度都不出来?
2016-01-28 15:51
result那么少

result那么少

第四步开始就没看懂
2016-01-26 17:57
result那么少

result那么少

为什么我按照上面的文档一步一步弄的,结果报错201个?
2016-01-26 17:46
风雨不回头

风雨不回头

有人用这做开发吗?搜问题没反应啊
2015-11-17 11:49
风雨不回头

风雨不回头

请求界面老是显示页面未下载需要下载页面:http://www.163.com
2015-11-13 13:15
老肥

老肥

这个是如何集成的,每次我导入liblibPDRCore.a的时候项目就直接报错了,求高人指教。
2015-10-15 14:06
专注APP开发

专注APP开发

https://git.oschina.net/andli/dcloud-for-ios-HBuilder-Integrate
提供个自己整合后的代码供大家参考,官方不给力啊
2015-08-07 10:20
飞忘录

飞忘录

无需编程、无需设计、无需开发、无需外包,任何人都可以通过叮当创意生成自己的原生APP
2015-04-17 15:38
Vale

Vale

“在离线打包之前,用户需要将已经开发完成的HTML5+ 应用导入到Xcode工程中。” 这个什么意思啊,是不是不可以动态的从服务器上下载html5的文件,然后用iOS代码去加载这个html文件啊?
2015-03-25 23:33
victorl

victorl

回复 红日:
HBuilder-Plugin是没有问题,我刚刚也试过。。不过HBuilder-Integrate有问题。。。加QQ:76076734一起研究。
2015-01-03 16:13
tuF

tuF

看不懂啊
2014-12-25 11:24
红日

红日

通过js怎么也调不通native页,完全按照HBuilder-Plugin抄,也调不通,是不是你HBuilder-Plugin里的view Controller有什么方法很重要,而在本例的写法里没体现。
2014-12-13 19:08
红日

红日

文档不够细啊,初学者看着吃力,比如这句“DH_VOID DHA_Initial_PDR”是干嘛,我到底怎么从native页面访问任意html页面,求解答。
2014-12-12 17:10