美文网首页
HBuilderX 5+ App iOS离线打包与调用原生方

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

作者: 阿毛呀_ | 来源:发表于2020-12-01 11:13 被阅读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;
    }
    
    • Step2:调用自己的JS代码
    // 调用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文件。查看提示对应的模块需要添加哪些文件。将这些文件添加进去就行了。

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

    相关文章

      网友评论

          本文标题:HBuilderX 5+ App iOS离线打包与调用原生方

          本文链接:https://www.haomeiwen.com/subject/hybjwktx.html