最近遇到一个项目需要集成原生SDK,所以就需要使用HBuilderX离线打包进行上线。iOS离线打包在Dcloud 社区有离线打包文档。但是作为一个新手的话,文档相对来说还不够详细。里面会有一些小的坑没有讲到。现在就简单的整理一下离线打包以及需要注意的点:
1:APP离线SDK下载
iOS平台SDK下载
解压缩后找到Hbuilder-Hello工程。我们只需要把HBuilderX里面导出来的包集成到工程里面就行了。放在Pandora->apps里面。
然后manifest里面的版本名、版本号什么的。照着文档往上面配就行了。这里有一点的就是。HBuilderX导出的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部分相对会复杂很多。大致分为两部分。
- Step1:遍历获取当前的View 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文件。查看提示对应的模块需要添加哪些文件。将这些文件添加进去就行了。
相对的注意点暂时就这些了,有帮助的就点个赞呗。