diff --git a/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h b/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
index 6280db6..dee6a8c 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
@@ -50,11 +50,11 @@
      *  View
      */
     UIColor *_styleBackgroundColor;
-    UIColor *_darkThemeBackgroundColor;
-    UIColor *_lightThemeBackgroundColor;
+    UIColor *_darkSchemeBackgroundColor;
+    UIColor *_lightSchemeBackgroundColor;
     NSString *_backgroundImage;
-    NSString *_darkThemeBackgroundImage;
-    NSString *_lightThemeBackgroundImage;
+    NSString *_darkSchemeBackgroundImage;
+    NSString *_lightSchemeBackgroundImage;
     NSString *_clipRadius;
     WXClipType _clipToBounds;
     UIView *_view;
@@ -63,8 +63,8 @@
     WXBoxShadow *_originalBoxShadow;
     WXBoxShadow *_lastBoxShadow;
     WXBoxShadow *_boxShadow;
-    WXBoxShadow *_darkThemeBoxShadow;
-    WXBoxShadow *_lightThemeBoxShadow;
+    WXBoxShadow *_darkSchemeBoxShadow;
+    WXBoxShadow *_lightSchemeBoxShadow;
     
     /**
      * accessibility support
@@ -121,17 +121,17 @@
     WXThreadSafeCounter *_displayCounter;
     
     UIColor *_borderTopColor;
-    UIColor *_darkThemeBorderTopColor;
-    UIColor *_lightThemeBorderTopColor;
+    UIColor *_darkSchemeBorderTopColor;
+    UIColor *_lightSchemeBorderTopColor;
     UIColor *_borderRightColor;
-    UIColor *_darkThemeBorderRightColor;
-    UIColor *_lightThemeBorderRightColor;
+    UIColor *_darkSchemeBorderRightColor;
+    UIColor *_lightSchemeBorderRightColor;
     UIColor *_borderLeftColor;
-    UIColor *_darkThemeBorderLeftColor;
-    UIColor *_lightThemeBorderLeftColor;
+    UIColor *_darkSchemeBorderLeftColor;
+    UIColor *_lightSchemeBorderLeftColor;
     UIColor *_borderBottomColor;
-    UIColor *_darkThemeBorderBottomColor;
-    UIColor *_lightThemeBorderBottomColor;
+    UIColor *_darkSchemeBorderBottomColor;
+    UIColor *_lightSchemeBorderBottomColor;
     
     CGFloat _borderTopWidth;
     CGFloat _borderRightWidth;
@@ -193,8 +193,8 @@
  DO NOT use "_backgroundColor" directly. The same reason as '_transform'.
  */
 @property (atomic, strong) UIColor* styleBackgroundColor;
-@property (atomic, strong) UIColor* darkThemeBackgroundColor;
-@property (atomic, strong) UIColor* lightThemeBackgroundColor;
+@property (atomic, strong) UIColor* darkSchemeBackgroundColor;
+@property (atomic, strong) UIColor* lightSchemeBackgroundColor;
 
 ///--------------------------------------
 /// @name Package Internal Methods
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
index 436ac1c..54700e0 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
@@ -58,11 +58,11 @@
 }
 
 @property (atomic, strong) NSString *src;
-@property (atomic, strong) NSString *darkThemeSrc;
-@property (atomic, strong) NSString *lightThemeSrc;
+@property (atomic, strong) NSString *darkSchemeSrc;
+@property (atomic, strong) NSString *lightSchemeSrc;
 @property (atomic, strong) NSString *placeholdSrc;
-@property (atomic, strong) NSString *darkThemePlaceholderSrc;
-@property (atomic, strong) NSString *lightThemePlaceholderSrc;
+@property (atomic, strong) NSString *darkSchemePlaceholderSrc;
+@property (atomic, strong) NSString *lightSchemePlaceholderSrc;
 @property (nonatomic, assign) CGFloat blurRadius;
 @property (nonatomic, assign) UIViewContentMode resizeMode;
 @property (nonatomic, assign) WXImageQuality imageQuality;
@@ -95,11 +95,11 @@
         } else {
             WXLogWarning(@"image src is nil");
         }
-        if (attributes[@"darkThemeSrc"]) {
-            self.darkThemeSrc = [[WXConvert NSString:attributes[@"darkThemeSrc"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+        if (attributes[@"darkSchemeSrc"]) {
+            self.darkSchemeSrc = [[WXConvert NSString:attributes[@"darkSchemeSrc"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
         }
-        if (attributes[@"lightThemeSrc"]) {
-            self.lightThemeSrc = [[WXConvert NSString:attributes[@"lightThemeSrc"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+        if (attributes[@"lightSchemeSrc"]) {
+            self.lightSchemeSrc = [[WXConvert NSString:attributes[@"lightSchemeSrc"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
         }
         
         [self configPlaceHolder:attributes];
@@ -138,11 +138,11 @@
     if (attributes[@"placeHolder"] || attributes[@"placeholder"]) {
         self.placeholdSrc = [[WXConvert NSString:attributes[@"placeHolder"]?:attributes[@"placeholder"]]stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
     }
-    if (attributes[@"darkThemePlaceholder"]) {
-        self.darkThemePlaceholderSrc = [[WXConvert NSString:attributes[@"darkThemePlaceholder"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+    if (attributes[@"darkSchemePlaceholder"]) {
+        self.darkSchemePlaceholderSrc = [[WXConvert NSString:attributes[@"darkSchemePlaceholder"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
     }
-    if (attributes[@"lightThemePlaceholder"]) {
-        self.lightThemePlaceholderSrc = [[WXConvert NSString:attributes[@"lightThemePlaceholder"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+    if (attributes[@"lightSchemePlaceholder"]) {
+        self.lightSchemePlaceholderSrc = [[WXConvert NSString:attributes[@"lightSchemePlaceholder"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
     }
 }
 
@@ -271,11 +271,11 @@
 
 - (void)updateAttributes:(NSDictionary *)attributes
 {
-    if (attributes[@"darkThemeSrc"]) {
-        self.darkThemeSrc = [[WXConvert NSString:attributes[@"darkThemeSrc"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+    if (attributes[@"darkSchemeSrc"]) {
+        self.darkSchemeSrc = [[WXConvert NSString:attributes[@"darkSchemeSrc"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
     }
-    if (attributes[@"lightThemeSrc"]) {
-        self.lightThemeSrc = [[WXConvert NSString:attributes[@"lightThemeSrc"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+    if (attributes[@"lightSchemeSrc"]) {
+        self.lightSchemeSrc = [[WXConvert NSString:attributes[@"lightSchemeSrc"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
     }
     if (attributes[@"src"]) {
         [self setImageSrc:[[WXConvert NSString:attributes[@"src"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
@@ -308,12 +308,12 @@
     [self updateImage];
 }
 
-- (void)themeDidChange:(NSString*)theme
+- (void)schemeDidChange:(NSString*)scheme
 {
-    [super themeDidChange:theme];
+    [super schemeDidChange:scheme];
     if (_view) {
-        if (self.darkThemeSrc || self.darkThemePlaceholderSrc ||
-            self.lightThemeSrc || self.lightThemePlaceholderSrc) {
+        if (self.darkSchemeSrc || self.darkSchemePlaceholderSrc ||
+            self.lightSchemeSrc || self.lightSchemePlaceholderSrc) {
             [self updateImage];
         }
     }
@@ -405,7 +405,7 @@
 
 - (NSString*)chooseImage:(NSString*)src lightSrc:(NSString*)lightSrc darkSrc:(NSString*)darkSrc
 {
-    if ([self.weexInstance isDarkTheme]) {
+    if ([self.weexInstance isDarkScheme]) {
         if (darkSrc) {
             return darkSrc;
         }
@@ -428,8 +428,8 @@
         return;
     }
     
-    NSString* choosedSrc = [self chooseImage:self.src lightSrc:self.lightThemeSrc darkSrc:self.darkThemeSrc];
-    NSString* choosedPlaceholder = [self chooseImage:self.placeholdSrc lightSrc:self.lightThemePlaceholderSrc darkSrc:self.darkThemePlaceholderSrc];
+    NSString* choosedSrc = [self chooseImage:self.src lightSrc:self.lightSchemeSrc darkSrc:self.darkSchemeSrc];
+    NSString* choosedPlaceholder = [self chooseImage:self.placeholdSrc lightSrc:self.lightSchemePlaceholderSrc darkSrc:self.darkSchemePlaceholderSrc];
     
     __weak typeof(self) weakSelf = self;
     if (_downloadImageWithURL && [[self imageLoader] respondsToSelector:@selector(setImageViewWithURL:url:placeholderImage:options:progress:completed:)]) {
@@ -560,7 +560,7 @@
 
 - (void)updatePlaceHolderWithFailedBlock:(void(^)(NSString *, NSError *))downloadFailedBlock
 {
-    NSString* choosedPlaceholder = [self chooseImage:self.placeholdSrc lightSrc:self.lightThemePlaceholderSrc darkSrc:self.darkThemePlaceholderSrc];
+    NSString* choosedPlaceholder = [self chooseImage:self.placeholdSrc lightSrc:self.lightSchemePlaceholderSrc darkSrc:self.darkSchemePlaceholderSrc];
     
     if ([WXUtility isBlankString:choosedPlaceholder]) {
         return;
@@ -590,7 +590,7 @@
                 return;
             }
             
-            NSString* currentPlaceholder = [strongSelf chooseImage:strongSelf.placeholdSrc lightSrc:strongSelf.lightThemePlaceholderSrc darkSrc:strongSelf.darkThemePlaceholderSrc];
+            NSString* currentPlaceholder = [strongSelf chooseImage:strongSelf.placeholdSrc lightSrc:strongSelf.lightSchemePlaceholderSrc darkSrc:strongSelf.darkSchemePlaceholderSrc];
             if (![choosedPlaceholder isEqualToString:currentPlaceholder]) {
                 return;
             }
@@ -609,7 +609,7 @@
 
 - (void)updateContentImageWithFailedBlock:(void(^)(NSString *, NSError *))downloadFailedBlock
 {
-    NSString* choosedSrc = [self chooseImage:self.src lightSrc:self.lightThemeSrc darkSrc:self.darkThemeSrc];
+    NSString* choosedSrc = [self chooseImage:self.src lightSrc:self.lightSchemeSrc darkSrc:self.darkSchemeSrc];
     
     if ([WXUtility isBlankString:choosedSrc]) {
         WXLogError(@"image src is empty");
@@ -646,7 +646,7 @@
                 return ;
             }
             
-            NSString* currentSrc = [strongSelf chooseImage:strongSelf.src lightSrc:strongSelf.lightThemeSrc darkSrc:strongSelf.darkThemeSrc];
+            NSString* currentSrc = [strongSelf chooseImage:strongSelf.src lightSrc:strongSelf.lightSchemeSrc darkSrc:strongSelf.darkSchemeSrc];
             if (![choosedSrc isEqualToString:currentSrc]) {
                 return ;
             }
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXRichText.mm b/ios/sdk/WeexSDK/Sources/Component/WXRichText.mm
index fa5a750..341c2a7 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXRichText.mm
+++ b/ios/sdk/WeexSDK/Sources/Component/WXRichText.mm
@@ -27,7 +27,7 @@
 #import "WXImgLoaderProtocol.h"
 #import "WXComponentManager.h"
 #import "WXLog.h"
-#import "WXDarkThemeProtocol.h"
+#import "WXDarkSchemeProtocol.h"
 #include <pthread/pthread.h>
 
 @interface WXRichNode : NSObject
@@ -36,11 +36,11 @@
 @property (nonatomic, strong) NSString  *ref;
 @property (nonatomic, strong) NSString  *text;
 @property (nonatomic, strong) UIColor   *color;
-@property (nonatomic, strong) UIColor   *darkThemeColor;
-@property (nonatomic, strong) UIColor   *lightThemeColor;
+@property (nonatomic, strong) UIColor   *darkSchemeColor;
+@property (nonatomic, strong) UIColor   *lightSchemeColor;
 @property (nonatomic, strong) UIColor   *backgroundColor;
-@property (nonatomic, strong) UIColor   *darkThemeBackgroundColor;
-@property (nonatomic, strong) UIColor   *lightThemeBackgroundColor;
+@property (nonatomic, strong) UIColor   *darkSchemeBackgroundColor;
+@property (nonatomic, strong) UIColor   *lightSchemeBackgroundColor;
 @property (nonatomic, strong) NSString  *fontFamily;
 @property (nonatomic, assign) CGFloat   fontSize;
 @property (nonatomic, assign) CGFloat   fontWeight;
@@ -97,7 +97,7 @@
     if (value) { \
         node.key = [WXConvert type:value];\
     } else if (!([@#key isEqualToString:@"backgroundColor"] || \
-        [@#key isEqualToString:@"darkThemeBackgroundColor"] || \
+        [@#key isEqualToString:@"weexDarkSchemeBackgroundColor"] || \
         [@#key isEqualToString:@"textDecoration"]) && superNode.key ) { \
         node.key = superNode.key; \
     } \
@@ -197,11 +197,11 @@
 - (void)fillCSSStyles:(NSDictionary *)styles toNode:(WXRichNode *)node superNode:(WXRichNode *)superNode
 {
     WX_STYLE_FILL_RICHTEXT(color, UIColor)
-    WX_STYLE_FILL_RICHTEXT(darkThemeColor, UIColor)
-    WX_STYLE_FILL_RICHTEXT(lightThemeColor, UIColor)
+    WX_STYLE_FILL_RICHTEXT(darkSchemeColor, UIColor)
+    WX_STYLE_FILL_RICHTEXT(lightSchemeColor, UIColor)
     WX_STYLE_FILL_RICHTEXT(backgroundColor, UIColor)
-    WX_STYLE_FILL_RICHTEXT(darkThemeBackgroundColor, UIColor)
-    WX_STYLE_FILL_RICHTEXT(lightThemeBackgroundColor, UIColor)
+    WX_STYLE_FILL_RICHTEXT(darkSchemeBackgroundColor, UIColor)
+    WX_STYLE_FILL_RICHTEXT(lightSchemeBackgroundColor, UIColor)
     WX_STYLE_FILL_RICHTEXT(fontFamily, NSString)
     WX_STYLE_FILL_RICHTEXT_PIXEL(fontSize)
     WX_STYLE_FILL_RICHTEXT(fontWeight, WXTextWeight)
@@ -432,9 +432,9 @@
     };
 }
 
-- (void)themeDidChange:(NSString*)theme
+- (void)schemeDidChange:(NSString*)scheme
 {
-    [super themeDidChange:theme];
+    [super schemeDidChange:scheme];
     if ([self isViewLoaded]) {
         // Force inner layout
         [self innerLayout];
@@ -459,14 +459,14 @@
     NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] init];
     NSUInteger location;
     
-    BOOL invert = self.invertForDarkTheme;
+    BOOL invert = self.invertForDarkScheme;
     
     // Invert default background color.
     UIColor* defaultTextColor = [UIColor blackColor];
     UIColor* defaultBackgroundColor = _backgroundColor;
-    if (invert && [self.weexInstance isDarkTheme]) {
-        defaultTextColor = [[WXSDKInstance darkThemeColorHandler] getInvertedColorFor:[UIColor blackColor] ofScene:[self colorSceneType] withDefault:[UIColor blackColor]];
-        defaultBackgroundColor = [[WXSDKInstance darkThemeColorHandler] getInvertedColorFor:_backgroundColor ofScene:[self colorSceneType] withDefault:_backgroundColor];
+    if (invert && [self.weexInstance isDarkScheme]) {
+        defaultTextColor = [[WXSDKInstance darkSchemeColorHandler] getInvertedColorFor:[UIColor blackColor] ofScene:[self colorSceneType] withDefault:[UIColor blackColor]];
+        defaultBackgroundColor = [[WXSDKInstance darkSchemeColorHandler] getInvertedColorFor:_backgroundColor ofScene:[self colorSceneType] withDefault:_backgroundColor];
     }
     
     __weak typeof(self) weakSelf = self;
@@ -479,8 +479,8 @@
                 [attrStr.mutableString appendString:text];
                 
                 NSRange range = NSMakeRange(location, text.length);
-                UIColor* textColor = [self.weexInstance chooseColor:node.color lightThemeColor:node.lightThemeColor darkThemeColor:node.darkThemeColor invert:invert scene:[self colorSceneType]];
-                UIColor* bgColor = [self.weexInstance chooseColor:node.backgroundColor lightThemeColor:node.lightThemeBackgroundColor darkThemeColor:node.darkThemeBackgroundColor invert:invert scene:[self colorSceneType]];
+                UIColor* textColor = [self.weexInstance chooseColor:node.color lightSchemeColor:node.lightSchemeColor darkSchemeColor:node.darkSchemeColor invert:invert scene:[self colorSceneType]];
+                UIColor* bgColor = [self.weexInstance chooseColor:node.backgroundColor lightSchemeColor:node.lightSchemeBackgroundColor darkSchemeColor:node.darkSchemeBackgroundColor invert:invert scene:[self colorSceneType]];
                 [attrStr addAttribute:NSForegroundColorAttributeName value:textColor ?: defaultTextColor range:range];
                 [attrStr addAttribute:NSBackgroundColorAttributeName value:bgColor ?: defaultBackgroundColor range:range];
                 
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.mm b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.mm
index 4d6e52e..c937680 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.mm
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.mm
@@ -121,8 +121,8 @@
 @interface WXTextComponent()
 @property (atomic, strong) NSString *fontFamily;
 @property (atomic, strong) UIColor *textColor;
-@property (atomic, strong) UIColor *darkThemeTextColor;
-@property (atomic, strong) UIColor *lightThemeTextColor;
+@property (atomic, strong) UIColor *darkSchemeTextColor;
+@property (atomic, strong) UIColor *lightSchemeTextColor;
 @end
 
 @implementation WXTextComponent
@@ -282,7 +282,7 @@
 
     do {
         UIColor* color = nil;
-        id value = styles[@"darkThemeColor"];
+        id value = styles[@"weexDarkSchemeColor"];
         if (value) {
             if([WXUtility isBlankString:value]){
                 color = [UIColor blackColor];
@@ -290,7 +290,7 @@
                 color = [WXConvert UIColor:value];
             }
             if (color) {
-                self.darkThemeTextColor = color;
+                self.darkSchemeTextColor = color;
                 [self setNeedsRepaint];
             }
         }
@@ -298,7 +298,7 @@
     
     do {
         UIColor* color = nil;
-        id value = styles[@"lightThemeColor"];
+        id value = styles[@"weexLightSchemeColor"];
         if (value) {
             if([WXUtility isBlankString:value]){
                 color = [UIColor blackColor];
@@ -306,7 +306,7 @@
                 color = [WXConvert UIColor:value];
             }
             if (color) {
-                self.lightThemeTextColor = color;
+                self.lightSchemeTextColor = color;
                 [self setNeedsRepaint];
             }
         }
@@ -403,10 +403,10 @@
     [self setNeedsRepaint];
 }
 
-- (void)themeDidChange:(NSString*)theme
+- (void)schemeDidChange:(NSString*)scheme
 {
     [self setNeedsRepaint];
-    [super themeDidChange:theme];
+    [super schemeDidChange:scheme];
     if (_view) {
         [self setNeedsDisplay];
     }
@@ -543,7 +543,7 @@
         string = @"";
     }
     NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString: string];
-    UIColor* textColor = [self.weexInstance chooseColor:self.textColor lightThemeColor:self.lightThemeTextColor darkThemeColor:self.darkThemeTextColor invert:self.invertForDarkTheme scene:[self colorSceneType]];
+    UIColor* textColor = [self.weexInstance chooseColor:self.textColor lightSchemeColor:self.lightSchemeTextColor darkSchemeColor:self.darkSchemeTextColor invert:self.invertForDarkScheme scene:[self colorSceneType]];
     if (textColor) {
         [attributedString addAttribute:NSForegroundColorAttributeName value:textColor range:NSMakeRange(0, string.length)];
     }
@@ -632,7 +632,7 @@
     NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
     
     // set textColor
-    UIColor* textColor = [self.weexInstance chooseColor:self.textColor lightThemeColor:self.lightThemeTextColor darkThemeColor:self.darkThemeTextColor invert:self.invertForDarkTheme scene:[self colorSceneType]];
+    UIColor* textColor = [self.weexInstance chooseColor:self.textColor lightSchemeColor:self.lightSchemeTextColor darkSchemeColor:self.darkSchemeTextColor invert:self.invertForDarkScheme scene:[self colorSceneType]];
     if (textColor) {
         [attributedString addAttribute:NSForegroundColorAttributeName value:textColor range:NSMakeRange(0, string.length)];
     }
@@ -1163,12 +1163,12 @@
         self.textColor = [UIColor blackColor];
         [self setNeedsRepaint];
     }
-    if ([styles containsObject:@"darkThemeColor"]) {
-        self.darkThemeTextColor = nil;
+    if ([styles containsObject:@"weexDarkSchemeColor"]) {
+        self.darkSchemeTextColor = nil;
         [self setNeedsRepaint];
     }
-    if ([styles containsObject:@"lightThemeColor"]) {
-        self.lightThemeTextColor = nil;
+    if ([styles containsObject:@"weexLightSchemeColor"]) {
+        self.lightSchemeTextColor = nil;
         [self setNeedsRepaint];
     }
     if ([styles containsObject:@"fontSize"]) {
diff --git a/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m b/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m
index 964e059..2251731 100644
--- a/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m
+++ b/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m
@@ -29,7 +29,7 @@
 #import "UIBezierPath+Weex.h"
 #import "WXRoundedRect.h"
 #import "WXSDKInstance.h"
-#import "WXDarkThemeProtocol.h"
+#import "WXDarkSchemeProtocol.h"
 #import "WXHandlerFactory.h"
 
 #pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
@@ -104,13 +104,13 @@
     WXAssertMainThread();
 }
 
-- (void)themeDidChange:(NSString*)theme
+- (void)schemeDidChange:(NSString*)scheme
 {
     WXAssertMainThread();
     if (_view) {
         if (![self _needsDrawBorder]) {
-            _layer.borderColor = [self.weexInstance chooseColor:_borderTopColor lightThemeColor:_lightThemeBorderTopColor darkThemeColor:_darkThemeBorderTopColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor;
-            _layer.backgroundColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightThemeColor:self.lightThemeBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor;
+            _layer.borderColor = [self.weexInstance chooseColor:_borderTopColor lightSchemeColor:_lightSchemeBorderTopColor darkSchemeColor:_darkSchemeBorderTopColor invert:self.invertForDarkScheme scene:[self colorSceneType]].CGColor;
+            _layer.backgroundColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightSchemeColor:self.lightSchemeBackgroundColor darkSchemeColor:self.darkSchemeBackgroundColor invert:self.invertForDarkScheme scene:[self colorSceneType]].CGColor;
         }
         else {
             [self setNeedsDisplay];
@@ -321,7 +321,7 @@
 - (void)_collectCompositingDisplayBlocks:(NSMutableArray *)displayBlocks context:(CGContextRef)context isCancelled:(BOOL(^)(void))isCancelled
 {
     // TODO: compositingChild has no chance to applyPropertiesToView, need update here?
-    UIColor *backgroundColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightThemeColor:self.lightThemeBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:self.invertForDarkTheme scene:[self colorSceneType]];
+    UIColor *backgroundColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightSchemeColor:self.lightSchemeBackgroundColor darkSchemeColor:self.darkSchemeBackgroundColor invert:self.invertForDarkScheme scene:[self colorSceneType]];
     BOOL clipsToBounds = _clipToBounds;
     CGRect frame = self.calculatedFrame;
     CGRect bounds = CGRectMake(0, 0, frame.size.width, frame.size.height);
@@ -381,7 +381,7 @@
     
     CGContextSetAlpha(context, _opacity);
     // fill background color
-    UIColor* bgColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightThemeColor:self.lightThemeBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:self.invertForDarkTheme scene:[self colorSceneType]];
+    UIColor* bgColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightSchemeColor:self.lightSchemeBackgroundColor darkSchemeColor:self.darkSchemeBackgroundColor invert:self.invertForDarkScheme scene:[self colorSceneType]];
     
     if (bgColor && [bgColor respondsToSelector:@selector(CGColor)]) {
         if (CGColorGetAlpha(bgColor.CGColor) > 0) {
@@ -408,7 +408,7 @@
         }
         CGContextSetLineWidth(context, _borderTopWidth);
         CGContextSetStrokeColorWithColor(context,
-                                         [self.weexInstance chooseColor:_borderTopColor lightThemeColor:_lightThemeBorderTopColor darkThemeColor:_darkThemeBorderTopColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor);
+                                         [self.weexInstance chooseColor:_borderTopColor lightSchemeColor:_lightSchemeBorderTopColor darkSchemeColor:_darkSchemeBorderTopColor invert:self.invertForDarkScheme scene:[self colorSceneType]].CGColor);
         CGContextAddArc(context, size.width-topRight, topRight, topRight-_borderTopWidth/2, -M_PI_4+(_borderRightWidth>0?0:M_PI_4), -M_PI_2, 1);
         CGContextMoveToPoint(context, size.width-topRight, _borderTopWidth/2);
         CGContextAddLineToPoint(context, topLeft, _borderTopWidth/2);
@@ -430,7 +430,7 @@
         }
         CGContextSetLineWidth(context, _borderLeftWidth);
         CGContextSetStrokeColorWithColor(context,
-                                         [self.weexInstance chooseColor:_borderLeftColor lightThemeColor:_lightThemeBorderLeftColor darkThemeColor:_darkThemeBorderLeftColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor);
+                                         [self.weexInstance chooseColor:_borderLeftColor lightSchemeColor:_lightSchemeBorderLeftColor darkSchemeColor:_darkSchemeBorderLeftColor invert:self.invertForDarkScheme scene:[self colorSceneType]].CGColor);
         CGContextAddArc(context, topLeft, topLeft, topLeft-_borderLeftWidth/2, -M_PI, -M_PI_2-M_PI_4+(_borderTopWidth > 0?0:M_PI_4), 0);
         CGContextMoveToPoint(context, _borderLeftWidth/2, topLeft);
         CGContextAddLineToPoint(context, _borderLeftWidth/2, size.height-bottomLeft);
@@ -452,7 +452,7 @@
         }
         CGContextSetLineWidth(context, _borderBottomWidth);
         CGContextSetStrokeColorWithColor(context,
-                                         [self.weexInstance chooseColor:_borderBottomColor lightThemeColor:_lightThemeBorderBottomColor darkThemeColor:_darkThemeBorderBottomColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor);
+                                         [self.weexInstance chooseColor:_borderBottomColor lightSchemeColor:_lightSchemeBorderBottomColor darkSchemeColor:_darkSchemeBorderBottomColor invert:self.invertForDarkScheme scene:[self colorSceneType]].CGColor);
         CGContextAddArc(context, bottomLeft, size.height-bottomLeft, bottomLeft-_borderBottomWidth/2, M_PI-M_PI_4+(_borderLeftWidth>0?0:M_PI_4), M_PI_2, 1);
         CGContextMoveToPoint(context, bottomLeft, size.height-_borderBottomWidth/2);
         CGContextAddLineToPoint(context, size.width-bottomRight, size.height-_borderBottomWidth/2);
@@ -474,7 +474,7 @@
         }
         CGContextSetLineWidth(context, _borderRightWidth);
         CGContextSetStrokeColorWithColor(context,
-                                         [self.weexInstance chooseColor:_borderRightColor lightThemeColor:_lightThemeBorderRightColor darkThemeColor:_darkThemeBorderRightColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor);
+                                         [self.weexInstance chooseColor:_borderRightColor lightSchemeColor:_lightSchemeBorderRightColor darkSchemeColor:_darkSchemeBorderRightColor invert:self.invertForDarkScheme scene:[self colorSceneType]].CGColor);
         CGContextAddArc(context, size.width-bottomRight, size.height-bottomRight, bottomRight-_borderRightWidth/2, M_PI_4+(_borderBottomWidth>0?0:M_PI_4), 0, 1);
         CGContextMoveToPoint(context, size.width-_borderRightWidth/2, size.height-bottomRight);
         CGContextAddLineToPoint(context, size.width-_borderRightWidth/2, topRight);
@@ -531,12 +531,12 @@
         return YES;
     }
     
-    BOOL invert = self.invertForDarkTheme;
+    BOOL invert = self.invertForDarkScheme;
     WXColorScene scene = [self colorSceneType];
-    UIColor* usingBorderTopColor = [self.weexInstance chooseColor:_borderTopColor lightThemeColor:_lightThemeBorderTopColor darkThemeColor:_darkThemeBorderTopColor invert:invert scene:scene];
-    UIColor* usingBorderRightColor = [self.weexInstance chooseColor:_borderRightColor lightThemeColor:_lightThemeBorderRightColor darkThemeColor:_darkThemeBorderRightColor invert:invert scene:scene];
-    UIColor* usingBorderBottomColor = [self.weexInstance chooseColor:_borderBottomColor lightThemeColor:_lightThemeBorderBottomColor darkThemeColor:_darkThemeBorderBottomColor invert:invert scene:scene];
-    UIColor* usingBorderLeftColor = [self.weexInstance chooseColor:_borderLeftColor lightThemeColor:_lightThemeBorderLeftColor darkThemeColor:_darkThemeBorderLeftColor invert:invert scene:scene];
+    UIColor* usingBorderTopColor = [self.weexInstance chooseColor:_borderTopColor lightSchemeColor:_lightSchemeBorderTopColor darkSchemeColor:_darkSchemeBorderTopColor invert:invert scene:scene];
+    UIColor* usingBorderRightColor = [self.weexInstance chooseColor:_borderRightColor lightSchemeColor:_lightSchemeBorderRightColor darkSchemeColor:_darkSchemeBorderRightColor invert:invert scene:scene];
+    UIColor* usingBorderBottomColor = [self.weexInstance chooseColor:_borderBottomColor lightSchemeColor:_lightSchemeBorderBottomColor darkSchemeColor:_darkSchemeBorderBottomColor invert:invert scene:scene];
+    UIColor* usingBorderLeftColor = [self.weexInstance chooseColor:_borderLeftColor lightSchemeColor:_lightSchemeBorderLeftColor darkSchemeColor:_darkSchemeBorderLeftColor invert:invert scene:scene];
     
     BOOL colorEqual = [usingBorderTopColor isEqual:usingBorderRightColor] &&
         [usingBorderRightColor isEqual:usingBorderBottomColor] &&
@@ -635,24 +635,24 @@
     WX_CHECK_BORDER_PROP(Color, Top, Left, Bottom, Right, UIColor)
     do {
         BOOL needsDisplay = NO;
-        if (styles[@"darkThemeBorderColor"]) {
-            _darkThemeBorderTopColor = _darkThemeBorderLeftColor = _darkThemeBorderRightColor = _darkThemeBorderBottomColor = [WXConvert UIColor:styles[@"darkThemeBorderColor"]];
+        if (styles[@"weexDarkSchemeBorderColor"]) {
+            _darkSchemeBorderTopColor = _darkSchemeBorderLeftColor = _darkSchemeBorderRightColor = _darkSchemeBorderBottomColor = [WXConvert UIColor:styles[@"weexDarkSchemeBorderColor"]];
             needsDisplay = YES;
         }
-        if (styles[@"darkThemeBorderTopColor"]) {
-            _darkThemeBorderTopColor = [WXConvert UIColor:styles[@"darkThemeBorderTopColor"]];
+        if (styles[@"weexDarkSchemeBorderTopColor"]) {
+            _darkSchemeBorderTopColor = [WXConvert UIColor:styles[@"weexDarkSchemeBorderTopColor"]];
             needsDisplay = YES;
         }
-        if (styles[@"darkThemeBorderLeftColor"]) {
-            _darkThemeBorderLeftColor = [WXConvert UIColor:styles[@"darkThemeBorderLeftColor"]];
+        if (styles[@"weexDarkSchemeBorderLeftColor"]) {
+            _darkSchemeBorderLeftColor = [WXConvert UIColor:styles[@"weexDarkSchemeBorderLeftColor"]];
             needsDisplay = YES;
         }
-        if (styles[@"darkThemeBorderRightColor"]) {
-            _darkThemeBorderRightColor = [WXConvert UIColor:styles[@"darkThemeBorderRightColor"]];
+        if (styles[@"weexDarkSchemeBorderRightColor"]) {
+            _darkSchemeBorderRightColor = [WXConvert UIColor:styles[@"weexDarkSchemeBorderRightColor"]];
             needsDisplay = YES;
         }
-        if (styles[@"darkThemeBorderBottomColor"]) {
-            _darkThemeBorderBottomColor = [WXConvert UIColor:styles[@"darkThemeBorderBottomColor"]];
+        if (styles[@"weexDarkSchemeBorderBottomColor"]) {
+            _darkSchemeBorderBottomColor = [WXConvert UIColor:styles[@"weexDarkSchemeBorderBottomColor"]];
             needsDisplay = YES;
         }
         if (needsDisplay && updating) {
@@ -661,24 +661,24 @@
     } while (0);
     do {
         BOOL needsDisplay = NO;
-        if (styles[@"lightThemeBorderColor"]) {
-            _lightThemeBorderTopColor = _lightThemeBorderLeftColor = _lightThemeBorderRightColor = _lightThemeBorderBottomColor = [WXConvert UIColor:styles[@"lightThemeBorderColor"]];
+        if (styles[@"weexLightSchemeBorderColor"]) {
+            _lightSchemeBorderTopColor = _lightSchemeBorderLeftColor = _lightSchemeBorderRightColor = _lightSchemeBorderBottomColor = [WXConvert UIColor:styles[@"weexLightSchemeBorderColor"]];
             needsDisplay = YES;
         }
-        if (styles[@"lightThemeBorderTopColor"]) {
-            _lightThemeBorderTopColor = [WXConvert UIColor:styles[@"lightThemeBorderTopColor"]];
+        if (styles[@"weexLightSchemeBorderTopColor"]) {
+            _lightSchemeBorderTopColor = [WXConvert UIColor:styles[@"weexLightSchemeBorderTopColor"]];
             needsDisplay = YES;
         }
-        if (styles[@"lightThemeBorderLeftColor"]) {
-            _lightThemeBorderLeftColor = [WXConvert UIColor:styles[@"lightThemeBorderLeftColor"]];
+        if (styles[@"weexLightSchemeBorderLeftColor"]) {
+            _lightSchemeBorderLeftColor = [WXConvert UIColor:styles[@"weexLightSchemeBorderLeftColor"]];
             needsDisplay = YES;
         }
-        if (styles[@"lightThemeBorderRightColor"]) {
-            _lightThemeBorderRightColor = [WXConvert UIColor:styles[@"lightThemeBorderRightColor"]];
+        if (styles[@"weexLightSchemeBorderRightColor"]) {
+            _lightSchemeBorderRightColor = [WXConvert UIColor:styles[@"weexLightSchemeBorderRightColor"]];
             needsDisplay = YES;
         }
-        if (styles[@"lightThemeBorderBottomColor"]) {
-            _lightThemeBorderBottomColor = [WXConvert UIColor:styles[@"lightThemeBorderBottomColor"]];
+        if (styles[@"weexLightSchemeBorderBottomColor"]) {
+            _lightSchemeBorderBottomColor = [WXConvert UIColor:styles[@"weexLightSchemeBorderBottomColor"]];
             needsDisplay = YES;
         }
         if (needsDisplay && updating) {
@@ -698,9 +698,9 @@
         } else if (!nowNeedsDrawBorder) {
             [self _resetNativeBorderRadius];
             _layer.borderWidth = _borderTopWidth;
-            _layer.borderColor = [self.weexInstance chooseColor:_borderTopColor lightThemeColor:_lightThemeBorderTopColor darkThemeColor:_darkThemeBorderTopColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor;
+            _layer.borderColor = [self.weexInstance chooseColor:_borderTopColor lightSchemeColor:_lightSchemeBorderTopColor darkSchemeColor:_darkSchemeBorderTopColor invert:self.invertForDarkScheme scene:[self colorSceneType]].CGColor;
             if ((_transition.transitionOptions & WXTransitionOptionsBackgroundColor) != WXTransitionOptionsBackgroundColor ) {
-                _layer.backgroundColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightThemeColor:self.lightThemeBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:self.invertForDarkTheme scene:[self colorSceneType]].CGColor;
+                _layer.backgroundColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightSchemeColor:self.lightSchemeBackgroundColor darkSchemeColor:self.darkSchemeBackgroundColor invert:self.invertForDarkScheme scene:[self colorSceneType]].CGColor;
             }
         }
     }
@@ -712,7 +712,7 @@
     WXRoundedRect *borderRect = [[WXRoundedRect alloc] initWithRect:rect topLeft:_borderTopLeftRadius topRight:_borderTopRightRadius bottomLeft:_borderBottomLeftRadius bottomRight:_borderBottomRightRadius];
     WXRadii *radii = borderRect.radii;
     BOOL hasBorderRadius = [radii hasBorderRadius];
-    UIColor* currentBgColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightThemeColor:self.lightThemeBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:self.invertForDarkTheme scene:[self colorSceneType]];
+    UIColor* currentBgColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightSchemeColor:self.lightSchemeBackgroundColor darkSchemeColor:self.darkSchemeBackgroundColor invert:self.invertForDarkScheme scene:[self colorSceneType]];
     return (!hasBorderRadius) && _opacity == 1.0 && CGColorGetAlpha(currentBgColor.CGColor) == 1.0 && [self _needsDrawBorder];
 }
 
@@ -736,16 +736,16 @@
 
 - (WXBoxShadow*)_chooseBoxShadow
 {
-    if ([self.weexInstance isDarkTheme]) {
-        if (_darkThemeBoxShadow) {
-            return _darkThemeBoxShadow;
+    if ([self.weexInstance isDarkScheme]) {
+        if (_darkSchemeBoxShadow) {
+            return _darkSchemeBoxShadow;
         }
         else {
             return _boxShadow;
         }
     }
-    else if (_lightThemeBoxShadow) {
-        return _lightThemeBoxShadow;
+    else if (_lightSchemeBoxShadow) {
+        return _lightSchemeBoxShadow;
     }
     else {
         return _boxShadow;
diff --git a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
index f630f02..a0dad81 100644
--- a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
+++ b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
@@ -29,7 +29,7 @@
 #import "WXNavigationDefaultImpl.h"
 #import "WXURLRewriteDefaultImpl.h"
 #import "WXJSFrameworkLoadDefaultImpl.h"
-#import "WXDarkThemeDefaultImpl.h"
+#import "WXDarkSchemeDefaultImpl.h"
 
 #import "WXSDKManager.h"
 #import "WXSDKError.h"
@@ -206,7 +206,7 @@
     [self registerHandler:[WXNavigationDefaultImpl new] withProtocol:@protocol(WXNavigationProtocol)];
     [self registerHandler:[WXURLRewriteDefaultImpl new] withProtocol:@protocol(WXURLRewriteProtocol)];
     [self registerHandler:[WXJSFrameworkLoadDefaultImpl new] withProtocol:@protocol(WXJSFrameworkLoadProtocol)];
-    [self registerHandler:[WXDarkThemeDefaultImpl new] withProtocol:@protocol(WXDarkThemeProtocol)];
+    [self registerHandler:[WXDarkSchemeDefaultImpl new] withProtocol:@protocol(WXDarkSchemeProtocol)];
 }
 
 + (void)registerHandler:(id)handler withProtocol:(Protocol *)protocol
diff --git a/ios/sdk/WeexSDK/Sources/Handler/WXDarkThemeDefaultImpl.h b/ios/sdk/WeexSDK/Sources/Handler/WXDarkSchemeDefaultImpl.h
similarity index 88%
rename from ios/sdk/WeexSDK/Sources/Handler/WXDarkThemeDefaultImpl.h
rename to ios/sdk/WeexSDK/Sources/Handler/WXDarkSchemeDefaultImpl.h
index cba2971..1bc1d2e 100644
--- a/ios/sdk/WeexSDK/Sources/Handler/WXDarkThemeDefaultImpl.h
+++ b/ios/sdk/WeexSDK/Sources/Handler/WXDarkSchemeDefaultImpl.h
@@ -18,14 +18,14 @@
  */
 
 #import <Foundation/Foundation.h>
-#import <WeexSDK/WXDarkThemeProtocol.h>
+#import <WeexSDK/WXDarkSchemeProtocol.h>
 
 NS_ASSUME_NONNULL_BEGIN
 
 /* By default, this implementation class do basic invert of UIColor of RGBA color space.
- You should implementation your own handler to better handle dark theme in your application.
+ You should implementation your own handler to better handle dark scheme in your application.
  */
-@interface WXDarkThemeDefaultImpl : NSObject <WXDarkThemeProtocol>
+@interface WXDarkSchemeDefaultImpl : NSObject <WXDarkSchemeProtocol>
 
 @end
 
diff --git a/ios/sdk/WeexSDK/Sources/Handler/WXDarkThemeDefaultImpl.m b/ios/sdk/WeexSDK/Sources/Handler/WXDarkSchemeDefaultImpl.m
similarity index 94%
rename from ios/sdk/WeexSDK/Sources/Handler/WXDarkThemeDefaultImpl.m
rename to ios/sdk/WeexSDK/Sources/Handler/WXDarkSchemeDefaultImpl.m
index af11709..ccae67b 100644
--- a/ios/sdk/WeexSDK/Sources/Handler/WXDarkThemeDefaultImpl.m
+++ b/ios/sdk/WeexSDK/Sources/Handler/WXDarkSchemeDefaultImpl.m
@@ -17,9 +17,9 @@
  * under the License.
  */
 
-#import "WXDarkThemeDefaultImpl.h"
+#import "WXDarkSchemeDefaultImpl.h"
 
-@implementation WXDarkThemeDefaultImpl
+@implementation WXDarkSchemeDefaultImpl
 
 - (BOOL)defaultInvertValueForRootComponent
 {
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.mm b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.mm
index cfcd317..e5b53ed 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.mm
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.mm
@@ -42,7 +42,7 @@
 #import "WXComponent_performance.h"
 #import "WXAnalyzerCenter.h"
 #import "WXDisplayLinkManager.h"
-#import "WXDarkThemeProtocol.h"
+#import "WXDarkSchemeProtocol.h"
 
 static NSThread *WXComponentThread;
 
@@ -262,9 +262,9 @@
     
     _rootComponent = [self _buildComponent:ref type:type supercomponent:nil styles:styles attributes:attributes events:events renderObject:renderObject];
     
-    if ([WXUtility isDarkThemeSupportEnabled]) {
-        if (attributes[@"invertForDarkTheme"] == nil) {
-            _rootComponent.invertForDarkTheme = [[WXSDKInstance darkThemeColorHandler] defaultInvertValueForRootComponent];
+    if ([WXUtility isDarkSchemeSupportEnabled]) {
+        if (attributes[@"invertForDarkScheme"] == nil) {
+            _rootComponent.invertForDarkScheme = [[WXSDKInstance darkSchemeColorHandler] defaultInvertValueForRootComponent];
         }
     }
     
@@ -334,9 +334,9 @@
         }
     }
     
-    // Not explicitly declare "invertForDarkTheme", inherit
-    if (attributes[@"invertForDarkTheme"] == nil) {
-        component.invertForDarkTheme = supercomponent.invertForDarkTheme;
+    // Not explicitly declare "invertForDarkScheme", inherit
+    if (attributes[@"invertForDarkScheme"] == nil) {
+        component.invertForDarkScheme = supercomponent.invertForDarkScheme;
     }
     
 #ifdef DEBUG
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent.h b/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
index 4c31a95..54ba69e 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
@@ -370,7 +370,7 @@
 /// @name Display
 ///--------------------------------------
 
-@property (nonatomic, assign) BOOL invertForDarkTheme;
+@property (nonatomic, assign) BOOL invertForDarkScheme;
 
 @property (nonatomic, assign) WXDisplayType displayType;
 
@@ -387,9 +387,9 @@
 - (BOOL)needsDrawRect;
 
 /**
- * @abstract Fired on instance theme did changed.
+ * @abstract Fired on instance scheme did changed.
  */
-- (void)themeDidChange:(NSString*)theme;
+- (void)schemeDidChange:(NSString*)scheme;
 
 /**
  * @abstract Hint used for better do color invert in dark mode.
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm b/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm
index d9d4f31..a9c9c34 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm
+++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm
@@ -42,7 +42,7 @@
 #import "WXSDKInstance_performance.h"
 #import "WXComponent_performance.h"
 #import "WXCoreBridge.h"
-#import "WXDarkThemeProtocol.h"
+#import "WXDarkSchemeProtocol.h"
 
 #pragma clang diagnostic ignored "-Wincomplete-implementation"
 #pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
@@ -72,8 +72,8 @@
 
 @synthesize transform = _transform;
 @synthesize styleBackgroundColor = _styleBackgroundColor;
-@synthesize darkThemeBackgroundColor = _darkThemeBackgroundColor;
-@synthesize lightThemeBackgroundColor = _lightThemeBackgroundColor;
+@synthesize darkSchemeBackgroundColor = _darkSchemeBackgroundColor;
+@synthesize lightSchemeBackgroundColor = _lightSchemeBackgroundColor;
 
 #pragma mark Life Cycle
 
@@ -107,7 +107,7 @@
         _eventPenetrationEnabled = NO;
         _accessibilityHintContent = nil;
         _cancelsTouchesInView = YES;
-        _invertForDarkTheme = NO;
+        _invertForDarkScheme = NO;
         
         _async = NO;
         
@@ -126,8 +126,8 @@
             }
         }
         
-        if (attributes[@"invertForDarkTheme"]) {
-            _invertForDarkTheme = [WXConvert BOOL:attributes[@"invertForDarkTheme"]];
+        if (attributes[@"invertForDarkScheme"]) {
+            _invertForDarkScheme = [WXConvert BOOL:attributes[@"invertForDarkScheme"]];
         }
         
         if (attributes[@"userInteractionEnabled"]) {
@@ -389,9 +389,9 @@
         
         _view = [self loadView];
         
-        // Provide a chance for dark theme handler to process the view
-        if ([WXUtility isDarkThemeSupportEnabled]) {
-            [[WXSDKInstance darkThemeColorHandler] configureView:_view ofComponent:self];
+        // Provide a chance for dark scheme handler to process the view
+        if ([WXUtility isDarkSchemeSupportEnabled]) {
+            [[WXSDKInstance darkSchemeColorHandler] configureView:_view ofComponent:self];
         }
         
 #ifdef DEBUG
@@ -402,7 +402,7 @@
         _view.hidden = _visibility == WXVisibilityShow ? NO : YES;
         _view.clipsToBounds = _clipToBounds;
         if (![self _needsDrawBorder]) {
-            _layer.borderColor = [self.weexInstance chooseColor:_borderTopColor lightThemeColor:_lightThemeBorderTopColor darkThemeColor:_darkThemeBorderTopColor invert:_invertForDarkTheme scene:[self colorSceneType]].CGColor;
+            _layer.borderColor = [self.weexInstance chooseColor:_borderTopColor lightSchemeColor:_lightSchemeBorderTopColor darkSchemeColor:_darkSchemeBorderTopColor invert:_invertForDarkScheme scene:[self colorSceneType]].CGColor;
             _layer.borderWidth = _borderTopWidth;
             [self _resetNativeBorderRadius];
             _layer.opacity = _opacity;
@@ -410,7 +410,7 @@
             /* Also set background color to view to fix that problem that system may
              set dynamic color to UITableView. Without these codes, event if we set
              clear color to layer, the table view could not be transparent. */
-            UIColor* choosedColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightThemeColor:self.lightThemeBackgroundColor darkThemeColor:self.darkThemeBackgroundColor invert:_invertForDarkTheme scene:[self colorSceneType]];
+            UIColor* choosedColor = [self.weexInstance chooseColor:self.styleBackgroundColor lightSchemeColor:self.lightSchemeBackgroundColor darkSchemeColor:self.darkSchemeBackgroundColor invert:_invertForDarkScheme scene:[self colorSceneType]];
             if (choosedColor == [UIColor clearColor]) {
                 _view.backgroundColor = choosedColor;
             }
@@ -871,17 +871,17 @@
     }
     
     NSString* styleValue = nil;
-    BOOL isDark = [self.weexInstance isDarkTheme];
+    BOOL isDark = [self.weexInstance isDarkScheme];
     if (isDark) {
-        if (_darkThemeBackgroundImage) {
-            styleValue = _darkThemeBackgroundImage;
+        if (_darkSchemeBackgroundImage) {
+            styleValue = _darkSchemeBackgroundImage;
         }
         else {
             styleValue = _backgroundImage;
         }
     }
-    else if (_lightThemeBackgroundImage) {
-        styleValue = _lightThemeBackgroundImage;
+    else if (_lightSchemeBackgroundImage) {
+        styleValue = _lightSchemeBackgroundImage;
     }
     else {
         styleValue = _backgroundImage;
@@ -896,7 +896,7 @@
     dispatch_async(dispatch_get_main_queue(), ^{
         __strong typeof(self) strongSelf = weakSelf;
         if(strongSelf) {
-            // No need to auto-invert linear-gradient colors. We only allows using 'dark-theme-background-image' style.
+            // No need to auto-invert linear-gradient colors. We only allows using 'dark-scheme-background-image' style.
             UIColor * startColor = (UIColor*)linearGradient[@"startColor"];
             UIColor * endColor = (UIColor*)linearGradient[@"endColor"];
             CAGradientLayer * gradientLayer = [WXUtility gradientLayerFromColors:@[startColor, endColor] locations:nil frame:strongSelf.view.bounds gradientType:(WXGradientType)[linearGradient[@"gradientType"] integerValue]];
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h
index 7e1376a..088d8ac 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h
@@ -26,7 +26,7 @@
 #import <WeexSDK/WXApmForInstance.h>
 #import <WeexSDK/WXComponentManager.h>
 
-@protocol WXDarkThemeProtocol;
+@protocol WXDarkSchemeProtocol;
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -449,33 +449,33 @@
  */
 + (NSDictionary*)lastPageInfo;
 
-#pragma mark - Theme Support
+#pragma mark - Scheme Support
 
 /**
  Handler for handling color invert.
 
  @return Handler instance.
  */
-+ (id<WXDarkThemeProtocol>)darkThemeColorHandler;
++ (id<WXDarkSchemeProtocol>)darkSchemeColorHandler;
 
 /**
- Return true if current is dark theme for this instance.
+ Return true if current is dark scheme for this instance.
  */
-- (BOOL)isDarkTheme;
+- (BOOL)isDarkScheme;
 
 /**
  Get/set interface style of current instance.
  */
-- (NSString*)currentThemeName;
-- (void)setCurrentThemeName:(NSString*)name;
+- (NSString*)currentSchemeName;
+- (void)setCurrentSchemeName:(NSString*)name;
 
 /**
  Choose final color between original color and dark-mode one.
  Also considering invert.
  */
 - (UIColor*)chooseColor:(UIColor*)originalColor
-        lightThemeColor:(UIColor*)lightColor
-         darkThemeColor:(UIColor*)darkColor
+       lightSchemeColor:(UIColor*)lightColor
+        darkSchemeColor:(UIColor*)darkColor
                  invert:(BOOL)invert
                   scene:(WXColorScene)scene;
 
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
index 711ff39..d3e5c79 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
@@ -52,7 +52,7 @@
 #import "WXConvertUtility.h"
 #import "WXCoreBridge.h"
 #import "WXDataRenderHandler.h"
-#import "WXDarkThemeProtocol.h"
+#import "WXDarkSchemeProtocol.h"
 
 #define WEEX_LITE_URL_SUFFIX           @"wlasm"
 #define WEEX_RENDER_TYPE_PLATFORM       @"platform"
@@ -103,11 +103,11 @@
 {
     self = [super init];
     if (self) {
-        if ([WXUtility isDarkThemeSupportEnabled]) {
-            self.themeName = [WXUtility isSystemInDarkTheme] ? @"dark" : @"light";
+        if ([WXUtility isDarkSchemeSupportEnabled]) {
+            self.schemeName = [WXUtility isSystemInDarkScheme] ? @"dark" : @"light";
         }
         else {
-            self.themeName = @"light";
+            self.schemeName = @"light";
         }
         
         _renderType = renderType;
@@ -611,8 +611,8 @@
         BOOL alwaysUseMRCForObjectToWeexCore = [[configCenter configForKey:@"iOS_weex_ext_config.alwaysUseMRC" defaultValue:@(NO) isDefault:NULL] boolValue];
         ConvertSwitches(isIOS13, useMRCForInvalidJSONObject, alwaysUseMRCForObjectToWeexCore);
         
-        BOOL isDarkThemeSupportEnabled = [[configCenter configForKey:@"iOS_weex_ext_config.supportDarkTheme" defaultValue:@(YES) isDefault:NULL] boolValue];
-        [WXUtility setDarkThemeSupportEnable:isDarkThemeSupportEnabled];
+        BOOL isDarkSchemeSupportEnabled = [[configCenter configForKey:@"iOS_weex_ext_config.supportDarkScheme" defaultValue:@(YES) isDefault:NULL] boolValue];
+        [WXUtility setDarkSchemeSupportEnable:isDarkSchemeSupportEnabled];
     }
     else {
         BOOL isIOS13 = [[[UIDevice currentDevice] systemVersion] integerValue] == 13;
@@ -1180,41 +1180,41 @@
     return result;
 }
 
-+ (id<WXDarkThemeProtocol>)darkThemeColorHandler
++ (id<WXDarkSchemeProtocol>)darkSchemeColorHandler
 {
-    static id<WXDarkThemeProtocol> colorHandler;
+    static id<WXDarkSchemeProtocol> colorHandler;
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
-        colorHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXDarkThemeProtocol)];
+        colorHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXDarkSchemeProtocol)];
     });
     return colorHandler;
 }
 
-- (NSString*)currentThemeName
+- (NSString*)currentSchemeName
 {
-    return self.themeName;
+    return self.schemeName;
 }
 
-- (BOOL)isDarkTheme
+- (BOOL)isDarkScheme
 {
-    return [self.themeName isEqualToString:@"dark"];
+    return [self.schemeName isEqualToString:@"dark"];
 }
 
-- (void)setCurrentThemeName:(NSString*)name
+- (void)setCurrentSchemeName:(NSString*)name
 {
-    if (![WXUtility isDarkThemeSupportEnabled]) {
-        self.themeName = @"light";
+    if (![WXUtility isDarkSchemeSupportEnabled]) {
+        self.schemeName = @"light";
         return;
     }
     
-    if (name && ![name isEqualToString:self.themeName]) {
-        self.themeName = name;
+    if (name && ![name isEqualToString:self.schemeName]) {
+        self.schemeName = name;
         
         if (self.isCustomRenderType) {
             return;
         }
         
-        // Recursively visit all components and notify that theme had changed.
+        // Recursively visit all components and notify that scheme had changed.
         __weak WXSDKInstance* weakSelf = self;
         WXPerformBlockOnComponentThread(^{
             __strong WXSDKInstance* strongSelf = weakSelf;
@@ -1231,7 +1231,7 @@
                 WXPerformBlockOnMainThread(^{
                     __strong WXComponent* scomp = wcomp;
                     if (scomp) {
-                        [scomp themeDidChange:name];
+                        [scomp schemeDidChange:name];
                     }
                 });
             }];
@@ -1239,23 +1239,23 @@
         
         [[WXSDKManager bridgeMgr] fireEvent:_instanceId
                                         ref:WX_SDK_ROOT_REF
-                                       type:@"themechange"
-                                     params:@{@"theme": self.themeName?:@"light"}
+                                       type:@"schemechange"
+                                     params:@{@"scheme": self.schemeName?:@"light"}
                                  domChanges:nil];
     }
 }
 
 - (UIColor*)chooseColor:(UIColor*)originalColor
-        lightThemeColor:(UIColor*)lightColor
-         darkThemeColor:(UIColor*)darkColor
+       lightSchemeColor:(UIColor*)lightColor
+        darkSchemeColor:(UIColor*)darkColor
                  invert:(BOOL)invert
                   scene:(WXColorScene)scene
 {
-    if (![WXUtility isDarkThemeSupportEnabled]) {
+    if (![WXUtility isDarkSchemeSupportEnabled]) {
         return originalColor;
     }
     
-    if ([self isDarkTheme]) {
+    if ([self isDarkScheme]) {
         if (darkColor) {
             return darkColor;
         }
@@ -1264,7 +1264,7 @@
             if (originalColor == [UIColor clearColor]) {
                 return originalColor;
             }
-            return [[WXSDKInstance darkThemeColorHandler] getInvertedColorFor:originalColor ofScene:scene withDefault:originalColor];
+            return [[WXSDKInstance darkSchemeColorHandler] getInvertedColorFor:originalColor ofScene:scene withDefault:originalColor];
         }
         else {
             return originalColor;
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
index 852275d..d3811c7 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
@@ -39,7 +39,7 @@
 @property (nonatomic, strong) NSString *createInstanceContextResult;
 @property (nonatomic, strong) NSString *executeRaxApiResult;
 
-@property (atomic, strong) NSString* themeName;
+@property (atomic, strong) NSString* schemeName;
 
 - (void)addModuleEventObservers:(NSString*)event callback:(NSString*)callbackId option:(NSDictionary*)option moduleClassName:(NSString*)moduleClassName;
 - (void)_addModuleEventObserversWithModuleMethod:(WXModuleMethod*)method;
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m b/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m
index c306c95..67a19a5 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m
@@ -26,7 +26,7 @@
 #import "WXLength.h"
 #import "WXTransition.h"
 #import "WXComponent+Layout.h"
-#import "WXDarkThemeProtocol.h"
+#import "WXDarkSchemeProtocol.h"
 
 @interface WXAnimationInfo : NSObject<NSCopying>
 
@@ -210,34 +210,34 @@
     NSDictionary *styles = args[@"styles"];
     NSDictionary* componentRawStyles = target.styles;
     
-    BOOL isDarkTheme = [target.weexInstance isDarkTheme];
-    BOOL updatingDarkThemeBackgroundColor = styles[@"darkThemeBackgroundColor"] != nil;
-    BOOL updatingLightThemeBackgroundColor = styles[@"lightThemeBackgroundColor"] != nil;
+    BOOL isDarkScheme = [target.weexInstance isDarkScheme];
+    BOOL updatingDarkSchemeBackgroundColor = styles[@"weexDarkSchemeBackgroundColor"] != nil;
+    BOOL updatingLightSchemeBackgroundColor = styles[@"weexLightSchemeBackgroundColor"] != nil;
     
     for (NSString *property in styles) {
         if ([property isEqualToString:@"backgroundColor"]) {
-            if (isDarkTheme && (updatingDarkThemeBackgroundColor ||
-                                componentRawStyles[@"darkThemeBackgroundColor"] != nil)) {
-                /* Updating "darkThemeBackgroundColor" in dark mode,
+            if (isDarkScheme && (updatingDarkSchemeBackgroundColor ||
+                                componentRawStyles[@"weexDarkSchemeBackgroundColor"] != nil)) {
+                /* Updating "darkSchemeBackgroundColor" in dark mode,
                  or this component has dark bg color explicitly defined in styels.
                  We ignore transition animation for "backgroundColor" */
                 continue;
             }
-            else if (!isDarkTheme && (updatingLightThemeBackgroundColor ||
-                                      componentRawStyles[@"lightThemeBackgroundColor"] != nil)) {
+            else if (!isDarkScheme && (updatingLightSchemeBackgroundColor ||
+                                      componentRawStyles[@"weexLightSchemeBackgroundColor"] != nil)) {
                 continue;
             }
         }
-        else if ([property isEqualToString:@"darkThemeBackgroundColor"]) {
-            if (!isDarkTheme || componentRawStyles[@"darkThemeBackgroundColor"] == nil) {
-                /* Do not do animation for "darkThemeBackgroundColor" in light mode.
+        else if ([property isEqualToString:@"weexDarkSchemeBackgroundColor"]) {
+            if (!isDarkScheme || componentRawStyles[@"weexDarkSchemeBackgroundColor"] == nil) {
+                /* Do not do animation for "darkSchemeBackgroundColor" in light mode.
                  Or there is no dark bg color explicitly defined in styles.
                  */
                 continue;
             }
         }
-        else if ([property isEqualToString:@"lightThemeBackgroundColor"]){
-            if (isDarkTheme || componentRawStyles[@"lightThemeBackgroundColor"] == nil) {
+        else if ([property isEqualToString:@"weexLightSchemeBackgroundColor"]){
+            if (isDarkScheme || componentRawStyles[@"weexLightSchemeBackgroundColor"] == nil) {
                 continue;
             }
         }
@@ -322,15 +322,15 @@
             }
             target.transform = wxTransform;
         } else if ([property isEqualToString:@"backgroundColor"] ||
-                   [property isEqualToString:@"darkThemeBackgroundColor"] ||
-                   [property isEqualToString:@"lightThemeBackgroundColor"]) {
+                   [property isEqualToString:@"weexDarkSchemeBackgroundColor"] ||
+                   [property isEqualToString:@"weexLightSchemeBackgroundColor"]) {
             info.propertyName = @"backgroundColor";
             info.fromValue = (__bridge id)(layer.backgroundColor);
             UIColor* toColor = [WXConvert UIColor:value];
-            if ([target.weexInstance isDarkTheme] && target.invertForDarkTheme &&
+            if ([target.weexInstance isDarkScheme] && target.invertForDarkScheme &&
                 [property isEqualToString:@"backgroundColor"]) {
                 // Invert color
-                toColor = [[WXSDKInstance darkThemeColorHandler] getInvertedColorFor:toColor ofScene:[target colorSceneType] withDefault:toColor];
+                toColor = [[WXSDKInstance darkSchemeColorHandler] getInvertedColorFor:toColor ofScene:[target colorSceneType] withDefault:toColor];
             }
             info.toValue = (__bridge id)([toColor CGColor]);
             [infos addObject:info];
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXTransition.mm b/ios/sdk/WeexSDK/Sources/Module/WXTransition.mm
index c648907..e52c5ba 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXTransition.mm
+++ b/ios/sdk/WeexSDK/Sources/Module/WXTransition.mm
@@ -30,7 +30,7 @@
 #import "WXAssert.h"
 #import "WXSDKInstance_private.h"
 #import "WXLength.h"
-#import "WXDarkThemeProtocol.h"
+#import "WXDarkSchemeProtocol.h"
 
 @implementation WXTransitionInfo
 @end
@@ -83,8 +83,8 @@
                                                            @"bottom": @(WXTransitionOptionsBottom),
                                                            @"top": @(WXTransitionOptionsTop),
                                                            @"backgroundColor": @(WXTransitionOptionsBackgroundColor),
-                                                           @"darkThemeBackgroundColor": @(WXTransitionOptionsBackgroundColor),
-                                                           @"lightThemeBackgroundColor": @(WXTransitionOptionsBackgroundColor),
+                                                           @"weexDarkSchemeBackgroundColor": @(WXTransitionOptionsBackgroundColor),
+                                                           @"weexLightSchemeBackgroundColor": @(WXTransitionOptionsBackgroundColor),
                                                            @"transform": @(WXTransitionOptionsTransform),
                                                            @"opacity": @(WXTransitionOptionsOpacity)
                                                            };
@@ -111,38 +111,38 @@
     NSMutableDictionary *futileStyles = [NSMutableDictionary new];
     NSDictionary* componentRawStyles = targetComponent.styles;
     
-    BOOL isDarkTheme = [targetComponent.weexInstance isDarkTheme];
-    BOOL updatingDarkThemeBackgroundColor = styles[@"darkThemeBackgroundColor"] != nil;
-    BOOL updatingLightThemeBackgroundColor = styles[@"lightThemeBackgroundColor"] != nil;
+    BOOL isDarkScheme = [targetComponent.weexInstance isDarkScheme];
+    BOOL updatingDarkSchemeBackgroundColor = styles[@"weexDarkSchemeBackgroundColor"] != nil;
+    BOOL updatingLightSchemeBackgroundColor = styles[@"weexLightSchemeBackgroundColor"] != nil;
     
     for (NSString *key in styles) {
         if (self.transitionOptions & [self transitionOptionsFromString:key]) {
             if ([key isEqualToString:@"backgroundColor"]) {
-                if (isDarkTheme && (updatingDarkThemeBackgroundColor ||
-                                    componentRawStyles[@"darkThemeBackgroundColor"] != nil)) {
-                    /* Updating "darkThemeBackgroundColor" in dark mode,
+                if (isDarkScheme && (updatingDarkSchemeBackgroundColor ||
+                                    componentRawStyles[@"weexDarkSchemeBackgroundColor"] != nil)) {
+                    /* Updating "darkSchemeBackgroundColor" in dark mode,
                      or this component has dark bg color explicitly defined in styels.
                      We ignore transition animation for "backgroundColor" */
                     [futileStyles setObject:styles[key] forKey:key];
                     continue;
                 }
-                else if (!isDarkTheme && (updatingLightThemeBackgroundColor ||
-                                          componentRawStyles[@"lightThemeBackgroundColor"] != nil)) {
+                else if (!isDarkScheme && (updatingLightSchemeBackgroundColor ||
+                                          componentRawStyles[@"weexLightSchemeBackgroundColor"] != nil)) {
                     [futileStyles setObject:styles[key] forKey:key];
                     continue;
                 }
             }
-            else if ([key isEqualToString:@"darkThemeBackgroundColor"]) {
-                if (!isDarkTheme || componentRawStyles[@"darkThemeBackgroundColor"] == nil) {
-                    /* Do not do animation for "darkThemeBackgroundColor" in light mode.
+            else if ([key isEqualToString:@"weexDarkSchemeBackgroundColor"]) {
+                if (!isDarkScheme || componentRawStyles[@"weexDarkSchemeBackgroundColor"] == nil) {
+                    /* Do not do animation for "darkSchemeBackgroundColor" in light mode.
                      Or there is no dark bg color explicitly defined in styles.
                      */
                     [futileStyles setObject:styles[key] forKey:key];
                     continue;
                 }
             }
-            else if ([key isEqualToString:@"lightThemeBackgroundColor"]){
-                if (isDarkTheme || componentRawStyles[@"lightThemeBackgroundColor"] == nil) {
+            else if ([key isEqualToString:@"weexLightSchemeBackgroundColor"]){
+                if (isDarkScheme || componentRawStyles[@"weexLightSchemeBackgroundColor"] == nil) {
                     [futileStyles setObject:styles[key] forKey:key];
                     continue;
                 }
@@ -154,8 +154,8 @@
                     // Get animation 'from' value from raw styles.
                     id styleValue = componentRawStyles[key];
                     if ([key isEqualToString:@"backgroundColor"] ||
-                        [key isEqualToString:@"darkThemeBackgroundColor"] ||
-                        [key isEqualToString:@"lightThemeBackgroundColor"]) {
+                        [key isEqualToString:@"weexDarkSchemeBackgroundColor"] ||
+                        [key isEqualToString:@"weexLightSchemeBackgroundColor"]) {
                         if (styleValue == nil) {
                             // background color is transparent by default.
                             styleValue = @"transparent";
@@ -248,16 +248,16 @@
             _propertyArray = [NSMutableArray new];
         }
         if ([singleProperty isEqualToString:@"backgroundColor"] ||
-            [singleProperty isEqualToString:@"darkThemeBackgroundColor"] ||
-            [singleProperty isEqualToString:@"lightThemeBackgroundColor"]) {
+            [singleProperty isEqualToString:@"weexDarkSchemeBackgroundColor"] ||
+            [singleProperty isEqualToString:@"weexLightSchemeBackgroundColor"]) {
             UIColor* fromColor = [WXConvert UIColor:_oldFilterStyles[singleProperty]];
             UIColor* toColor = [WXConvert UIColor:_filterStyles[singleProperty]];
-            if ([_targetComponent.weexInstance isDarkTheme] &&
-                _targetComponent.invertForDarkTheme &&
+            if ([_targetComponent.weexInstance isDarkScheme] &&
+                _targetComponent.invertForDarkScheme &&
                 [singleProperty isEqualToString:@"backgroundColor"]) {
                 // Invert color
-                fromColor = [[WXSDKInstance darkThemeColorHandler] getInvertedColorFor:fromColor ofScene:[_targetComponent colorSceneType] withDefault:fromColor];
-                toColor = [[WXSDKInstance darkThemeColorHandler] getInvertedColorFor:toColor ofScene:[_targetComponent colorSceneType] withDefault:toColor];
+                fromColor = [[WXSDKInstance darkSchemeColorHandler] getInvertedColorFor:fromColor ofScene:[_targetComponent colorSceneType] withDefault:fromColor];
+                toColor = [[WXSDKInstance darkSchemeColorHandler] getInvertedColorFor:toColor ofScene:[_targetComponent colorSceneType] withDefault:toColor];
             }
             
             WXTransitionInfo *info = [WXTransitionInfo new];
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXDarkThemeProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXDarkSchemeProtocol.h
similarity index 90%
rename from ios/sdk/WeexSDK/Sources/Protocol/WXDarkThemeProtocol.h
rename to ios/sdk/WeexSDK/Sources/Protocol/WXDarkSchemeProtocol.h
index 3da70fe..0689bd4 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXDarkThemeProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXDarkSchemeProtocol.h
@@ -21,15 +21,15 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@protocol WXDarkThemeProtocol <WXModuleProtocol>
+@protocol WXDarkSchemeProtocol <WXModuleProtocol>
 
 /**
- Return YES so that Weex root component will be enabled for 'invertForDarkTheme' property.
+ Return YES so that Weex root component will be enabled for 'invertForDarkScheme' property.
 */
 - (BOOL)defaultInvertValueForRootComponent;
 
 /**
-After any view of Weex component is created. Callback dark theme handler to provide a
+After any view of Weex component is created. Callback dark scheme handler to provide a
  chance to configure the view.
 */
 - (void)configureView:(UIView*_Nonnull)view ofComponent:(WXComponent*_Nonnull)component;
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXUtility.h b/ios/sdk/WeexSDK/Sources/Utility/WXUtility.h
index 15cb8c7..49d2d71 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXUtility.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXUtility.h
@@ -136,7 +136,7 @@
  * @return Boolean
  *
  */
-+ (BOOL)isSystemInDarkTheme;
++ (BOOL)isSystemInDarkScheme;
 
 /**
  * @abstract Returns the environment of current application, you can get some necessary properties such as appVersion、sdkVersion、appName etc.
@@ -521,8 +521,8 @@
 *  @abstract Switch for dark mode support.
 *
 */
-+ (void)setDarkThemeSupportEnable:(BOOL)value;
-+ (BOOL)isDarkThemeSupportEnabled;
++ (void)setDarkSchemeSupportEnable:(BOOL)value;
++ (BOOL)isDarkSchemeSupportEnabled;
 
 + (long) getUnixFixTimeMillis;
 
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXUtility.m b/ios/sdk/WeexSDK/Sources/Utility/WXUtility.m
index 4247725..12d4911 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXUtility.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXUtility.m
@@ -43,7 +43,7 @@
 #define KEY_USERNAME_PASSWORD  @"com.taobao.Weex.weex123456"
 
 static BOOL enableRTLLayoutDirection = YES;
-static BOOL isDarkThemeSupportEnabled = YES;
+static BOOL isDarkSchemeSupportEnabled = YES;
 
 void WXPerformBlockOnMainThread(void (^ _Nonnull block)(void))
 {
@@ -164,7 +164,7 @@
     return [UIView userInterfaceLayoutDirectionForSemanticContentAttribute:UISemanticContentAttributeUnspecified] == UIUserInterfaceLayoutDirectionRightToLeft ? WXLayoutDirectionRTL : WXLayoutDirectionLTR;
 }
 
-+ (BOOL)isSystemInDarkTheme
++ (BOOL)isSystemInDarkScheme
 {
     if (@available(iOS 13.0, *)) {
         __block BOOL result = NO;
@@ -182,9 +182,9 @@
 
 + (NSDictionary *)getEnvironment
 {
-    NSString* currentTheme = @"light";
-    if ([WXUtility isDarkThemeSupportEnabled]) {
-        currentTheme = [self isSystemInDarkTheme] ? @"dark" : @"light";
+    NSString* currentScheme = @"light";
+    if ([WXUtility isDarkSchemeSupportEnabled]) {
+        currentScheme = [self isSystemInDarkScheme] ? @"dark" : @"light";
     }
     
     NSString *platform = @"iOS";
@@ -210,7 +210,7 @@
                                     @"deviceHeight":@(deviceHeight * scale),
                                     @"scale":@(scale),
                                     @"layoutDirection": [self getEnvLayoutDirection] == WXLayoutDirectionRTL ? @"rtl" : @"ltr",
-                                    @"theme": currentTheme
+                                    @"scheme": currentScheme
                                 }];
     
     if ([[[UIDevice currentDevice] systemVersion] integerValue] >= 11) {
@@ -816,16 +816,16 @@
     return enableRTLLayoutDirection;
 }
 
-#pragma mark - Dark theme
+#pragma mark - Dark scheme
 
-+ (void)setDarkThemeSupportEnable:(BOOL)value
++ (void)setDarkSchemeSupportEnable:(BOOL)value
 {
-    isDarkThemeSupportEnabled = value;
+    isDarkSchemeSupportEnabled = value;
 }
 
-+ (BOOL)isDarkThemeSupportEnabled
++ (BOOL)isDarkSchemeSupportEnabled
 {
-    return isDarkThemeSupportEnabled;
+    return isDarkSchemeSupportEnabled;
 }
 
 #pragma mark - get deviceID
diff --git a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.mm b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.mm
index 5165d7f..4d058ef 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.mm
+++ b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.mm
@@ -67,18 +67,18 @@
     }\
 } while(0);
 
-#define WX_BOARD_RADIUS_DARK_THEME_COLOR_RESET_ALL(key)\
+#define WX_BOARD_RADIUS_DARK_SCHEME_COLOR_RESET_ALL(key)\
 do {\
     if (styles && [styles containsObject:@#key]) {\
-        _darkThemeBorderTopColor = _darkThemeBorderLeftColor = _darkThemeBorderRightColor = _darkThemeBorderBottomColor = [UIColor blackColor];\
+        _darkSchemeBorderTopColor = _darkSchemeBorderLeftColor = _darkSchemeBorderRightColor = _darkSchemeBorderBottomColor = [UIColor blackColor];\
         [self setNeedsDisplay];\
     }\
 } while(0);
 
-#define WX_BOARD_RADIUS_LIGHT_THEME_COLOR_RESET_ALL(key)\
+#define WX_BOARD_RADIUS_LIGHT_SCHEME_COLOR_RESET_ALL(key)\
 do {\
     if (styles && [styles containsObject:@#key]) {\
-        _lightThemeBorderTopColor = _lightThemeBorderLeftColor = _lightThemeBorderRightColor = _lightThemeBorderBottomColor = [UIColor blackColor];\
+        _lightSchemeBorderTopColor = _lightSchemeBorderLeftColor = _lightSchemeBorderRightColor = _lightSchemeBorderBottomColor = [UIColor blackColor];\
         [self setNeedsDisplay];\
     }\
 } while(0);
@@ -191,15 +191,15 @@
 - (void)_initViewPropertyWithStyles:(NSDictionary *)styles
 {
     self.styleBackgroundColor = styles[@"backgroundColor"] ? [WXConvert UIColor:styles[@"backgroundColor"]] : [UIColor clearColor];
-    if (styles[@"darkThemeBackgroundColor"]) {
-        self.darkThemeBackgroundColor = [WXConvert UIColor:styles[@"darkThemeBackgroundColor"]];
+    if (styles[@"weexDarkSchemeBackgroundColor"]) {
+        self.darkSchemeBackgroundColor = [WXConvert UIColor:styles[@"weexDarkSchemeBackgroundColor"]];
     }
-    if (styles[@"lightThemeBackgroundColor"]) {
-        self.lightThemeBackgroundColor = [WXConvert UIColor:styles[@"lightThemeBackgroundColor"]];
+    if (styles[@"weexLightSchemeBackgroundColor"]) {
+        self.lightSchemeBackgroundColor = [WXConvert UIColor:styles[@"weexLightSchemeBackgroundColor"]];
     }
     _backgroundImage = styles[@"backgroundImage"] ? [WXConvert NSString:styles[@"backgroundImage"]]: nil;
-    _darkThemeBackgroundImage = styles[@"darkThemeBackgroundImage"] ? [WXConvert NSString:styles[@"darkThemeBackgroundImage"]] : nil;
-    _lightThemeBackgroundImage = styles[@"lightThemeBackgroundImage"] ? [WXConvert NSString:styles[@"lightThemeBackgroundImage"]] : nil;
+    _darkSchemeBackgroundImage = styles[@"weexDarkSchemeBackgroundImage"] ? [WXConvert NSString:styles[@"weexDarkSchemeBackgroundImage"]] : nil;
+    _lightSchemeBackgroundImage = styles[@"weexLightSchemeBackgroundImage"] ? [WXConvert NSString:styles[@"weexLightSchemeBackgroundImage"]] : nil;
     _opacity = styles[@"opacity"] ? [WXConvert CGFloat:styles[@"opacity"]] : 1.0;
     _clipToBounds = styles[@"overflow"] ? [WXConvert WXClipType:styles[@"overflow"]] : NO;
     _visibility = styles[@"visibility"] ? [WXConvert WXVisibility:styles[@"visibility"]] : WXVisibilityShow;
@@ -208,11 +208,11 @@
     [[WXTransform alloc] initWithCSSValue:[WXConvert NSString:styles[@"transform"]] origin:[WXConvert NSString:styles[@"transformOrigin"]] instance:self.weexInstance] :
     [[WXTransform alloc] initWithCSSValue:nil origin:nil instance:self.weexInstance];
     _boxShadow = styles[@"boxShadow"]?[WXConvert WXBoxShadow:styles[@"boxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor]:nil;
-    if (styles[@"darkThemeBoxShadow"]) {
-        _darkThemeBoxShadow = [WXConvert WXBoxShadow:styles[@"darkThemeBoxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor];
+    if (styles[@"weexDarkSchemeBoxShadow"]) {
+        _darkSchemeBoxShadow = [WXConvert WXBoxShadow:styles[@"weexDarkSchemeBoxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor];
     }
-    if (styles[@"lightThemeBoxShadow"]) {
-        _lightThemeBoxShadow = [WXConvert WXBoxShadow:styles[@"lightThemeBoxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor];
+    if (styles[@"weexLightSchemeBoxShadow"]) {
+        _lightSchemeBoxShadow = [WXConvert WXBoxShadow:styles[@"weexLightSchemeBoxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor];
     }
 }
 
@@ -222,11 +222,11 @@
     if (styles[@"backgroundColor"]) {
         self.styleBackgroundColor = [WXConvert UIColor:styles[@"backgroundColor"]];
     }
-    if (styles[@"darkThemeBackgroundColor"]) {
-        self.darkThemeBackgroundColor = [WXConvert UIColor:styles[@"darkThemeBackgroundColor"]];
+    if (styles[@"weexDarkSchemeBackgroundColor"]) {
+        self.darkSchemeBackgroundColor = [WXConvert UIColor:styles[@"weexDarkSchemeBackgroundColor"]];
     }
-    if (styles[@"lightThemeBackgroundColor"]) {
-        self.lightThemeBackgroundColor = [WXConvert UIColor:styles[@"lightThemeBackgroundColor"]];
+    if (styles[@"weexLightSchemeBackgroundColor"]) {
+        self.lightSchemeBackgroundColor = [WXConvert UIColor:styles[@"weexLightSchemeBackgroundColor"]];
     }
     if (styles[@"opacity"]) {
         _opacity = [WXConvert CGFloat:styles[@"opacity"]];
@@ -239,13 +239,13 @@
     if (styles[@"boxShadow"]) {
         _boxShadow = styles[@"boxShadow"]?[WXConvert WXBoxShadow:styles[@"boxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor]:nil;
     }
-    if (styles[@"darkThemeBoxShadow"]) {
-        _darkThemeBoxShadow = [WXConvert WXBoxShadow:styles[@"darkThemeBoxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor];
+    if (styles[@"weexDarkSchemeBoxShadow"]) {
+        _darkSchemeBoxShadow = [WXConvert WXBoxShadow:styles[@"weexDarkSchemeBoxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor];
     }
-    if (styles[@"lightThemeBoxShadow"]) {
-        _lightThemeBoxShadow = [WXConvert WXBoxShadow:styles[@"lightThemeBoxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor];
+    if (styles[@"weexLightSchemeBoxShadow"]) {
+        _lightSchemeBoxShadow = [WXConvert WXBoxShadow:styles[@"weexLightSchemeBoxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor];
     }
-    if (styles[@"boxShadow"] || styles[@"darkThemeBoxShadow"] || styles[@"lightThemeBoxShadow"]) {
+    if (styles[@"boxShadow"] || styles[@"weexDarkSchemeBoxShadow"] || styles[@"weexLightSchemeBoxShadow"]) {
         WXBoxShadow* usingBoxShadow = [self _chooseBoxShadow];
         if (usingBoxShadow) {
             _lastBoxShadow = usingBoxShadow;
@@ -259,13 +259,13 @@
         [self setNeedsDisplay];
     }
     
-    if (styles[@"darkThemeBackgroundColor"]) {
-        self.darkThemeBackgroundColor = [WXConvert UIColor:styles[@"darkThemeBackgroundColor"]];
+    if (styles[@"weexDarkSchemeBackgroundColor"]) {
+        self.darkSchemeBackgroundColor = [WXConvert UIColor:styles[@"weexDarkSchemeBackgroundColor"]];
         [self setNeedsDisplay];
     }
     
-    if (styles[@"lightThemeBackgroundColor"]) {
-        self.lightThemeBackgroundColor = [WXConvert UIColor:styles[@"lightThemeBackgroundColor"]];
+    if (styles[@"weexLightSchemeBackgroundColor"]) {
+        self.lightSchemeBackgroundColor = [WXConvert UIColor:styles[@"weexLightSchemeBackgroundColor"]];
         [self setNeedsDisplay];
     }
     
@@ -273,17 +273,17 @@
         _backgroundImage = [WXConvert NSString:styles[@"backgroundImage"]];
     }
     
-    if (styles[@"darkThemeBackgroundImage"]) {
-        _darkThemeBackgroundImage = [WXConvert NSString:styles[@"darkThemeBackgroundImage"]];
+    if (styles[@"weexDarkSchemeBackgroundImage"]) {
+        _darkSchemeBackgroundImage = [WXConvert NSString:styles[@"weexDarkSchemeBackgroundImage"]];
     }
-    if (styles[@"lightThemeBackgroundImage"]) {
-        _lightThemeBackgroundImage = [WXConvert NSString:styles[@"lightThemeBackgroundImage"]];
+    if (styles[@"weexLightSchemeBackgroundImage"]) {
+        _lightSchemeBackgroundImage = [WXConvert NSString:styles[@"weexLightSchemeBackgroundImage"]];
     }
     
     if (styles[@"backgroundImage"] ||
-        styles[@"darkThemeBackgroundImage"] ||
-        styles[@"lightThemeBackgroundImage"]) {
-        if (_backgroundImage || _darkThemeBackgroundImage || _lightThemeBackgroundImage) {
+        styles[@"weexDarkSchemeBackgroundImage"] ||
+        styles[@"weexLightSchemeBackgroundImage"]) {
+        if (_backgroundImage || _darkSchemeBackgroundImage || _lightSchemeBackgroundImage) {
             [self setGradientLayer];
         }
     }
@@ -369,17 +369,17 @@
     WX_BOARD_COLOR_RESET(borderRightColor);
     WX_BOARD_COLOR_RESET(borderBottomColor);
     
-    WX_BOARD_RADIUS_DARK_THEME_COLOR_RESET_ALL(darkThemeBorderColor);
-    WX_BOARD_COLOR_RESET(darkThemeBorderTopColor);
-    WX_BOARD_COLOR_RESET(darkThemeBorderLeftColor);
-    WX_BOARD_COLOR_RESET(darkThemeBorderRightColor);
-    WX_BOARD_COLOR_RESET(darkThemeBorderBottomColor);
+    WX_BOARD_RADIUS_DARK_SCHEME_COLOR_RESET_ALL(darkSchemeBorderColor);
+    WX_BOARD_COLOR_RESET(darkSchemeBorderTopColor);
+    WX_BOARD_COLOR_RESET(darkSchemeBorderLeftColor);
+    WX_BOARD_COLOR_RESET(darkSchemeBorderRightColor);
+    WX_BOARD_COLOR_RESET(darkSchemeBorderBottomColor);
     
-    WX_BOARD_RADIUS_LIGHT_THEME_COLOR_RESET_ALL(lightThemeBorderColor);
-    WX_BOARD_COLOR_RESET(lightThemeBorderTopColor);
-    WX_BOARD_COLOR_RESET(lightThemeBorderLeftColor);
-    WX_BOARD_COLOR_RESET(lightThemeBorderRightColor);
-    WX_BOARD_COLOR_RESET(lightThemeBorderBottomColor);
+    WX_BOARD_RADIUS_LIGHT_SCHEME_COLOR_RESET_ALL(lightSchemeBorderColor);
+    WX_BOARD_COLOR_RESET(lightSchemeBorderTopColor);
+    WX_BOARD_COLOR_RESET(lightSchemeBorderLeftColor);
+    WX_BOARD_COLOR_RESET(lightSchemeBorderRightColor);
+    WX_BOARD_COLOR_RESET(lightSchemeBorderBottomColor);
 }
 
 - (void)_resetStyles:(NSArray *)styles
@@ -388,12 +388,12 @@
         self.styleBackgroundColor = [UIColor clearColor];
         [self setNeedsDisplay];
     }
-    if (styles && [styles containsObject:@"darkThemeBackgroundColor"]) {
-        self.darkThemeBackgroundColor = nil;
+    if (styles && [styles containsObject:@"weexDarkSchemeBackgroundColor"]) {
+        self.darkSchemeBackgroundColor = nil;
         [self setNeedsDisplay];
     }
-    if (styles && [styles containsObject:@"lightThemeBackgroundColor"]) {
-        self.lightThemeBackgroundColor = nil;
+    if (styles && [styles containsObject:@"weexLightSchemeBackgroundColor"]) {
+        self.lightSchemeBackgroundColor = nil;
         [self setNeedsDisplay];
     }
     
@@ -402,27 +402,27 @@
         _boxShadow = nil;
         [self setNeedsDisplay];
     }
-    if (styles && [styles containsObject:@"darkThemeBoxShadow"]) {
-        _darkThemeBoxShadow = nil;
+    if (styles && [styles containsObject:@"weexDarkSchemeBoxShadow"]) {
+        _darkSchemeBoxShadow = nil;
         [self setNeedsDisplay];
     }
-    if (styles && [styles containsObject:@"lightThemeBoxShadow"]) {
-        _lightThemeBoxShadow = nil;
+    if (styles && [styles containsObject:@"weexLightSchemeBoxShadow"]) {
+        _lightSchemeBoxShadow = nil;
         [self setNeedsDisplay];
     }
     
     if (styles && [styles containsObject:@"backgroundImage"]) {
         _backgroundImage = nil;
     }
-    if (styles && [styles containsObject:@"darkThemeBackgroundImage"]) {
-        _darkThemeBackgroundImage = nil;
+    if (styles && [styles containsObject:@"weexDarkSchemeBackgroundImage"]) {
+        _darkSchemeBackgroundImage = nil;
     }
-    if (styles && [styles containsObject:@"lightThemeBackgroundImage"]) {
-        _lightThemeBackgroundImage = nil;
+    if (styles && [styles containsObject:@"weexLightSchemeBackgroundImage"]) {
+        _lightSchemeBackgroundImage = nil;
     }
     if (styles && ([styles containsObject:@"backgroundImage"] ||
-                   [styles containsObject:@"darkThemeBackgroundImage"] ||
-                   [styles containsObject:@"lightThemeBackgroundImage"])) {
+                   [styles containsObject:@"weexDarkSchemeBackgroundImage"] ||
+                   [styles containsObject:@"weexLightSchemeBackgroundImage"])) {
         [self setGradientLayer];
     }
     
diff --git a/ios/sdk/WeexSDK/Sources/View/WXRootView.m b/ios/sdk/WeexSDK/Sources/View/WXRootView.m
index 8b2414b..0df4760 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXRootView.m
+++ b/ios/sdk/WeexSDK/Sources/View/WXRootView.m
@@ -73,7 +73,7 @@
         if (currentStyle != previousTraitCollection.userInterfaceStyle) {
             if (_hasFirstTraitCollectionChange) {
                 _allowFirstTraitCollectionChange = NO;
-                [self.instance setCurrentThemeName:currentStyle == UIUserInterfaceStyleDark ? @"dark" : @"light"];
+                [self.instance setCurrentSchemeName:currentStyle == UIUserInterfaceStyleDark ? @"dark" : @"light"];
             }
             else {
                 __weak WXRootView* weakSelf = self;
@@ -84,7 +84,7 @@
                     if (strongSelf) {
                         if (strongSelf->_allowFirstTraitCollectionChange) {
                             if (strongSelf.instance) {
-                                [strongSelf.instance setCurrentThemeName:currentStyle == UIUserInterfaceStyleDark ? @"dark" : @"light"];
+                                [strongSelf.instance setCurrentSchemeName:currentStyle == UIUserInterfaceStyleDark ? @"dark" : @"light"];
                             }
                         }
                         strongSelf->_hasFirstTraitCollectionChange = NO;
diff --git a/ios/sdk/WeexSDK/Sources/WeexSDK.h b/ios/sdk/WeexSDK/Sources/WeexSDK.h
index 05dbe21..05807f0 100644
--- a/ios/sdk/WeexSDK/Sources/WeexSDK.h
+++ b/ios/sdk/WeexSDK/Sources/WeexSDK.h
@@ -73,7 +73,7 @@
 #import <WeexSDK/WXDefine.h>
 #import <WeexSDK/WXDebugTool.h>
 #import <WeexSDK/WXDataRenderHandler.h>
-#import <WeexSDK/WXDarkThemeProtocol.h>
+#import <WeexSDK/WXDarkSchemeProtocol.h>
 #import <WeexSDK/WXConvertUtility.h>
 #import <WeexSDK/WXConvert.h>
 #import <WeexSDK/WXConfigCenterProtocol.h>
