HTML5中添加这模块只写标题,iOS打包时显示:HTML5+Runtime打包时未添加plugintest模块,请参考283...

本文介绍了在HTML5中添加自定义插件时,遇到iOS打包错误283的问题。详细展示了PluginTest.m和PluginTest.h的代码实现,包括插件方法的监听和回调。在尝试打包时,尽管模拟器运行正常,但在真机上运行报错。文章最后提出了如何创建可重现问题的demo并询问了上传ipa文件的正确步骤。

谢谢DCloud_SDK的回复。

我的PluginTest.m文件是拷贝自Builder-Integrate(20170620版本)的。具体代码如下:

import "PluginTest.h"

import "PDRCoreAppFrame.h"

import "H5WEEngineExport.h"

import "PDRToolSystemEx.h"

import

@implementation PGPluginTest

pragma mark 这个方法在使用WebApp方式集成时触发,WebView集成方式不触发

/*

WebApp启动时触发

需要在PandoraApi.bundle/feature.plist/注册插件里添加autostart值为true,global项的值设置为true

*/

(void) onAppStarted:(NSDictionary*)options{

NSLog(@"5 WebApp启动时触发");

// 可以在这个方法里向Core注册扩展插件的JS

}

// 监听基座事件事件

// 应用退出时触发

(void) onAppTerminate{

NSLog(@"APPDelegate applicationWillTerminate 事件触发时触发");

}

// 应用进入后台时触发

(void) onAppEnterBackground{

NSLog(@"APPDelegate applicationDidEnterBackground 事件触发时触发");

}

// 应用进入前天时触发

(void) onAppEnterForeground{

NSLog(@"APPDelegate applicationWillEnterForeground 事件触发时触发");

}

// 自己的逻辑代码内容包括多个实例方法和类方法,例如下面所示:

(NSString)encryptXXTEA:(NSString)data withKey:(NSString *)key {

//...

}

(NSString *)getIDFV{

//...

}

(NSMutableDictionary )getKeychainQuery:(NSString)service {

//...

}

pragma mark 以下为插件方法,由JS触发, WebView集成和WebApp集成都可以触发

(void)PluginTestFunction:(PGMethod)commands

{

if ( commands ) {

// CallBackid 异步方法的回调id,H5 会根据回调ID通知JS层运行结果成功或者失败

NSString cbId = [commands.arguments objectAtIndex:0];

// 用户的参数会在第二个参数传回

NSStringpArgument1 = [commands.arguments objectAtIndex:1];

NSString pArgument2 = [commands.arguments objectAtIndex:2];

NSStringpArgument3 = [commands.arguments objectAtIndex:3];

NSString pArgument4 = [commands.arguments objectAtIndex:4];

// 如果使用Array方式传递参数

NSArraypResultString = [NSArray arrayWithObjects:pArgument1, pArgument2, pArgument3, pArgument4, nil];

// 运行Native代码结果和预期相同,调用回调通知JS层运行成功并返回结果

// PDRCommandStatusOK 表示触发JS层成功回调方法

// PDRCommandStatusError 表示触发JS层错误回调方法

// 如果方法需要持续触发页面回调,可以通过修改 PDRPluginResult 对象的keepCallback 属性值来表示当前是否可重复回调, true 表示可以重复回调 false 表示不可重复回调 默认值为false

PDRPluginResultresult = [PDRPluginResult resultWithStatus:PDRCommandStatusOK messageAsArray: pResultString];

// 如果Native代码运行结果和预期不同,需要通过回调通知JS层出现错误,并返回错误提示

//PDRPluginResult *result = [PDRPluginResult resultWithStatus:PDRCommandStatusError messageAsString:@"惨了! 出错了! 咋(wu)整(liao)"];

// 通知JS层Native层运行结果

[self toCallback:cbId withReslut:[result toJSONString]];

}

}

(void)PluginTestFunctionArrayArgu:(PGMethod)commands

{

if ( commands ) {

// CallBackid 异步方法的回调id,H5 会根据回调ID通知JS层运行结果成功或者失败

NSString cbId = [commands.arguments objectAtIndex:0];

// 用户的参数会在第二个参数传回,可以按照Array方式传入,

NSArraypArray = [commands.arguments objectAtIndex:1];

// 如果使用Array方式传递参数

NSString pResultString = [NSString stringWithFormat:@"%@ %@ %@ %@",[pArray objectAtIndex:0], [pArray objectAtIndex:1], [pArray objectAtIndex:2], [pArray objectAtIndex:3]];

// 运行Native代码结果和预期相同,调用回调通知JS层运行成功并返回结果

PDRPluginResult result = [PDRPluginResult resultWithStatus:PDRCommandStatusOK messageAsString:pResultString];

// 如果Native代码运行结果和预期不同,需要通过回调通知JS层出现错误,并返回错误提示

//PDRPluginResultresult = [PDRPluginResult resultWithStatus:PDRCommandStatusError messageAsString:@"惨了! 出错了! 咋(wu)整(liao)"];

// 通知JS层Native层运行结果,JS Pluginbridge会根据cbid找到对应的回调方法并触发

[self toCallback:cbId withReslut:[result toJSONString]];

}

}

(NSData)PluginTestFunctionSync:(PGMethod)command

{

// 根据传入获取参数

// NSStringpArgument1 = [command.arguments objectAtIndex:0];

// NSString pArgument4 = [command.arguments objectAtIndex:3];

NSString vendorID1 = [[UIDevice currentDevice].identifierForVendor UUIDString];

// NSStringadID = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];

NSString vendorID2 = (NSString)[PGPluginTest getIDFV];

NSString xxteaKey = @"xxxxxx_xxxx_xxxx";

NSStringcipheredString = (NSString )[PGPluginTest encryptXXTEA:vendorID1 withKey:xxteaKey];

// 拼接成字符串

NSString pResultString = [NSString stringWithFormat:@"%@ %@ %@ %@",vendorID1, vendorID2, xxteaKey, cipheredString];

// 按照字符串方式返回结果

return [self resultWithString: pResultString];

}

(NSData)PluginTestFunctionSyncArrayArgu:(PGMethod)command

{

// 根据传入参数获取一个Array,可以从中获取参数

NSArraypArray = [command.arguments objectAtIndex:0];

// 创建一个作为返回值的NSDictionary

NSDictionary pResultDic = [NSDictionary dictionaryWithObjects:pArray forKeys:[NSArray arrayWithObjects:@"RetArgu1",@"RetArgu2",@"RetArgu3", @"RetArgu4", nil]];

// 返回类型为JSON,JS层在取值是需要按照JSON进行获取

return [self resultWithJSON: pResultDic];

}

@end

PluginTest.h文件内容如下:

include "PGPlugin.h"

include "PGMethod.h"

import

@interface PGPluginTest : PGPlugin

(void)PluginTestFunction:(PGMethod*)command;

(void)PluginTestFunctionArrayArgu:(PGMethod*)command;

(NSData)PluginTestFunctionSync:(PGMethod)command;

(NSData)PluginTestFunctionSyncArrayArgu:(PGMethod)command;

(void)save:(NSString )service data:(id)data;

(id)load:(NSString)service;

(void)deleteKey:(NSString )service;

(NSString)getIDFV;

(NSMutableDictionary)getKeychainQuery:(NSString)service;

(NSString)encryptXXTEA:(NSString)data withKey:(NSString *)key;

@end

在放置了SDK, HBuilder-Hello, 和HBuilder-Integrate等3个文件夹的“Documents”文件夹里面创建PluginTest工程,然后将上面PluginTest.h和PluginTest.m文件内容拷贝到PluginTest工程的PluginTest.m和PluginTest.h文件里面。

在PluginTest工程的Build Settings=>Search Paths=>Header Search Paths设置成为:$(inherited) non-recursive; $(SRCROOT)/../SDK/inc recursive; /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include non-recursive

Build Settings => Build Options => Enable Bitcode=Yes

按Command B编译成功以后得到PluginTest.a文件

打开HBuilder-Hello工程,将这个文件拖曳到HBuilder-Hello工程=>Frameworks下面,并选择“Copy items if needed”和“Create groups”选项就在Frameworks里面得到libPluginTest.a文件了。

这样在iPhone5模拟器上面运行正常。但是在真机上面运行就报283错误。

如何上传一个可重现的demo?以附件形式发送到您的邮箱(test@dcloud.io)吗?

是上传ipa文件吗?需要在xcode里面的Product=>Archive里面选择导出ipa文件吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值