# CML iOS SDK 使用范例

以一个一个小 Demo,讲述 CML iOS SDK 的使用方式,引领轻松入门。 Demo 工程在根目录 “Example” 目录下,打开 “Chameleon.xcworkspace” 文件即可打开工程。

# 工程集成

在你的 Podfile 文件中,添加如下代码(以 Demo 工程为例):

platform :ios, '9.0'

target 'Chameleon_Example' do

    #Chameleon
    pod 'Chameleon', :path => '../Chameleon/'

    #写入weex依赖。
    pod 'WeexSDK', '~> 0.19.0.2'

    #写入react_native依赖。
    pod 'React', :path => '../Chameleon/react_native/node_modules/react-native', :subspecs => [
    'Core',
    'CxxBridge', # 如果RN版本 >= 0.45则加入此行
    'DevSupport', # 如果RN版本 >= 0.43,则需要加入此行才能开启开发者菜单
    'RCTText',
    'RCTNetwork',
    'RCTWebSocket', # 这个模块是用于调试功能的
    ]

    pod 'yoga', :path => '../Chameleon/react_native/node_modules/react-native/ReactCommon/yoga'
    pod 'DoubleConversion', :podspec => '../Chameleon/react_native/node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
    pod 'glog', :podspec => '../Chameleon/react_native/node_modules/react-native/third-party-podspecs/GLog.podspec'
    pod 'Folly', :podspec => '../Chameleon/react_native/node_modules/react-native/third-party-podspecs/Folly.podspec'

end

将 podfile 保存,并运行 pod install。

# 工程中使用

# 初始化变色龙环境

在 appdelegate.m 中的 appDidFinishLaunchingWithOptions 方法中添加:

//初始化 SDK 实例 [CMLSDKEngine initSDKEnvironment]; //设置渲染引擎为 weex [CMLEnvironmentManage chameleon].serviceType = CMLServiceTypeWeex;

如果需要使用预加载的功能,则:

//设置预加载的链接地址
[CMLEnvironmentManage chameleon].weexService.config.prefetchContents = @[@"http%3A%2F%2F172.22.139.32%3A8000%2Fweex%2Fchameleon-bridge.js%3Ft%3D1546502643623"];
//启动预加载
[[CMLEnvironmentManage chameleon].weexService setupPrefetch];
  • [CMLEnvironmentManage chameleon].weexService.config 实例中可以看到更多的设置选项。

# 使用

# 实例化一个 Weex 渲染页面

以 Demo 为例:

CMLWeexRenderPage *weexDemo = [[CMLWeexRenderPage alloc] initWithLoadUrl:encodeUrl];
weexDemo.service = [CMLEnvironmentManage chameleon].weexService;
[self.navigationController pushViewController:weexDemo animated:YES];

# 实例化一个 ReactNative 渲染页面

ReactNative 的渲染容器待完善

# 添加一个自己的 Module

我们以 CMLStorageModule 为例

#import <Foundation/Foundation.h>
#import "CMLModuleProtocol.h"

//实现“CMLModuleProtocol.h”
@interface CMLStorageModule : NSObject<CMLModuleProtocol>

@property (nonatomic, weak) CMLInstance *cmlInstance;

@end
# 在实现文件中
#import "CMLStorageModule.h"
#import "CMLUtility.h"
#import "CMLConstants.h"

@implementation CMLStorageModule
@synthesize cmlInstance;

//使用 CML_EXPORT_METHOD 导出方法以供JS所调用。
CML_EXPORT_METHOD(@selector(setStorage:callBack:))

- (void)setStorage:(NSDictionary *)parms callBack:(CMLMoudleCallBack)callback{

    NSString *key = parms[@"key"];
    NSString *value = parms[@"value"];
    if (!key || key.length <= 0 || !value || value.length <=0) {
        return;
    }
    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
    [ud setValue:value forKey:key];
    [ud synchronize];

    if (callback) {
        NSDictionary *result = @{@"errno": @"0", @"msg": @""};
        if(callback) callback(result);
    }
}
@end