HBuilderX 5+ App iOS离线打包与调用原生方

2020-12-01  本文已影响0人  阿毛呀_

最近遇到一个项目需要集成原生SDK,所以就需要使用HBuilderX离线打包进行上线。iOS离线打包在Dcloud 社区有离线打包文档。但是作为一个新手的话,文档相对来说还不够详细。里面会有一些小的坑没有讲到。现在就简单的整理一下离线打包以及需要注意的点:

1:APP离线SDK下载

iOS平台SDK下载
解压缩后找到Hbuilder-Hello工程。我们只需要把HBuilderX里面导出来的包集成到工程里面就行了。放在Pandora->apps里面。
然后manifest里面的版本名、版本号什么的。照着文档往上面配就行了。这里有一点的就是。HBuilderX导出的manifest.json文件里面是有注释的

manifest.json文件注释 这些注释需要全部删除掉。不然项目跑不起来。
还有就是Hbuilder-Hello工程需要和SDK文件夹在同一个目录下面,不然项目也是跑不起来的。
2:启动图、APPIcon

这个就按照文档配置就行了,没什么可说的。
需要注意的一点是。在2020年6月份之后不能在Xcode工程的Image.xcassets里面新建iOS launch Image配置启动图,会被拒。所以只能使用LaunchScreen.storyboard配置启动图。导入图片设置约束即可。

3:调用iOS原生工程的方法

离线打包涉及到的调用原生工程的方法,如果之前没有经验,还是很多坑的。例子是OC的
首先在原生项目中写好自己的方法

-(void)HbuilderFunction:(NSString *)parameter1 parameter2:(NSString *)parameter2 {
    // 对应方法需要做的事
}

js 调用 oc方法。

function iosFunction(parameter1, parameter2){
    var ViewController = plus.ios.newObject("方法当前所在ViewController");
    plus.ios.invoke(ViewController , "HbuilderFunction:parameter1:parameter2", parameter1 , parameter2);
}

注意点:调用原生项目方法时。方法名、参数之间是用冒号: 隔开的,一一对应。对应的ViewController写对。
oc 调用 js 部分
oc调用js部分相对会复杂很多。大致分为两部分。

// 遍历获取当前view
-(NSMutableArray*)searchViews:(NSArray*)views{
    NSMutableArray *frames = [NSMutableArray array];
    for (UIView *temp in views) {
        if ([temp isMemberOfClass:[PDRCoreAppFrame class]]) {
            [frames addObject:temp];
        }
        if ([temp subviews]) {
            NSMutableArray *tempArray = [self searchViews:[temp subviews]];
            for (UIView *tempView in tempArray) {
                if ([tempView isMemberOfClass:[PDRCoreAppFrame class]]) {
                    [frames addObject:tempView];
                }
            }
        }
    }
    return frames;
}
// 调用js部分代码,jsFunction是自己项目中的方法名
-(void)evaluatingJavaScriptFromString:(NSString *)parameter1 parameter2:(NSString *)parameter2{
    NSString *evaluatString = [NSString stringWithFormat:@"javascript:jsFunction('%@','%@')",parameter1,parameter2];
    UIWindow *window = [[UIApplication sharedApplication] keyWindow];
    NSArray *views = [[[window rootViewController] view] subviews];
    NSArray *frames = [self searchViews:views];
    for (PDRCoreAppFrame *appFrame in frames) {
       // 当前页的URL ,通过下面代码可以获取当前页的url
       // NSString *url = appFrame.currenLocationHref ;
      //  NSLog(@"pFrame============%@",url);
      // 这里需要异步处理
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [appFrame performSelectorOnMainThread:@selector(stringByEvaluatingJavaScriptFromString:) withObject:evaluatString waitUntilDone:NO];});
    }
}
4:提示打包时未添加***模块

这个就在SDK中找到Feature-iOS.xls文件。查看提示对应的模块需要添加哪些文件。将这些文件添加进去就行了。

相对的注意点暂时就这些了,有帮助的就点个赞呗。

上一篇下一篇

猜你喜欢

热点阅读