主要介绍SDK的使用方法;
#import <MADCore/MADCore.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
self.window.backgroundColor = [UIColor whiteColor];
//madp 初始化配置
MADCoreConfig *config = [MADCoreConfig new];
//MADCore库禁止日志
config.weexLog = WXLogLevelOff;
#ifdef DEBUG
config.weexLog = WXLogLevelInfo;
#endif
//MADP worker日志输出
config.workerLog = YES;
//sdk初始化
[MADEngine initEnvironmentWithMADCoreConfig:config callback:^() {
// 应用层注册自己的weexModule或者weexComponent
}];
[MADEngine startup];
[self.window setRootViewController:[MADEngine getRootViewController]];
[self.window makeKeyAndVisible];
return YES;
}
自定义 module,需要让自己的 class 遵循 WXModuleProtocol 这个protocol,通过 WX_EXPORT_METHOD 这个宏暴露出需要透出到 JavaScript 调用的方法,再向 MAD 注册 module,就可以完成一个简单 module 的自定义。
3.1 新建一个基类为 NSObject 的 class WXCustomEventModule,让该类遵循 WXModuleProtocol 的协议。
#import <Foundation/Foundation.h>
#import <MADCore/MADCore.h>
NS_ASSUME_NONNULL_BEGIN
@interface WXCustomEventModule : NSObject<WXModuleProtocol>
@end
NS_ASSUME_NONNULL_END
3.2 添加打印的方法,通过 WX_EXPORT_METHOD 暴露该方法。
#import "WXCustomEventModule.h"
@implementation WXCustomEventModule
WX_EXPORT_METHOD(@selector(showParams:))
- (void)showParams:(NSString *)inputParam {
NSLog(@"参数:%@",inputParam);
}
3.3 在MAD初始化block里注册该 module,需要自定义module则需使用带callback的初始化方法,以便注册module。
[MADEngine initEnvironmentWithMADCoreConfig:config callback:^{
[WXSDKEngine registerModule:@"custom-module" withClass:NSClassFromString(@"WXCustomEventModule")];
}
到此,我们已经完成了一个简单的 module 方法的封装,在 JS 里使用方法如下:
weex.requireModule("custom-module").showParams("hello Weex")
4.1 新建一个基类为 WXComponent 的类。如果这个类里什么代码也不写,它和默认的的 div 组件能力是一致的。
#import <MADCore/MADCore.h>
NS_ASSUME_NONNULL_BEGIN
@interface WXCustomComponent : WXComponent
@end
NS_ASSUME_NONNULL_END
4.2 覆盖 WXComponent 中的生命周期方法
* loadView 一个组件默认对应于一个 view,如果未覆盖 loadView 提供自定义 view,会让 WXComponent 基类创建 WXView。WXView 继承自 UIView。比如我们要实现一个组件支持地图功能,我们可以返回系统的 MKMapView。
- (UIView *)loadView {
return [MKMapView new];
}
* viewDidLoad 对组件 view 需要做一些配置,比如设置 delegate,可以在 viewDidLoad 生命周期做。如果当前 view 没有添加 subview 的话,不要设置 view 的 frame,WeexSDK 会根据 style 进行排版后设置。
- (void)viewDidLoad {
((MKMapView*)self.view).delegate = self;
}
4.3 注册组件(注册位置同注册module)
[MADEngine initEnvironmentWithMADCoreConfig:config callback:^{
[WXSDKEngine registerComponent:@"map" withClass:[WXCustomComponent class]];
}
4.4 在前端代码中使用新组件
<template>
<div>
<map style="width:200px;height:200px"></map>
</div>
</template>
更多WEEX相关用法请参考 [WEEX官网]: https://weexapp.com/zh/
typedef NS_ENUM(NSUInteger, WeexLogLevel){
/**
* No logs
*/
WXLogLevelOff = 0,
/**
* Error only
*/
WXLogLevelError = WXLogFlagError,
/**
* Error and warning
*/
WXLogLevelWarning = WXLogLevelError | WXLogFlagWarning,
/**
* Error, warning and info
*/
WXLogLevelInfo = WXLogLevelWarning | WXLogFlagInfo,
/**
* Log, warning info
*/
WXLogLevelLog = WXLogFlagLog | WXLogLevelInfo,
/**
* Error, warning, info and debug logs
*/
WXLogLevelDebug = WXLogLevelLog | WXLogFlagDebug,
/**
* All
*/
WXLogLevelAll = NSUIntegerMax
};
[MADEngine registerModule:@"web" withController:[CustomWebViewController class]];
如果使用过“web”注册,将使用自定义的web容器替换产品中内置的;
若要保留内置的容器,需要用其他字符注册,并在后管中配置对应的容器类型。
抓包调试
由于SDK的通讯层未使用系统代理,所以不能直接使用常用的抓包方式;
解决方法:sdk初始化时使用接口配置抓包代理服务地址;
…………