ios原生项目集成HBuilder项目

我们原生开发的应用需要集成另一个公司的一个项目进来,集成的过程中遇到不少问题,在此记录总结一下:

官方的集成方法

在官方文档上有一个SDK包,下载之后用里面的demo来学习和使用它的集成方法,采用的webapp的集成方式,

ios原生项目集成HBuilder项目_第1张图片

这个文档需要好好看一下,用的是HBuiler-Integrate这个demo,

问题1:manifest.JSON文件中有注释

别人把项目给我们的时候,这个文件里是有注释的,还有很多字段是我们不需要的,对这个文件需要做一些删减,直接运行控制台会报错输出:manifest.JSON解析失败请确保格式正确并不能包含注释

这个文件错误首页仍然可以加载出来,但是会有显示错误,内容加载不出来等等。所以首先要确保这个文件正确,

问题2:热更新问题

hbuilder可以热更新,原生集成的时候需要自己处理一些问题,App资源在线升级更新这里面有个测试升级的demo,可以拿来用

第一次运行报错:安装wgt文件失败:html5+RUntime缺少升级包manifest.json中配置的模块:******

ios原生项目集成HBuilder项目_第2张图片

这个缺少了所有的模块,而不是缺少某几个模块,就是路径不对的原因,我再看了文档之后发现就是项目里的目录必须和manifest.json中的id字段一致


ios原生项目集成HBuilder项目_第3张图片


改完这个之后不报错了,但是更新不了,更新完显示的还是1.0版本,没变成2.0版本,我们导出手机的沙盒,就会发现更新文件存放的路径,sdk的头文件中有描述,hbuilder所有的文件都有默认的存放路径,这个demo中资源的查找路径和更新的资源存放路径不同,所以更新一直失败,这个时候需要把路径给调一致了才行。

插入以下代码(具体路径按需要调整):

NSString* pWWWPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Pandora/apps/H5EF3C469/www"];

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

NSString *s11 = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Pandora/apps/H5EF3C469/www/index.html"];

if ([[NSFileManager defaultManager] fileExistsAtPath:s11])

{

NSString *s1 = @"account=00005566&token=asfgabfdbf";

//        NSDictionary *d = @{@"accont":@"00005566",@"token":@"asfgabfdbf"};

// 启动该应用

pAppHandle = [[[PDRCore Instance] appManager] openAppAtLocation:pWWWPath withIndexPath:@"index.html" withArgs:s1 withDelegate:nil];

[[[PDRCore Instance] appManager] restart:pAppHandle];

}

else

{

dispatch_async(dispatch_get_global_queue(0, 0), ^{

[[NSFileManager defaultManager] createDirectoryAtPath:pWWWPath withIntermediateDirectories:YES attributes:nil error:nil];

[self copyFileFromPath:pWWWPath1 toPath:pWWWPath];

dispatch_async(dispatch_get_main_queue(), ^{

//回调或者说是通知主线程刷新,

NSString *s1 = @"account=00005566&token=asfgabfdbf";

//                NSDictionary *d = @{@"accont":@"00005566",@"token":@"asfgabfdbf"};

// 启动该应用

pAppHandle = [[[PDRCore Instance] appManager] openAppAtLocation:pWWWPath withIndexPath:@"index.html" withArgs:s1 withDelegate:nil];

[[[PDRCore Instance] appManager] restart:pAppHandle];

});

});

}

这个代码把项目里的文件复制到沙盒中(如果hbuilder的初始代码要修改的话,需要卸载掉重装,要不效果不会更新的,因为沙盒里复制过,直接执行沙盒中的文件了),文档的存放路径可以自己指定,我就采用的SDK里默认的路径,这个我们的集成还没完全完成,有问题再记录。

https://github.com/lllkkkggg/HBuilderDemo

你可能感兴趣的:(ios原生项目集成HBuilder项目)