xcode集成h5+,采用官方最新SDK,并可以支持和原生ios函数接口通信

系统环境

macbook:macos high Sierra 10.13.4
xcode:Version 9.3 (9E145)
h5+sdk: 官网最新版

说明

因为工作需要,公司准备采用H5的方式来做app,搜索各种开发环境,rn
也自己研究过,是好东西,但是觉得学习周期可能过长,所以暂时采用国产的hbuilder,虽然坑比较多,但是还是硬着头皮上

基础成果

公司第一版的ios商城系统app提前上架,

集成环境开始

吐槽一下,集成的坑真的是多到爆呀,官方文档写的也是够了,集成到死的心都有了(哈哈,本人是做前端的,app开发不懂,所以有点懵弄的),rn的环境搭建多简单。好了,开始吧,主要还是基于官方文档来:http://ask.dcloud.net.cn/article/941

  • xcode创建项目什么的就一笔带过了吧
  • 复制HBuilder-Hello工程的相应文件到新创建的项目文件,文件为:

ViewController.h 和 ViewController.m
AppDelegate.h 和 AppDelegate.m

  • 拷贝以下文件到新创建工程目录下

iOS-SDK/SDK/Bundles/PandoraApi.bundle
iOS-SDK/SDK/control.xml
iOS-SDK/SDK/Libs/libcoreSupport.a
iOS-SDK/SDK/Libs/liblibPDRCore.a
iOS-SDK/SDK/Libs/liblibUI.a

  • 拷贝IOS-SDK/SDK/inc目录到新创建工程目录下,并添加到工程内
  • 点击Project->TARGETS->Build Settings搜索“Other Linker Flags”,双击搜索到的项双击,在弹出框内添加想“-ObjC”

说明:官网评论中有人说不需要设置‘-ObjC’,但是集成过程中,没有设置的话会无法集成成功,如果有高人指导,希望可以告知一二

  • 点击Projcet->General->Linked Frameworks and Libraries 添加系统库到工程

按照官网文档中的库文件导入吧,如下。
JavaScriptCore.framework
WebKit.framework
CoreTelephony.framework
MobileCoreServices.framework
SystemConfiguration.framework
MediaPlayer.framework
AudioToolbox.framework
Security.framework
QuartzCore.framework
CFNetwork.framework
Foundation.framework
CoreFoundation.framework
CoreGraphics.framework
UIKit.framework
QuickLook.framework
libstdc++.6.tbd
libxml2.tbd
libz.tbd
libsqlite3.0.tbd
ImageIO.framework
CoreText.framework

  • 点击Project->TARGETS->Build Settings搜索“ARC”,修改"Objective-C Automatic Reference Counting"项的值为"NO", 如果希望使用ARC则需要修改相应的内存管理代码。

如果不修改,会出现ARC restrictions的错误

  • 此时运行,肯定报错,报错内容如下:

Undefined symbols for architecture x86_64:
"OBJC_CLASS$_DCSplashAdObserver", referenced from:
objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
问题原因:
因为官方默认设置了开屏广告,但是我们有没有引入。
我的处理方式:
注释掉:AppDelegate.m 中的#import "DCSplashAdObserver.h" 和 #define dcSplashAd

  • 此时运行,不出意外将提示成功,但是没有在模拟器中看到失败的页面,因为我们还没做完集成呀,继续。
  • 修改头文件搜索路径:

点击Project->TARGETS->Build Settings搜索"Header Search Paths",
双击搜索到的"Header Search Paths"项,将工程目录下的inc目录拖到打开的下拉框

  • 修改静态库搜索路径:

点击Project->TARGETS->Build Settings搜索"Library Search Paths",
如果"Library Search Paths"项下有值则不需要处理,
如果没有值则双击搜索到的"Library Search Paths"项,将工程目录下的libs目录(静态库所在目录)拖到打开的下拉框

  • 修改BitCode

点击Project->TARGETS->Build Settings搜索BitCode
将Enable Bitcode项的值改成 ‘NO’

  • 添加Web应用到工程

在工程目录下创建目录”Pandora->apps->[APPID]->www“目录,并将Web应用拷贝到www目录下
APPID为要加入到工程应用mainfest.json文件
添加Pandora目录到工程中

  • 修改control.xml文件

修改control.xml文件的appid节点值为mainfest.json文件的id节点下内容,appver节点内容修改为manifest.json文件的version->name节点下内容

  • 阶段性成果

此时再次运行模拟器,将看到hbulider官方demo页面,只是会出现模版未添加的提示,暂时先不管,可以小小的庆祝一下了,集成环境基本是ok的,如果需要增加模块,请查看官方sdk文件中的Feature-iOS.xls,并对应导入即可.

  • 继续,设置应用的图标

点击project->target->General->App Icons and Launch Images->App Icons Source项右侧小箭头

  • 设置应用的splash图片

拷贝HBuider-Hello工程的info.plist文件的UILaunchImages节点到新工程info.plist文件,同时拷贝HBuilder-Hello工程下的splash目录到新工程目录下并将其添加到新工程中
根据图片的尺寸逐个替换splash图片,注意文件名不能修改

  • 修改info.plist文件,添加App Transport Security Settings类型为Dictionary,在该项下添加Allow Arbitrary Loads项类型为Boolean,值为YES
  • 再次提示

运行时如果提示“打包时未添加XXX模块”,请参考SDK/Feature-ios.xls文件,查找对应插件名需要引入的5+库文件和系统库文件,添加到工程即可

  • 如果只是为了集成到ios,那到这里,集成工作就完成了,其实这篇文章和官网一样,只是里面有一些注意事项:

1、splash、inc、libs文件夹一定是要记得add到项目,并且颜色是黄色。
2、库文件一定要按照官方或者本文档中的全部添加进去

集成环境完成了,但是真实环境往往需要和原生的ios进行通信,毕竟h5+很多系统级的操作还是无法更好的使用,比如:需要使用第三方公司的sdk,下面我们继续完成可以和原生ios通信的配置步骤:
  • 扩展插件JS API 编写

首先要定义一个插件类别名,并需要在IOS工程的PandoraApi.bundle\feature.plist文件中声明插件类别名和Native层扩展插件类的对应关系,将一下demo添加到dict下
<key>plugintest</key>
<dict>
<key>class</key>
<string>PGPluginTest</string>
</dict>

  • 具体的插件写法见官网:http://ask.dcloud.net.cn/article/67,我这里只是简单实现了一下。
  • plugintest.js文件内容,文件是建立与ios原生通信的桥梁

document.addEventListener( "plusready", function()
{
var _BARCODE = 'plugintest',
B = window.plus.bridge;
var plugintest =
{
PluginTestFunction : function (Argus1, Argus2, Argus3, Argus4, successCallback, errorCallback )
{
var success = typeof successCallback !== 'function' ? null : function(args)
{
successCallback(args);
},
fail = typeof errorCallback !== 'function' ? null : function(code)
{
errorCallback(code);
};
callbackID = B.callbackId(success, fail);
return B.exec(_BARCODE, "PluginTestFunction", [callbackID, Argus1, Argus2, Argus3, Argus4]);
}
};
window.plus.plugintest = plugintest;
}, true );

  • 使用的html页面

1、以下是异步调用
function PluginTestFunction() {
plus.plugintest.PluginTestFunction("Html5","Plus","AsyncFunction","MultiArgument!", function( result ) {
alert( result[0] + "" + result[1] + "" + result[2] + "_" + result[3] );
},function(result){
alert(result)
});
}
2、同步方式调用
function PluginTestFunctionSync()
{
plus.plugintest.PluginTestFunctionSync("Html5");
}
3、直接调用原生
function getText()
{
plus.plugintest.PluginTestFunctionSync("Html5");
}

结尾

到此处,一个干净并且可以使用js插件的集成环境已经完成。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容