iOS原生集成H5+

集成方式

独立应用方式集成

Widget方式集成

WebView方式集成

可以打开官方链接: 选择 5+SDK -> 5+SDK集成 -> 平台 下查看集成方式

独立应用方式: 官方Demo中的实现, 独立的App, 感觉上和直接在HBuilder创建App相同, 可以方便证书导入这些步骤吧

Widget方式: 模块部分的扩展使用

WebView方式: 单独界面的扩展使用

白皮书原话: 在使用中,如果需要显示多个H5页面,建议使用Widget集成方式,如果只有一个H5页面,建议使用WebView集成方式

集成过程

导入SDK相关文件

Snip20170507_10.png

Snip20170507_6.png

导入Pandora相关文件

Snip20170507_13.png

Snip20170507_14.png

修改编译配置

配置Build Setting

搜索 Other Linker Flags , 配置下拉列表中添加-ObjC

搜索 Enable Bitcode, 配置为 NO

配置info.plist, target -> Info

添加NSAppTransportSecurity字段 -> NSAllowsArbitraryLoads为YES

URL Types -> + -> URL Schemes框配置为 * hbuilder*

写调用SDK代码编译, 报错按照错误提示导入库, 直到编译成功

/// AppDelegate

#import "PDRCore.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

/// 指定5+SDK的模式

return [PDRCore initEngineWihtOptions:launchOptions withRunMode:PDRCoreRunModeNormal];

}

- (void)applicationWillTerminate:(UIApplication *)application {

[PDRCore destoryEngine];

}

@end

#import "PDRCore.h"

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// 独立应用方式加载

// [self start5pAsNormal];

}

/// 满足一些条件调用

- (void)doSomething {

// Widget方式加载

// [self start5pAsWidget];

// WebView方式加载

// [self start5pAsWebView];

}

- (void)start5pAsNormal {

PDRCore *core = [PDRCore Instance];

if (!core) return;

[core setContainerView:self.view];

[core start];

}

- (void)start5pAsWidget {

PDRCore *core = [PDRCore Instance];

if (!core) return;

// 设置WebApp所在的目录,该目录下必须有mainfest.json

NSString* pWWWPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Pandora/apps/H5Demo/www"];

// 设置5+SDK运行的View

[core setContainerView:self.view];

// 传入参数可以在页面中通过plus.runtime.arguments参数获取

NSString* pArgus = @"id=plus.runtime.arguments";

// 启动该应用

_coreApp = [[core appManager] openAppAtLocation:pWWWPath withIndexPath:@"index.html" withArgs:pArgus withDelegate:nil];

// 如果应用可能会重复打开的话建议使用restart方法

// [[core appManager] restart:_coreApp];

}

- (void)start5pAsWebView {

PDRCore *core = [PDRCore Instance];

if (!core) return;

// 单页面集成时可以设置打开的页面是本地文件或者是网络路径

NSString* pFilePath = [NSString stringWithFormat:@"file://%@/%@", [NSBundle mainBundle].bundlePath, @"Pandora/apps/H5Dome/www/index.html"];

_appFrame = [[PDRCoreAppFrame alloc] initWithName:@"WebViewID1" loadURL:pFilePath frame:CGRectOffset(self.view.frame, 0, 20)];

// 单页面运行时设置Document目录

NSString* pStringDocumentpath = [NSString stringWithFormat:@"%@/Pandora/apps/H5Dome/www/", [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]];

[core.appManager.activeApp.appInfo setWwwPath:pStringDocumentpath];

[core.appManager.activeApp.appWindow registerFrame:_appFrame];

[self.view addSubview:_appFrame];

}

@end

匹配 模式(PDRCoreRunMode) 与 启动该模式(how start) 的代码, 否则很容易掉坑里

Demo中其他处理, AppDelegate / ViewController 都可以参照

解决Undefined symbols for architecture xxx: “xxx”, referenced from: 的错误提示

屏幕快照 2017-05-06 23.14.25.png

首先使用官方文档

屏幕快照 2017-05-06 23.14.57.png

导入对应库

Snip20170506_1.png

还有无法匹配的错误, 自行google / baidu

实验结果总结

独立应用方式与Widget方式确实相似, 区别部分

/// AppDelegate中

/// 独立应用方式: 配置为 PDRCoreRunModeNormal

/// Widget方式: 配置为 PDRCoreRunModeAppClient

[PDRCore initEngineWihtOptions:launchOptions withRunMode:PDRCoreRunMode];

/// 配置并启动5+SDK环境

/// 独立应用方式: 直接在启动后的根控制器中设置即可

/// Widget方式: 在需要用启动的位置设置即可

PDRCore *core = [PDRCore Instance];

if (!core) return;

[core setContainerView:self.view];

[core showLoadingPage]; // 展示启动页(读取页)

dispatch_async(dispatch_get_main_queue(), ^(void) {

/// 独立应用方式: 下面俩种都可以开启

/// Widget方式: 必须使用第二种开启

[core start];

// [[core appManager] openAppAtLocation:[[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Pandora/apps/HelloH5/www"] withIndexPath:@"index.html" withArgs:@"id=plus.runtime.arguments" withDelegate:nil];

});

相关资源链接

ios html5上架,iOS原生集成H5+详细流程相关推荐

  1. ios html5上架,IOS免签封装,完美解决H5应用上架App Store受阻的尴尬

    通过H5封装成IOS的应用在初期的确受到了广大开发者们的追捧,因为只需要有H5网站就可以通过WEBAPP框架在几分钟内生成一个IOS的APP应用,几乎不需要什么成本.而对于普通玩家来说,在一些专业IO ...

  2. cordova打包ios到上架AppStore全过程记录(无敌详细)

    前言 上一篇已经讲了cordova打包android app的全过程,在这里关于打包ios的过程就尽量简单说一下了. ios重点就是配置开发者证书的一些东西稍微复杂一点,下面图文详细的一步步操作. i ...

  3. ios html5缩小,IOS H5页面图片点击捏合放大缩小

    方式是以注入JS代码的方式,遍历所有的图片img标签,然后通过js获取到图片的url地址,然后自己再做点击弹出图片页面和添加捏合手势,代码如下(方法来自网络,从他人出学习来的,原文章地址找不到了... ...

  4. ios html5 exif,IOS中html5上传图片方向问题解决方法

    // @param {string} img 图片的base64 // @param {int} dir exif获取的方向信息 // @param {function} next 回调方法,返回校正 ...

  5. ios html5 app上架,H5封装的IOS应用上架App Store被拒怎么办

    原标题:H5封装的IOS应用上架App Store被拒怎么办 H5封装的IOS应用如果上要架到App Store几乎是无望,原因是苹果官方为了保证App Store应用商店上的APP优量和更好的体验, ...

  6. html5调用原生android,h5调用IOS/安卓原生方法,原生调h5方法

    之前也总结过h5调用原生的方法,但是写的不全.像调完原生之后,原生往往会有返回值,或者根据返回值的不同回调h5的方法. 1.判断机型 getType() { var u = navigator.use ...

  7. 【H5+ Quick-cocos2dx整合】之iOS 二 集成H5+ SDK

    下载SDK 下载HTML 5+ 离线打包SDK (http://ask.dcloud.net.cn/article/103)点击下载SDK 下载完成后打开可以看到SDK.demo.Feature-iO ...

  8. 【2014最新】iOS App 提交上架store 详细流程

    [2014最新]iOS App 提交上架store 详细流程 一.证书的导出 1.1.前期工作 首先你需要有一个苹果的开发者帐号,一个Mac系统. 如果没有帐号可以在打开http://develope ...

  9. 2019年苹果iOS App上架详细图文教程

    上架基本需求资料 1.苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2.开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa测试上架的完整流程,中途可能会遇到一些报错,一般 ...

最新文章

  1. Java项目:网上电子书城项目(java+SSM+JSP+maven+Mysql)
  2. 安全手册(初稿)[转]
  3. leetcode 483. 最小好进制
  4. BZOJ:4820: [Sdoi2017]硬币游戏BZOJ:1444: [Jsoi2009]有趣的游戏(高斯消元求概率)
  5. python定时任务_Python 定时任务最佳实践
  6. 你有过什么令你难忘的约会经历?
  7. linux内核调度,Linux内核的三种调度策略
  8. linux常见问题(lrzszvim乱码crontab用户授权chkconfig)
  9. 中小企业对Spring Cloud微服务架构实践经验总结的一些思考!
  10. 如何为开源项目做市场
  11. 《数据挖掘概念与技术》读书笔记(一)
  12. 更改Wamp下网站地址栏图标的显示
  13. 需要在计算机上安装msxml版本 6.0,win10安装不了office 2010提示“MSXML版本6.10.1129.0”怎么办...
  14. 用Word做一个漂亮的网页
  15. java socket连接池_Java - Socket连接池
  16. python两个下划线怎么打_Python中单下划线与双下划线用法总结
  17. 计算机控制 英文 论文,计算机论文英文翻译
  18. 典型的AEB误触发场景
  19. 高校计算机教师swto分析,信息技术课教师专业成长SWOT分析.doc
  20. 基于wxpy的微信防撤回

热门文章

  1. linux脚本ls输出到变量中,bash – 将命令输出的错误消息存储到shell变量中
  2. AM335X 分配大于4M的framebuffer
  3. C/C++程序员必读的十本书(上)
  4. debian 升级linux内核,Debian8升级内核到4.5
  5. mysql行级锁作用_Mysql事务及行级锁的理解
  6. 郑州升达经贸管理学院计算机专业学费,郑州升达经贸管理学院学费
  7. 怎么修改提交git是的用户名_Git 修改用户名以及提交邮箱
  8. python库快速安装_python的pip快速安装代码
  9. reentrantlock非公平锁不会随机挂起线程?_程序员必须要知道的ReentrantLock 及 AQS 实现原理...
  10. 【转】一键将Web应用发布到云-Azure Web App!