You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ji...@apache.org on 2019/07/16 02:28:37 UTC

[incubator-weex] branch master updated: iOS playground seperation (#2709)

This is an automated email from the ASF dual-hosted git repository.

jianhan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-weex.git


The following commit(s) were added to refs/heads/master by this push:
     new 5f01b57  iOS playground seperation (#2709)
5f01b57 is described below

commit 5f01b57c2133b12135d243ad1bd40c4425654c3f
Author: Renmin <33...@users.noreply.github.com>
AuthorDate: Tue Jul 16 10:28:30 2019 +0800

    iOS playground seperation (#2709)
    
    * merge
    
    * delete ios/playground
    
    * update The playground submodule when clone the ‘incubator-weex’ repo and build it
    
    * add README.md
---
 ios/README.md                                      |   13 +
 ios/playground/Podfile                             |   24 -
 ios/playground/README.md                           |    0
 ios/playground/WeexDemo.xcodeproj/project.pbxproj  |  979 ------
 .../project.xcworkspace/contents.xcworkspacedata   |    7 -
 .../xcshareddata/IDEWorkspaceChecks.plist          |    8 -
 .../xcshareddata/xcschemes/WeexDemo.xcscheme       |  124 -
 .../xcshareddata/xcschemes/WeexUITestDemo.xcscheme |   91 -
 .../WeexDemo.xcworkspace/contents.xcworkspacedata  |   10 -
 .../xcshareddata/IDEWorkspaceChecks.plist          |    8 -
 ios/playground/WeexDemo/AppDelegate.h              |   29 -
 ios/playground/WeexDemo/AppDelegate.m              |  290 --
 .../AppIcon.appiconset/AppStoreIcon1024.png        |  Bin 150730 -> 0 bytes
 .../AppIcon.appiconset/Contents.json               |  112 -
 .../Assets.xcassets/AppIcon.appiconset/Icon-29.png |  Bin 1614 -> 0 bytes
 .../AppIcon.appiconset/Icon-29@2x-1.png            |  Bin 2421 -> 0 bytes
 .../AppIcon.appiconset/Icon-29@2x.png              |  Bin 2421 -> 0 bytes
 .../AppIcon.appiconset/Icon-29@3x.png              |  Bin 3236 -> 0 bytes
 .../Assets.xcassets/AppIcon.appiconset/Icon-40.png |  Bin 1946 -> 0 bytes
 .../AppIcon.appiconset/Icon-40@2x-1.png            |  Bin 3016 -> 0 bytes
 .../AppIcon.appiconset/Icon-40@2x.png              |  Bin 3016 -> 0 bytes
 .../AppIcon.appiconset/Icon-40@3x.png              |  Bin 4172 -> 0 bytes
 .../AppIcon.appiconset/Icon-60@2x.png              |  Bin 4172 -> 0 bytes
 .../AppIcon.appiconset/Icon-60@3x.png              |  Bin 6017 -> 0 bytes
 .../Assets.xcassets/AppIcon.appiconset/Icon-76.png |  Bin 2918 -> 0 bytes
 .../AppIcon.appiconset/Icon-76@2x.png              |  Bin 5088 -> 0 bytes
 .../AppIcon.appiconset/Icon-83.5@2x.png            |  Bin 5537 -> 0 bytes
 .../WeexDemo/Assets.xcassets/Contents.json         |    6 -
 .../LaunchImage.launchimage/Contents.json          |   88 -
 .../LaunchImage.launchimage/Default-568h@2x.png    |  Bin 22184 -> 0 bytes
 .../LaunchImage.launchimage/Default@2x.png         |  Bin 19694 -> 0 bytes
 .../LaunchImage.launchimage/Retinal HD 4.7.png     |  Bin 33603 -> 0 bytes
 .../LaunchImage.launchimage/Retinal HD 5.5.png     |  Bin 72798 -> 0 bytes
 .../iPhone5.5-landscape.png                        |  Bin 66768 -> 0 bytes
 .../LaunchImage.launchimage/iPhoneX-landscape.png  |  Bin 68749 -> 0 bytes
 .../LaunchImage.launchimage/iPhoneX@3x.png         |  Bin 68622 -> 0 bytes
 .../LaunchImage.launchimage/iPhoneXMax@3x.png      |  Bin 85516 -> 0 bytes
 .../LaunchImage.launchimage/iPhoneXR@2x.png        |  Bin 41740 -> 0 bytes
 .../Assets.xcassets/back.imageset/Contents.json    |   23 -
 .../Assets.xcassets/back.imageset/back.png         |  Bin 1244 -> 0 bytes
 .../Assets.xcassets/back.imageset/back@2x.png      |  Bin 1646 -> 0 bytes
 .../Assets.xcassets/back.imageset/back@3x.png      |  Bin 2179 -> 0 bytes
 .../Assets.xcassets/delete.imageset/Contents.json  |   23 -
 .../Assets.xcassets/delete.imageset/delete.png     |  Bin 289 -> 0 bytes
 .../Assets.xcassets/delete.imageset/delete@2x.png  |  Bin 504 -> 0 bytes
 .../Assets.xcassets/delete.imageset/delete@3x.png  |  Bin 690 -> 0 bytes
 .../Assets.xcassets/reload.imageset/Contents.json  |   23 -
 .../Assets.xcassets/reload.imageset/reload.png     |  Bin 542 -> 0 bytes
 .../Assets.xcassets/reload.imageset/reload@2x.png  |  Bin 1037 -> 0 bytes
 .../Assets.xcassets/reload.imageset/reload@3x.png  |  Bin 1516 -> 0 bytes
 .../Assets.xcassets/scan.imageset/Contents.json    |   23 -
 .../Assets.xcassets/scan.imageset/scan.png         |  Bin 1344 -> 0 bytes
 .../Assets.xcassets/scan.imageset/scan@2x.png      |  Bin 2458 -> 0 bytes
 .../Assets.xcassets/scan.imageset/scan@3x.png      |  Bin 3723 -> 0 bytes
 .../scan_history.imageset/Contents.json            |   23 -
 .../scan_history.imageset/history.png              |  Bin 546 -> 0 bytes
 .../scan_history.imageset/history@2x.png           |  Bin 1037 -> 0 bytes
 .../scan_history.imageset/history@3x.png           |  Bin 1628 -> 0 bytes
 ios/playground/WeexDemo/DemoBaseViewController.h   |   24 -
 ios/playground/WeexDemo/DemoBaseViewController.m   |   45 -
 ios/playground/WeexDemo/DemoDefine.h               |   41 -
 .../Brand Assets.launchimage/Contents.json         |   21 -
 ios/playground/WeexDemo/Info.plist                 |   94 -
 .../WeexDemo/Scanner/WXScannerHistoryVC.h          |   24 -
 .../WeexDemo/Scanner/WXScannerHistoryVC.m          |  225 --
 ios/playground/WeexDemo/Scanner/WXScannerVC.h      |   25 -
 ios/playground/WeexDemo/Scanner/WXScannerVC.m      |  242 --
 ios/playground/WeexDemo/UIView+UIThreadCheck.h     |   26 -
 ios/playground/WeexDemo/UIView+UIThreadCheck.m     |   53 -
 .../WeexDemo/UIViewController+WXDemoNaviBar.h      |   34 -
 .../WeexDemo/UIViewController+WXDemoNaviBar.m      |  138 -
 .../WeexDemo/WXConfigCenterDefaultImpl.h           |   25 -
 .../WeexDemo/WXConfigCenterDefaultImpl.m           |   45 -
 ios/playground/WeexDemo/WXDemoViewController.h     |   32 -
 ios/playground/WeexDemo/WXDemoViewController.m     |  348 --
 ios/playground/WeexDemo/WXExtModule.h              |   26 -
 ios/playground/WeexDemo/WXExtModule.m              |   57 -
 ios/playground/WeexDemo/WXExtendCallNativeTest.h   |   25 -
 ios/playground/WeexDemo/WXExtendCallNativeTest.m   |   47 -
 ios/playground/WeexDemo/WXNavigationHandlerImpl.h  |   25 -
 ios/playground/WeexDemo/WXNavigationHandlerImpl.m  |   74 -
 ios/playground/WeexDemo/WXSyncTestModule.h         |   25 -
 ios/playground/WeexDemo/WXSyncTestModule.m         |   49 -
 .../WeexDemo/Websocket/SRWebSocket+Weex.h          |   29 -
 .../WeexDemo/Websocket/SRWebSocket+Weex.m          |   47 -
 .../WeexDemo/Websocket/WXWebSocketDefaultImpl.h    |   25 -
 .../WeexDemo/Websocket/WXWebSocketDefaultImpl.m    |  120 -
 ios/playground/WeexDemo/debug/DebugAnalyzer.h      |   24 -
 ios/playground/WeexDemo/debug/DebugAnzlyzer.m      |   30 -
 ios/playground/WeexDemo/debug/WXATLoggerPlugin.h   |   25 -
 ios/playground/WeexDemo/debug/WXATLoggerPlugin.m   |   65 -
 .../WeexDemo/debug/WXATViewHierarchyPlugin.h       |   25 -
 .../WeexDemo/debug/WXATViewHierarchyPlugin.m       |   54 -
 .../WeexDemo/extend/component/WXSelectComponent.h  |   25 -
 .../WeexDemo/extend/component/WXSelectComponent.m  |  149 -
 .../WeexDemo/extend/handler/WXApmGeneratorImpl.h   |   25 -
 .../WeexDemo/extend/handler/WXApmGeneratorImpl.m   |   31 -
 ios/playground/WeexDemo/extend/handler/WXApmImpl.h |   25 -
 ios/playground/WeexDemo/extend/handler/WXApmImpl.m |  149 -
 .../extend/handler/WXImgLoaderDefaultImpl.h        |   24 -
 .../extend/handler/WXImgLoaderDefaultImpl.m        |  119 -
 .../WeexDemo/extend/module/WXEventModule.h         |   26 -
 .../WeexDemo/extend/module/WXEventModule.m         |   68 -
 .../WeexDemo/extend/module/WXTitleBarModule.h      |   14 -
 .../WeexDemo/extend/module/WXTitleBarModule.m      |   48 -
 ios/playground/WeexDemo/main.m                     |   27 -
 ios/playground/WeexDemo/weex-icon.png              |  Bin 53574 -> 0 bytes
 ios/playground/WeexDemoTests/Info.plist            |   28 -
 ios/playground/WeexDemoTests/WeexDemoTests.m       |   50 -
 ios/playground/WeexUITestDemo-Info.plist           |   52 -
 ios/playground/WeexUITestDemoUITests/Info.plist    |   24 -
 .../WeexUITestDemoUITests/WeexUITestDemoUITests.m  |   51 -
 ios/playground/bundlejs/about.weex.js              | 3309 --------------------
 ios/playground/bundlejs/examples.weex.js           | 2598 ---------------
 ios/playground/bundlejs/guide.weex.js              | 3191 -------------------
 ios/playground/bundlejs/landing.weex.js            | 2319 --------------
 ios/playground/bundlejs/news.weex.js               | 2266 --------------
 ios/playground/weex.png                            |  Bin 3187 -> 0 bytes
 ios/playground/weex@2x.png                         |  Bin 7294 -> 0 bytes
 ios/sdk/buildScripts.sh                            |    4 +
 120 files changed, 17 insertions(+), 18723 deletions(-)

diff --git a/ios/README.md b/ios/README.md
new file mode 100644
index 0000000..837a5b5
--- /dev/null
+++ b/ios/README.md
@@ -0,0 +1,13 @@
+## The submodule weex-playground
+
+[Weex Playground](https://github.com/apache/incubator-weex-playground/tree/master/ios) can be used to test and preview weex pages on iOS and it has been added as a submodule.
+
+### Relationship between weex and playground
+
+- The playground submodule will be cloned and updated automatically when developers clone the ‘incubator-weex’ repo and build it. In this case, playground project will use the current incubator-weex project as it's pod source.
+
+- When developer directly clone the 'weex-playground' repo and run it separately, the playground project will use the lastest incubator-weex project in master branch as it's pod source.
+
+  
+
+  
\ No newline at end of file
diff --git a/ios/playground/Podfile b/ios/playground/Podfile
deleted file mode 100644
index 5dca1b5..0000000
--- a/ios/playground/Podfile
+++ /dev/null
@@ -1,24 +0,0 @@
-source 'https://github.com/CocoaPods/Specs.git'
-platform :ios, '9.0'
-#inhibit_all_warnings!
-
-def common
-    pod 'WeexSDK', :path=>'../../'
-    pod 'WXDevtool','0.20.0'
-    pod 'SDWebImage', '3.7.5'
-    pod 'SDWebImage/WebP'
-    pod 'SocketRocket', '0.4.2'
-    pod 'ATSDK-Weex', '0.0.1',:configurations => ['Debug']
-    pod 'BindingX', '1.0.3'
-    
-    # WeexGcanvas is added by Weex Plugin, more info at https://market.dotwe.org/ext/list.htm
-    #pod 'WeexGcanvas'
-end
-
-target 'WeexDemo' do
-    common
-end
-
-target 'WeexUITestDemo' do
-    common
-end
diff --git a/ios/playground/README.md b/ios/playground/README.md
deleted file mode 100644
index e69de29..0000000
diff --git a/ios/playground/WeexDemo.xcodeproj/project.pbxproj b/ios/playground/WeexDemo.xcodeproj/project.pbxproj
deleted file mode 100644
index 06a0db7..0000000
--- a/ios/playground/WeexDemo.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,979 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		17036A5720FDF9AA0029AE3D /* WXApmGeneratorImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 17036A5620FDF9AA0029AE3D /* WXApmGeneratorImpl.m */; };
-		17036A5A20FDF9DF0029AE3D /* WXApmImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 17036A5920FDF9DF0029AE3D /* WXApmImpl.m */; };
-		17C1DB57206B675D000E0CEB /* DebugAnzlyzer.m in Sources */ = {isa = PBXBuildFile; fileRef = 17C1DB56206B675D000E0CEB /* DebugAnzlyzer.m */; };
-		2AE88A2C1C8544E6003329DE /* WXScannerVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE88A2B1C8544E6003329DE /* WXScannerVC.m */; };
-		3375BEE821C74C5C003CAAB8 /* WXWebSocketDefaultImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 3375BEE521C74C5C003CAAB8 /* WXWebSocketDefaultImpl.m */; };
-		3375BEE921C74C5C003CAAB8 /* SRWebSocket+Weex.m in Sources */ = {isa = PBXBuildFile; fileRef = 3375BEE721C74C5C003CAAB8 /* SRWebSocket+Weex.m */; };
-		564B94671DD9C65000441C8D /* WeexUITestDemo-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 564B94661DD9C65000441C8D /* WeexUITestDemo-Info.plist */; };
-		59EA0DA71D2E7D19004F904A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 59EA0DA61D2E7D19004F904A /* Images.xcassets */; };
-		7478481E1E0CD4910044500D /* WXSyncTestModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 7478481D1E0CD4910044500D /* WXSyncTestModule.m */; };
-		747DF6681E2F176A005C53A8 /* UIView+UIThreadCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 747DF6671E2F176A005C53A8 /* UIView+UIThreadCheck.m */; };
-		74CC79EB1C2B9E4700829368 /* UIViewController+WXDemoNaviBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 74CC79EA1C2B9E4700829368 /* UIViewController+WXDemoNaviBar.m */; };
-		775BEE801C1E8ECC008D1629 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 775BEE7F1C1E8ECC008D1629 /* main.m */; };
-		775BEE831C1E8ECC008D1629 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 775BEE821C1E8ECC008D1629 /* AppDelegate.m */; };
-		775BEE861C1E8ECC008D1629 /* WXDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 775BEE851C1E8ECC008D1629 /* WXDemoViewController.m */; };
-		775BEE8B1C1E8ECC008D1629 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 775BEE8A1C1E8ECC008D1629 /* Assets.xcassets */; };
-		775BEE991C1E8ECC008D1629 /* WeexDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 775BEE981C1E8ECC008D1629 /* WeexDemoTests.m */; };
-		84361D2F1CA10F8E00F43825 /* WXScannerVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE88A2B1C8544E6003329DE /* WXScannerVC.m */; };
-		84361D331CA10F8E00F43825 /* WXDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 775BEE851C1E8ECC008D1629 /* WXDemoViewController.m */; };
-		84361D371CA10F8E00F43825 /* UIViewController+WXDemoNaviBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 74CC79EA1C2B9E4700829368 /* UIViewController+WXDemoNaviBar.m */; };
-		84361D381CA10F8E00F43825 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 775BEE821C1E8ECC008D1629 /* AppDelegate.m */; };
-		84361D3B1CA10F8E00F43825 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 775BEE7F1C1E8ECC008D1629 /* main.m */; };
-		84361D421CA10F8E00F43825 /* libPods-WeexDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7601607D735D7F8D88971230 /* libPods-WeexDemo.a */; };
-		84361D5B1CA10F8E00F43825 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 775BEE8A1C1E8ECC008D1629 /* Assets.xcassets */; };
-		846FC8DA1E1B853100949E7D /* WXSyncTestModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 7478481D1E0CD4910044500D /* WXSyncTestModule.m */; };
-		846FC8DB1E1B853600949E7D /* WXATViewHierarchyPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABAFF21D029685001C8592 /* WXATViewHierarchyPlugin.m */; };
-		847CAF2B1F39BB6B00551725 /* UIView+UIThreadCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 747DF6671E2F176A005C53A8 /* UIView+UIThreadCheck.m */; };
-		847CAF2C1F39BB8A00551725 /* WXATLoggerPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABAFF01D029685001C8592 /* WXATLoggerPlugin.m */; };
-		847CAF2D1F39BBB900551725 /* WXScannerHistoryVC.m in Sources */ = {isa = PBXBuildFile; fileRef = DC5B53681E8CED9400E02125 /* WXScannerHistoryVC.m */; };
-		847CAF2E1F39BBFB00551725 /* WXConfigCenterDefaultImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = DC20B8E51ECADA2500845F39 /* WXConfigCenterDefaultImpl.m */; };
-		847CAF311F39E3F100551725 /* WXExtModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 847CAF301F39E3F100551725 /* WXExtModule.m */; };
-		84D7CAC71CE3266C00D48D46 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7475ACA01CD8444A0044E96C /* libsqlite3.0.tbd */; };
-		8A0B5EFFF75BF82EA481983D /* libPods-WeexUITestDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E48C20F443AA337D1FE97622 /* libPods-WeexUITestDemo.a */; };
-		B83A6C5220FF16D50053BCEF /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B83A6C5120FF16D50053BCEF /* libc++.tbd */; };
-		C43CDA031F1C6E01005A6B03 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = C43CDA021F1C6E01005A6B03 /* libz.tbd */; };
-		C47B78D21F299E27001D3B0C /* WXExtendCallNativeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = C47B78D11F299E27001D3B0C /* WXExtendCallNativeTest.m */; };
-		DC15A3C7200C505C009C8977 /* WXTitleBarModule.m in Sources */ = {isa = PBXBuildFile; fileRef = DC15A3C6200C505C009C8977 /* WXTitleBarModule.m */; };
-		DC15A3D0200E30FC009C8977 /* WXNavigationHandlerImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = DC15A3CE200E30FC009C8977 /* WXNavigationHandlerImpl.m */; };
-		DC20B8E61ECADA2500845F39 /* WXConfigCenterDefaultImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = DC20B8E51ECADA2500845F39 /* WXConfigCenterDefaultImpl.m */; };
-		DC5B53691E8CED9400E02125 /* WXScannerHistoryVC.m in Sources */ = {isa = PBXBuildFile; fileRef = DC5B53681E8CED9400E02125 /* WXScannerHistoryVC.m */; };
-		DC5E503E1D0D97130059F0EB /* weex.png in Resources */ = {isa = PBXBuildFile; fileRef = DC5E503C1D0D97130059F0EB /* weex.png */; };
-		DC5E503F1D0D97130059F0EB /* weex@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DC5E503D1D0D97130059F0EB /* weex@2x.png */; };
-		DC65C4FA1CEB032F00B2F84F /* bundlejs in Resources */ = {isa = PBXBuildFile; fileRef = DC65C4F91CEB032F00B2F84F /* bundlejs */; };
-		DC6DD9D21CFE9BC400549297 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7475ACA01CD8444A0044E96C /* libsqlite3.0.tbd */; };
-		DCA812FA1D0401500029BF62 /* WXEventModule.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABB0001D02975E001C8592 /* WXEventModule.m */; };
-		DCA812FB1D0401570029BF62 /* WXImgLoaderDefaultImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABAFFD1D029753001C8592 /* WXImgLoaderDefaultImpl.m */; };
-		DCABAFF31D029685001C8592 /* WXATLoggerPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABAFF01D029685001C8592 /* WXATLoggerPlugin.m */; };
-		DCABAFF41D029685001C8592 /* WXATViewHierarchyPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABAFF21D029685001C8592 /* WXATViewHierarchyPlugin.m */; };
-		DCABAFFE1D029753001C8592 /* WXImgLoaderDefaultImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABAFFD1D029753001C8592 /* WXImgLoaderDefaultImpl.m */; };
-		DCABB0011D02975E001C8592 /* WXEventModule.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABB0001D02975E001C8592 /* WXEventModule.m */; };
-		DCD286E01CF491AC00C601CA /* weex-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = DCD286DF1CF491AC00C601CA /* weex-icon.png */; };
-		EAEC716BE3E43DBC8494EC51 /* libPods-WeexDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7601607D735D7F8D88971230 /* libPods-WeexDemo.a */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
-		775BEE951C1E8ECC008D1629 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 775BEE731C1E8ECC008D1629 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 775BEE7A1C1E8ECC008D1629;
-			remoteInfo = WeexDemo;
-		};
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
-		17036A5520FDF9AA0029AE3D /* WXApmGeneratorImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WXApmGeneratorImpl.h; path = extend/handler/WXApmGeneratorImpl.h; sourceTree = "<group>"; };
-		17036A5620FDF9AA0029AE3D /* WXApmGeneratorImpl.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = WXApmGeneratorImpl.m; path = extend/handler/WXApmGeneratorImpl.m; sourceTree = "<group>"; };
-		17036A5820FDF9DF0029AE3D /* WXApmImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WXApmImpl.h; path = extend/handler/WXApmImpl.h; sourceTree = "<group>"; };
-		17036A5920FDF9DF0029AE3D /* WXApmImpl.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = WXApmImpl.m; path = extend/handler/WXApmImpl.m; sourceTree = "<group>"; };
-		17C1DB55206B6729000E0CEB /* DebugAnalyzer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DebugAnalyzer.h; path = debug/DebugAnalyzer.h; sourceTree = "<group>"; };
-		17C1DB56206B675D000E0CEB /* DebugAnzlyzer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = DebugAnzlyzer.m; path = debug/DebugAnzlyzer.m; sourceTree = "<group>"; };
-		1888E2C5769382461DEDC97D /* Pods-WeexUITestDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeexUITestDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo.release.xcconfig"; sourceTree = "<group>"; };
-		2278B1B1FCE894EDAF9F0171 /* Pods-WeexUITestDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeexUITestDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo.debug.xcconfig"; sourceTree = "<group>"; };
-		22E4D2883CC56188A2CA9C13 /* Pods-WeexDemo.uitest.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeexDemo.uitest.xcconfig"; path = "Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo.uitest.xcconfig"; sourceTree = "<group>"; };
-		2AE88A2A1C8544E6003329DE /* WXScannerVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXScannerVC.h; path = Scanner/WXScannerVC.h; sourceTree = "<group>"; };
-		2AE88A2B1C8544E6003329DE /* WXScannerVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXScannerVC.m; path = Scanner/WXScannerVC.m; sourceTree = "<group>"; };
-		3375BEE421C74C5C003CAAB8 /* SRWebSocket+Weex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SRWebSocket+Weex.h"; sourceTree = "<group>"; };
-		3375BEE521C74C5C003CAAB8 /* WXWebSocketDefaultImpl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXWebSocketDefaultImpl.m; sourceTree = "<group>"; };
-		3375BEE621C74C5C003CAAB8 /* WXWebSocketDefaultImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXWebSocketDefaultImpl.h; sourceTree = "<group>"; };
-		3375BEE721C74C5C003CAAB8 /* SRWebSocket+Weex.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SRWebSocket+Weex.m"; sourceTree = "<group>"; };
-		564B94661DD9C65000441C8D /* WeexUITestDemo-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "WeexUITestDemo-Info.plist"; sourceTree = "<group>"; };
-		59EA0DA61D2E7D19004F904A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
-		5AF8846546DAC65CAC038806 /* Pods-WeexDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeexDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo.debug.xcconfig"; sourceTree = "<group>"; };
-		741DFE081DDDD519009B020F /* libstdc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libstdc++.tbd"; path = "usr/lib/libstdc++.tbd"; sourceTree = SDKROOT; };
-		7453E3641C9FA971001EB427 /* DemoDefine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoDefine.h; sourceTree = "<group>"; };
-		7475ACA01CD8444A0044E96C /* libsqlite3.0.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; };
-		7478481C1E0CD4910044500D /* WXSyncTestModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXSyncTestModule.h; sourceTree = "<group>"; };
-		7478481D1E0CD4910044500D /* WXSyncTestModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXSyncTestModule.m; sourceTree = "<group>"; };
-		747DF6661E2F176A005C53A8 /* UIView+UIThreadCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+UIThreadCheck.h"; sourceTree = "<group>"; };
-		747DF6671E2F176A005C53A8 /* UIView+UIThreadCheck.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+UIThreadCheck.m"; sourceTree = "<group>"; };
-		74CC79E91C2B9E4700829368 /* UIViewController+WXDemoNaviBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+WXDemoNaviBar.h"; sourceTree = "<group>"; };
-		74CC79EA1C2B9E4700829368 /* UIViewController+WXDemoNaviBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+WXDemoNaviBar.m"; sourceTree = "<group>"; };
-		7601607D735D7F8D88971230 /* libPods-WeexDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-WeexDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; };
-		775BEE7B1C1E8ECC008D1629 /* WeexDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WeexDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		775BEE7F1C1E8ECC008D1629 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
-		775BEE811C1E8ECC008D1629 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
-		775BEE821C1E8ECC008D1629 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
-		775BEE841C1E8ECC008D1629 /* WXDemoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WXDemoViewController.h; sourceTree = "<group>"; };
-		775BEE851C1E8ECC008D1629 /* WXDemoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WXDemoViewController.m; sourceTree = "<group>"; };
-		775BEE8A1C1E8ECC008D1629 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
-		775BEE8F1C1E8ECC008D1629 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		775BEE941C1E8ECC008D1629 /* WeexDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WeexDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
-		775BEE981C1E8ECC008D1629 /* WeexDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WeexDemoTests.m; sourceTree = "<group>"; };
-		775BEE9A1C1E8ECC008D1629 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		84361D751CA10F8E00F43825 /* WeexUITestDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WeexUITestDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		847CAF2F1F39E3F100551725 /* WXExtModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXExtModule.h; sourceTree = "<group>"; };
-		847CAF301F39E3F100551725 /* WXExtModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXExtModule.m; sourceTree = "<group>"; };
-		9420131417A731ED089B0814 /* Pods-WeexDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeexDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo.release.xcconfig"; sourceTree = "<group>"; };
-		B83A6C5120FF16D50053BCEF /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; };
-		C43CDA021F1C6E01005A6B03 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
-		C47B78D01F299E27001D3B0C /* WXExtendCallNativeTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXExtendCallNativeTest.h; sourceTree = "<group>"; };
-		C47B78D11F299E27001D3B0C /* WXExtendCallNativeTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXExtendCallNativeTest.m; sourceTree = "<group>"; };
-		DC15A3C5200C505C009C8977 /* WXTitleBarModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WXTitleBarModule.h; path = extend/module/WXTitleBarModule.h; sourceTree = "<group>"; };
-		DC15A3C6200C505C009C8977 /* WXTitleBarModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = WXTitleBarModule.m; path = extend/module/WXTitleBarModule.m; sourceTree = "<group>"; };
-		DC15A3CE200E30FC009C8977 /* WXNavigationHandlerImpl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXNavigationHandlerImpl.m; sourceTree = "<group>"; };
-		DC15A3CF200E30FC009C8977 /* WXNavigationHandlerImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXNavigationHandlerImpl.h; sourceTree = "<group>"; };
-		DC20B8E41ECADA2500845F39 /* WXConfigCenterDefaultImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXConfigCenterDefaultImpl.h; sourceTree = "<group>"; };
-		DC20B8E51ECADA2500845F39 /* WXConfigCenterDefaultImpl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXConfigCenterDefaultImpl.m; sourceTree = "<group>"; };
-		DC5B53671E8CED9400E02125 /* WXScannerHistoryVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXScannerHistoryVC.h; path = Scanner/WXScannerHistoryVC.h; sourceTree = "<group>"; };
-		DC5B53681E8CED9400E02125 /* WXScannerHistoryVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXScannerHistoryVC.m; path = Scanner/WXScannerHistoryVC.m; sourceTree = "<group>"; };
-		DC5E503C1D0D97130059F0EB /* weex.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = weex.png; sourceTree = "<group>"; };
-		DC5E503D1D0D97130059F0EB /* weex@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weex@2x.png"; sourceTree = "<group>"; };
-		DC65C4F91CEB032F00B2F84F /* bundlejs */ = {isa = PBXFileReference; lastKnownFileType = folder; path = bundlejs; sourceTree = "<group>"; };
-		DCABAFEF1D029685001C8592 /* WXATLoggerPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXATLoggerPlugin.h; path = debug/WXATLoggerPlugin.h; sourceTree = "<group>"; };
-		DCABAFF01D029685001C8592 /* WXATLoggerPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXATLoggerPlugin.m; path = debug/WXATLoggerPlugin.m; sourceTree = "<group>"; };
-		DCABAFF11D029685001C8592 /* WXATViewHierarchyPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXATViewHierarchyPlugin.h; path = debug/WXATViewHierarchyPlugin.h; sourceTree = "<group>"; };
-		DCABAFF21D029685001C8592 /* WXATViewHierarchyPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXATViewHierarchyPlugin.m; path = debug/WXATViewHierarchyPlugin.m; sourceTree = "<group>"; };
-		DCABAFF91D029748001C8592 /* WXSelectComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXSelectComponent.h; path = extend/component/WXSelectComponent.h; sourceTree = "<group>"; };
-		DCABAFFA1D029748001C8592 /* WXSelectComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXSelectComponent.m; path = extend/component/WXSelectComponent.m; sourceTree = "<group>"; };
-		DCABAFFC1D029753001C8592 /* WXImgLoaderDefaultImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXImgLoaderDefaultImpl.h; path = extend/handler/WXImgLoaderDefaultImpl.h; sourceTree = "<group>"; };
-		DCABAFFD1D029753001C8592 /* WXImgLoaderDefaultImpl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXImgLoaderDefaultImpl.m; path = extend/handler/WXImgLoaderDefaultImpl.m; sourceTree = "<group>"; };
-		DCABAFFF1D02975E001C8592 /* WXEventModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXEventModule.h; path = extend/module/WXEventModule.h; sourceTree = "<group>"; };
-		DCABB0001D02975E001C8592 /* WXEventModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXEventModule.m; path = extend/module/WXEventModule.m; sourceTree = "<group>"; };
-		DCD286DF1CF491AC00C601CA /* weex-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "weex-icon.png"; path = "WeexDemo/weex-icon.png"; sourceTree = "<group>"; };
-		E48C20F443AA337D1FE97622 /* libPods-WeexUITestDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-WeexUITestDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		775BEE781C1E8ECC008D1629 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				B83A6C5220FF16D50053BCEF /* libc++.tbd in Frameworks */,
-				C43CDA031F1C6E01005A6B03 /* libz.tbd in Frameworks */,
-				DC6DD9D21CFE9BC400549297 /* libsqlite3.0.tbd in Frameworks */,
-				EAEC716BE3E43DBC8494EC51 /* libPods-WeexDemo.a in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		775BEE911C1E8ECC008D1629 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		84361D3C1CA10F8E00F43825 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				84D7CAC71CE3266C00D48D46 /* libsqlite3.0.tbd in Frameworks */,
-				84361D421CA10F8E00F43825 /* libPods-WeexDemo.a in Frameworks */,
-				8A0B5EFFF75BF82EA481983D /* libPods-WeexUITestDemo.a in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		2AE88A291C8544D7003329DE /* scanner */ = {
-			isa = PBXGroup;
-			children = (
-				2AE88A2A1C8544E6003329DE /* WXScannerVC.h */,
-				2AE88A2B1C8544E6003329DE /* WXScannerVC.m */,
-				DC5B53671E8CED9400E02125 /* WXScannerHistoryVC.h */,
-				DC5B53681E8CED9400E02125 /* WXScannerHistoryVC.m */,
-			);
-			name = scanner;
-			sourceTree = "<group>";
-		};
-		327BB19797F63D5309FB91BF /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				B83A6C5120FF16D50053BCEF /* libc++.tbd */,
-				C43CDA021F1C6E01005A6B03 /* libz.tbd */,
-				741DFE081DDDD519009B020F /* libstdc++.tbd */,
-				7475ACA01CD8444A0044E96C /* libsqlite3.0.tbd */,
-				7601607D735D7F8D88971230 /* libPods-WeexDemo.a */,
-				E48C20F443AA337D1FE97622 /* libPods-WeexUITestDemo.a */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		3375BEE321C74C5C003CAAB8 /* Websocket */ = {
-			isa = PBXGroup;
-			children = (
-				3375BEE421C74C5C003CAAB8 /* SRWebSocket+Weex.h */,
-				3375BEE521C74C5C003CAAB8 /* WXWebSocketDefaultImpl.m */,
-				3375BEE621C74C5C003CAAB8 /* WXWebSocketDefaultImpl.h */,
-				3375BEE721C74C5C003CAAB8 /* SRWebSocket+Weex.m */,
-			);
-			path = Websocket;
-			sourceTree = "<group>";
-		};
-		74CC79EC1C2B9FC600829368 /* Demo */ = {
-			isa = PBXGroup;
-			children = (
-				DCABAFF51D0296DB001C8592 /* extend */,
-				D5ADF0861C77133B00597CA6 /* Source */,
-			);
-			name = Demo;
-			sourceTree = "<group>";
-		};
-		775BEE721C1E8ECC008D1629 = {
-			isa = PBXGroup;
-			children = (
-				775BEE7D1C1E8ECC008D1629 /* WeexDemo */,
-				775BEE971C1E8ECC008D1629 /* WeexDemoTests */,
-				775BEE7C1C1E8ECC008D1629 /* Products */,
-				A9E45DD060512F73B9F51C03 /* Pods */,
-				327BB19797F63D5309FB91BF /* Frameworks */,
-				DC65C4421CEB006C00B2F84F /* resource */,
-				564B94661DD9C65000441C8D /* WeexUITestDemo-Info.plist */,
-			);
-			sourceTree = "<group>";
-		};
-		775BEE7C1C1E8ECC008D1629 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				775BEE7B1C1E8ECC008D1629 /* WeexDemo.app */,
-				775BEE941C1E8ECC008D1629 /* WeexDemoTests.xctest */,
-				84361D751CA10F8E00F43825 /* WeexUITestDemo.app */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		775BEE7D1C1E8ECC008D1629 /* WeexDemo */ = {
-			isa = PBXGroup;
-			children = (
-				74CC79EC1C2B9FC600829368 /* Demo */,
-				775BEE8A1C1E8ECC008D1629 /* Assets.xcassets */,
-				775BEE8F1C1E8ECC008D1629 /* Info.plist */,
-				59EA0DA61D2E7D19004F904A /* Images.xcassets */,
-				775BEE7E1C1E8ECC008D1629 /* Supporting Files */,
-			);
-			path = WeexDemo;
-			sourceTree = "<group>";
-		};
-		775BEE7E1C1E8ECC008D1629 /* Supporting Files */ = {
-			isa = PBXGroup;
-			children = (
-				775BEE7F1C1E8ECC008D1629 /* main.m */,
-			);
-			name = "Supporting Files";
-			sourceTree = "<group>";
-		};
-		775BEE971C1E8ECC008D1629 /* WeexDemoTests */ = {
-			isa = PBXGroup;
-			children = (
-				775BEE981C1E8ECC008D1629 /* WeexDemoTests.m */,
-				775BEE9A1C1E8ECC008D1629 /* Info.plist */,
-			);
-			path = WeexDemoTests;
-			sourceTree = "<group>";
-		};
-		A9E45DD060512F73B9F51C03 /* Pods */ = {
-			isa = PBXGroup;
-			children = (
-				5AF8846546DAC65CAC038806 /* Pods-WeexDemo.debug.xcconfig */,
-				9420131417A731ED089B0814 /* Pods-WeexDemo.release.xcconfig */,
-				22E4D2883CC56188A2CA9C13 /* Pods-WeexDemo.uitest.xcconfig */,
-				2278B1B1FCE894EDAF9F0171 /* Pods-WeexUITestDemo.debug.xcconfig */,
-				1888E2C5769382461DEDC97D /* Pods-WeexUITestDemo.release.xcconfig */,
-			);
-			name = Pods;
-			sourceTree = "<group>";
-		};
-		D5ADF0861C77133B00597CA6 /* Source */ = {
-			isa = PBXGroup;
-			children = (
-				2AE88A291C8544D7003329DE /* scanner */,
-				DCABAFED1D029642001C8592 /* debug */,
-				74CC79E91C2B9E4700829368 /* UIViewController+WXDemoNaviBar.h */,
-				74CC79EA1C2B9E4700829368 /* UIViewController+WXDemoNaviBar.m */,
-				775BEE811C1E8ECC008D1629 /* AppDelegate.h */,
-				775BEE821C1E8ECC008D1629 /* AppDelegate.m */,
-				775BEE841C1E8ECC008D1629 /* WXDemoViewController.h */,
-				775BEE851C1E8ECC008D1629 /* WXDemoViewController.m */,
-				747DF6661E2F176A005C53A8 /* UIView+UIThreadCheck.h */,
-				747DF6671E2F176A005C53A8 /* UIView+UIThreadCheck.m */,
-				7453E3641C9FA971001EB427 /* DemoDefine.h */,
-				C47B78D01F299E27001D3B0C /* WXExtendCallNativeTest.h */,
-				C47B78D11F299E27001D3B0C /* WXExtendCallNativeTest.m */,
-			);
-			name = Source;
-			sourceTree = "<group>";
-		};
-		DC65C4421CEB006C00B2F84F /* resource */ = {
-			isa = PBXGroup;
-			children = (
-				DCD286DF1CF491AC00C601CA /* weex-icon.png */,
-				DC5E503C1D0D97130059F0EB /* weex.png */,
-				DC5E503D1D0D97130059F0EB /* weex@2x.png */,
-				DC65C4F91CEB032F00B2F84F /* bundlejs */,
-			);
-			name = resource;
-			sourceTree = "<group>";
-		};
-		DCABAFED1D029642001C8592 /* debug */ = {
-			isa = PBXGroup;
-			children = (
-				DCABAFEF1D029685001C8592 /* WXATLoggerPlugin.h */,
-				DCABAFF01D029685001C8592 /* WXATLoggerPlugin.m */,
-				DCABAFF11D029685001C8592 /* WXATViewHierarchyPlugin.h */,
-				DCABAFF21D029685001C8592 /* WXATViewHierarchyPlugin.m */,
-				17C1DB55206B6729000E0CEB /* DebugAnalyzer.h */,
-				17C1DB56206B675D000E0CEB /* DebugAnzlyzer.m */,
-			);
-			name = debug;
-			sourceTree = "<group>";
-		};
-		DCABAFF51D0296DB001C8592 /* extend */ = {
-			isa = PBXGroup;
-			children = (
-				DCABAFF81D029716001C8592 /* component */,
-				DCABAFF71D0296E8001C8592 /* handler */,
-				DCABAFF61D0296E2001C8592 /* module */,
-			);
-			name = extend;
-			sourceTree = "<group>";
-		};
-		DCABAFF61D0296E2001C8592 /* module */ = {
-			isa = PBXGroup;
-			children = (
-				DCABAFFF1D02975E001C8592 /* WXEventModule.h */,
-				DCABB0001D02975E001C8592 /* WXEventModule.m */,
-				DC15A3C5200C505C009C8977 /* WXTitleBarModule.h */,
-				DC15A3C6200C505C009C8977 /* WXTitleBarModule.m */,
-				7478481C1E0CD4910044500D /* WXSyncTestModule.h */,
-				7478481D1E0CD4910044500D /* WXSyncTestModule.m */,
-				847CAF2F1F39E3F100551725 /* WXExtModule.h */,
-				847CAF301F39E3F100551725 /* WXExtModule.m */,
-			);
-			name = module;
-			sourceTree = "<group>";
-		};
-		DCABAFF71D0296E8001C8592 /* handler */ = {
-			isa = PBXGroup;
-			children = (
-				3375BEE321C74C5C003CAAB8 /* Websocket */,
-				DC15A3CF200E30FC009C8977 /* WXNavigationHandlerImpl.h */,
-				DC15A3CE200E30FC009C8977 /* WXNavigationHandlerImpl.m */,
-				DC20B8E41ECADA2500845F39 /* WXConfigCenterDefaultImpl.h */,
-				DC20B8E51ECADA2500845F39 /* WXConfigCenterDefaultImpl.m */,
-				DCABAFFC1D029753001C8592 /* WXImgLoaderDefaultImpl.h */,
-				DCABAFFD1D029753001C8592 /* WXImgLoaderDefaultImpl.m */,
-				17036A5520FDF9AA0029AE3D /* WXApmGeneratorImpl.h */,
-				17036A5620FDF9AA0029AE3D /* WXApmGeneratorImpl.m */,
-				17036A5820FDF9DF0029AE3D /* WXApmImpl.h */,
-				17036A5920FDF9DF0029AE3D /* WXApmImpl.m */,
-			);
-			name = handler;
-			sourceTree = "<group>";
-		};
-		DCABAFF81D029716001C8592 /* component */ = {
-			isa = PBXGroup;
-			children = (
-				DCABAFF91D029748001C8592 /* WXSelectComponent.h */,
-				DCABAFFA1D029748001C8592 /* WXSelectComponent.m */,
-			);
-			name = component;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		775BEE7A1C1E8ECC008D1629 /* WeexDemo */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 775BEEA81C1E8ECC008D1629 /* Build configuration list for PBXNativeTarget "WeexDemo" */;
-			buildPhases = (
-				B5825066F03BDD65A25F2701 /* [CP] Check Pods Manifest.lock */,
-				74CC7A221C2C13BF00829368 /* Start Samples */,
-				775BEE771C1E8ECC008D1629 /* Sources */,
-				775BEE781C1E8ECC008D1629 /* Frameworks */,
-				775BEE791C1E8ECC008D1629 /* Resources */,
-				C715566148067A7FFAB7797D /* [CP] Copy Pods Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = WeexDemo;
-			productName = WeexDemo;
-			productReference = 775BEE7B1C1E8ECC008D1629 /* WeexDemo.app */;
-			productType = "com.apple.product-type.application";
-		};
-		775BEE931C1E8ECC008D1629 /* WeexDemoTests */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 775BEEAB1C1E8ECC008D1629 /* Build configuration list for PBXNativeTarget "WeexDemoTests" */;
-			buildPhases = (
-				775BEE901C1E8ECC008D1629 /* Sources */,
-				775BEE911C1E8ECC008D1629 /* Frameworks */,
-				775BEE921C1E8ECC008D1629 /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				775BEE961C1E8ECC008D1629 /* PBXTargetDependency */,
-			);
-			name = WeexDemoTests;
-			productName = WeexDemoTests;
-			productReference = 775BEE941C1E8ECC008D1629 /* WeexDemoTests.xctest */;
-			productType = "com.apple.product-type.bundle.unit-test";
-		};
-		84361D261CA10F8E00F43825 /* WeexUITestDemo */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 84361D711CA10F8E00F43825 /* Build configuration list for PBXNativeTarget "WeexUITestDemo" */;
-			buildPhases = (
-				84361D271CA10F8E00F43825 /* [CP] Check Pods Manifest.lock */,
-				84361D291CA10F8E00F43825 /* Sources */,
-				84361D3C1CA10F8E00F43825 /* Frameworks */,
-				84361D431CA10F8E00F43825 /* Resources */,
-				84361D6F1CA10F8E00F43825 /* [CP] Copy Pods Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = WeexUITestDemo;
-			productName = WeexDemo;
-			productReference = 84361D751CA10F8E00F43825 /* WeexUITestDemo.app */;
-			productType = "com.apple.product-type.application";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		775BEE731C1E8ECC008D1629 /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastUpgradeCheck = 0710;
-				ORGANIZATIONNAME = taobao;
-				TargetAttributes = {
-					775BEE7A1C1E8ECC008D1629 = {
-						CreatedOnToolsVersion = 7.1.1;
-					};
-					775BEE931C1E8ECC008D1629 = {
-						CreatedOnToolsVersion = 7.1.1;
-						DevelopmentTeam = 445VCMGQD2;
-						TestTargetID = 775BEE7A1C1E8ECC008D1629;
-					};
-				};
-			};
-			buildConfigurationList = 775BEE761C1E8ECC008D1629 /* Build configuration list for PBXProject "WeexDemo" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				English,
-				en,
-				Base,
-			);
-			mainGroup = 775BEE721C1E8ECC008D1629;
-			productRefGroup = 775BEE7C1C1E8ECC008D1629 /* Products */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				775BEE7A1C1E8ECC008D1629 /* WeexDemo */,
-				775BEE931C1E8ECC008D1629 /* WeexDemoTests */,
-				84361D261CA10F8E00F43825 /* WeexUITestDemo */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		775BEE791C1E8ECC008D1629 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				DC5E503E1D0D97130059F0EB /* weex.png in Resources */,
-				DC5E503F1D0D97130059F0EB /* weex@2x.png in Resources */,
-				DCD286E01CF491AC00C601CA /* weex-icon.png in Resources */,
-				59EA0DA71D2E7D19004F904A /* Images.xcassets in Resources */,
-				564B94671DD9C65000441C8D /* WeexUITestDemo-Info.plist in Resources */,
-				DC65C4FA1CEB032F00B2F84F /* bundlejs in Resources */,
-				775BEE8B1C1E8ECC008D1629 /* Assets.xcassets in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		775BEE921C1E8ECC008D1629 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		84361D431CA10F8E00F43825 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				84361D5B1CA10F8E00F43825 /* Assets.xcassets in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
-		74CC7A221C2C13BF00829368 /* Start Samples */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			name = "Start Samples";
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "DEST=$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH\n\nif [[ \"$CONFIGURATION\" = \"Debug\" && \"$PLATFORM_NAME\" != \"iphonesimulator\" ]]; then\nipconfig getifaddr en0 | awk '{printf(\"%s\",$0)}' > \"$DEST/localServer-ip.txt\"\nfi";
-		};
-		84361D271CA10F8E00F43825 /* [CP] Check Pods Manifest.lock */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
-				"${PODS_ROOT}/Manifest.lock",
-			);
-			name = "[CP] Check Pods Manifest.lock";
-			outputPaths = (
-				"$(DERIVED_FILE_DIR)/Pods-WeexUITestDemo-checkManifestLockResult.txt",
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
-			showEnvVarsInLog = 0;
-		};
-		84361D6F1CA10F8E00F43825 /* [CP] Copy Pods Resources */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-				"${SRCROOT}/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-resources.sh",
-				"${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle",
-				"${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/en.lproj",
-				"${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/zh-Hans.lproj",
-				"${PODS_ROOT}/../../../pre-build/native-bundle-main.js",
-				"${PODS_ROOT}/../../../pre-build/weex-main-jsfm.js",
-				"${PODS_ROOT}/../../../pre-build/weex-polyfill.js",
-				"${PODS_ROOT}/../../../pre-build/weex-rax-api.js",
-				"${PODS_ROOT}/../../sdk/WeexSDK/Resources/wx_load_error@3x.png",
-			);
-			name = "[CP] Copy Pods Resources";
-			outputPaths = (
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ATSDK.bundle",
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/en.lproj",
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/zh-Hans.lproj",
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/native-bundle-main.js",
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/weex-main-jsfm.js",
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/weex-polyfill.js",
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/weex-rax-api.js",
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/wx_load_error@3x.png",
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-resources.sh\"\n";
-			showEnvVarsInLog = 0;
-		};
-		B5825066F03BDD65A25F2701 /* [CP] Check Pods Manifest.lock */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
-				"${PODS_ROOT}/Manifest.lock",
-			);
-			name = "[CP] Check Pods Manifest.lock";
-			outputPaths = (
-				"$(DERIVED_FILE_DIR)/Pods-WeexDemo-checkManifestLockResult.txt",
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
-			showEnvVarsInLog = 0;
-		};
-		C715566148067A7FFAB7797D /* [CP] Copy Pods Resources */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-				"${SRCROOT}/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-resources.sh",
-				"${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle",
-				"${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/en.lproj",
-				"${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/zh-Hans.lproj",
-				"${PODS_ROOT}/../../../pre-build/native-bundle-main.js",
-				"${PODS_ROOT}/../../../pre-build/weex-main-jsfm.js",
-				"${PODS_ROOT}/../../../pre-build/weex-polyfill.js",
-				"${PODS_ROOT}/../../../pre-build/weex-rax-api.js",
-				"${PODS_ROOT}/../../sdk/WeexSDK/Resources/wx_load_error@3x.png",
-			);
-			name = "[CP] Copy Pods Resources";
-			outputPaths = (
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ATSDK.bundle",
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/en.lproj",
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/zh-Hans.lproj",
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/native-bundle-main.js",
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/weex-main-jsfm.js",
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/weex-polyfill.js",
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/weex-rax-api.js",
-				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/wx_load_error@3x.png",
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-resources.sh\"\n";
-			showEnvVarsInLog = 0;
-		};
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		775BEE771C1E8ECC008D1629 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				17C1DB57206B675D000E0CEB /* DebugAnzlyzer.m in Sources */,
-				DCABAFF31D029685001C8592 /* WXATLoggerPlugin.m in Sources */,
-				DC15A3D0200E30FC009C8977 /* WXNavigationHandlerImpl.m in Sources */,
-				3375BEE921C74C5C003CAAB8 /* SRWebSocket+Weex.m in Sources */,
-				2AE88A2C1C8544E6003329DE /* WXScannerVC.m in Sources */,
-				17036A5720FDF9AA0029AE3D /* WXApmGeneratorImpl.m in Sources */,
-				775BEE861C1E8ECC008D1629 /* WXDemoViewController.m in Sources */,
-				DC5B53691E8CED9400E02125 /* WXScannerHistoryVC.m in Sources */,
-				74CC79EB1C2B9E4700829368 /* UIViewController+WXDemoNaviBar.m in Sources */,
-				DCABB0011D02975E001C8592 /* WXEventModule.m in Sources */,
-				7478481E1E0CD4910044500D /* WXSyncTestModule.m in Sources */,
-				775BEE831C1E8ECC008D1629 /* AppDelegate.m in Sources */,
-				847CAF311F39E3F100551725 /* WXExtModule.m in Sources */,
-				DC15A3C7200C505C009C8977 /* WXTitleBarModule.m in Sources */,
-				17036A5A20FDF9DF0029AE3D /* WXApmImpl.m in Sources */,
-				DC20B8E61ECADA2500845F39 /* WXConfigCenterDefaultImpl.m in Sources */,
-				DCABAFF41D029685001C8592 /* WXATViewHierarchyPlugin.m in Sources */,
-				775BEE801C1E8ECC008D1629 /* main.m in Sources */,
-				DCABAFFE1D029753001C8592 /* WXImgLoaderDefaultImpl.m in Sources */,
-				747DF6681E2F176A005C53A8 /* UIView+UIThreadCheck.m in Sources */,
-				C47B78D21F299E27001D3B0C /* WXExtendCallNativeTest.m in Sources */,
-				3375BEE821C74C5C003CAAB8 /* WXWebSocketDefaultImpl.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		775BEE901C1E8ECC008D1629 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				775BEE991C1E8ECC008D1629 /* WeexDemoTests.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		84361D291CA10F8E00F43825 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				847CAF2D1F39BBB900551725 /* WXScannerHistoryVC.m in Sources */,
-				847CAF2C1F39BB8A00551725 /* WXATLoggerPlugin.m in Sources */,
-				84361D2F1CA10F8E00F43825 /* WXScannerVC.m in Sources */,
-				84361D331CA10F8E00F43825 /* WXDemoViewController.m in Sources */,
-				84361D371CA10F8E00F43825 /* UIViewController+WXDemoNaviBar.m in Sources */,
-				DCA812FA1D0401500029BF62 /* WXEventModule.m in Sources */,
-				846FC8DA1E1B853100949E7D /* WXSyncTestModule.m in Sources */,
-				84361D381CA10F8E00F43825 /* AppDelegate.m in Sources */,
-				847CAF2E1F39BBFB00551725 /* WXConfigCenterDefaultImpl.m in Sources */,
-				846FC8DB1E1B853600949E7D /* WXATViewHierarchyPlugin.m in Sources */,
-				84361D3B1CA10F8E00F43825 /* main.m in Sources */,
-				DCA812FB1D0401570029BF62 /* WXImgLoaderDefaultImpl.m in Sources */,
-				847CAF2B1F39BB6B00551725 /* UIView+UIThreadCheck.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
-		775BEE961C1E8ECC008D1629 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 775BEE7A1C1E8ECC008D1629 /* WeexDemo */;
-			targetProxy = 775BEE951C1E8ECC008D1629 /* PBXContainerItemProxy */;
-		};
-/* End PBXTargetDependency section */
-
-/* Begin XCBuildConfiguration section */
-		775BEEA61C1E8ECC008D1629 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = dwarf;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				ENABLE_TESTABILITY = YES;
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_GENERATE_TEST_COVERAGE_FILES = YES;
-				GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"DEBUG=1",
-					"$(inherited)",
-				);
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				MTL_ENABLE_DEBUG_INFO = YES;
-				ONLY_ACTIVE_ARCH = YES;
-				SDKROOT = iphoneos;
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		775BEEA71C1E8ECC008D1629 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				CODE_SIGN_IDENTITY = "iPhone Distribution";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				ENABLE_NS_ASSERTIONS = NO;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				MTL_ENABLE_DEBUG_INFO = NO;
-				SDKROOT = iphoneos;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		775BEEA91C1E8ECC008D1629 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 5AF8846546DAC65CAC038806 /* Pods-WeexDemo.debug.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-				DEVELOPMENT_TEAM = "";
-				ENABLE_BITCODE = NO;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/WeexDemo",
-					"$(PROJECT_DIR)",
-				);
-				GCC_TREAT_WARNINGS_AS_ERRORS = NO;
-				INFOPLIST_FILE = WeexDemo/Info.plist;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				OTHER_LDFLAGS = (
-					"$(inherited)",
-					"-licucore",
-				);
-				PRODUCT_BUNDLE_IDENTIFIER = com.taobao.WeexPlayground;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				PROVISIONING_PROFILE = "";
-				TARGETED_DEVICE_FAMILY = 1;
-			};
-			name = Debug;
-		};
-		775BEEAA1C1E8ECC008D1629 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 9420131417A731ED089B0814 /* Pods-WeexDemo.release.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
-				CODE_SIGN_IDENTITY = "iPhone Distribution";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
-				DEVELOPMENT_TEAM = "";
-				ENABLE_BITCODE = NO;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/WeexDemo",
-					"$(PROJECT_DIR)",
-				);
-				GCC_TREAT_WARNINGS_AS_ERRORS = NO;
-				INFOPLIST_FILE = WeexDemo/Info.plist;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				OTHER_LDFLAGS = (
-					"$(inherited)",
-					"-licucore",
-				);
-				PRODUCT_BUNDLE_IDENTIFIER = com.taobao.WeexPlayground;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				PROVISIONING_PROFILE = "";
-				TARGETED_DEVICE_FAMILY = 1;
-			};
-			name = Release;
-		};
-		775BEEAC1C1E8ECC008D1629 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				BUNDLE_LOADER = "$(TEST_HOST)";
-				INFOPLIST_FILE = WeexDemoTests/Info.plist;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
-				PRODUCT_BUNDLE_IDENTIFIER = com.taobao.WeexDemoTests;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/WeexDemo.app/WeexDemo";
-			};
-			name = Debug;
-		};
-		775BEEAD1C1E8ECC008D1629 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				BUNDLE_LOADER = "$(TEST_HOST)";
-				INFOPLIST_FILE = WeexDemoTests/Info.plist;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
-				PRODUCT_BUNDLE_IDENTIFIER = com.taobao.WeexDemoTests;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/WeexDemo.app/WeexDemo";
-			};
-			name = Release;
-		};
-		84361D721CA10F8E00F43825 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 2278B1B1FCE894EDAF9F0171 /* Pods-WeexUITestDemo.debug.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-				ENABLE_BITCODE = NO;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/WeexDemo",
-					"$(PROJECT_DIR)",
-				);
-				GCC_GENERATE_TEST_COVERAGE_FILES = YES;
-				GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"$(inherited)",
-					"COCOAPODS=1",
-					"UITEST=1",
-				);
-				GCC_TREAT_WARNINGS_AS_ERRORS = NO;
-				INFOPLIST_FILE = "WeexUITestDemo-Info.plist";
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				MODULE_NAME = NO;
-				OTHER_LDFLAGS = (
-					"$(inherited)",
-					"-licucore",
-				);
-				PRODUCT_BUNDLE_IDENTIFIER = com.taobao.WeexDemo.uitest;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				PROVISIONING_PROFILE = "";
-			};
-			name = Debug;
-		};
-		84361D741CA10F8E00F43825 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 1888E2C5769382461DEDC97D /* Pods-WeexUITestDemo.release.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-				ENABLE_BITCODE = NO;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/WeexDemo",
-					"$(PROJECT_DIR)",
-				);
-				GCC_GENERATE_TEST_COVERAGE_FILES = YES;
-				GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
-				GCC_TREAT_WARNINGS_AS_ERRORS = NO;
-				INFOPLIST_FILE = "WeexUITestDemo-Info.plist";
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				MODULE_NAME = NO;
-				OTHER_LDFLAGS = (
-					"$(inherited)",
-					"-licucore",
-				);
-				PRODUCT_BUNDLE_IDENTIFIER = com.taobao.WeexDemo.uitest;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				PROVISIONING_PROFILE = "";
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		775BEE761C1E8ECC008D1629 /* Build configuration list for PBXProject "WeexDemo" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				775BEEA61C1E8ECC008D1629 /* Debug */,
-				775BEEA71C1E8ECC008D1629 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		775BEEA81C1E8ECC008D1629 /* Build configuration list for PBXNativeTarget "WeexDemo" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				775BEEA91C1E8ECC008D1629 /* Debug */,
-				775BEEAA1C1E8ECC008D1629 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		775BEEAB1C1E8ECC008D1629 /* Build configuration list for PBXNativeTarget "WeexDemoTests" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				775BEEAC1C1E8ECC008D1629 /* Debug */,
-				775BEEAD1C1E8ECC008D1629 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		84361D711CA10F8E00F43825 /* Build configuration list for PBXNativeTarget "WeexUITestDemo" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				84361D721CA10F8E00F43825 /* Debug */,
-				84361D741CA10F8E00F43825 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 775BEE731C1E8ECC008D1629 /* Project object */;
-}
diff --git a/ios/playground/WeexDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/playground/WeexDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 919434a..0000000
--- a/ios/playground/WeexDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
-   version = "1.0">
-   <FileRef
-      location = "self:">
-   </FileRef>
-</Workspace>
diff --git a/ios/playground/WeexDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/playground/WeexDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d9810..0000000
--- a/ios/playground/WeexDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IDEDidComputeMac32BitWarning</key>
-	<true/>
-</dict>
-</plist>
diff --git a/ios/playground/WeexDemo.xcodeproj/xcshareddata/xcschemes/WeexDemo.xcscheme b/ios/playground/WeexDemo.xcodeproj/xcshareddata/xcschemes/WeexDemo.xcscheme
deleted file mode 100644
index a33c31d..0000000
--- a/ios/playground/WeexDemo.xcodeproj/xcshareddata/xcschemes/WeexDemo.xcscheme
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "0710"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "775BEE7A1C1E8ECC008D1629"
-               BuildableName = "WeexDemo.app"
-               BlueprintName = "WeexDemo"
-               ReferencedContainer = "container:WeexDemo.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      codeCoverageEnabled = "YES">
-      <Testables>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "775BEE931C1E8ECC008D1629"
-               BuildableName = "WeexDemoTests.xctest"
-               BlueprintName = "WeexDemoTests"
-               ReferencedContainer = "container:WeexDemo.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "775BEE9E1C1E8ECC008D1629"
-               BuildableName = "WeexDemoUITests.xctest"
-               BlueprintName = "WeexDemoUITests"
-               ReferencedContainer = "container:WeexDemo.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-      </Testables>
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "775BEE7A1C1E8ECC008D1629"
-            BuildableName = "WeexDemo.app"
-            BlueprintName = "WeexDemo"
-            ReferencedContainer = "container:WeexDemo.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "775BEE7A1C1E8ECC008D1629"
-            BuildableName = "WeexDemo.app"
-            BlueprintName = "WeexDemo"
-            ReferencedContainer = "container:WeexDemo.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-      <EnvironmentVariables>
-         <EnvironmentVariable
-            key = "OS_ACTIVITY_MODE"
-            value = "disable"
-            isEnabled = "NO">
-         </EnvironmentVariable>
-         <EnvironmentVariable
-            key = "JSC_logGC"
-            value = "1"
-            isEnabled = "NO">
-         </EnvironmentVariable>
-      </EnvironmentVariables>
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "775BEE7A1C1E8ECC008D1629"
-            BuildableName = "WeexDemo.app"
-            BlueprintName = "WeexDemo"
-            ReferencedContainer = "container:WeexDemo.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/ios/playground/WeexDemo.xcodeproj/xcshareddata/xcschemes/WeexUITestDemo.xcscheme b/ios/playground/WeexDemo.xcodeproj/xcshareddata/xcschemes/WeexUITestDemo.xcscheme
deleted file mode 100644
index 6a68091..0000000
--- a/ios/playground/WeexDemo.xcodeproj/xcshareddata/xcschemes/WeexUITestDemo.xcscheme
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "0720"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "84361D261CA10F8E00F43825"
-               BuildableName = "WeexUITestDemo.app"
-               BlueprintName = "WeexUITestDemo"
-               ReferencedContainer = "container:WeexDemo.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <Testables>
-      </Testables>
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "84361D261CA10F8E00F43825"
-            BuildableName = "WeexUITestDemo.app"
-            BlueprintName = "WeexUITestDemo"
-            ReferencedContainer = "container:WeexDemo.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "84361D261CA10F8E00F43825"
-            BuildableName = "WeexUITestDemo.app"
-            BlueprintName = "WeexUITestDemo"
-            ReferencedContainer = "container:WeexDemo.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "84361D261CA10F8E00F43825"
-            BuildableName = "WeexUITestDemo.app"
-            BlueprintName = "WeexUITestDemo"
-            ReferencedContainer = "container:WeexDemo.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/ios/playground/WeexDemo.xcworkspace/contents.xcworkspacedata b/ios/playground/WeexDemo.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 599b710..0000000
--- a/ios/playground/WeexDemo.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
-   version = "1.0">
-   <FileRef
-      location = "group:WeexDemo.xcodeproj">
-   </FileRef>
-   <FileRef
-      location = "group:Pods/Pods.xcodeproj">
-   </FileRef>
-</Workspace>
diff --git a/ios/playground/WeexDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/playground/WeexDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d9810..0000000
--- a/ios/playground/WeexDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IDEDidComputeMac32BitWarning</key>
-	<true/>
-</dict>
-</plist>
diff --git a/ios/playground/WeexDemo/AppDelegate.h b/ios/playground/WeexDemo/AppDelegate.h
deleted file mode 100644
index 14c0bef..0000000
--- a/ios/playground/WeexDemo/AppDelegate.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-
-
-@interface AppDelegate : UIResponder <UIApplicationDelegate,UIAlertViewDelegate>
-
-@property (strong, nonatomic) UIWindow *window;
-@property (strong, nonatomic) NSString *latestVer;
-@property (assign, nonatomic) BOOL allowRotation;
-
-@end
diff --git a/ios/playground/WeexDemo/AppDelegate.m b/ios/playground/WeexDemo/AppDelegate.m
deleted file mode 100644
index 64aba4e..0000000
--- a/ios/playground/WeexDemo/AppDelegate.m
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "AppDelegate.h"
-#import "WXDemoViewController.h"
-#import "UIViewController+WXDemoNaviBar.h"
-#import "WXEventModule.h"
-#import "WXImgLoaderDefaultImpl.h"
-#import "DemoDefine.h"
-#import "WXScannerVC.h"
-#import "WXScannerHistoryVC.h"
-#import "WXSyncTestModule.h"
-#import "WXExtModule.h"
-#import "UIView+UIThreadCheck.h"
-#import <WeexSDK/WeexSDK.h>
-#import <AVFoundation/AVFoundation.h>
-#import <ATSDK/ATManager.h>
-#import "WXConfigCenterProtocol.h"
-#import "WXConfigCenterDefaultImpl.h"
-#import "WXNavigationHandlerImpl.h"
-//#import "WXAnalyzerCenter.h"
-#import "WXApmGeneratorImpl.h"
-#import "WXWebSocketDefaultImpl.h"
-#import <WeexPluginLoader/WeexPluginLoader.h>
-
-#ifdef DEBUG
-#import "DebugAnalyzer.h"
-#endif
-
-@interface AppDelegate ()
-@end
-
-@implementation AppDelegate
-
-#pragma mark
-#pragma mark application
-
-- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
-{
-    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
-    self.window.backgroundColor = [UIColor whiteColor];
-    
-    [self initWeexSDK];
-    
-    self.window.rootViewController = [[WXRootViewController alloc] initWithRootViewController:[self demoController]];
-    [self.window makeKeyAndVisible];
-    
-    [self startSplashScreen];
-    
-#if DEBUG
-    // check if there are any UI changes on main thread.
-    [UIView wx_checkUIThread];
-#endif
-    
-    return YES;
-}
-
-- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
-{
-    if (_allowRotation) {
-        return UIInterfaceOrientationMaskAllButUpsideDown;
-    }
-    else {
-        return UIInterfaceOrientationMaskPortrait;
-    }
-}
-
--(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
-{
-    if ([shortcutItem.type isEqualToString:QRSCAN]) {
-        WXScannerVC * scanViewController = [[WXScannerVC alloc] init];
-        [(WXRootViewController*)self.window.rootViewController pushViewController:scanViewController animated:YES];
-    }
-    if ([shortcutItem.type isEqualToString:QRSCAN_HISTORY]) {
-        WXScannerHistoryVC *scannerHistoryVC = [WXScannerHistoryVC new];
-        [(WXRootViewController*)self.window.rootViewController pushViewController:scannerHistoryVC animated:YES];
-    }
-}
-
-- (void)applicationDidEnterBackground:(UIApplication *)application
-{
-    
-#ifdef UITEST
-#if !TARGET_IPHONE_SIMULATOR
-    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
-    NSString *documentsDirectory = [paths objectAtIndex:0];
-    setenv("GCOV_PREFIX", [documentsDirectory cStringUsingEncoding:NSUTF8StringEncoding], 1);
-    setenv("GCOV_PREFIX_STRIP", "6", 1);
-#endif
-    extern void __gcov_flush(void);
-    __gcov_flush();
-#endif
-}
-
-- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
-{
-    NSString *newUrlStr = url.absoluteString;
-    if([url.scheme isEqualToString:@"wxpage"]) {
-        newUrlStr = [newUrlStr stringByReplacingOccurrencesOfString:@"wxpage://" withString:@"http://"];
-    }
-    UIViewController * viewController = [self demoController];
-    ((WXDemoViewController*)viewController).url = [NSURL URLWithString:newUrlStr];
-    [(WXRootViewController*)self.window.rootViewController pushViewController:viewController animated:YES];
-    return YES;
-}
-
-#pragma mark weex
-- (void)initWeexSDK
-{
-    [WXAppConfiguration setAppGroup:@"AliApp"];
-    [WXAppConfiguration setAppName:@"WeexDemo"];
-    [WXAppConfiguration setExternalUserAgent:@"ExternalUA"];
-    
-    [WXSDKEngine initSDKEnvironment];
-    
-    [WXSDKEngine registerHandler:[WXImgLoaderDefaultImpl new] withProtocol:@protocol(WXImgLoaderProtocol)];
-    [WXSDKEngine registerHandler:[WXEventModule new] withProtocol:@protocol(WXEventModuleProtocol)];
-    [WXSDKEngine registerHandler:[WXConfigCenterDefaultImpl new] withProtocol:@protocol(WXConfigCenterProtocol)];
-    [WXSDKEngine registerHandler:[WXNavigationHandlerImpl new] withProtocol:@protocol(WXNavigationProtocol)];
-    [WXSDKEngine registerHandler:[WXApmGeneratorImpl new] withProtocol:@protocol(WXApmGeneratorProtocol)];
-    [WXSDKEngine registerHandler:[WXWebSocketDefaultImpl new] withProtocol:@protocol(WXWebSocketHandler)];
-    
-    [WXSDKEngine registerComponent:@"select" withClass:NSClassFromString(@"WXSelectComponent")];
-    [WXSDKEngine registerModule:@"event" withClass:[WXEventModule class]];
-    [WXSDKEngine registerModule:@"syncTest" withClass:[WXSyncTestModule class]];
-    [WXSDKEngine registerModule:@"titleBar" withClass:NSClassFromString(@"WXTitleBarModule")];
-    [WXSDKEngine registerExtendCallNative:@"test" withClass:NSClassFromString(@"WXExtendCallNativeTest")];
-    [WXSDKEngine registerModule:@"ext" withClass:[WXExtModule class]];
-    [WPRegister registerPlugins];
-#ifdef DEBUG
-    [WXAnalyzerCenter addWxAnalyzer:[DebugAnalyzer new]];
-#endif
-    
-#if !(TARGET_IPHONE_SIMULATOR)
-    [self checkUpdate];
-#endif
-    
-#ifdef DEBUG
-    [self atAddPlugin];
-    [WXDebugTool setDebug:YES];
-    [WXLog setLogLevel:WXLogLevelLog];
-    
-    #ifndef UITEST
-        [[ATManager shareInstance] show];
-    #endif
-#else
-    [WXDebugTool setDebug:NO];
-    [WXLog setLogLevel:WXLogLevelError];
-#endif
-}
-
-- (UIViewController *)demoController
-{
-    UIViewController *demo = [[WXDemoViewController alloc] init];
-    ((WXDemoViewController *)demo).url = [NSURL URLWithString:BUNDLE_URL];
-    return demo;
-}
-
-#pragma mark 
-#pragma mark animation when startup
-
-- (void)startSplashScreen
-{
-    UIView* splashView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
-    splashView.backgroundColor = WEEX_COLOR;
-    
-    UIImageView *iconImageView = [UIImageView new];
-    UIImage *icon = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"weex-icon" ofType:@"png"]];
-    if ([icon respondsToSelector:@selector(imageWithRenderingMode:)]) {
-        iconImageView.image = [icon imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
-        iconImageView.tintColor = [UIColor whiteColor];
-    } else {
-        iconImageView.image = icon;
-    }
-    iconImageView.frame = CGRectMake(0, 0, 320, 320);
-    iconImageView.contentMode = UIViewContentModeScaleAspectFit;
-    iconImageView.center = splashView.center;
-    [splashView addSubview:iconImageView];
-    
-    [self.window addSubview:splashView];
-    
-    float animationDuration = 1.4;
-    CGFloat shrinkDuration = animationDuration * 0.3;
-    CGFloat growDuration = animationDuration * 0.7;
-    
-    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
-        [UIView animateWithDuration:shrinkDuration delay:1.0 usingSpringWithDamping:0.7f initialSpringVelocity:10 options:UIViewAnimationOptionCurveEaseInOut animations:^{
-            CGAffineTransform scaleTransform = CGAffineTransformMakeScale(0.75, 0.75);
-            iconImageView.transform = scaleTransform;
-        } completion:^(BOOL finished) {
-            [UIView animateWithDuration:growDuration animations:^{
-                CGAffineTransform scaleTransform = CGAffineTransformMakeScale(20, 20);
-                iconImageView.transform = scaleTransform;
-                splashView.alpha = 0;
-            } completion:^(BOOL finished) {
-                [splashView removeFromSuperview];
-            }];
-        }];
-    } else {
-        [UIView animateWithDuration:shrinkDuration delay:1.0 options:0 animations:^{
-            CGAffineTransform scaleTransform = CGAffineTransformMakeScale(0.75, 0.75);
-            iconImageView.transform = scaleTransform;
-        } completion:^(BOOL finished) {
-            [UIView animateWithDuration:growDuration animations:^{
-                CGAffineTransform scaleTransform = CGAffineTransformMakeScale(20, 20);
-                iconImageView.transform = scaleTransform;
-                splashView.alpha = 0;
-            } completion:^(BOOL finished) {
-                [splashView removeFromSuperview];
-            }];
-        }];
-    }
-}
-
-#pragma mark
-
-- (void)atAddPlugin {
-#if DEBUG
-    [[ATManager shareInstance] addPluginWithId:@"weex" andName:@"weex" andIconName:@"../weex" andEntry:@"" andArgs:@[@""]];
-    [[ATManager shareInstance] addSubPluginWithParentId:@"weex" andSubId:@"logger" andName:@"logger" andIconName:@"log" andEntry:@"WXATLoggerPlugin" andArgs:@[@""]];
-//    [[ATManager shareInstance] addSubPluginWithParentId:@"weex" andSubId:@"viewHierarchy" andName:@"hierarchy" andIconName:@"log" andEntry:@"WXATViewHierarchyPlugin" andArgs:@[@""]];
-    [[ATManager shareInstance] addSubPluginWithParentId:@"weex" andSubId:@"test2" andName:@"test" andIconName:@"at_arr_refresh" andEntry:@"" andArgs:@[]];
-    [[ATManager shareInstance] addSubPluginWithParentId:@"weex" andSubId:@"test3" andName:@"test" andIconName:@"at_arr_refresh" andEntry:@"" andArgs:@[]];
-#endif
-}
-
-- (void)checkUpdate {
-    __weak typeof(self) weakSelf = self;
-    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
-        NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
-        NSString *currentVersion = [infoDic objectForKey:@"CFBundleShortVersionString"];
-        NSString *URL = @"http://itunes.apple.com/lookup?id=1130862662";
-        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
-        [request setURL:[NSURL URLWithString:URL]];
-        [request setHTTPMethod:@"POST"];
-        
-        NSHTTPURLResponse *urlResponse = nil;
-        NSError *error = nil;
-        NSData *recervedData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
-        NSString *results = [[NSString alloc] initWithBytes:[recervedData bytes] length:[recervedData length] encoding:NSUTF8StringEncoding];
-        
-        NSDictionary *dic = [WXUtility objectFromJSON:results];
-        NSArray *infoArray = [dic objectForKey:@"results"];
-        
-        if ([infoArray count]) {
-            NSDictionary *releaseInfo = [infoArray objectAtIndex:0];
-            weakSelf.latestVer = [releaseInfo objectForKey:@"version"];
-            if ([weakSelf.latestVer floatValue] > [currentVersion floatValue]) {
-                if (![[NSUserDefaults standardUserDefaults] boolForKey: weakSelf.latestVer]) {
-                    [[NSUserDefaults standardUserDefaults] setBool:FALSE forKey:weakSelf.latestVer];
-                    dispatch_async(dispatch_get_main_queue(), ^{
-                        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"New Version" message:@"Will update to a new version" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"update", nil];
-                        [alert show];
-                    });
-                }
-            }
-        }
-    });
-}
-
-- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
-    switch (buttonIndex) {
-        case 0:
-            [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:self.latestVer];
-            break;
-        case 1:
-            [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"itms-apps://itunes.apple.com/cn/app/weex-playground/id1130862662?mt=8"]];
-        default:
-            break;
-    }
-    [alertView dismissWithClickedButtonIndex:buttonIndex animated:YES];
-}
-
-@end
diff --git a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/AppStoreIcon1024.png b/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/AppStoreIcon1024.png
deleted file mode 100644
index 435f57b..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/AppStoreIcon1024.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index 21cf59d..0000000
--- a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,112 +0,0 @@
-{
-  "images" : [
-    {
-      "idiom" : "iphone",
-      "size" : "20x20",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "iphone",
-      "size" : "20x20",
-      "scale" : "3x"
-    },
-    {
-      "size" : "29x29",
-      "idiom" : "iphone",
-      "filename" : "Icon-29@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "29x29",
-      "idiom" : "iphone",
-      "filename" : "Icon-29@3x.png",
-      "scale" : "3x"
-    },
-    {
-      "size" : "40x40",
-      "idiom" : "iphone",
-      "filename" : "Icon-40@2x-1.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "40x40",
-      "idiom" : "iphone",
-      "filename" : "Icon-40@3x.png",
-      "scale" : "3x"
-    },
-    {
-      "size" : "60x60",
-      "idiom" : "iphone",
-      "filename" : "Icon-60@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "60x60",
-      "idiom" : "iphone",
-      "filename" : "Icon-60@3x.png",
-      "scale" : "3x"
-    },
-    {
-      "idiom" : "ipad",
-      "size" : "20x20",
-      "scale" : "1x"
-    },
-    {
-      "idiom" : "ipad",
-      "size" : "20x20",
-      "scale" : "2x"
-    },
-    {
-      "size" : "29x29",
-      "idiom" : "ipad",
-      "filename" : "Icon-29.png",
-      "scale" : "1x"
-    },
-    {
-      "size" : "29x29",
-      "idiom" : "ipad",
-      "filename" : "Icon-29@2x-1.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "40x40",
-      "idiom" : "ipad",
-      "filename" : "Icon-40.png",
-      "scale" : "1x"
-    },
-    {
-      "size" : "40x40",
-      "idiom" : "ipad",
-      "filename" : "Icon-40@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "76x76",
-      "idiom" : "ipad",
-      "filename" : "Icon-76.png",
-      "scale" : "1x"
-    },
-    {
-      "size" : "76x76",
-      "idiom" : "ipad",
-      "filename" : "Icon-76@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "83.5x83.5",
-      "idiom" : "ipad",
-      "filename" : "Icon-83.5@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "1024x1024",
-      "idiom" : "ios-marketing",
-      "filename" : "AppStoreIcon1024.png",
-      "scale" : "1x"
-    }
-  ],
-  "info" : {
-    "version" : 1,
-    "author" : "xcode"
-  }
-}
\ No newline at end of file
diff --git a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29.png b/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29.png
deleted file mode 100644
index fcadf69..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@2x-1.png b/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@2x-1.png
deleted file mode 100644
index 594350e..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@2x-1.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png b/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png
deleted file mode 100644
index 594350e..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png b/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png
deleted file mode 100644
index 6b6635c..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40.png b/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40.png
deleted file mode 100644
index 17ef490..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@2x-1.png b/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@2x-1.png
deleted file mode 100644
index f3641e9..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@2x-1.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png b/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png
deleted file mode 100644
index f3641e9..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png b/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png
deleted file mode 100644
index 2fa64a0..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png b/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png
deleted file mode 100644
index 2fa64a0..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png b/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png
deleted file mode 100644
index 6160662..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-76.png b/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-76.png
deleted file mode 100644
index 85ede63..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-76.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png b/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png
deleted file mode 100644
index c513d88..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png b/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png
deleted file mode 100644
index 7d77683..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/Contents.json b/ios/playground/WeexDemo/Assets.xcassets/Contents.json
deleted file mode 100644
index da4a164..0000000
--- a/ios/playground/WeexDemo/Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "info" : {
-    "version" : 1,
-    "author" : "xcode"
-  }
-}
\ No newline at end of file
diff --git a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Contents.json b/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Contents.json
deleted file mode 100644
index b4bc73c..0000000
--- a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Contents.json
+++ /dev/null
@@ -1,88 +0,0 @@
-{
-  "images" : [
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "2688h",
-      "filename" : "iPhoneXMax@3x.png",
-      "minimum-system-version" : "12.0",
-      "orientation" : "portrait",
-      "scale" : "3x"
-    },
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "1792h",
-      "filename" : "iPhoneXR@2x.png",
-      "minimum-system-version" : "12.0",
-      "orientation" : "portrait",
-      "scale" : "2x"
-    },
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "2436h",
-      "filename" : "iPhoneX@3x.png",
-      "minimum-system-version" : "11.0",
-      "orientation" : "portrait",
-      "scale" : "3x"
-    },
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "2436h",
-      "filename" : "iPhoneX-landscape.png",
-      "minimum-system-version" : "11.0",
-      "orientation" : "landscape",
-      "scale" : "3x"
-    },
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "736h",
-      "filename" : "Retinal HD 5.5.png",
-      "minimum-system-version" : "8.0",
-      "orientation" : "portrait",
-      "scale" : "3x"
-    },
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "736h",
-      "filename" : "iPhone5.5-landscape.png",
-      "minimum-system-version" : "8.0",
-      "orientation" : "landscape",
-      "scale" : "3x"
-    },
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "667h",
-      "filename" : "Retinal HD 4.7.png",
-      "minimum-system-version" : "8.0",
-      "orientation" : "portrait",
-      "scale" : "2x"
-    },
-    {
-      "orientation" : "portrait",
-      "idiom" : "iphone",
-      "filename" : "Default@2x.png",
-      "extent" : "full-screen",
-      "minimum-system-version" : "7.0",
-      "scale" : "2x"
-    },
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "retina4",
-      "filename" : "Default-568h@2x.png",
-      "minimum-system-version" : "7.0",
-      "orientation" : "portrait",
-      "scale" : "2x"
-    }
-  ],
-  "info" : {
-    "version" : 1,
-    "author" : "xcode"
-  }
-}
\ No newline at end of file
diff --git a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png b/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png
deleted file mode 100644
index 7e013e4..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Default@2x.png b/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Default@2x.png
deleted file mode 100644
index 948f7a3..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Default@2x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Retinal HD 4.7.png b/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Retinal HD 4.7.png
deleted file mode 100644
index 95b95ea..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Retinal HD 4.7.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Retinal HD 5.5.png b/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Retinal HD 5.5.png
deleted file mode 100644
index 27dd969..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Retinal HD 5.5.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhone5.5-landscape.png b/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhone5.5-landscape.png
deleted file mode 100644
index 6eb5283..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhone5.5-landscape.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneX-landscape.png b/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneX-landscape.png
deleted file mode 100644
index 2b65d7c..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneX-landscape.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneX@3x.png b/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneX@3x.png
deleted file mode 100644
index ddda19e..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneX@3x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneXMax@3x.png b/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneXMax@3x.png
deleted file mode 100644
index 64c3772..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneXMax@3x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneXR@2x.png b/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneXR@2x.png
deleted file mode 100644
index 9ecb99e..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneXR@2x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/back.imageset/Contents.json b/ios/playground/WeexDemo/Assets.xcassets/back.imageset/Contents.json
deleted file mode 100644
index 3bad3d0..0000000
--- a/ios/playground/WeexDemo/Assets.xcassets/back.imageset/Contents.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-  "images" : [
-    {
-      "idiom" : "universal",
-      "filename" : "back.png",
-      "scale" : "1x"
-    },
-    {
-      "idiom" : "universal",
-      "filename" : "back@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "universal",
-      "filename" : "back@3x.png",
-      "scale" : "3x"
-    }
-  ],
-  "info" : {
-    "version" : 1,
-    "author" : "xcode"
-  }
-}
\ No newline at end of file
diff --git a/ios/playground/WeexDemo/Assets.xcassets/back.imageset/back.png b/ios/playground/WeexDemo/Assets.xcassets/back.imageset/back.png
deleted file mode 100644
index 1f3e073..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/back.imageset/back.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/back.imageset/back@2x.png b/ios/playground/WeexDemo/Assets.xcassets/back.imageset/back@2x.png
deleted file mode 100644
index 76d0bf8..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/back.imageset/back@2x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/back.imageset/back@3x.png b/ios/playground/WeexDemo/Assets.xcassets/back.imageset/back@3x.png
deleted file mode 100644
index 8180558..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/back.imageset/back@3x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/Contents.json b/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/Contents.json
deleted file mode 100644
index 1231572..0000000
--- a/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/Contents.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-  "images" : [
-    {
-      "idiom" : "universal",
-      "filename" : "delete.png",
-      "scale" : "1x"
-    },
-    {
-      "idiom" : "universal",
-      "filename" : "delete@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "universal",
-      "filename" : "delete@3x.png",
-      "scale" : "3x"
-    }
-  ],
-  "info" : {
-    "version" : 1,
-    "author" : "xcode"
-  }
-}
\ No newline at end of file
diff --git a/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete.png b/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete.png
deleted file mode 100644
index d7cc20a..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete@2x.png b/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete@2x.png
deleted file mode 100644
index 63aa9cb..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete@2x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete@3x.png b/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete@3x.png
deleted file mode 100644
index 5963f9c..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete@3x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/reload.imageset/Contents.json b/ios/playground/WeexDemo/Assets.xcassets/reload.imageset/Contents.json
deleted file mode 100644
index e2cd5af..0000000
--- a/ios/playground/WeexDemo/Assets.xcassets/reload.imageset/Contents.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-  "images" : [
-    {
-      "idiom" : "universal",
-      "filename" : "reload.png",
-      "scale" : "1x"
-    },
-    {
-      "idiom" : "universal",
-      "filename" : "reload@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "universal",
-      "filename" : "reload@3x.png",
-      "scale" : "3x"
-    }
-  ],
-  "info" : {
-    "version" : 1,
-    "author" : "xcode"
-  }
-}
\ No newline at end of file
diff --git a/ios/playground/WeexDemo/Assets.xcassets/reload.imageset/reload.png b/ios/playground/WeexDemo/Assets.xcassets/reload.imageset/reload.png
deleted file mode 100644
index 1fd4bac..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/reload.imageset/reload.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/reload.imageset/reload@2x.png b/ios/playground/WeexDemo/Assets.xcassets/reload.imageset/reload@2x.png
deleted file mode 100644
index 6e97235..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/reload.imageset/reload@2x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/reload.imageset/reload@3x.png b/ios/playground/WeexDemo/Assets.xcassets/reload.imageset/reload@3x.png
deleted file mode 100644
index ab75ee7..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/reload.imageset/reload@3x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/scan.imageset/Contents.json b/ios/playground/WeexDemo/Assets.xcassets/scan.imageset/Contents.json
deleted file mode 100644
index 798ba85..0000000
--- a/ios/playground/WeexDemo/Assets.xcassets/scan.imageset/Contents.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-  "images" : [
-    {
-      "idiom" : "universal",
-      "filename" : "scan.png",
-      "scale" : "1x"
-    },
-    {
-      "idiom" : "universal",
-      "filename" : "scan@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "universal",
-      "filename" : "scan@3x.png",
-      "scale" : "3x"
-    }
-  ],
-  "info" : {
-    "version" : 1,
-    "author" : "xcode"
-  }
-}
\ No newline at end of file
diff --git a/ios/playground/WeexDemo/Assets.xcassets/scan.imageset/scan.png b/ios/playground/WeexDemo/Assets.xcassets/scan.imageset/scan.png
deleted file mode 100644
index 6183105..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/scan.imageset/scan.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/scan.imageset/scan@2x.png b/ios/playground/WeexDemo/Assets.xcassets/scan.imageset/scan@2x.png
deleted file mode 100644
index 43cf01d..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/scan.imageset/scan@2x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/scan.imageset/scan@3x.png b/ios/playground/WeexDemo/Assets.xcassets/scan.imageset/scan@3x.png
deleted file mode 100644
index 76c7e0b..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/scan.imageset/scan@3x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/Contents.json b/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/Contents.json
deleted file mode 100644
index e972e4e..0000000
--- a/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/Contents.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-  "images" : [
-    {
-      "idiom" : "universal",
-      "filename" : "history.png",
-      "scale" : "1x"
-    },
-    {
-      "idiom" : "universal",
-      "filename" : "history@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "universal",
-      "filename" : "history@3x.png",
-      "scale" : "3x"
-    }
-  ],
-  "info" : {
-    "version" : 1,
-    "author" : "xcode"
-  }
-}
\ No newline at end of file
diff --git a/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history.png b/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history.png
deleted file mode 100644
index 48aac03..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history@2x.png b/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history@2x.png
deleted file mode 100644
index dd94cb7..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history@2x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history@3x.png b/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history@3x.png
deleted file mode 100644
index 2d5f2b4..0000000
Binary files a/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history@3x.png and /dev/null differ
diff --git a/ios/playground/WeexDemo/DemoBaseViewController.h b/ios/playground/WeexDemo/DemoBaseViewController.h
deleted file mode 100644
index 48d01e0..0000000
--- a/ios/playground/WeexDemo/DemoBaseViewController.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-
-@interface DemoBaseViewController : UIViewController
-
-@end
diff --git a/ios/playground/WeexDemo/DemoBaseViewController.m b/ios/playground/WeexDemo/DemoBaseViewController.m
deleted file mode 100644
index edfb8a1..0000000
--- a/ios/playground/WeexDemo/DemoBaseViewController.m
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "DemoBaseViewController.h"
-#import "UIViewController+WXDemoNaviBar.h"
-
-@interface DemoBaseViewController ()
-
-@end
-
-@implementation DemoBaseViewController
-
-- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
-{
-    return [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
-}
-
-- (void)viewDidLoad {
-    [super viewDidLoad];
-    // Do any additional setup after loading the view.
-    [self setupNaviBar];
-}
-
-- (void)didReceiveMemoryWarning {
-    [super didReceiveMemoryWarning];
-    // Dispose of any resources that can be recreated.
-}
-
-@end
diff --git a/ios/playground/WeexDemo/DemoDefine.h b/ios/playground/WeexDemo/DemoDefine.h
deleted file mode 100644
index 04840bb..0000000
--- a/ios/playground/WeexDemo/DemoDefine.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#define CURRENT_IP [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"localServer-ip" ofType:@".txt"] encoding:NSUTF8StringEncoding error:nil]
-
-#if TARGET_IPHONE_SIMULATOR
-    #define DEMO_HOST @"127.0.0.1"
-#else
-    #define DEMO_HOST CURRENT_IP
-#endif
-
-#define DEMO_URL(path) [NSString stringWithFormat:@"http://%@:12580/%s", DEMO_HOST, #path]
-
-#define HOME_URL [NSString stringWithFormat:@"http://%@:12580/examples/build/vue/index.js", DEMO_HOST]
-
-#define BUNDLE_URL [NSString stringWithFormat:@"file://%@/bundlejs/landing.weex.js",[NSBundle mainBundle].bundlePath]
-
-#define UITEST_HOME_URL @"http://test?_wx_tpl=http://localhost:12580/test/build/TC__Home.js"
-
-#define QRSCAN  @"com.taobao.WeexDemo.scan"
-#define QRSCAN_HISTORY  @"com.taobao.WeexDemo.scan.history"
-#define WEEX_COLOR [UIColor colorWithRed:0.27 green:0.71 blue:0.94 alpha:1]
-#define WX_SCANNER_HISTORY @"wx_scanner_history"
diff --git a/ios/playground/WeexDemo/Images.xcassets/Brand Assets.launchimage/Contents.json b/ios/playground/WeexDemo/Images.xcassets/Brand Assets.launchimage/Contents.json
deleted file mode 100644
index e37b649..0000000
--- a/ios/playground/WeexDemo/Images.xcassets/Brand Assets.launchimage/Contents.json	
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "images" : [
-    {
-      "orientation" : "portrait",
-      "idiom" : "iphone",
-      "minimum-system-version" : "7.0",
-      "scale" : "2x"
-    },
-    {
-      "orientation" : "portrait",
-      "idiom" : "iphone",
-      "minimum-system-version" : "7.0",
-      "subtype" : "retina4",
-      "scale" : "2x"
-    }
-  ],
-  "info" : {
-    "version" : 1,
-    "author" : "xcode"
-  }
-}
\ No newline at end of file
diff --git a/ios/playground/WeexDemo/Info.plist b/ios/playground/WeexDemo/Info.plist
deleted file mode 100644
index 49abc9a..0000000
--- a/ios/playground/WeexDemo/Info.plist
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>en</string>
-	<key>CFBundleDisplayName</key>
-	<string>WeexPlayground</string>
-	<key>CFBundleExecutable</key>
-	<string>$(EXECUTABLE_NAME)</string>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>$(PRODUCT_NAME)</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>2.2</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleURLTypes</key>
-	<array>
-		<dict>
-			<key>CFBundleURLSchemes</key>
-			<array>
-				<string>wxpage</string>
-			</array>
-		</dict>
-	</array>
-	<key>CFBundleVersion</key>
-	<string>3</string>
-	<key>LSRequiresIPhoneOS</key>
-	<true/>
-	<key>NSAppTransportSecurity</key>
-	<dict>
-		<key>NSAllowsArbitraryLoads</key>
-		<true/>
-	</dict>
-	<key>NSCameraUsageDescription</key>
-	<string>$(PRODUCT_NAME) will access your camera,so that you can scan qr code to show your page</string>
-	<key>NSLocationWhenInUseUsageDescription</key>
-	<string>$(PRODUCT_NAME) will access your location, so that you can get current location where you are</string>
-	<key>NSPhotoLibraryAddUsageDescription</key>
-	<string>$(PRODUCT_NAME) needs access your photo Album, so that you can save image to your photo library.</string>
-	<key>NSPhotoLibraryUsageDescription</key>
-	<string>$(PRODUCT_NAME) needs access your photo Album,so that you can save image to your photo library.</string>
-	<key>UIApplicationShortcutItems</key>
-	<array>
-		<dict>
-			<key>UIApplicationShortcutItemIconFile</key>
-			<string>scan_history</string>
-			<key>UIApplicationShortcutItemSubtitle</key>
-			<string>history</string>
-			<key>UIApplicationShortcutItemTitle</key>
-			<string>Scan history</string>
-			<key>UIApplicationShortcutItemType</key>
-			<string>com.taobao.WeexDemo.scan.history</string>
-		</dict>
-		<dict>
-			<key>UIApplicationShortcutItemIconFile</key>
-			<string>scan</string>
-			<key>UIApplicationShortcutItemSubtitle</key>
-			<string>scan QR code</string>
-			<key>UIApplicationShortcutItemTitle</key>
-			<string>Scan QR</string>
-			<key>UIApplicationShortcutItemType</key>
-			<string>com.taobao.WeexDemo.scan</string>
-		</dict>
-	</array>
-	<key>UIRequiredDeviceCapabilities</key>
-	<array>
-		<string>armv7</string>
-	</array>
-	<key>UIStatusBarStyle</key>
-	<string>UIStatusBarStyleLightContent</string>
-	<key>UISupportedInterfaceOrientations</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
-	<key>UISupportedInterfaceOrientations~ipad</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationPortraitUpsideDown</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
-	<key>UIViewControllerBasedStatusBarAppearance</key>
-	<false/>
-</dict>
-</plist>
diff --git a/ios/playground/WeexDemo/Scanner/WXScannerHistoryVC.h b/ios/playground/WeexDemo/Scanner/WXScannerHistoryVC.h
deleted file mode 100644
index 2dee545..0000000
--- a/ios/playground/WeexDemo/Scanner/WXScannerHistoryVC.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-
-@interface WXScannerHistoryVC : UITableViewController<UIGestureRecognizerDelegate>
-
-@end
diff --git a/ios/playground/WeexDemo/Scanner/WXScannerHistoryVC.m b/ios/playground/WeexDemo/Scanner/WXScannerHistoryVC.m
deleted file mode 100644
index b60c975..0000000
--- a/ios/playground/WeexDemo/Scanner/WXScannerHistoryVC.m
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXScannerHistoryVC.h"
-#import "DemoDefine.h"
-#import "WXDemoViewController.h"
-#import "UIViewController+WXDemoNaviBar.h"
-#import <CoreText/CoreText.h>
-
-@interface WXScannerHistoryVC ()
-@property(nonatomic)NSMutableArray * scanner_history;
-@property(nonatomic)UIImageView * qrCodeImageView;
-@end
-
-@implementation WXScannerHistoryVC
-
-- (instancetype)init {
-    if (self = [super init]) {
-        _scanner_history = [[[NSUserDefaults standardUserDefaults] objectForKey:WX_SCANNER_HISTORY] mutableCopy];
-    }
-    return self;
-}
-
-- (void)viewDidLoad {
-    [super viewDidLoad];
-    [self setupNaviBar];
-    UITapGestureRecognizer * tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleClick:)];
-    [self.tableView addGestureRecognizer:tapGestureRecognizer];
-    tapGestureRecognizer.delegate = self;
-    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadHistory) name:NSUserDefaultsDidChangeNotification object:nil];
-}
-
-- (void)dealloc {
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-#pragma mark - Table view data source
-
-- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
-    return 1;
-}
-
-- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
-    return 88.0f;
-}
-
-- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    return [_scanner_history count];
-}
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
-    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"WX_SCANNER_HISTORY_CELL"];
-    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"WX_SCANNER_HISTORY_CELL" forIndexPath:indexPath];
-    if (!cell) {
-        cell = [UITableViewCell new];
-    }
-    UILongPressGestureRecognizer * longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
-    longPressGesture.minimumPressDuration = 1.0;
-    longPressGesture.delegate = self;
-    [cell addGestureRecognizer:longPressGesture];
-    NSMutableAttributedString * attributeString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%ld %@",(long)indexPath.row+1,[_scanner_history objectAtIndex:indexPath.row]]];
-    [attributeString addAttribute:(NSString*)NSForegroundColorAttributeName value:(id)[UIColor redColor].CGColor range:NSMakeRange(0, 1)];
-    NSDictionary<NSString*, id> *attributes = @{
-                                               NSForegroundColorAttributeName:[UIColor redColor],
-                                               NSFontAttributeName: [UIFont boldSystemFontOfSize:25.0],
-                                               };
-    [attributeString addAttributes:attributes range:NSMakeRange(0, 2)];
-    cell.textLabel.attributedText = attributeString;
-    cell.textLabel.numberOfLines = 0;
-    
-    return cell;
-}
-
-- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
-{
-    NSString *urlStr = _scanner_history[indexPath.row];
-    if (urlStr) {
-        WXDemoViewController * demoVC = [WXDemoViewController new];
-        demoVC.url = [NSURL URLWithString:urlStr];
-        [self.navigationController pushViewController:demoVC animated:YES];
-    }
-}
-
-- (void)reloadHistory
-{
-    if ([_scanner_history count]) {
-        [_qrCodeImageView removeFromSuperview];
-        [_scanner_history removeAllObjects];
-        _scanner_history =  [[[NSUserDefaults standardUserDefaults] objectForKey:WX_SCANNER_HISTORY] mutableCopy];
-        [self.tableView reloadData];
-    }
-}
-
-- (void)handleClick:(UITapGestureRecognizer*)gestureRecognizer
-{
-    CGPoint clickPoint = [gestureRecognizer locationInView:self.tableView];
-    if (!CGRectContainsPoint(_qrCodeImageView.frame, clickPoint)) {
-        [_qrCodeImageView removeFromSuperview];
-    }
-}
-
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
-{
-    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
-        if ([_qrCodeImageView superview]) {
-            return YES;
-        }
-    }
-    if ([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) {
-        return YES;
-    }
-    return NO;
-}
-
-- (void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
-{
-    if (gestureRecognizer.state != UIGestureRecognizerStateBegan) {
-        return ;
-    }
-    CGPoint pressPoint = [gestureRecognizer locationInView:self.tableView];
-    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:pressPoint];
-    if (indexPath == nil) {
-        return;
-    }
-    
-    NSString * url = _scanner_history[indexPath.row];
-    UIImage * qrCodeImage = [self getQRCodeWithData:url size:CGSizeMake(300, 300)];
-    _qrCodeImageView.contentMode = UIViewContentModeScaleAspectFill;
-    if (![_qrCodeImageView superview]) {
-        _qrCodeImageView = [[UIImageView alloc] initWithImage:qrCodeImage];
-        [_qrCodeImageView setCenter:self.view.center];
-        [self.view addSubview:_qrCodeImageView];
-    }else {
-        _qrCodeImageView.image = qrCodeImage;
-    }
-}
-
-- (UIImage*)getQRCodeWithData:(NSString*)url size:(CGSize)size {
-    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
-    [filter setDefaults];
-    NSString *info = url;
-    NSData *infoData = [info dataUsingEncoding:NSUTF8StringEncoding];
-    [filter setValue:infoData forKeyPath:@"inputMessage"];
-    
-    CIImage *outputImage = [filter outputImage];
-    CGRect extent = CGRectIntegral(outputImage.extent);
-    CGFloat scale = MIN(size.width/CGRectGetWidth(extent), size.width/CGRectGetHeight(extent));
-    
-    size_t width = CGRectGetWidth(extent) * scale;
-    size_t height = CGRectGetHeight(extent) * scale;
-    CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
-    CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
-    CIContext *context = [CIContext contextWithOptions:nil];
-    CGImageRef bitmapImage = [context createCGImage:outputImage fromRect:extent];
-    CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
-    CGContextScaleCTM(bitmapRef, scale, scale);
-    CGContextDrawImage(bitmapRef, extent, bitmapImage);
-    
-    CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
-    CGContextRelease(bitmapRef);
-    CGImageRelease(bitmapImage);
-    return [UIImage imageWithCGImage:scaledImage];
-}
-
-/*
-// Override to support conditional editing of the table view.
-- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
-    // Return NO if you do not want the specified item to be editable.
-    return YES;
-}
-*/
-
-/*
-// Override to support editing the table view.
-- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
-    if (editingStyle == UITableViewCellEditingStyleDelete) {
-        // Delete the row from the data source
-        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
-    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
-        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
-    }   
-}
-*/
-
-/*
-// Override to support rearranging the table view.
-- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
-}
-*/
-
-/*
-// Override to support conditional rearranging of the table view.
-- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
-    // Return NO if you do not want the item to be re-orderable.
-    return YES;
-}
-*/
-
-/*
-#pragma mark - Navigation
-
-// In a storyboard-based application, you will often want to do a little preparation before navigation
-- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
-    // Get the new view controller using [segue destinationViewController].
-    // Pass the selected object to the new view controller.
-}
-*/
-
-@end
diff --git a/ios/playground/WeexDemo/Scanner/WXScannerVC.h b/ios/playground/WeexDemo/Scanner/WXScannerVC.h
deleted file mode 100644
index aff1805..0000000
--- a/ios/playground/WeexDemo/Scanner/WXScannerVC.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-#import <AVFoundation/AVFoundation.h>
-
-@interface WXScannerVC : UIViewController <AVCaptureMetadataOutputObjectsDelegate>
-
-@end
diff --git a/ios/playground/WeexDemo/Scanner/WXScannerVC.m b/ios/playground/WeexDemo/Scanner/WXScannerVC.m
deleted file mode 100644
index 01b3262..0000000
--- a/ios/playground/WeexDemo/Scanner/WXScannerVC.m
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <WeexSDK/WeexSDK.h>
-#import "WXScannerVC.h"
-#import "AppDelegate.h"
-#import "UIViewController+WXDemoNaviBar.h"
-#import "WXDemoViewController.h"
-#import "WXDebugTool.h"
-#import "WXDevTool.h"
-#import <AudioToolbox/AudioToolbox.h>
-
-@interface WXScannerVC ()
-
-@property (nonatomic, strong) AVCaptureSession * session;
-@property (nonatomic, strong) AVCaptureVideoPreviewLayer *captureLayer;
-@property (nonatomic, strong) UIView *sanFrameView;
-
-@end
-
-@implementation WXScannerVC
-
-#pragma mark - lifeCircle
-
-- (void)dealloc {
-    [_captureLayer removeFromSuperlayer];
-}
-
-- (void)viewDidLoad {
-    [super viewDidLoad];
-    self.edgesForExtendedLayout = UIRectEdgeNone;
-    
-#if !(TARGET_IPHONE_SIMULATOR)
-    self.session = [[AVCaptureSession alloc]init];
-    [_session setSessionPreset:AVCaptureSessionPresetHigh];
-    AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
-    AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
-    AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];
-    if (output && input && device) {
-        [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
-        [_session addInput:input];
-        [_session addOutput:output];
-        output.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];
-    }
-    
-    _captureLayer = [AVCaptureVideoPreviewLayer layerWithSession:_session];
-    _captureLayer.videoGravity=AVLayerVideoGravityResizeAspectFill;
-    _captureLayer.frame=self.view.layer.bounds;
-#endif
-}
-
-- (void)viewWillAppear:(BOOL)animated {
-    [super viewWillAppear:animated];
-    [self.navigationController setNavigationBarHidden:NO];
-    [self setupNaviBar];
-    [self.view.layer addSublayer:_captureLayer];
-    [_session startRunning];
-}
-
-- (void) viewDidDisappear:(BOOL)animated
-{
-    [super viewDidDisappear:animated];
-    
-    [_captureLayer removeFromSuperlayer];
-    [_session stopRunning];
-}
-
-- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
-{
-    [_captureLayer removeFromSuperlayer];
-    [_session stopRunning];
-    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
-    if (metadataObjects.count > 0) {
-        AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex: 0];
-        [self recordScannerHistory:metadataObject.stringValue];
-        [self openURL:metadataObject.stringValue];
-    }
-}
-
-- (void)openURL:(NSString*)URL
-{
-    NSString *transformURL = URL;
-    NSArray* elts = [URL componentsSeparatedByString:@"?"];
-    if (elts.count >= 2) {
-        NSArray *urls = [elts.lastObject componentsSeparatedByString:@"="];
-        for (NSString *param in urls) {
-            if ([param isEqualToString:@"_wx_tpl"]) {
-                transformURL = [[urls lastObject]  stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-                break;
-            }
-        }
-    }
-    NSURL *url = [NSURL URLWithString:transformURL];
-    if ([self remoteDebug:url]) {
-        return;
-    }
-    [self jsReplace:url];
-    WXDemoViewController * controller = [[WXDemoViewController alloc] init];
-    controller.url = url;
-    controller.source = @"scan";
-    
-    NSMutableDictionary *queryDict = [NSMutableDictionary new];
-    if (WX_SYS_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
-        NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO];
-        NSArray *queryItems = [components queryItems];
-    
-        for (NSURLQueryItem *item in queryItems)
-            [queryDict setObject:item.value forKey:item.name];
-    }else {
-        queryDict = [self queryWithURL:url];
-    }
-    NSString *wsport = queryDict[@"wsport"] ?: @"8082";
-    NSURL *socketURL = [NSURL URLWithString:[NSString stringWithFormat:@"ws://%@:%@", url.host, wsport]];
-    controller.hotReloadSocket = [[SRWebSocket alloc] initWithURL:socketURL protocols:@[@"echo-protocol"]];
-    controller.hotReloadSocket.delegate = controller;
-    [controller.hotReloadSocket open];
-    
-    [[self navigationController] pushViewController:controller animated:YES];
-}
-
-- (NSMutableDictionary*)queryWithURL:(NSURL *)url {
-    NSMutableDictionary * queryDic = nil;
-    if (![url query]) {
-        return queryDic;
-    }
-    queryDic = [NSMutableDictionary new];
-    NSArray* components = [[url query] componentsSeparatedByString:@"&"];
-    for (NSUInteger i = 0; i < [components count]; i ++) {
-        NSString * queryParam = [components objectAtIndex:i];
-        NSArray* component = [queryParam componentsSeparatedByString:@"="];
-        [queryDic setValue:component[1] forKey:component[0]];
-    }
-    
-    return  queryDic;
-}
-
-#pragma mark - Replace JS
-
-- (void)jsReplace:(NSURL *)url
-{
-    if ([[url host] isEqualToString:@"weex-remote-debugger"]){
-        NSString* path = [url path];
-        if ([path isEqualToString:@"/dynamic/replace/bundle"]){
-            for (NSString * param in [[url query] componentsSeparatedByString:@"&"]) {
-                NSArray* elts = [param componentsSeparatedByString:@"="];
-                if ([elts count] < 2) {
-                    continue;
-                }
-                if ([[elts firstObject] isEqualToString:@"bundle"]){
-                    [WXDebugTool setReplacedBundleJS:[NSURL URLWithString:[elts lastObject]]];
-                }
-            }
-        }
-        
-        if ([path isEqualToString:@"/dynamic/replace/framework"]){
-            for (NSString * param in [[url query] componentsSeparatedByString:@"&"]) {
-                NSArray* elts = [param componentsSeparatedByString:@"="];
-                if ([elts count] < 2) {
-                    continue;
-                }
-                if ([[elts firstObject] isEqualToString:@"framework"]){
-                    [WXDebugTool setReplacedJSFramework:[NSURL URLWithString:[elts lastObject]]];
-                }
-            }
-        }
-    }
-}
-
-#pragma mark Remote debug
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
-- (BOOL)remoteDebug:(NSURL *)url
-{
-    if ([url.scheme isEqualToString:@"ws"]) {
-        [WXSDKEngine connectDebugServer:url.absoluteString];
-        [WXSDKEngine initSDKEnvironment];
-        
-        return YES;
-    }
-    
-    NSString *query = url.query;
-    for (NSString *param in [query componentsSeparatedByString:@"&"]) {
-        NSArray *elts = [param componentsSeparatedByString:@"="];
-        if([elts count] < 2) continue;
-        if ([[elts firstObject] isEqualToString:@"_wx_debug"]) {
-            [WXDebugTool setDebug:YES];
-            [WXSDKEngine connectDebugServer:[[elts lastObject]  stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
-            if ([[[self.navigationController viewControllers] objectAtIndex:0] isKindOfClass:NSClassFromString(@"WXDemoViewController")]) {
-                WXDemoViewController * vc = (WXDemoViewController*)[[self.navigationController viewControllers] objectAtIndex:0];
-                [vc performSelector:NSSelectorFromString(@"loadRefreshCtl")];
-                [self.navigationController popToViewController:vc animated:NO];
-            }
-            return YES;
-        } else if ([[elts firstObject] isEqualToString:@"_wx_devtool"]) {
-            NSString *devToolURL = [[elts lastObject]  stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-            [WXDevTool launchDevToolDebugWithUrl:devToolURL];
-            if ([[[self.navigationController viewControllers] objectAtIndex:0] isKindOfClass:NSClassFromString(@"WXDemoViewController")]) {
-                WXDemoViewController * vc = (WXDemoViewController*)[[self.navigationController viewControllers] objectAtIndex:0];
-                [self.navigationController popToViewController:vc animated:NO];
-            }
-            
-            return YES;
-        }
-    }
-    
-    return NO;
-}
-#pragma clang diagnostic pop
-
-- (void)recordScannerHistory:(NSString*)urlStr {
-    
-    NSMutableArray * scanner_history = [[[NSUserDefaults standardUserDefaults] objectForKey:WX_SCANNER_HISTORY] mutableCopy];
-    if (!scanner_history) {
-        scanner_history = [NSMutableArray new];
-    }
-    if ([scanner_history containsObject:urlStr]) {
-        [scanner_history removeObject:urlStr];
-    }
-    if ([scanner_history count] >= 7) {
-        [scanner_history removeLastObject];
-    }
-    [scanner_history insertObject:urlStr atIndex:0];
-    [[NSUserDefaults standardUserDefaults] setObject:scanner_history forKey:WX_SCANNER_HISTORY];
-}
-
-@end
diff --git a/ios/playground/WeexDemo/UIView+UIThreadCheck.h b/ios/playground/WeexDemo/UIView+UIThreadCheck.h
deleted file mode 100644
index 154b602..0000000
--- a/ios/playground/WeexDemo/UIView+UIThreadCheck.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-
-@interface UIView (UIThreadCheck)
-
-+ (void)wx_checkUIThread;
-
-@end
diff --git a/ios/playground/WeexDemo/UIView+UIThreadCheck.m b/ios/playground/WeexDemo/UIView+UIThreadCheck.m
deleted file mode 100644
index b8d4ed8..0000000
--- a/ios/playground/WeexDemo/UIView+UIThreadCheck.m
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "UIView+UIThreadCheck.h"
-#import <WeexSDK/NSObject+WXSwizzle.h>
-
-#define WXCheckUIThread() NSAssert([NSThread isMainThread], \
-@"You must change UI on main thread!")
-
-@implementation UIView (UIThreadCheck)
-
-+ (void)wx_checkUIThread
-{
-    [self weex_swizzle:[self class] Method:@selector(setNeedsLayout) withMethod:@selector(wx_setNeedsLayout)];
-    [self weex_swizzle:[self class] Method:@selector(setNeedsDisplay) withMethod:@selector(wx_setNeedsDisplay)];
-    [self weex_swizzle:[self class] Method:@selector(setNeedsDisplayInRect:) withMethod:@selector(wx_setNeedsDisplayInRect:)];
-}
-
-- (void)wx_setNeedsLayout
-{
-    WXCheckUIThread();
-    [self wx_setNeedsLayout];
-}
-
-- (void)wx_setNeedsDisplay
-{
-    WXCheckUIThread();
-    [self wx_setNeedsDisplay];
-}
-
-- (void)wx_setNeedsDisplayInRect:(CGRect)rect
-{
-    WXCheckUIThread();
-    [self wx_setNeedsDisplayInRect:rect];
-}
-
-@end
diff --git a/ios/playground/WeexDemo/UIViewController+WXDemoNaviBar.h b/ios/playground/WeexDemo/UIViewController+WXDemoNaviBar.h
deleted file mode 100644
index 3ddbfd8..0000000
--- a/ios/playground/WeexDemo/UIViewController+WXDemoNaviBar.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-#import "DemoDefine.h"
-
-@interface UIViewController (WXDemoNaviBar) <UIGestureRecognizerDelegate>
-
-/**
- *  back button click action
- *  @param sender responder
- */
-- (void)backButtonClicked:(id)sender;
-
-- (void)setupNaviBar;
-
-@end
-
diff --git a/ios/playground/WeexDemo/UIViewController+WXDemoNaviBar.m b/ios/playground/WeexDemo/UIViewController+WXDemoNaviBar.m
deleted file mode 100644
index 09b4105..0000000
--- a/ios/playground/WeexDemo/UIViewController+WXDemoNaviBar.m
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "UIViewController+WXDemoNaviBar.h"
-#import "WXScannerVC.h"
-#import "WXScannerHistoryVC.h"
-#import "WXDefine.h"
-#import <objc/runtime.h>
-
-@implementation UIViewController (WXDemoNaviBar)
-
-- (void)setupNaviBar
-{
-    UIScreenEdgePanGestureRecognizer *edgePanGestureRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(edgePanGesture:)];
-    edgePanGestureRecognizer.delegate = self;
-    edgePanGestureRecognizer.edges = UIRectEdgeLeft;
-    [self.view addGestureRecognizer:edgePanGestureRecognizer];
-    
-    NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
-    if ([[ver objectAtIndex:0] intValue] >= 7) {
-        // iOS 7.0 or later
-        self.navigationController.navigationBar.barTintColor = WEEX_COLOR;
-        self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
-        [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}];
-        self.navigationController.navigationBar.translucent = NO;
-    }
-    if (!self.navigationItem.leftBarButtonItem) {
-        UIBarButtonItem *leftItem;
-        if(![[self.navigationController.viewControllers objectAtIndex:0] isEqual:self]) {
-            leftItem = [self backButtonItem];
-        } else {
-            leftItem = [self leftBarButtonItem];
-        }
-        self.navigationItem.leftBarButtonItems = @[leftItem];
-    }
-    if ([self isKindOfClass:[WXScannerVC class]]) {
-        UIBarButtonItem *historyItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"scan_history"]
-                                                          style:UIBarButtonItemStylePlain
-                                                         target:self
-                                                         action:@selector(historyButtonClicked:)];
-        self.navigationItem.rightBarButtonItems = @[historyItem];
-    }
-    if([self isKindOfClass:[WXScannerHistoryVC class]]) {
-        UIBarButtonItem *historyItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"delete"]
-                                                                        style:UIBarButtonItemStylePlain
-                                                                       target:self
-                                                                       action:@selector(clearScannerHistory:)];
-        self.navigationItem.rightBarButtonItems = @[historyItem];
-    }
-}
-
-- (void)edgePanGesture:(UIScreenEdgePanGestureRecognizer*)edgePanGestureRecognizer
-{
-    [self.navigationController popViewControllerAnimated:YES];
-}
-
-#pragma mark- UIGestureRecognizerDelegate
-- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
-{
-    if (self.navigationController && [self.navigationController.viewControllers count] == 1) {
-        return NO;
-    }
-    return YES;
-}
-
-#pragma mark -
-#pragma mark - UIBarButtonItems
-
-- (UIBarButtonItem *)leftBarButtonItem
-{
-    UIBarButtonItem *leftItem = objc_getAssociatedObject(self, _cmd);
-    
-    if (!leftItem) {
-        leftItem = [[UIBarButtonItem alloc]
-                    initWithImage:[UIImage imageNamed:@"scan"]
-                     style:UIBarButtonItemStylePlain
-                    target:self
-                    action:@selector(scanQR:)];
-        leftItem.accessibilityHint = @"click to scan qr code";
-        leftItem.accessibilityValue = @"scan qr code";
-        objc_setAssociatedObject(self, _cmd, leftItem, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-    }
-    return leftItem;
-}
-
-- (UIBarButtonItem *)backButtonItem
-{
-    UIBarButtonItem *backButtonItem = objc_getAssociatedObject(self, _cmd);
-    if (!backButtonItem) {
-        backButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back"]
-                                                          style:UIBarButtonItemStylePlain
-                                                         target:self
-                                                         action:@selector(backButtonClicked:)];
-        objc_setAssociatedObject(self, _cmd, backButtonItem, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-    }
-    return backButtonItem;
-}
-
-#pragma mark -
-#pragma mark - UIBarButtonItem actions
-
-- (void)scanQR:(id)sender {
-    
-    WXScannerVC * scanViewController = [[WXScannerVC alloc] init];
-    [self.navigationController pushViewController:scanViewController animated:YES];
-}
-
-- (void)backButtonClicked:(id)sender {
-    
-    [self.navigationController popViewControllerAnimated:YES];
-}
-
-- (void)historyButtonClicked:(id)sender {
-    
-    [self.navigationController pushViewController:[WXScannerHistoryVC new] animated:YES];
-}
-
-- (void)clearScannerHistory:(id)sender {
-    [[NSUserDefaults standardUserDefaults] removeObjectForKey:WX_SCANNER_HISTORY];
-}
-
-@end
diff --git a/ios/playground/WeexDemo/WXConfigCenterDefaultImpl.h b/ios/playground/WeexDemo/WXConfigCenterDefaultImpl.h
deleted file mode 100644
index 2889a4a..0000000
--- a/ios/playground/WeexDemo/WXConfigCenterDefaultImpl.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXConfigCenterProtocol.h"
-
-@interface WXConfigCenterDefaultImpl : NSObject<WXConfigCenterProtocol>
-
-@end
diff --git a/ios/playground/WeexDemo/WXConfigCenterDefaultImpl.m b/ios/playground/WeexDemo/WXConfigCenterDefaultImpl.m
deleted file mode 100644
index d127edb..0000000
--- a/ios/playground/WeexDemo/WXConfigCenterDefaultImpl.m
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXConfigCenterDefaultImpl.h"
-
-@implementation WXConfigCenterDefaultImpl
-
-- (id)configForKey:(NSString *)key defaultValue:(id)defaultValue isDefault:(BOOL *)isDefault
-{
-    NSArray<NSString*>* keys = [key componentsSeparatedByString:@"."];
-    if ([keys[0] isEqualToString:@"iOS_weex_ext_config"] && [keys[1] isEqualToString:@"text_render_useCoreText"]){
-        return @YES;
-    }
-    if ([keys[0] isEqualToString:@"iOS_weex_ext_config"] && [keys[1] isEqualToString:@"slider_class_name"]){
-        return @"WXCycleSliderComponent";
-    }
-    if ([keys[0] isEqualToString:@"iOS_weex_prerender_config"] && [keys[1] isEqualToString:@"is_switch_on"]){
-        return @YES;
-    }
-    if ([keys[0] isEqualToString:@"iOS_weex_prerender_config"] && [keys[1] isEqualToString:@"cacheTime"]){
-        return @300000;
-    }
-    if ([keys[0] isEqualToString:@"iOS_weex_prerender_config"] && [keys[1] isEqualToString:@"max_cache_num"]){
-        return @2;
-    }
-    return defaultValue;
-}
-
-@end
diff --git a/ios/playground/WeexDemo/WXDemoViewController.h b/ios/playground/WeexDemo/WXDemoViewController.h
deleted file mode 100644
index be2935d..0000000
--- a/ios/playground/WeexDemo/WXDemoViewController.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-#import <SRWebSocket.h>
-
-@interface WXDemoViewController : UIViewController<SRWebSocketDelegate>
-
-@property (nonatomic, strong) NSString *script;
-@property (nonatomic, strong) NSURL *url;
-@property (nonatomic, assign) BOOL showNavigationBar;
-@property (nonatomic, strong) SRWebSocket *hotReloadSocket;
-@property (nonatomic, strong) NSString *source;
-
-@end
-
diff --git a/ios/playground/WeexDemo/WXDemoViewController.m b/ios/playground/WeexDemo/WXDemoViewController.m
deleted file mode 100644
index c3e321d..0000000
--- a/ios/playground/WeexDemo/WXDemoViewController.m
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXDemoViewController.h"
-#import <WeexSDK/WXSDKInstance.h>
-#import <WeexSDK/WXSDKEngine.h>
-#import <WeexSDK/WXUtility.h>
-#import <WeexSDK/WXDebugTool.h>
-#import <WeexSDK/WXSDKManager.h>
-#import "UIViewController+WXDemoNaviBar.h"
-#import "DemoDefine.h"
-#import "WXPrerenderManager.h"
-#import "WXMonitor.h"
-#import "AppDelegate.h"
-
-@interface WXDemoViewController () <UIScrollViewDelegate, UIWebViewDelegate>
-@property (nonatomic, strong) WXSDKInstance *instance;
-@property (nonatomic, strong) UIView *weexView;
-
-@property (nonatomic, strong) NSArray *refreshList;
-@property (nonatomic, strong) NSArray *refreshList1;
-@property (nonatomic, strong) NSArray *refresh;
-@property (nonatomic) NSInteger count;
-
-@property (nonatomic, assign) CGFloat weexHeight;
-@property (nonatomic, weak) id<UIScrollViewDelegate> originalDelegate;
-
-@end
-
-@implementation WXDemoViewController
-
-- (instancetype)init
-{
-    if (self = [super init]) {
-    }
-    
-    return self;
-}
-
-- (void)setInterfaceOrientation:(UIDeviceOrientation)orientation
-{
-    if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
-        [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:orientation]
-                                    forKey:@"orientation"];
-    }
-}
-
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-    
-    self.view.backgroundColor = [UIColor whiteColor];
-    [self.view setClipsToBounds:YES];
-    
-    _showNavigationBar = NO;
-    [self.navigationController setNavigationBarHidden:_showNavigationBar];
-    _weexHeight = self.view.frame.size.height - CGRectGetMaxY(self.navigationController.navigationBar.frame);
-    
-    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationRefreshInstance:) name:@"RefreshInstance" object:nil];
-    [self render];
-}
-
-- (void)viewDidAppear:(BOOL)animated
-{
-    [super viewDidAppear:animated];
-    [self updateInstanceState:WeexInstanceAppear];
-    
-    AppDelegate* appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
-    appDelegate.allowRotation = NO;
-    [_instance isKeepingRawCssStyles:^(BOOL value) {
-        appDelegate.allowRotation = value;
-    }];
-}
-
-- (void)viewDidDisappear:(BOOL)animated
-{
-    [super viewDidDisappear:animated];
-    [_instance didDisappear];
-    [self updateInstanceState:WeexInstanceDisappear];
-}
-
-- (void)viewWillDisappear:(BOOL)animated
-{
-    [super viewWillDisappear:animated];
-    // restore to protrait
-    AppDelegate* appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
-    appDelegate.allowRotation = NO;
-    [self setInterfaceOrientation:UIDeviceOrientationPortrait];
-}
-
-- (void)viewWillAppear:(BOOL)animated
-{
-    [super viewWillAppear:animated];
-    [_instance willAppear];
-    [self setupNaviBar];
-    [self setupRightBarItem];
-    [self.navigationController setNavigationBarHidden:_showNavigationBar];
-}
-
-//TODO get height
-- (void)viewDidLayoutSubviews
-{
-    _weexHeight = [UIScreen mainScreen].bounds.size.height - CGRectGetMaxY(self.navigationController.navigationBar.frame);
-    UIEdgeInsets safeArea = UIEdgeInsetsZero;
-#ifdef __IPHONE_11_0
-    if (@available(iOS 11.0, *)) {
-        safeArea = self.view.safeAreaInsets;
-    } else {
-        // Fallback on earlier versions
-    }
-#endif
-    _instance.frame = CGRectMake(safeArea.left, safeArea.top, self.view.frame.size.width-safeArea.left-safeArea.right, _weexHeight-safeArea.top-safeArea.bottom);
-}
-
-- (void)didReceiveMemoryWarning {
-    [super didReceiveMemoryWarning];
-    // Dispose of any resources that can be recreated.
-}
-
-- (void)dealloc
-{
-    
-    [_instance destroyInstance];
-#ifdef DEBUG
-    [_instance forceGarbageCollection];
-#endif
-    
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-- (void)render
-{
-    CGFloat width = self.view.frame.size.width;
-//    if ([_url.absoluteString isEqualToString:HOME_URL]) {
-//        [self.navigationController setNavigationBarHidden:YES];
-//    }
-    [_instance destroyInstance];
-    _instance = [[WXSDKInstance alloc] init];
-    if([WXPrerenderManager isTaskExist:[self.url absoluteString]]){
-        _instance = [WXPrerenderManager instanceFromUrl:self.url.absoluteString];
-    }
-    
-    _instance.isMainContainerStack = YES;
-    _instance.viewController = self;
-    UIEdgeInsets safeArea = UIEdgeInsetsZero;
-    
-#ifdef __IPHONE_11_0
-    if (@available(iOS 11.0, *)) {
-        safeArea = self.view.safeAreaInsets;
-    } else {
-        // Fallback on earlier versions
-    }
-#endif
-    
-    _instance.frame = CGRectMake(self.view.frame.size.width-width, 0, width, _weexHeight-safeArea.bottom);
-    
-    __weak typeof(self) weakSelf = self;
-    _instance.onCreate = ^(UIView *view) {
-        [weakSelf.weexView removeFromSuperview];
-        weakSelf.weexView = view;
-        [weakSelf.view addSubview:weakSelf.weexView];
-        UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, weakSelf.weexView);
-    };
-    _instance.onFailed = ^(NSError *error) {
-        if ([[error domain] isEqualToString:@"1"]) {
-            dispatch_async(dispatch_get_main_queue(), ^{
-                NSMutableString *errMsg=[NSMutableString new];
-                [errMsg appendFormat:@"ErrorType:%@\n",[error domain]];
-                [errMsg appendFormat:@"ErrorCode:%ld\n",(long)[error code]];
-                [errMsg appendFormat:@"ErrorInfo:%@\n", [error userInfo]];
-                
-                UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"render failed" message:errMsg delegate:weakSelf cancelButtonTitle:nil otherButtonTitles:@"ok", nil];
-                [alertView show];
-            });
-        }
-    };
-    
-    __weak WXSDKInstance* theInstance = _instance;
-    _instance.renderFinish = ^(UIView *view) {
-         WXLogDebug(@"%@", @"Render Finish...");
-        [weakSelf updateInstanceState:WeexInstanceAppear];
-        
-        AppDelegate* appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
-        appDelegate.allowRotation = NO;
-        [theInstance isKeepingRawCssStyles:^(BOOL value) {
-            appDelegate.allowRotation = value;
-        }];
-    };
-    
-    _instance.updateFinish = ^(UIView *view) {
-        WXLogDebug(@"%@", @"Update Finish...");
-    };
-    if (!self.url) {
-        WXLogError(@"error: render url is nil");
-        return;
-    }
-    if([WXPrerenderManager isTaskExist:[self.url absoluteString]]){
-        WX_MONITOR_INSTANCE_PERF_START(WXPTJSDownload, _instance);
-        WX_MONITOR_INSTANCE_PERF_END(WXPTJSDownload, _instance);
-        WX_MONITOR_INSTANCE_PERF_START(WXPTFirstScreenRender, _instance);
-        WX_MONITOR_INSTANCE_PERF_START(WXPTAllRender, _instance);
-        [WXPrerenderManager renderFromCache:[self.url absoluteString]];
-        return;
-    }
-    _instance.viewController = self;
-    NSURL *URL = [self testURL: [self.url absoluteString]];
-    NSString *randomURL = [NSString stringWithFormat:@"%@%@random=%d",URL.absoluteString,URL.query?@"&":@"?",arc4random()];
-    [_instance renderWithURL:[NSURL URLWithString:randomURL] options:@{@"bundleUrl":URL.absoluteString} data:nil];
-    [self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
-                                                                      [UIColor whiteColor], NSForegroundColorAttributeName, nil]];
-    if([_instance.pageName hasPrefix:@"http://dotwe.org"] || [_instance.pageName hasPrefix:@"https://dotwe.org"]) {
-        self.navigationItem.title = @"Weex Online Example";
-    } else {
-        self.navigationItem.title = _instance.pageName;
-    }
-}
-
-- (void)updateInstanceState:(WXState)state
-{
-    if (_instance && _instance.state != state) {
-        _instance.state = state;
-        
-        if (state == WeexInstanceAppear) {
-            [[WXSDKManager bridgeMgr] fireEvent:_instance.instanceId ref:WX_SDK_ROOT_REF type:@"viewappear" params:nil domChanges:nil];
-        }
-        else if (state == WeexInstanceDisappear) {
-            [[WXSDKManager bridgeMgr] fireEvent:_instance.instanceId ref:WX_SDK_ROOT_REF type:@"viewdisappear" params:nil domChanges:nil];
-        }
-    }
-}
-
-#pragma mark - refresh
-- (void)refreshWeex
-{
-    [self render];
-}
-
-#pragma mark - UIBarButtonItems
-
-- (void)setupRightBarItem
-{
-    if ([self.url.scheme hasPrefix:@"http"]) {
-        [self loadRefreshCtl];
-    }
-}
-
-- (void)loadRefreshCtl {
-    UIBarButtonItem *refreshButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"reload"] style:UIBarButtonItemStylePlain target:self action:@selector(refreshWeex)];
-    refreshButtonItem.accessibilityHint = @"click to reload curent page";
-    self.navigationItem.rightBarButtonItem = refreshButtonItem;
-}
-
-#pragma mark - websocket
-- (void)webSocketDidOpen:(SRWebSocket *)webSocket
-{
-    
-}
-
-- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message
-{
-    if ([@"refresh" isEqualToString:message]) {
-        [self render];
-    }
-}
-
-- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error
-{
-    
-}
-
-# pragma mark - orientation
-
-- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
-{
-    if (_instance) {
-        CGFloat w = [UIScreen mainScreen].bounds.size.width;
-        CGFloat h = [UIScreen mainScreen].bounds.size.height;
-        [_instance setPageRequiredWidth:w height:h];
-        [_instance reloadLayout];
-    }
-}
-
-#pragma mark - localBundle
-/*- (void)loadLocalBundle:(NSURL *)url
-{
-    NSURL * localPath = nil;
-    NSMutableArray * pathComponents = nil;
-    if (self.url) {
-        pathComponents =[NSMutableArray arrayWithArray:[url.absoluteString pathComponents]];
-        [pathComponents removeObjectsInRange:NSRangeFromString(@"0 3")];
-        [pathComponents replaceObjectAtIndex:0 withObject:@"bundlejs"];
-        
-        NSString *filePath = [NSString stringWithFormat:@"%@/%@",[NSBundle mainBundle].bundlePath,[pathComponents componentsJoinedByString:@"/"]];
-        localPath = [NSURL fileURLWithPath:filePath];
-    }else {
-        NSString *filePath = [NSString stringWithFormat:@"%@/bundlejs/index.js",[NSBundle mainBundle].bundlePath];
-        localPath = [NSURL fileURLWithPath:filePath];
-    }
-    
-    NSString *bundleUrl = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/bundlejs/",[NSBundle mainBundle].bundlePath]].absoluteString;
-     [_instance renderWithURL:localPath options:@{@"bundleUrl":bundleUrl} data:nil];
-}*/
-
-#pragma mark - load local device bundle
-- (NSURL*)testURL:(NSString*)url
-{
-    NSRange range = [url rangeOfString:@"_wx_tpl"];
-    if (range.location != NSNotFound) {
-        NSString *tmp = [url substringFromIndex:range.location];
-        NSUInteger start = [tmp rangeOfString:@"="].location;
-        NSUInteger end = [tmp rangeOfString:@"&"].location;
-        ++start;
-        if (end == NSNotFound) {
-            end = [tmp length] - start;
-        }
-        else {
-            end = end - start;
-        }
-        NSRange subRange;
-        subRange.location = start;
-        subRange.length = end;
-        url = [tmp substringWithRange:subRange];
-    }
-    return [NSURL URLWithString:url];
-}
-
-#pragma mark - notification
-- (void)notificationRefreshInstance:(NSNotification *)notification {
-    [self refreshWeex];
-}
-
-@end
diff --git a/ios/playground/WeexDemo/WXExtModule.h b/ios/playground/WeexDemo/WXExtModule.h
deleted file mode 100644
index e440c58..0000000
--- a/ios/playground/WeexDemo/WXExtModule.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import <WeexSDK/WXModuleProtocol.h>
-
-@interface WXExtModule : NSObject <WXModuleProtocol>
-
-@end
diff --git a/ios/playground/WeexDemo/WXExtModule.m b/ios/playground/WeexDemo/WXExtModule.m
deleted file mode 100644
index 16b2e0a..0000000
--- a/ios/playground/WeexDemo/WXExtModule.m
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXExtModule.h"
-
-@implementation WXExtModule
-
-WX_EXPORT_METHOD(@selector(generateCover:))
-
-- (void)generateCover:(WXModuleKeepAliveCallback)callback
-{
-#if DEBUG
-#if !TARGET_IPHONE_SIMULATOR
-    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
-    NSString *documentsDirectory = [paths objectAtIndex:0];
-    setenv("GCOV_PREFIX", [documentsDirectory cStringUsingEncoding:NSUTF8StringEncoding], 1);
-    setenv("GCOV_PREFIX_STRIP", "6", 1);
-#endif
-    
-#if defined __cplusplus
-    extern "C" {
-#endif
-    extern void __gcov_flush(void);
-    __gcov_flush();
-#if defined __cplusplus
-    };
-#endif
-    
-    if (callback) {
-        NSDictionary * result = @{@"ok": @true};
-        callback(result,NO);
-    }
-#else
-    if (callback) {
-        NSDictionary * result = @{@"ok": @false,@"msg":@"only debug mode support"};
-        callback(result,NO);
-    }
-#endif
-}
-
-@end
diff --git a/ios/playground/WeexDemo/WXExtendCallNativeTest.h b/ios/playground/WeexDemo/WXExtendCallNativeTest.h
deleted file mode 100644
index 4671779..0000000
--- a/ios/playground/WeexDemo/WXExtendCallNativeTest.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXExtendCallNativeProtocol.h"
-
-@interface WXExtendCallNativeTest : NSObject<WXExtendCallNativeProtocol>
-
-@end
diff --git a/ios/playground/WeexDemo/WXExtendCallNativeTest.m b/ios/playground/WeexDemo/WXExtendCallNativeTest.m
deleted file mode 100644
index ba11caf..0000000
--- a/ios/playground/WeexDemo/WXExtendCallNativeTest.m
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXExtendCallNativeTest.h"
-
-@implementation WXExtendCallNativeTest
-
-#pragma mark -
-#pragma WXExtendCallNativeProtocol
-
-+ (BOOL)checkParameters:(NSDictionary *)parameters
-{
-    if(!parameters || ![parameters isKindOfClass:[NSDictionary class]]){
-        return NO;
-    }
-    
-    if(!parameters[@"className"]){
-        return NO;
-    }
-    
-    return YES;
-}
-
-
-+ (id)excuteCallNative:(NSDictionary *)parameters
-{
-    NSLog(@"weex test");
-    return @{@"value":@"test"};
-}
-
-@end
diff --git a/ios/playground/WeexDemo/WXNavigationHandlerImpl.h b/ios/playground/WeexDemo/WXNavigationHandlerImpl.h
deleted file mode 100644
index bfd4020..0000000
--- a/ios/playground/WeexDemo/WXNavigationHandlerImpl.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <WeexSDK/WXNavigationProtocol.h>
-
-@interface WXNavigationHandlerImpl : NSObject <WXNavigationProtocol>
-
-@end
diff --git a/ios/playground/WeexDemo/WXNavigationHandlerImpl.m b/ios/playground/WeexDemo/WXNavigationHandlerImpl.m
deleted file mode 100644
index 67b129c..0000000
--- a/ios/playground/WeexDemo/WXNavigationHandlerImpl.m
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <WeexSDK/WeexSDK.h>
-#import "WXNavigationHandlerImpl.h"
-#import "WXDemoViewController.h"
-
-@implementation WXNavigationHandlerImpl
-
-
-
-- (void)clearNavigationItemWithParam:(NSDictionary *)param position:(WXNavigationItemPosition)position completion:(WXNavigationResultBlock)block withContainer:(UIViewController *)container {
-    
-}
-
-- (id)navigationControllerOfContainer:(UIViewController *)container {
-    return container.navigationController;
-}
-
-- (void)popViewControllerWithParam:(NSDictionary *)param completion:(WXNavigationResultBlock)block withContainer:(UIViewController *)container {
-    BOOL animated = YES;
-    id obj = [param objectForKey:@"animated"];
-    if (obj) {
-        animated = [WXConvert BOOL:obj];
-    }
-    [container.navigationController popViewControllerAnimated:animated];
-}
-
-- (void)pushViewControllerWithParam:(NSDictionary *)param completion:(WXNavigationResultBlock)block withContainer:(UIViewController *)container {
-    BOOL animated = YES;
-    NSString *obj = [[param objectForKey:@"animated"] lowercaseString];
-    if (obj && [obj isEqualToString:@"false"]) {
-        animated = NO;
-    }
-    
-    WXDemoViewController *vc = [[WXDemoViewController alloc] init];
-    vc.url = [NSURL URLWithString:param[@"url"]];
-    vc.hidesBottomBarWhenPushed = YES;
-    [container.navigationController pushViewController:vc animated:animated];
-}
-
-- (void)setNavigationBackgroundColor:(UIColor *)backgroundColor withContainer:(UIViewController *)container {
-    
-}
-
-- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated withContainer:(UIViewController *)container {
-    if (![container isKindOfClass:[WXBaseViewController class]]) {
-        return;
-    }
-    
-    container.navigationController.navigationBarHidden = hidden;
-}
-
-- (void)setNavigationItemWithParam:(NSDictionary *)param position:(WXNavigationItemPosition)position completion:(WXNavigationResultBlock)block withContainer:(UIViewController *)container {
-    
-}
-
-@end
diff --git a/ios/playground/WeexDemo/WXSyncTestModule.h b/ios/playground/WeexDemo/WXSyncTestModule.h
deleted file mode 100644
index 254af6f..0000000
--- a/ios/playground/WeexDemo/WXSyncTestModule.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <WeexSDK/WXModuleProtocol.h>
-
-@interface WXSyncTestModule : NSObject <WXModuleProtocol>
-
-@end
diff --git a/ios/playground/WeexDemo/WXSyncTestModule.m b/ios/playground/WeexDemo/WXSyncTestModule.m
deleted file mode 100644
index 784502d..0000000
--- a/ios/playground/WeexDemo/WXSyncTestModule.m
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXSyncTestModule.h"
-
-@implementation WXSyncTestModule
-
-WX_EXPORT_METHOD_SYNC(@selector(getString))
-WX_EXPORT_METHOD_SYNC(@selector(getNumber))
-WX_EXPORT_METHOD_SYNC(@selector(getArray))
-WX_EXPORT_METHOD_SYNC(@selector(getObject))
-
-- (NSString *)getString
-{
-    return @"testString";
-}
-
-- (NSUInteger)getNumber
-{
-    return 111111;
-}
-
-- (NSArray *)getArray
-{
-    return @[@(111111),@"testString",@"testString2"];
-}
-
-- (NSDictionary *)getObject
-{
-    return @{@"number":@(111111), @"string1":@"testString",@"string2":@"testString2"};
-}
-
-@end
diff --git a/ios/playground/WeexDemo/Websocket/SRWebSocket+Weex.h b/ios/playground/WeexDemo/Websocket/SRWebSocket+Weex.h
deleted file mode 100644
index 8bb36b5..0000000
--- a/ios/playground/WeexDemo/Websocket/SRWebSocket+Weex.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <SocketRocket/SRWebSocket.h>
-#import <WeexSDK/WXWebSocketHandler.h>
-#import <objc/runtime.h>
-
-@interface SRWebSocket (Weex)
-
-@property (nonatomic, copy) NSString *wx_Identifier;
-@property (nonatomic, weak) id<WXWebSocketDelegate> wx_WebSocketDelegate;
-
-@end
diff --git a/ios/playground/WeexDemo/Websocket/SRWebSocket+Weex.m b/ios/playground/WeexDemo/Websocket/SRWebSocket+Weex.m
deleted file mode 100644
index afdbcfa..0000000
--- a/ios/playground/WeexDemo/Websocket/SRWebSocket+Weex.m
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "SRWebSocket+Weex.h"
-static char wx_IdentifierKey;
-static char wx_WebSocketDelegateKey;
-
-
-@implementation SRWebSocket (Weex)
-
--(void)setWx_Identifier:(NSString *)wx_Identifier
-{
-    objc_setAssociatedObject(self, &wx_IdentifierKey, wx_Identifier, OBJC_ASSOCIATION_COPY);
-}
-
--(NSString *)wx_Identifier
-{
-    return objc_getAssociatedObject(self, &wx_IdentifierKey);
-}
-
--(void)setWx_WebSocketDelegate:(id<WXWebSocketDelegate>)wx_WebSocketDelegate
-{
-    objc_setAssociatedObject(self, &wx_WebSocketDelegateKey, wx_WebSocketDelegate, OBJC_ASSOCIATION_COPY);
-}
-
--(NSString *)wx_WebSocketDelegate
-{
-    return objc_getAssociatedObject(self, &wx_WebSocketDelegateKey);
-}
-
-@end
diff --git a/ios/playground/WeexDemo/Websocket/WXWebSocketDefaultImpl.h b/ios/playground/WeexDemo/Websocket/WXWebSocketDefaultImpl.h
deleted file mode 100644
index 620e71a..0000000
--- a/ios/playground/WeexDemo/Websocket/WXWebSocketDefaultImpl.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <WeexSDK/WXWebSocketHandler.h>
-
-@interface WXWebSocketDefaultImpl : NSObject<WXWebSocketHandler>
-
-@end
diff --git a/ios/playground/WeexDemo/Websocket/WXWebSocketDefaultImpl.m b/ios/playground/WeexDemo/Websocket/WXWebSocketDefaultImpl.m
deleted file mode 100644
index 60c9d34..0000000
--- a/ios/playground/WeexDemo/Websocket/WXWebSocketDefaultImpl.m
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXWebSocketDefaultImpl.h"
-#import <SocketRocket/SRWebSocket.h>
-#import "SRWebSocket+Weex.h"
-
-@interface WXWebSocketDefaultImpl()<SRWebSocketDelegate>
-
-@end
-
-@implementation WXWebSocketDefaultImpl
-{
-    NSMutableDictionary<NSString *, SRWebSocket *> *_webSockets;
-}
-
-#pragma mark - WXWebSocketHandler
-- (void)open:(NSString *)url protocol:(NSString *)protocol identifier:(NSString *)identifier withDelegate:(id<WXWebSocketDelegate>)delegate
-{
-    if(!_webSockets)
-    {
-        _webSockets = [NSMutableDictionary new];
-    }
-    if([_webSockets objectForKey:identifier]){
-        SRWebSocket *webSocket = [_webSockets objectForKey:identifier];
-        webSocket.delegate = nil;
-        [webSocket close];
-        
-    }
-    NSArray *protols;
-    if([protocol length]>0){
-       protols = [NSArray arrayWithObject:protocol];
-    }
-    SRWebSocket *webSocket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:url] protocols:protols];
-    webSocket.delegate = self;
-    [webSocket open];
-    webSocket.wx_Identifier = identifier;
-    webSocket.wx_WebSocketDelegate = delegate;
-    [_webSockets setObject:webSocket forKey:identifier];
-}
-
-- (void)send:(id)identifier data:(NSString *)data
-{
-    SRWebSocket *webSocket = [_webSockets objectForKey:identifier];
-    if(webSocket) {
-        [webSocket send:data];
-    }
-}
-
-- (void)close:(NSString *)identifier
-{
-    SRWebSocket *webSocket = [_webSockets objectForKey:identifier];
-    if(webSocket) {
-        [webSocket close];
-    }
-}
-
-- (void)close:(NSString *)identifier code:(NSInteger)code reason:(NSString *)reason
-{
-    SRWebSocket *webSocket = [_webSockets objectForKey:identifier];
-    if(webSocket) {
-        [webSocket closeWithCode:code reason:reason];
-    }
-}
-
-- (void)clear:(NSString *)identifier
-{
-    SRWebSocket *webSocket = [_webSockets objectForKey:identifier];
-    if(webSocket) {
-        webSocket.delegate = nil;
-        [webSocket close];
-        [_webSockets removeObjectForKey:identifier];
-    }
-}
-
-#pragma mark -SRWebSocketDelegate
-- (void)webSocketDidOpen:(SRWebSocket *)webSocket;
-{
-    if (webSocket.wx_WebSocketDelegate && [webSocket.wx_WebSocketDelegate respondsToSelector:@selector(didOpen)]) {
-        [webSocket.wx_WebSocketDelegate didOpen];
-    }
-}
-
-- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
-{
-    if (webSocket.wx_WebSocketDelegate && [webSocket.wx_WebSocketDelegate respondsToSelector:@selector(didFailWithError:)]) {
-        [webSocket.wx_WebSocketDelegate didFailWithError:error];
-    }
-}
-
-- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;
-{
-    if (webSocket.wx_WebSocketDelegate && [webSocket.wx_WebSocketDelegate respondsToSelector:@selector(didReceiveMessage:)]) {
-        [webSocket.wx_WebSocketDelegate didReceiveMessage:message];
-    }
-}
-
-- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;
-{
-    if (webSocket.wx_WebSocketDelegate && [webSocket.wx_WebSocketDelegate respondsToSelector:@selector(didCloseWithCode:reason:wasClean:)]) {
-        [webSocket.wx_WebSocketDelegate didCloseWithCode:code reason:reason wasClean:wasClean];
-    }
-}
-@end
diff --git a/ios/playground/WeexDemo/debug/DebugAnalyzer.h b/ios/playground/WeexDemo/debug/DebugAnalyzer.h
deleted file mode 100644
index 99838d0..0000000
--- a/ios/playground/WeexDemo/debug/DebugAnalyzer.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <WeexSDK/WeexSDK.h>
-
-
-@interface DebugAnalyzer :NSObject<WXAnalyzerProtocol>
-@end
diff --git a/ios/playground/WeexDemo/debug/DebugAnzlyzer.m b/ios/playground/WeexDemo/debug/DebugAnzlyzer.m
deleted file mode 100644
index 0a84bb8..0000000
--- a/ios/playground/WeexDemo/debug/DebugAnzlyzer.m
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <WeexSDK/WeexSDK.h>
-#import "DebugAnalyzer.h"
-
-
-@implementation DebugAnalyzer
-- (void)transfer:(NSDictionary *) value
-{
-    NSLog(@"DebugAnalyzer value : %@",value);
-}
-@end
diff --git a/ios/playground/WeexDemo/debug/WXATLoggerPlugin.h b/ios/playground/WeexDemo/debug/WXATLoggerPlugin.h
deleted file mode 100644
index 1bfbffa..0000000
--- a/ios/playground/WeexDemo/debug/WXATLoggerPlugin.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <ATSDK/ATPluginProtocol.h>
-
-@interface WXATLoggerPlugin : NSObject<ATPluginProtocol>
-
-@end
diff --git a/ios/playground/WeexDemo/debug/WXATLoggerPlugin.m b/ios/playground/WeexDemo/debug/WXATLoggerPlugin.m
deleted file mode 100644
index 66eaf81..0000000
--- a/ios/playground/WeexDemo/debug/WXATLoggerPlugin.m
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXATLoggerPlugin.h"
-#import <WeexSDK/WXSDKEngine.h>
-
-@implementation WXATLoggerPlugin
-
-- (void)pluginDidLoadWithArgs:(NSArray *)args
-{
-  
-}
-
-- (void)pluginWillOpenInContainer:(UIViewController *)container withArg:(NSArray *)args
-{
-    NSURL *URL = [NSURL URLWithString:@"http://127.0.0.1:8687/launchDebugger"];
-    NSURLRequest *request = [NSURLRequest requestWithURL:URL];
-    
-    NSURLSession *session = [NSURLSession sharedSession];
-    NSURLSessionDataTask *task = [session dataTaskWithRequest:request
-                                            completionHandler:
-                                  ^(NSData *data, NSURLResponse *response, NSError *error) {
-                                      // ...
-                                  }];
-    
-    [task resume];
-    
-    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-        [WXSDKEngine connectDebugServer:@"ws://127.0.0.1:8687/debugger/0/renderer"];
-    });
-}
-
-- (void)pluginWillClose
-{
-    
-}
-
-- (void)pluginDidUnload
-{
-    
-}
-
-- (CGRect)wantReactArea
-{
-    return CGRectZero;
-}
-
-
-@end
diff --git a/ios/playground/WeexDemo/debug/WXATViewHierarchyPlugin.h b/ios/playground/WeexDemo/debug/WXATViewHierarchyPlugin.h
deleted file mode 100644
index 0609e42..0000000
--- a/ios/playground/WeexDemo/debug/WXATViewHierarchyPlugin.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-//#import <Foundation/Foundation.h>
-//#import <ATSDK/ATPluginProtocol.h>
-//
-//@interface WXATViewHierarchyPlugin : NSObject<ATPluginProtocol>
-//
-//@end
diff --git a/ios/playground/WeexDemo/debug/WXATViewHierarchyPlugin.m b/ios/playground/WeexDemo/debug/WXATViewHierarchyPlugin.m
deleted file mode 100644
index 6c5fa27..0000000
--- a/ios/playground/WeexDemo/debug/WXATViewHierarchyPlugin.m
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-//#import "WXATViewHierarchyPlugin.h"
-//#import <WeexSDK/WXViewHierarchy.h>
-//
-//@implementation WXATViewHierarchyPlugin
-//{
-//    WXViewHierarchy *_hierarchy;
-//}
-//
-//- (void)pluginDidLoadWithArgs:(NSArray *)args
-//{
-//    _hierarchy = [[WXViewHierarchy alloc] init];
-//    _hierarchy.hidden = YES;
-//}
-//
-//- (void)pluginWillOpenInContainer:(UIViewController *)container withArg:(NSArray *)args
-//{
-//    [_hierarchy show];
-//}
-//
-//- (void)pluginWillClose
-//{
-//    [_hierarchy hide];
-//}
-//
-//- (void)pluginDidUnload
-//{
-//    _hierarchy = nil;
-//}
-//
-//- (CGRect)wantReactArea
-//{
-//    return CGRectZero;
-//}
-//
-//@end
diff --git a/ios/playground/WeexDemo/extend/component/WXSelectComponent.h b/ios/playground/WeexDemo/extend/component/WXSelectComponent.h
deleted file mode 100644
index a50bd5b..0000000
--- a/ios/playground/WeexDemo/extend/component/WXSelectComponent.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-#import <WeexSDK/WXComponent.h>
-
-@interface WXSelectComponent : WXComponent <UIPickerViewDataSource, UIPickerViewDelegate>
-
-@end
diff --git a/ios/playground/WeexDemo/extend/component/WXSelectComponent.m b/ios/playground/WeexDemo/extend/component/WXSelectComponent.m
deleted file mode 100644
index 20bb348..0000000
--- a/ios/playground/WeexDemo/extend/component/WXSelectComponent.m
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXSelectComponent.h"
-#import "WXUtility.h"
-#import "WXComponent+Events.h"
-
-@interface WXSelectComponent()
-
-@property (nonatomic, strong) UITapGestureRecognizer *tap;
-@property (nonatomic, strong) UIPickerView *pickerView;
-@property (nonatomic, strong) NSArray *options;
-@property (nonatomic, assign) NSInteger selectIndex;
-@property (nonatomic, assign) BOOL disabled;
-
-@end
-
-@implementation WXSelectComponent
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    if (self) {
-        _tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(popupPicker)];
-        _tap.delegate = self;
-        
-        if (attributes[@"options"]) {
-            _options = [attributes[@"options"] componentsSeparatedByString:@","];
-        }
-        if (attributes[@"selectIndex"]) {
-            _selectIndex = [attributes[@"selectIndex"] integerValue];
-        }
-        if (attributes[@"disabled"]) {
-            _disabled = [attributes[@"disabled"] boolValue];
-        }
-        
-        if (styles[@""]) {
-            // setting style when init
-        }
-        
-        UIWindow * window = [UIApplication sharedApplication].keyWindow;
-        CGSize windowSize = window.rootViewController.view.frame.size;
-        CGFloat pickerViewHeight = 200.0;
-        _pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, windowSize.width, pickerViewHeight)];
-        [_pickerView setBackgroundColor:[UIColor redColor]];
-        _pickerView.dataSource = self;
-        _pickerView.delegate = self;
-    }
-    
-    return self;
-}
-
-- (void)viewDidLoad
-{
-    [_pickerView selectRow:_selectIndex inComponent:0 animated:YES];
-    // show selected item
-    _pickerView.showsSelectionIndicator=YES;
-}
-
-- (void)viewWillUnload
-{
-}
-
-- (UIView *)loadView {
-    
-    return _pickerView;
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"options"]) {
-        _options = [attributes[@"options"] componentsSeparatedByString:@","];
-    }
-    if (attributes[@"selectIndex"]) {
-        _selectIndex = [attributes[@"selectIndex"] integerValue];
-    }
-    if (attributes[@"disabled"]) {
-        _disabled = [attributes[@"disabled"] boolValue];
-    }
-    [_pickerView reloadAllComponents];
-}
-
-- (void)updateStyles:(NSDictionary *)styles
-{
-    
-}
-
-#pragma mark - action
-- (void)popupPicker
-{
-    if (_disabled)
-        return;
-    
-    [self fireEvent:@"focus" params:nil];
-}
-
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
-{
-    if (gestureRecognizer == _tap)
-        return YES;
-    
-    if (otherGestureRecognizer == _tap)
-        return YES;
-    
-    return [super gestureRecognizer:gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer];
-}
-
-#pragma mark - pickerView delegate
-- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
-    return 1;
-}
-
-
-- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
-    return [_options count];
-}
-
-- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
-    
-    return self.calculatedFrame.size.width;
-}
-
-- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
-{
-    [self fireEvent:@"change" params:@{@"index":[NSNumber numberWithInteger:row],
-                                       @"value":[_options objectAtIndex:row]}];
-}
-
--(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
-{
-    return [_options objectAtIndex:row];
-}
-
-@end
diff --git a/ios/playground/WeexDemo/extend/handler/WXApmGeneratorImpl.h b/ios/playground/WeexDemo/extend/handler/WXApmGeneratorImpl.h
deleted file mode 100644
index c3255e5..0000000
--- a/ios/playground/WeexDemo/extend/handler/WXApmGeneratorImpl.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXApmProtocol.h"
-
-@interface WXApmGeneratorImpl : NSObject <WXApmGeneratorProtocol>
-
-@end
diff --git a/ios/playground/WeexDemo/extend/handler/WXApmGeneratorImpl.m b/ios/playground/WeexDemo/extend/handler/WXApmGeneratorImpl.m
deleted file mode 100644
index 64c8e25..0000000
--- a/ios/playground/WeexDemo/extend/handler/WXApmGeneratorImpl.m
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXApmGeneratorImpl.h"
-#import "WXApmImpl.h"
-
-@implementation WXApmGeneratorImpl
-
-- (id<WXApmProtocol>)gengratorApmInstance:(NSString *) type
-{
-    id<WXApmProtocol> instance = [[WXApmImpl alloc] init];
-    return instance;
-}
-
-@end
diff --git a/ios/playground/WeexDemo/extend/handler/WXApmImpl.h b/ios/playground/WeexDemo/extend/handler/WXApmImpl.h
deleted file mode 100644
index 5af8752..0000000
--- a/ios/playground/WeexDemo/extend/handler/WXApmImpl.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXApmProtocol.h"
-
-@interface WXApmImpl : NSObject <WXApmProtocol>
-
-@end
diff --git a/ios/playground/WeexDemo/extend/handler/WXApmImpl.m b/ios/playground/WeexDemo/extend/handler/WXApmImpl.m
deleted file mode 100644
index 214fb80..0000000
--- a/ios/playground/WeexDemo/extend/handler/WXApmImpl.m
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXApmImpl.h"
-#import "WXUtility.h"
-#import "WXComponentManager.h"
-
-@interface WXApmImpl()
-@property(nonatomic,strong) NSMutableDictionary<NSString*,NSNumber*>* stageMap;
-@property(nonatomic,strong) NSMutableDictionary<NSString*,id>* propertyMap;
-@property(nonatomic,strong) NSMutableDictionary<NSString*,NSNumber*>* statisticMap;
-@property(nonatomic,strong) NSMutableDictionary<NSString*,id>* eventMap;
-
-@end
-
-@implementation WXApmImpl
-
-- (instancetype)init
-{
-    self = [super init];
-    if (self) {
-        _stageMap = [[NSMutableDictionary alloc] init];
-        _propertyMap = [[NSMutableDictionary alloc] init];
-        _statisticMap = [[NSMutableDictionary alloc] init];
-        _eventMap = [[NSMutableDictionary alloc] init];
-    }
-    return self;
-}
-
-
-- (void) onStart:(NSString *)instanceId topic:(NSString *)topic
-{
-    
-}
-
-- (void) onEnd
-{
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnComponentThread(^{
-        [weakSelf _printApmInfo];
-    });
-    
-}
-
-- (void) onEvent:(NSString *)name withValue:(id)value
-{
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnComponentThread(^{
-        [weakSelf.eventMap setObject:value forKey:name];
-    });
-}
-
-- (void) onStage:(NSString *)name withValue:(long)timestamp
-{
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnComponentThread(^{
-         [weakSelf.stageMap setObject:[NSNumber numberWithLong:timestamp] forKey:name];
-    });
-}
-
-- (void) addProperty:(NSString *)name withValue:(id)value
-{
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnComponentThread(^{
-         [weakSelf.propertyMap setObject:value forKey:name];
-    });
-}
-
-- (void) addStatistic:(NSString *)name withValue:(double)value
-{
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnComponentThread(^{
-        [weakSelf.statisticMap setObject:[NSNumber numberWithDouble:value] forKey:name];
-    });
-}
-
-- (void) addBiz:(NSString *)bizID withValue:(NSDictionary *)properties
-{
-    
-}
-
-- (void) addBizAbTest:(NSString *)bizID withValue:(NSDictionary *)abTest
-{
-    
-}
-
-- (void) addBizStage:(NSString *)bizID withValue:(NSDictionary *)stage
-{
-    
-}
-
-- (void) onSubProcedureBegin:(NSString *)subProcedureName
-{
-    
-}
-
-- (void) onSubProcedureEndFailed:(NSString *)subProcedureName
-{
-    
-}
-
-- (void) onSubProcedureEndSucceed:(NSString *)subProcedureName
-{
-    
-}
-
-- (void)pauseApmRecord {
-    
-}
-
-
-- (void)resumeApmRecord {
-    
-}
-
-
-- (void) _printApmInfo
-{
-    NSDictionary* InfoMap = @{
-                              @"stage":self.stageMap,
-                              @"property":self.propertyMap,
-                              @"statistic":self.statisticMap,
-                              @"event":self.eventMap
-                              };
-    NSString* jsonStr = [WXUtility JSONString:InfoMap];
-    NSLog(@"wxApmForInstance: %@",jsonStr);
-    
-    NSNumber* stageRenderOrigin = self.stageMap[KEY_PAGE_STAGES_RENDER_ORGIGIN];
-    NSNumber* stageInteraction = self.stageMap[KEY_PAGE_STAGES_INTERACTION];
-    NSLog(@"wxApmForInstance interaction time: %lld", [stageInteraction longLongValue] - [stageRenderOrigin longLongValue]);
-}
-
-@end
diff --git a/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.h b/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.h
deleted file mode 100644
index cfc354c..0000000
--- a/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <WeexSDK/WXImgLoaderProtocol.h>
-
-@interface WXImgLoaderDefaultImpl : NSObject<WXImgLoaderProtocol, WXModuleProtocol>
-@end
diff --git a/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.m b/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.m
deleted file mode 100644
index 13836b3..0000000
--- a/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.m
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXImgLoaderDefaultImpl.h"
-#import <SDWebImage/UIImageView+WebCache.h>
-#import <WeexSDK/WXLog.h>
-#import <WeexSDK/WXSDKManager.h>
-
-#define MIN_IMAGE_WIDTH 36
-#define MIN_IMAGE_HEIGHT 36
-
-#if OS_OBJECT_USE_OBJC
-#undef  WXDispatchQueueRelease
-#undef  WXDispatchQueueSetterSementics
-#define WXDispatchQueueRelease(q)
-#define WXDispatchQueueSetterSementics strong
-#else
-#undef  WXDispatchQueueRelease
-#undef  WXDispatchQueueSetterSementics
-#define WXDispatchQueueRelease(q) (dispatch_release(q))
-#define WXDispatchQueueSetterSementics assign
-#endif
-
-@interface WXImgLoaderDefaultImpl()
-
-@property (WXDispatchQueueSetterSementics, nonatomic) dispatch_queue_t ioQueue;
-
-@end
-
-@implementation WXImgLoaderDefaultImpl
-
-#pragma mark -
-#pragma mark WXImgLoaderProtocol
-
-- (id<WXImageOperationProtocol>)downloadImageWithURL:(NSString *)url imageFrame:(CGRect)imageFrame userInfo:(NSDictionary *)userInfo completed:(void(^)(UIImage *image,  NSError *error, BOOL finished))completedBlock
-{
-    [self _recoredImgLoad:url options:userInfo];
-    if ([url hasPrefix:@"//"]) {
-        url = [@"http:" stringByAppendingString:url];
-    }
-    return (id<WXImageOperationProtocol>)[[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:url] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
-        
-    } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, finished);
-        }
-        [self _recoredFinish:imageURL error:error loadOptions:userInfo];
-    }];
-}
-
-- (void)setImageViewWithURL:(UIImageView *)imageView url:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(NSDictionary *)options progress:(void (^)(NSInteger, NSInteger))progressBlock completed:(void (^)(UIImage *, NSError *, WXImageLoaderCacheType, NSURL *))completedBlock
-{
-    [self _recoredImgLoad:url.absoluteString options:options];
-    SDWebImageOptions sdWebimageOption = SDWebImageRetryFailed;
-    if (options && options[@"sdWebimageOption"]) {
-        [options[@"sdWebimageOption"] intValue];
-    }
-    
-    [imageView sd_setImageWithURL:url placeholderImage:placeholder options:sdWebimageOption progress:^(NSInteger receivedSize, NSInteger expectedSize) {
-        if (progressBlock) {
-            progressBlock(receivedSize, expectedSize);
-        }
-    } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, (WXImageLoaderCacheType)cacheType, imageURL);
-        }
-        [self _recoredFinish:imageURL error:error loadOptions:options];
-    }];
-}
-
-- (void) _recoredImgLoad:(NSString *)url options:(NSDictionary *)options
-{
-    if (nil == url) {
-        return;
-    }
-    NSString* instanceId = [options objectForKey:@"instanceId"];
-    if (nil == instanceId) {
-        WXLogWarning(@"please set instanceId in userInfo,for url %@:",url);
-        return;
-    }
-    WXSDKInstance* instance =[WXSDKManager instanceForID:instanceId];
-    if (nil == instance) {
-        return;
-    }
-    [instance.apmInstance updateDiffStats:KEY_PAGE_STATS_IMG_LOAD_NUM withDiffValue:1];
-}
-
-- (void) _recoredFinish:(NSURL*)imgUrl error:(NSError*)error loadOptions:(NSDictionary*)options
-{
-    NSString* instanceId = [options objectForKey:@"instanceId"];
-    if (nil == instanceId) {
-        WXLogWarning(@"please set instanceId in userInfo,for url %@:",imgUrl.absoluteString);
-        return;
-    }
-    WXSDKInstance* instance =[WXSDKManager instanceForID:instanceId];
-    if (nil == instance) {
-        return;
-    }
-    bool loadSucceed = error == nil;
-    [instance.apmInstance actionImgLoadResult:loadSucceed withErrorCode:nil];
-}
-
-@end
diff --git a/ios/playground/WeexDemo/extend/module/WXEventModule.h b/ios/playground/WeexDemo/extend/module/WXEventModule.h
deleted file mode 100644
index 2fec4ec..0000000
--- a/ios/playground/WeexDemo/extend/module/WXEventModule.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <WeexSDK/WXEventModuleProtocol.h>
-#import <WeexSDK/WXModuleProtocol.h>
-
-@interface WXEventModule : NSObject <WXEventModuleProtocol, WXModuleProtocol>
-
-@end
diff --git a/ios/playground/WeexDemo/extend/module/WXEventModule.m b/ios/playground/WeexDemo/extend/module/WXEventModule.m
deleted file mode 100644
index 1cebd62..0000000
--- a/ios/playground/WeexDemo/extend/module/WXEventModule.m
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXEventModule.h"
-#import "WXDemoViewController.h"
-#import "WXScannerVC.h"
-#import <WeexSDK/WeexSDK.h>
-
-@implementation WXEventModule
-
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD(@selector(openURL:))
-
-WX_EXPORT_METHOD(@selector(fireNativeGlobalEvent:callback:))
-
-- (void)openURL:(NSString *)url
-{
-    NSString *newURL = url;
-    if ([url hasPrefix:@"//"]) {
-        newURL = [NSString stringWithFormat:@"http:%@", url];
-    } else if ([url hasPrefix:@"weex://go/scan"]){
-        WXScannerVC * sannerVC = [WXScannerVC new];
-        [[weexInstance.viewController navigationController] pushViewController:sannerVC animated:YES];
-        return;
-    } else if (![url hasPrefix:@"http"]) {
-        // relative path
-        newURL = [NSURL URLWithString:url relativeToURL:weexInstance.scriptURL].absoluteString;
-    }
-    
-    UIViewController *controller = [[WXDemoViewController alloc] init];
-    ((WXDemoViewController *)controller).url = [NSURL URLWithString:newURL];
-    
-    [[weexInstance.viewController navigationController] pushViewController:controller animated:YES];
-}
-
-
-/**
- a test method for macaca case, you can fire globalEvent when download finish、device shaked and so on.
- @param event event name
- */
-- (void)fireNativeGlobalEvent:(NSString *)event callback:(WXKeepAliveCallback)callback
-{
-    [weexInstance fireGlobalEvent:event params:@{@"eventParam":@"eventValue"}];
-    if (callback) {
-        NSDictionary * result = @{@"ok": @true};
-        callback(result,false);
-    }
-}
-
-@end
-
diff --git a/ios/playground/WeexDemo/extend/module/WXTitleBarModule.h b/ios/playground/WeexDemo/extend/module/WXTitleBarModule.h
deleted file mode 100644
index 057c618..0000000
--- a/ios/playground/WeexDemo/extend/module/WXTitleBarModule.h
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-//  WXTitleBarModule.h
-//  WeexDemo
-//
-//  Created by zifan.zx on 2018/1/15.
-//  Copyright © 2018年 taobao. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import <WeexSDK/WeexSDK.h>
-
-@interface WXTitleBarModule : NSObject<WXModuleProtocol>
-
-@end
diff --git a/ios/playground/WeexDemo/extend/module/WXTitleBarModule.m b/ios/playground/WeexDemo/extend/module/WXTitleBarModule.m
deleted file mode 100644
index 09c0182..0000000
--- a/ios/playground/WeexDemo/extend/module/WXTitleBarModule.m
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-//  WXTitleBarModule.m
-//  WeexDemo
-//
-//  Created by zifan.zx on 2018/1/15.
-//  Copyright © 2018年 taobao. All rights reserved.
-//
-
-#import "WXTitleBarModule.h"
-#import "WXDemoViewController.h"
-
-@implementation WXTitleBarModule
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD(@selector(setTitle:))
-WX_EXPORT_METHOD(@selector(showTitleBar:))
-WX_EXPORT_METHOD(@selector(setStyle:))
-
-- (void)setTitle:(NSString*)title
-{
-    if (title) {
-        [weexInstance.viewController.navigationItem setTitle:title];
-    }
-}
-
-- (void)setStyle:(NSDictionary*)styles
-{
-    if (styles[@"backgroundColor"]) {
-        weexInstance.viewController.navigationController.navigationBar.barTintColor = [WXConvert UIColor:styles[@"backgroundColor"]];
-    }
-    if (styles[@"foregroundColor"]) {
-        weexInstance.viewController.navigationController.navigationBar.tintColor = [WXConvert UIColor:styles[@"foregroundColor"]];
-        [weexInstance.viewController.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[WXConvert UIColor:styles[@"foregroundColor"]]}];
-    }
-}
-
-- (void)dealloc
-{
-    weexInstance.viewController.navigationController.navigationBar.tintColor = [UIColor whiteColor];
-}
-
-- (void)showTitleBar:(bool)show
-{
-    [weexInstance.viewController.navigationController setNavigationBarHidden:!show];
-    ((WXDemoViewController*)weexInstance.viewController).showNavigationBar = !show;
-}
-
-@end
diff --git a/ios/playground/WeexDemo/main.m b/ios/playground/WeexDemo/main.m
deleted file mode 100644
index f59fa14..0000000
--- a/ios/playground/WeexDemo/main.m
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-#import "AppDelegate.h"
-
-int main(int argc, char * argv[]) {
-    @autoreleasepool {
-        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
-    }
-}
diff --git a/ios/playground/WeexDemo/weex-icon.png b/ios/playground/WeexDemo/weex-icon.png
deleted file mode 100644
index 396b78f..0000000
Binary files a/ios/playground/WeexDemo/weex-icon.png and /dev/null differ
diff --git a/ios/playground/WeexDemoTests/Info.plist b/ios/playground/WeexDemoTests/Info.plist
deleted file mode 100644
index 57c21c9..0000000
--- a/ios/playground/WeexDemoTests/Info.plist
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>NSLocationWhenInUseUsageDescription</key>
-	<string>$(PRODUCT_NAME) will access your location</string>
-	<key>NSCameraUsageDescription</key>
-	<string>$(PRODUCT_NAME) will access your camera</string>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>en</string>
-	<key>CFBundleExecutable</key>
-	<string>$(EXECUTABLE_NAME)</string>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>$(PRODUCT_NAME)</string>
-	<key>CFBundlePackageType</key>
-	<string>BNDL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-</dict>
-</plist>
diff --git a/ios/playground/WeexDemoTests/WeexDemoTests.m b/ios/playground/WeexDemoTests/WeexDemoTests.m
deleted file mode 100644
index c143038..0000000
--- a/ios/playground/WeexDemoTests/WeexDemoTests.m
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <XCTest/XCTest.h>
-
-@interface WeexDemoTests : XCTestCase
-
-@end
-
-@implementation WeexDemoTests
-
-- (void)setUp {
-    [super setUp];
-    // Put setup code here. This method is called before the invocation of each test method in the class.
-}
-
-- (void)tearDown {
-    // Put teardown code here. This method is called after the invocation of each test method in the class.
-    [super tearDown];
-}
-
-- (void)testExample {
-    // This is an example of a functional test case.
-    // Use XCTAssert and related functions to verify your tests produce the correct results.
-}
-
-- (void)testPerformanceExample {
-    // This is an example of a performance test case.
-    [self measureBlock:^{
-        // Put the code you want to measure the time of here.
-    }];
-}
-
-@end
diff --git a/ios/playground/WeexUITestDemo-Info.plist b/ios/playground/WeexUITestDemo-Info.plist
deleted file mode 100644
index 42d0202..0000000
--- a/ios/playground/WeexUITestDemo-Info.plist
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>en</string>
-	<key>CFBundleExecutable</key>
-	<string>$(EXECUTABLE_NAME)</string>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>$(PRODUCT_NAME)</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>99.0</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>10000</string>
-	<key>LSRequiresIPhoneOS</key>
-	<true/>
-	<key>NSAppTransportSecurity</key>
-	<dict>
-		<key>NSAllowsArbitraryLoads</key>
-		<true/>
-	</dict>
-	<key>UILaunchStoryboardName</key>
-	<string>LaunchScreen</string>
-	<key>UIRequiredDeviceCapabilities</key>
-	<array>
-		<string>armv7</string>
-	</array>
-	<key>UIStatusBarStyle</key>
-	<string>UIStatusBarStyleLightContent</string>
-	<key>UISupportedInterfaceOrientations</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-	</array>
-	<key>UISupportedInterfaceOrientations~ipad</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationPortraitUpsideDown</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
-	<key>UIViewControllerBasedStatusBarAppearance</key>
-	<false/>
-</dict>
-</plist>
diff --git a/ios/playground/WeexUITestDemoUITests/Info.plist b/ios/playground/WeexUITestDemoUITests/Info.plist
deleted file mode 100644
index ba72822..0000000
--- a/ios/playground/WeexUITestDemoUITests/Info.plist
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>en</string>
-	<key>CFBundleExecutable</key>
-	<string>$(EXECUTABLE_NAME)</string>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>$(PRODUCT_NAME)</string>
-	<key>CFBundlePackageType</key>
-	<string>BNDL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-</dict>
-</plist>
diff --git a/ios/playground/WeexUITestDemoUITests/WeexUITestDemoUITests.m b/ios/playground/WeexUITestDemoUITests/WeexUITestDemoUITests.m
deleted file mode 100644
index cbeca46..0000000
--- a/ios/playground/WeexUITestDemoUITests/WeexUITestDemoUITests.m
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <XCTest/XCTest.h>
-
-@interface WeexUITestDemoUITests : XCTestCase
-
-@end
-
-@implementation WeexUITestDemoUITests
-
-- (void)setUp {
-    [super setUp];
-    
-    // Put setup code here. This method is called before the invocation of each test method in the class.
-    
-    // In UI tests it is usually best to stop immediately when a failure occurs.
-    self.continueAfterFailure = NO;
-    // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
-    [[[XCUIApplication alloc] init] launch];
-    
-    // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
-}
-
-- (void)tearDown {
-    // Put teardown code here. This method is called after the invocation of each test method in the class.
-    [super tearDown];
-}
-
-- (void)testExample {
-    // Use recording to get started writing UI tests.
-    // Use XCTAssert and related functions to verify your tests produce the correct results.
-}
-
-@end
diff --git a/ios/playground/bundlejs/about.weex.js b/ios/playground/bundlejs/about.weex.js
deleted file mode 100644
index c685047..0000000
--- a/ios/playground/bundlejs/about.weex.js
+++ /dev/null
@@ -1,3309 +0,0 @@
-// { "framework": "Vue" }
-"use weex:vue";
-
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId]) {
-/******/ 			return installedModules[moduleId].exports;
-/******/ 		}
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			i: moduleId,
-/******/ 			l: false,
-/******/ 			exports: {}
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.l = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// define getter function for harmony exports
-/******/ 	__webpack_require__.d = function(exports, name, getter) {
-/******/ 		if(!__webpack_require__.o(exports, name)) {
-/******/ 			Object.defineProperty(exports, name, {
-/******/ 				configurable: false,
-/******/ 				enumerable: true,
-/******/ 				get: getter
-/******/ 			});
-/******/ 		}
-/******/ 	};
-/******/
-/******/ 	// getDefaultExport function for compatibility with non-harmony modules
-/******/ 	__webpack_require__.n = function(module) {
-/******/ 		var getter = module && module.__esModule ?
-/******/ 			function getDefault() { return module['default']; } :
-/******/ 			function getModuleExports() { return module; };
-/******/ 		__webpack_require__.d(getter, 'a', getter);
-/******/ 		return getter;
-/******/ 	};
-/******/
-/******/ 	// Object.prototype.hasOwnProperty.call
-/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 38);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
-// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
-var global = module.exports = typeof window != 'undefined' && window.Math == Math
-  ? window : typeof self != 'undefined' && self.Math == Math ? self
-  // eslint-disable-next-line no-new-func
-  : Function('return this')();
-if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var anObject = __webpack_require__(10);
-var IE8_DOM_DEFINE = __webpack_require__(30);
-var toPrimitive = __webpack_require__(17);
-var dP = Object.defineProperty;
-
-exports.f = __webpack_require__(2) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
-  anObject(O);
-  P = toPrimitive(P, true);
-  anObject(Attributes);
-  if (IE8_DOM_DEFINE) try {
-    return dP(O, P, Attributes);
-  } catch (e) { /* empty */ }
-  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
-  if ('value' in Attributes) O[P] = Attributes.value;
-  return O;
-};
-
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// Thank's IE8 for his funny defineProperty
-module.exports = !__webpack_require__(11)(function () {
-  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
-});
-
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports) {
-
-var hasOwnProperty = {}.hasOwnProperty;
-module.exports = function (it, key) {
-  return hasOwnProperty.call(it, key);
-};
-
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports) {
-
-var core = module.exports = { version: '2.5.7' };
-if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var dP = __webpack_require__(1);
-var createDesc = __webpack_require__(12);
-module.exports = __webpack_require__(2) ? function (object, key, value) {
-  return dP.f(object, key, createDesc(1, value));
-} : function (object, key, value) {
-  object[key] = value;
-  return object;
-};
-
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// to indexed object, toObject with fallback for non-array-like ES3 strings
-var IObject = __webpack_require__(51);
-var defined = __webpack_require__(15);
-module.exports = function (it) {
-  return IObject(defined(it));
-};
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var store = __webpack_require__(21)('wks');
-var uid = __webpack_require__(13);
-var Symbol = __webpack_require__(0).Symbol;
-var USE_SYMBOL = typeof Symbol == 'function';
-
-var $exports = module.exports = function (name) {
-  return store[name] || (store[name] =
-    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
-};
-
-$exports.store = store;
-
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports) {
-
-module.exports = function (it) {
-  return typeof it === 'object' ? it !== null : typeof it === 'function';
-};
-
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports) {
-
-module.exports = true;
-
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var isObject = __webpack_require__(8);
-module.exports = function (it) {
-  if (!isObject(it)) throw TypeError(it + ' is not an object!');
-  return it;
-};
-
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports) {
-
-module.exports = function (exec) {
-  try {
-    return !!exec();
-  } catch (e) {
-    return true;
-  }
-};
-
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports) {
-
-module.exports = function (bitmap, value) {
-  return {
-    enumerable: !(bitmap & 1),
-    configurable: !(bitmap & 2),
-    writable: !(bitmap & 4),
-    value: value
-  };
-};
-
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports) {
-
-var id = 0;
-var px = Math.random();
-module.exports = function (key) {
-  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
-};
-
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports) {
-
-// 7.1.4 ToInteger
-var ceil = Math.ceil;
-var floor = Math.floor;
-module.exports = function (it) {
-  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
-};
-
-
-/***/ }),
-/* 15 */
-/***/ (function(module, exports) {
-
-// 7.2.1 RequireObjectCoercible(argument)
-module.exports = function (it) {
-  if (it == undefined) throw TypeError("Can't call method on  " + it);
-  return it;
-};
-
-
-/***/ }),
-/* 16 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var global = __webpack_require__(0);
-var core = __webpack_require__(4);
-var ctx = __webpack_require__(47);
-var hide = __webpack_require__(5);
-var has = __webpack_require__(3);
-var PROTOTYPE = 'prototype';
-
-var $export = function (type, name, source) {
-  var IS_FORCED = type & $export.F;
-  var IS_GLOBAL = type & $export.G;
-  var IS_STATIC = type & $export.S;
-  var IS_PROTO = type & $export.P;
-  var IS_BIND = type & $export.B;
-  var IS_WRAP = type & $export.W;
-  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
-  var expProto = exports[PROTOTYPE];
-  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];
-  var key, own, out;
-  if (IS_GLOBAL) source = name;
-  for (key in source) {
-    // contains in native
-    own = !IS_FORCED && target && target[key] !== undefined;
-    if (own && has(exports, key)) continue;
-    // export native or passed
-    out = own ? target[key] : source[key];
-    // prevent global pollution for namespaces
-    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
-    // bind timers to global for call from export context
-    : IS_BIND && own ? ctx(out, global)
-    // wrap global constructors for prevent change them in library
-    : IS_WRAP && target[key] == out ? (function (C) {
-      var F = function (a, b, c) {
-        if (this instanceof C) {
-          switch (arguments.length) {
-            case 0: return new C();
-            case 1: return new C(a);
-            case 2: return new C(a, b);
-          } return new C(a, b, c);
-        } return C.apply(this, arguments);
-      };
-      F[PROTOTYPE] = C[PROTOTYPE];
-      return F;
-    // make static versions for prototype methods
-    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
-    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
-    if (IS_PROTO) {
-      (exports.virtual || (exports.virtual = {}))[key] = out;
-      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
-      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
-    }
-  }
-};
-// type bitmap
-$export.F = 1;   // forced
-$export.G = 2;   // global
-$export.S = 4;   // static
-$export.P = 8;   // proto
-$export.B = 16;  // bind
-$export.W = 32;  // wrap
-$export.U = 64;  // safe
-$export.R = 128; // real proto method for `library`
-module.exports = $export;
-
-
-/***/ }),
-/* 17 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// 7.1.1 ToPrimitive(input [, PreferredType])
-var isObject = __webpack_require__(8);
-// instead of the ES6 spec version, we didn't implement @@toPrimitive case
-// and the second argument - flag - preferred type is a string
-module.exports = function (it, S) {
-  if (!isObject(it)) return it;
-  var fn, val;
-  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
-  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
-  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
-  throw TypeError("Can't convert object to primitive value");
-};
-
-
-/***/ }),
-/* 18 */
-/***/ (function(module, exports) {
-
-module.exports = {};
-
-
-/***/ }),
-/* 19 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// 19.1.2.14 / 15.2.3.14 Object.keys(O)
-var $keys = __webpack_require__(34);
-var enumBugKeys = __webpack_require__(22);
-
-module.exports = Object.keys || function keys(O) {
-  return $keys(O, enumBugKeys);
-};
-
-
-/***/ }),
-/* 20 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var shared = __webpack_require__(21)('keys');
-var uid = __webpack_require__(13);
-module.exports = function (key) {
-  return shared[key] || (shared[key] = uid(key));
-};
-
-
-/***/ }),
-/* 21 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var core = __webpack_require__(4);
-var global = __webpack_require__(0);
-var SHARED = '__core-js_shared__';
-var store = global[SHARED] || (global[SHARED] = {});
-
-(module.exports = function (key, value) {
-  return store[key] || (store[key] = value !== undefined ? value : {});
-})('versions', []).push({
-  version: core.version,
-  mode: __webpack_require__(9) ? 'pure' : 'global',
-  copyright: '© 2018 Denis Pushkarev (zloirock.ru)'
-});
-
-
-/***/ }),
-/* 22 */
-/***/ (function(module, exports) {
-
-// IE 8- don't enum bug keys
-module.exports = (
-  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
-).split(',');
-
-
-/***/ }),
-/* 23 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var def = __webpack_require__(1).f;
-var has = __webpack_require__(3);
-var TAG = __webpack_require__(7)('toStringTag');
-
-module.exports = function (it, tag, stat) {
-  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
-};
-
-
-/***/ }),
-/* 24 */
-/***/ (function(module, exports, __webpack_require__) {
-
-exports.f = __webpack_require__(7);
-
-
-/***/ }),
-/* 25 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var global = __webpack_require__(0);
-var core = __webpack_require__(4);
-var LIBRARY = __webpack_require__(9);
-var wksExt = __webpack_require__(24);
-var defineProperty = __webpack_require__(1).f;
-module.exports = function (name) {
-  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
-  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
-};
-
-
-/***/ }),
-/* 26 */
-/***/ (function(module, exports) {
-
-exports.f = {}.propertyIsEnumerable;
-
-
-/***/ }),
-/* 27 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.fetchNews = exports.fetchDoodle = exports.readAbout = exports.saveAbout = exports.fetchAbout = exports.readGuide = exports.saveGuide = exports.fetchGuide = exports.readExamples = exports.saveExamples = exports.fetchExamples = undefined;
-
-var _stringify = __webpack_require__(41);
-
-var _stringify2 = _interopRequireDefault(_stringify);
-
-var _typeof2 = __webpack_require__(28);
-
-var _typeof3 = _interopRequireDefault(_typeof2);
-
-exports.createLink = createLink;
-exports.createURL = createURL;
-exports.i18n = i18n;
-exports.parseLanguage = parseLanguage;
-exports.setLanguage = setLanguage;
-exports.clearStorageLanguage = clearStorageLanguage;
-exports.getStorageLanguage = getStorageLanguage;
-exports.getSystemLanguage = getSystemLanguage;
-exports.getLanguage = getLanguage;
-exports.jumpTo = jumpTo;
-exports.viewSource = viewSource;
-exports.setTitleBar = setTitleBar;
-exports.fetchData = fetchData;
-exports.saveData = saveData;
-exports.readData = readData;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var stream = weex.requireModule('stream');
-var storage = weex.requireModule('storage');
-var navigator = weex.requireModule('navigator');
-
-var encoder = typeof encodeURIComponent === 'function' ? encodeURIComponent : typeof encodeURI === 'function' ? encodeURI : function (x) {
-  return x;
-};
-
-function encodeParams(params) {
-  if (!params || (typeof params === 'undefined' ? 'undefined' : (0, _typeof3.default)(params)) !== 'object') {
-    return '';
-  }
-  var array = [];
-  for (var key in params) {
-    if (typeof params[key] === 'string') {
-      array.push(encoder(key) + '=' + encoder(params[key]));
-    }
-  }
-  return array.join('&');
-}
-
-function createLink(name) {
-  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-
-  var args = [];
-  for (var key in params) {
-    if (typeof params[key] === 'string') {
-      args.push(encoder(key) + '=' + encoder(params[key]));
-    }
-  }
-  if (WXEnvironment.platform === 'Web') {
-    args.unshift('page=' + name + '.web.js');
-    return '/?' + args.join('&');
-  }
-  var base = getBaseURL();
-  return '' + base + name + '.weex.js' + (args.length ? '?' + args.join('&') : '');
-}
-
-function createURL(hash, params) {
-  if (WXEnvironment.platform === 'Web') {
-    return 'http://dotwe.org/raw/htmlVue/' + hash;
-  }
-  var url = 'http://dotwe.org/raw/dist/' + hash + '.bundle.wx';
-  var paramString = encodeParams(params);
-  if (WXEnvironment.appName === 'TB') {
-    return url + '?_wx_tpl=' + url + '&' + paramString;
-  }
-  if (WXEnvironment.appName === 'WXSample') {
-    return url + '?' + paramString;
-  }
-  return url + '?wx_weex=true&' + paramString;
-}
-
-function getBaseURL() {
-  var bundleUrl = weex.config.bundleUrl;
-  var isAndroidAssets = bundleUrl.indexOf('your_current_IP') >= 0 || bundleUrl.indexOf('file://assets/') >= 0;
-  var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
-  if (isAndroidAssets) {
-    return 'file://assets/';
-  } else if (isiOSAssets) {
-    // file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
-    // file:///Users/{user}/Library/Developer/CoreSimulator/Devices/{id}/data/Containers/Bundle/Application/{id}/WeexDemo.app/
-    return bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
-  }
-  return '';
-}
-
-function i18n(text, language) {
-  if (typeof text === 'string') {
-    return text;
-  }
-  if (Object.prototype.toString.call(text) === '[object Object]') {
-    var lang = this && this.language || language || 'en';
-    return text[lang];
-  }
-}
-
-var supportedLanguageRE = /(en|zh)\_?\w*/i;
-function parseLanguage(language) {
-  var match = supportedLanguageRE.exec(language + '');
-  if (match && match[1]) {
-    return match[1];
-  }
-  return '';
-}
-
-function setLanguage(language) {
-  var lang = parseLanguage(language);
-  if (lang) {
-    storage.setItem('WEEX_PLAYGROUND_LANGUAGE', lang);
-  }
-}
-
-function clearStorageLanguage() {
-  storage.removeItem('WEEX_PLAYGROUND_LANGUAGE');
-}
-
-function getStorageLanguage(done) {
-  var fail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
-
-  if (!(typeof done === 'undefined' ? 'undefined' : (0, _typeof3.default)(done)) === 'function') {
-    return;
-  }
-  try {
-    storage.getItem('WEEX_PLAYGROUND_LANGUAGE', function (event) {
-      if (event.result === 'success') {
-        var lang = parseLanguage(event.data);
-        lang ? done(lang) : fail();
-      } else {
-        fail(event);
-      }
-    });
-  } catch (err) {
-    fail(err);
-  }
-}
-
-function getSystemLanguage(done) {
-  var fail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
-
-  if (!(typeof done === 'undefined' ? 'undefined' : (0, _typeof3.default)(done)) === 'function') {
-    return;
-  }
-  if (WXEnvironment.platform.toLowerCase() === 'web') {
-    var lang = parseLanguage(window.navigator.language);
-    lang ? done(lang) : fail();
-  } else {
-    try {
-      var locale = weex.requireModule('locale') || weex.requireModule('local');
-      var useSync = false;
-      var resSync = locale.getLanguage(function (language) {
-        var lang = parseLanguage(language);
-        if (lang) {
-          useSync || done(lang);
-        } else {
-          fail();
-        }
-      });
-      var langSync = parseLanguage(resSync);
-      if (langSync) {
-        useSync = true;
-        done(langSync);
-      } else {
-        fail();
-      }
-    } catch (e) {
-      fail(e);
-    }
-  }
-}
-
-var languageRE = /.+[\?\&]{1}language=([\d\w]+)[\?\&]?.*/i;
-function getLanguage() {
-  var done = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
-
-  var match = languageRE.exec(weex.config.bundleUrl || '');
-  var lang = parseLanguage(match && match[1]);
-  if (lang) {
-    done(lang);
-  } else {
-    getStorageLanguage(done, function () {
-      getSystemLanguage(done, function () {
-        done('en');
-      });
-    });
-  }
-}
-
-function jumpTo(url, title, lang) {
-  getLanguage(function (language) {
-    storage.setItem('CURRENT_DOCUMENT_URL', i18n(url, lang || language));
-    navigator.push({
-      url: createURL('bf0305c14b511b24a4e616f53926432b', { language: language, title: i18n(title, lang || language) })
-    });
-  });
-}
-
-function viewSource(hash) {
-  getLanguage(function (language) {
-    navigator.push({
-      url: createURL('f6ce29faf686eabc38b410bf4828fa5a', { hash: hash, language: language })
-    });
-  });
-}
-
-function setTitleBar(options) {
-  var language = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en';
-
-  if (Object.prototype.toString.apply(options) !== '[object Object]') {
-    return;
-  }
-  var titleBar = weex.requireModule('titleBar');
-  if (options.color || options.backgroundColor) {
-    try {
-      titleBar.setStyle({
-        foregroundColor: options.color || '#FFFFFF',
-        backgroundColor: options.backgroundColor || '#00B4FF'
-      });
-    } catch (e) {}
-  }
-  var title = i18n(options.title, language);
-  if (title) {
-    try {
-      titleBar.setTitle(title);
-    } catch (e) {}
-  }
-}
-
-var storageKeys = {
-  doodle: 'WEEX_PLAYGROUND_APP_DOODLE',
-  guide: 'WEEX_PLAYGROUND_APP_GUIDE',
-  examples: 'WEEX_PLAYGROUND_APP_EXAMPLES',
-  news: 'WEEX_PLAYGROUND_APP_NEWS',
-  about: 'WEEX_PLAYGROUND_APP_ABOUT'
-};
-function fetchData(name) {
-  var done = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
-  var fail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
-
-  try {
-    stream.fetch({
-      url: 'http://dotwe.org/query/weex-playground-app',
-      method: 'post',
-      headers: {
-        'Content-Type': 'application/x-www-form-urlencoded'
-      },
-      type: 'json',
-      body: 'name=' + name
-    }, function (res) {
-      if (res.ok && res.data && res.data.success) {
-        done(res.data);
-      } else {
-        fail(res);
-      }
-    });
-  } catch (err) {
-    fail(err);
-  }
-}
-function saveData(name, result) {
-  var key = storageKeys[name];
-  if (!key) return;
-  if (result && (typeof result === 'undefined' ? 'undefined' : (0, _typeof3.default)(result)) === 'object') {
-    result.timestamp = Date.now();
-    storage.setItem(key, (0, _stringify2.default)(result));
-  }
-}
-function readData(name) {
-  var done = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
-  var fail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
-
-  var key = storageKeys[name];
-  if (!key) return fail();
-  try {
-    storage.getItem(key, function (event) {
-      if (event.result === 'success') {
-        var result = JSON.parse(event.data);
-        if (result && Array.isArray(result[name])) {
-          return done(result[name]);
-        }
-      }
-      fail(event);
-    });
-  } catch (e) {
-    fail(e);
-  }
-}
-
-var fetchExamples = exports.fetchExamples = function fetchExamples() {
-  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
-    args[_key] = arguments[_key];
-  }
-
-  return fetchData.apply(undefined, ['examples'].concat(args));
-};
-var saveExamples = exports.saveExamples = function saveExamples() {
-  for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
-    args[_key2] = arguments[_key2];
-  }
-
-  return saveData.apply(undefined, ['examples'].concat(args));
-};
-var readExamples = exports.readExamples = function readExamples() {
-  for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
-    args[_key3] = arguments[_key3];
-  }
-
-  return readData.apply(undefined, ['examples'].concat(args));
-};
-
-var fetchGuide = exports.fetchGuide = function fetchGuide() {
-  for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
-    args[_key4] = arguments[_key4];
-  }
-
-  return fetchData.apply(undefined, ['guide'].concat(args));
-};
-var saveGuide = exports.saveGuide = function saveGuide() {
-  for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
-    args[_key5] = arguments[_key5];
-  }
-
-  return saveData.apply(undefined, ['guide'].concat(args));
-};
-var readGuide = exports.readGuide = function readGuide() {
-  for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
-    args[_key6] = arguments[_key6];
-  }
-
-  return readData.apply(undefined, ['guide'].concat(args));
-};
-
-var fetchAbout = exports.fetchAbout = function fetchAbout() {
-  for (var _len7 = arguments.length, args = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
-    args[_key7] = arguments[_key7];
-  }
-
-  return fetchData.apply(undefined, ['about'].concat(args));
-};
-var saveAbout = exports.saveAbout = function saveAbout() {
-  for (var _len8 = arguments.length, args = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
-    args[_key8] = arguments[_key8];
-  }
-
-  return saveData.apply(undefined, ['about'].concat(args));
-};
-var readAbout = exports.readAbout = function readAbout() {
-  for (var _len9 = arguments.length, args = Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
-    args[_key9] = arguments[_key9];
-  }
-
-  return readData.apply(undefined, ['about'].concat(args));
-};
-
-var fetchDoodle = exports.fetchDoodle = function fetchDoodle() {
-  for (var _len10 = arguments.length, args = Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
-    args[_key10] = arguments[_key10];
-  }
-
-  return fetchData.apply(undefined, ['doodle'].concat(args));
-};
-var fetchNews = exports.fetchNews = function fetchNews() {
-  for (var _len11 = arguments.length, args = Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
-    args[_key11] = arguments[_key11];
-  }
-
-  return fetchData.apply(undefined, ['news'].concat(args));
-};
-
-/***/ }),
-/* 28 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-exports.__esModule = true;
-
-var _iterator = __webpack_require__(43);
-
-var _iterator2 = _interopRequireDefault(_iterator);
-
-var _symbol = __webpack_require__(62);
-
-var _symbol2 = _interopRequireDefault(_symbol);
-
-var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
-  return typeof obj === "undefined" ? "undefined" : _typeof(obj);
-} : function (obj) {
-  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
-};
-
-/***/ }),
-/* 29 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var LIBRARY = __webpack_require__(9);
-var $export = __webpack_require__(16);
-var redefine = __webpack_require__(32);
-var hide = __webpack_require__(5);
-var Iterators = __webpack_require__(18);
-var $iterCreate = __webpack_require__(49);
-var setToStringTag = __webpack_require__(23);
-var getPrototypeOf = __webpack_require__(56);
-var ITERATOR = __webpack_require__(7)('iterator');
-var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
-var FF_ITERATOR = '@@iterator';
-var KEYS = 'keys';
-var VALUES = 'values';
-
-var returnThis = function () { return this; };
-
-module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
-  $iterCreate(Constructor, NAME, next);
-  var getMethod = function (kind) {
-    if (!BUGGY && kind in proto) return proto[kind];
-    switch (kind) {
-      case KEYS: return function keys() { return new Constructor(this, kind); };
-      case VALUES: return function values() { return new Constructor(this, kind); };
-    } return function entries() { return new Constructor(this, kind); };
-  };
-  var TAG = NAME + ' Iterator';
-  var DEF_VALUES = DEFAULT == VALUES;
-  var VALUES_BUG = false;
-  var proto = Base.prototype;
-  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
-  var $default = $native || getMethod(DEFAULT);
-  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
-  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
-  var methods, key, IteratorPrototype;
-  // Fix native
-  if ($anyNative) {
-    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
-    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
-      // Set @@toStringTag to native iterators
-      setToStringTag(IteratorPrototype, TAG, true);
-      // fix for some old engines
-      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
-    }
-  }
-  // fix Array#{values, @@iterator}.name in V8 / FF
-  if (DEF_VALUES && $native && $native.name !== VALUES) {
-    VALUES_BUG = true;
-    $default = function values() { return $native.call(this); };
-  }
-  // Define iterator
-  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
-    hide(proto, ITERATOR, $default);
-  }
-  // Plug for library
-  Iterators[NAME] = $default;
-  Iterators[TAG] = returnThis;
-  if (DEFAULT) {
-    methods = {
-      values: DEF_VALUES ? $default : getMethod(VALUES),
-      keys: IS_SET ? $default : getMethod(KEYS),
-      entries: $entries
-    };
-    if (FORCED) for (key in methods) {
-      if (!(key in proto)) redefine(proto, key, methods[key]);
-    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
-  }
-  return methods;
-};
-
-
-/***/ }),
-/* 30 */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = !__webpack_require__(2) && !__webpack_require__(11)(function () {
-  return Object.defineProperty(__webpack_require__(31)('div'), 'a', { get: function () { return 7; } }).a != 7;
-});
-
-
-/***/ }),
-/* 31 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var isObject = __webpack_require__(8);
-var document = __webpack_require__(0).document;
-// typeof document.createElement is 'object' in old IE
-var is = isObject(document) && isObject(document.createElement);
-module.exports = function (it) {
-  return is ? document.createElement(it) : {};
-};
-
-
-/***/ }),
-/* 32 */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = __webpack_require__(5);
-
-
-/***/ }),
-/* 33 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
-var anObject = __webpack_require__(10);
-var dPs = __webpack_require__(50);
-var enumBugKeys = __webpack_require__(22);
-var IE_PROTO = __webpack_require__(20)('IE_PROTO');
-var Empty = function () { /* empty */ };
-var PROTOTYPE = 'prototype';
-
-// Create object with fake `null` prototype: use iframe Object with cleared prototype
-var createDict = function () {
-  // Thrash, waste and sodomy: IE GC bug
-  var iframe = __webpack_require__(31)('iframe');
-  var i = enumBugKeys.length;
-  var lt = '<';
-  var gt = '>';
-  var iframeDocument;
-  iframe.style.display = 'none';
-  __webpack_require__(55).appendChild(iframe);
-  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
-  // createDict = iframe.contentWindow.Object;
-  // html.removeChild(iframe);
-  iframeDocument = iframe.contentWindow.document;
-  iframeDocument.open();
-  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
-  iframeDocument.close();
-  createDict = iframeDocument.F;
-  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
-  return createDict();
-};
-
-module.exports = Object.create || function create(O, Properties) {
-  var result;
-  if (O !== null) {
-    Empty[PROTOTYPE] = anObject(O);
-    result = new Empty();
-    Empty[PROTOTYPE] = null;
-    // add "__proto__" for Object.getPrototypeOf polyfill
-    result[IE_PROTO] = O;
-  } else result = createDict();
-  return Properties === undefined ? result : dPs(result, Properties);
-};
-
-
-/***/ }),
-/* 34 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var has = __webpack_require__(3);
-var toIObject = __webpack_require__(6);
-var arrayIndexOf = __webpack_require__(52)(false);
-var IE_PROTO = __webpack_require__(20)('IE_PROTO');
-
-module.exports = function (object, names) {
-  var O = toIObject(object);
-  var i = 0;
-  var result = [];
-  var key;
-  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
-  // Don't enum bug & hidden keys
-  while (names.length > i) if (has(O, key = names[i++])) {
-    ~arrayIndexOf(result, key) || result.push(key);
-  }
-  return result;
-};
-
-
-/***/ }),
-/* 35 */
-/***/ (function(module, exports) {
-
-var toString = {}.toString;
-
-module.exports = function (it) {
-  return toString.call(it).slice(8, -1);
-};
-
-
-/***/ }),
-/* 36 */
-/***/ (function(module, exports) {
-
-exports.f = Object.getOwnPropertySymbols;
-
-
-/***/ }),
-/* 37 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
-var $keys = __webpack_require__(34);
-var hiddenKeys = __webpack_require__(22).concat('length', 'prototype');
-
-exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
-  return $keys(O, hiddenKeys);
-};
-
-
-/***/ }),
-/* 38 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-__webpack_require__(39);
-
-var _About = __webpack_require__(73);
-
-var _About2 = _interopRequireDefault(_About);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-// show title bar
-try {
-  var titleBar = weex.requireModule('titleBar');
-  titleBar.showTitleBar(true);
-} catch (e) {}
-
-_About2.default.el = '#root';
-new Vue(_About2.default);
-
-/***/ }),
-/* 39 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var _mixin = __webpack_require__(40);
-
-var _mixin2 = _interopRequireDefault(_mixin);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-// use shared mixins
-Vue.mixin(_mixin2.default);
-
-/***/ }),
-/* 40 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _index = __webpack_require__(27);
-
-var utils = _interopRequireWildcard(_index);
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
-
-var storage = weex.requireModule('storage');
-
-exports.default = {
-  filters: {
-    i18n: utils.i18n,
-    url: utils.createURL,
-    link: utils.createLink
-  },
-  methods: {
-    createLink: utils.createLink,
-    createURL: utils.createURL,
-    i18n: utils.i18n,
-    getLanguage: utils.getLanguage,
-    fetchData: utils.fetchData,
-    saveData: utils.saveData,
-    readData: utils.readData,
-    jumpTo: utils.jumpTo
-  },
-  created: function created() {
-    var _this = this;
-
-    // get and set language
-    utils.getLanguage(function (language) {
-      _this.language = language;
-      utils.setTitleBar(_this.navigationBarOptions, language);
-    });
-
-    // listen to the language change event
-    var channel = new BroadcastChannel('language');
-    channel.onmessage = function (event) {
-      if (event.data && event.data.language) {
-        _this.language = event.data.language;
-      }
-    };
-  },
-  beforeDestroy: function beforeDestroy() {
-    storage.removeItem('CURRENT_DOCUMENT_URL');
-    storage.removeItem('CURRENT_SOURCE_HASH');
-  }
-};
-
-/***/ }),
-/* 41 */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = { "default": __webpack_require__(42), __esModule: true };
-
-/***/ }),
-/* 42 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var core = __webpack_require__(4);
-var $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });
-module.exports = function stringify(it) { // eslint-disable-line no-unused-vars
-  return $JSON.stringify.apply($JSON, arguments);
-};
-
-
-/***/ }),
-/* 43 */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = { "default": __webpack_require__(44), __esModule: true };
-
-/***/ }),
-/* 44 */
-/***/ (function(module, exports, __webpack_require__) {
-
-__webpack_require__(45);
-__webpack_require__(58);
-module.exports = __webpack_require__(24).f('iterator');
-
-
-/***/ }),
-/* 45 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var $at = __webpack_require__(46)(true);
-
-// 21.1.3.27 String.prototype[@@iterator]()
-__webpack_require__(29)(String, 'String', function (iterated) {
-  this._t = String(iterated); // target
-  this._i = 0;                // next index
-// 21.1.5.2.1 %StringIteratorPrototype%.next()
-}, function () {
-  var O = this._t;
-  var index = this._i;
-  var point;
-  if (index >= O.length) return { value: undefined, done: true };
-  point = $at(O, index);
-  this._i += point.length;
-  return { value: point, done: false };
-});
-
-
-/***/ }),
-/* 46 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var toInteger = __webpack_require__(14);
-var defined = __webpack_require__(15);
-// true  -> String#at
-// false -> String#codePointAt
-module.exports = function (TO_STRING) {
-  return function (that, pos) {
-    var s = String(defined(that));
-    var i = toInteger(pos);
-    var l = s.length;
-    var a, b;
-    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
-    a = s.charCodeAt(i);
-    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
-      ? TO_STRING ? s.charAt(i) : a
-      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
-  };
-};
-
-
-/***/ }),
-/* 47 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// optional / simple context binding
-var aFunction = __webpack_require__(48);
-module.exports = function (fn, that, length) {
-  aFunction(fn);
-  if (that === undefined) return fn;
-  switch (length) {
-    case 1: return function (a) {
-      return fn.call(that, a);
-    };
-    case 2: return function (a, b) {
-      return fn.call(that, a, b);
-    };
-    case 3: return function (a, b, c) {
-      return fn.call(that, a, b, c);
-    };
-  }
-  return function (/* ...args */) {
-    return fn.apply(that, arguments);
-  };
-};
-
-
-/***/ }),
-/* 48 */
-/***/ (function(module, exports) {
-
-module.exports = function (it) {
-  if (typeof it != 'function') throw TypeError(it + ' is not a function!');
-  return it;
-};
-
-
-/***/ }),
-/* 49 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var create = __webpack_require__(33);
-var descriptor = __webpack_require__(12);
-var setToStringTag = __webpack_require__(23);
-var IteratorPrototype = {};
-
-// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
-__webpack_require__(5)(IteratorPrototype, __webpack_require__(7)('iterator'), function () { return this; });
-
-module.exports = function (Constructor, NAME, next) {
-  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
-  setToStringTag(Constructor, NAME + ' Iterator');
-};
-
-
-/***/ }),
-/* 50 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var dP = __webpack_require__(1);
-var anObject = __webpack_require__(10);
-var getKeys = __webpack_require__(19);
-
-module.exports = __webpack_require__(2) ? Object.defineProperties : function defineProperties(O, Properties) {
-  anObject(O);
-  var keys = getKeys(Properties);
-  var length = keys.length;
-  var i = 0;
-  var P;
-  while (length > i) dP.f(O, P = keys[i++], Properties[P]);
-  return O;
-};
-
-
-/***/ }),
-/* 51 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// fallback for non-array-like ES3 and non-enumerable old V8 strings
-var cof = __webpack_require__(35);
-// eslint-disable-next-line no-prototype-builtins
-module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
-  return cof(it) == 'String' ? it.split('') : Object(it);
-};
-
-
-/***/ }),
-/* 52 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// false -> Array#indexOf
-// true  -> Array#includes
-var toIObject = __webpack_require__(6);
-var toLength = __webpack_require__(53);
-var toAbsoluteIndex = __webpack_require__(54);
-module.exports = function (IS_INCLUDES) {
-  return function ($this, el, fromIndex) {
-    var O = toIObject($this);
-    var length = toLength(O.length);
-    var index = toAbsoluteIndex(fromIndex, length);
-    var value;
-    // Array#includes uses SameValueZero equality algorithm
-    // eslint-disable-next-line no-self-compare
-    if (IS_INCLUDES && el != el) while (length > index) {
-      value = O[index++];
-      // eslint-disable-next-line no-self-compare
-      if (value != value) return true;
-    // Array#indexOf ignores holes, Array#includes - not
-    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
-      if (O[index] === el) return IS_INCLUDES || index || 0;
-    } return !IS_INCLUDES && -1;
-  };
-};
-
-
-/***/ }),
-/* 53 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// 7.1.15 ToLength
-var toInteger = __webpack_require__(14);
-var min = Math.min;
-module.exports = function (it) {
-  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
-};
-
-
-/***/ }),
-/* 54 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var toInteger = __webpack_require__(14);
-var max = Math.max;
-var min = Math.min;
-module.exports = function (index, length) {
-  index = toInteger(index);
-  return index < 0 ? max(index + length, 0) : min(index, length);
-};
-
-
-/***/ }),
-/* 55 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var document = __webpack_require__(0).document;
-module.exports = document && document.documentElement;
-
-
-/***/ }),
-/* 56 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
-var has = __webpack_require__(3);
-var toObject = __webpack_require__(57);
-var IE_PROTO = __webpack_require__(20)('IE_PROTO');
-var ObjectProto = Object.prototype;
-
-module.exports = Object.getPrototypeOf || function (O) {
-  O = toObject(O);
-  if (has(O, IE_PROTO)) return O[IE_PROTO];
-  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
-    return O.constructor.prototype;
-  } return O instanceof Object ? ObjectProto : null;
-};
-
-
-/***/ }),
-/* 57 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// 7.1.13 ToObject(argument)
-var defined = __webpack_require__(15);
-module.exports = function (it) {
-  return Object(defined(it));
-};
-
-
-/***/ }),
-/* 58 */
-/***/ (function(module, exports, __webpack_require__) {
-
-__webpack_require__(59);
-var global = __webpack_require__(0);
-var hide = __webpack_require__(5);
-var Iterators = __webpack_require__(18);
-var TO_STRING_TAG = __webpack_require__(7)('toStringTag');
-
-var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +
-  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +
-  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +
-  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +
-  'TextTrackList,TouchList').split(',');
-
-for (var i = 0; i < DOMIterables.length; i++) {
-  var NAME = DOMIterables[i];
-  var Collection = global[NAME];
-  var proto = Collection && Collection.prototype;
-  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
-  Iterators[NAME] = Iterators.Array;
-}
-
-
-/***/ }),
-/* 59 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var addToUnscopables = __webpack_require__(60);
-var step = __webpack_require__(61);
-var Iterators = __webpack_require__(18);
-var toIObject = __webpack_require__(6);
-
-// 22.1.3.4 Array.prototype.entries()
-// 22.1.3.13 Array.prototype.keys()
-// 22.1.3.29 Array.prototype.values()
-// 22.1.3.30 Array.prototype[@@iterator]()
-module.exports = __webpack_require__(29)(Array, 'Array', function (iterated, kind) {
-  this._t = toIObject(iterated); // target
-  this._i = 0;                   // next index
-  this._k = kind;                // kind
-// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
-}, function () {
-  var O = this._t;
-  var kind = this._k;
-  var index = this._i++;
-  if (!O || index >= O.length) {
-    this._t = undefined;
-    return step(1);
-  }
-  if (kind == 'keys') return step(0, index);
-  if (kind == 'values') return step(0, O[index]);
-  return step(0, [index, O[index]]);
-}, 'values');
-
-// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
-Iterators.Arguments = Iterators.Array;
-
-addToUnscopables('keys');
-addToUnscopables('values');
-addToUnscopables('entries');
-
-
-/***/ }),
-/* 60 */
-/***/ (function(module, exports) {
-
-module.exports = function () { /* empty */ };
-
-
-/***/ }),
-/* 61 */
-/***/ (function(module, exports) {
-
-module.exports = function (done, value) {
-  return { value: value, done: !!done };
-};
-
-
-/***/ }),
-/* 62 */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = { "default": __webpack_require__(63), __esModule: true };
-
-/***/ }),
-/* 63 */
-/***/ (function(module, exports, __webpack_require__) {
-
-__webpack_require__(64);
-__webpack_require__(70);
-__webpack_require__(71);
-__webpack_require__(72);
-module.exports = __webpack_require__(4).Symbol;
-
-
-/***/ }),
-/* 64 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-// ECMAScript 6 symbols shim
-var global = __webpack_require__(0);
-var has = __webpack_require__(3);
-var DESCRIPTORS = __webpack_require__(2);
-var $export = __webpack_require__(16);
-var redefine = __webpack_require__(32);
-var META = __webpack_require__(65).KEY;
-var $fails = __webpack_require__(11);
-var shared = __webpack_require__(21);
-var setToStringTag = __webpack_require__(23);
-var uid = __webpack_require__(13);
-var wks = __webpack_require__(7);
-var wksExt = __webpack_require__(24);
-var wksDefine = __webpack_require__(25);
-var enumKeys = __webpack_require__(66);
-var isArray = __webpack_require__(67);
-var anObject = __webpack_require__(10);
-var isObject = __webpack_require__(8);
-var toIObject = __webpack_require__(6);
-var toPrimitive = __webpack_require__(17);
-var createDesc = __webpack_require__(12);
-var _create = __webpack_require__(33);
-var gOPNExt = __webpack_require__(68);
-var $GOPD = __webpack_require__(69);
-var $DP = __webpack_require__(1);
-var $keys = __webpack_require__(19);
-var gOPD = $GOPD.f;
-var dP = $DP.f;
-var gOPN = gOPNExt.f;
-var $Symbol = global.Symbol;
-var $JSON = global.JSON;
-var _stringify = $JSON && $JSON.stringify;
-var PROTOTYPE = 'prototype';
-var HIDDEN = wks('_hidden');
-var TO_PRIMITIVE = wks('toPrimitive');
-var isEnum = {}.propertyIsEnumerable;
-var SymbolRegistry = shared('symbol-registry');
-var AllSymbols = shared('symbols');
-var OPSymbols = shared('op-symbols');
-var ObjectProto = Object[PROTOTYPE];
-var USE_NATIVE = typeof $Symbol == 'function';
-var QObject = global.QObject;
-// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
-var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
-
-// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
-var setSymbolDesc = DESCRIPTORS && $fails(function () {
-  return _create(dP({}, 'a', {
-    get: function () { return dP(this, 'a', { value: 7 }).a; }
-  })).a != 7;
-}) ? function (it, key, D) {
-  var protoDesc = gOPD(ObjectProto, key);
-  if (protoDesc) delete ObjectProto[key];
-  dP(it, key, D);
-  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);
-} : dP;
-
-var wrap = function (tag) {
-  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
-  sym._k = tag;
-  return sym;
-};
-
-var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {
-  return typeof it == 'symbol';
-} : function (it) {
-  return it instanceof $Symbol;
-};
-
-var $defineProperty = function defineProperty(it, key, D) {
-  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
-  anObject(it);
-  key = toPrimitive(key, true);
-  anObject(D);
-  if (has(AllSymbols, key)) {
-    if (!D.enumerable) {
-      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));
-      it[HIDDEN][key] = true;
-    } else {
-      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
-      D = _create(D, { enumerable: createDesc(0, false) });
-    } return setSymbolDesc(it, key, D);
-  } return dP(it, key, D);
-};
-var $defineProperties = function defineProperties(it, P) {
-  anObject(it);
-  var keys = enumKeys(P = toIObject(P));
-  var i = 0;
-  var l = keys.length;
-  var key;
-  while (l > i) $defineProperty(it, key = keys[i++], P[key]);
-  return it;
-};
-var $create = function create(it, P) {
-  return P === undefined ? _create(it) : $defineProperties(_create(it), P);
-};
-var $propertyIsEnumerable = function propertyIsEnumerable(key) {
-  var E = isEnum.call(this, key = toPrimitive(key, true));
-  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
-  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
-};
-var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
-  it = toIObject(it);
-  key = toPrimitive(key, true);
-  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;
-  var D = gOPD(it, key);
-  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
-  return D;
-};
-var $getOwnPropertyNames = function getOwnPropertyNames(it) {
-  var names = gOPN(toIObject(it));
-  var result = [];
-  var i = 0;
-  var key;
-  while (names.length > i) {
-    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
-  } return result;
-};
-var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
-  var IS_OP = it === ObjectProto;
-  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
-  var result = [];
-  var i = 0;
-  var key;
-  while (names.length > i) {
-    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);
-  } return result;
-};
-
-// 19.4.1.1 Symbol([description])
-if (!USE_NATIVE) {
-  $Symbol = function Symbol() {
-    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
-    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
-    var $set = function (value) {
-      if (this === ObjectProto) $set.call(OPSymbols, value);
-      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
-      setSymbolDesc(this, tag, createDesc(1, value));
-    };
-    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });
-    return wrap(tag);
-  };
-  redefine($Symbol[PROTOTYPE], 'toString', function toString() {
-    return this._k;
-  });
-
-  $GOPD.f = $getOwnPropertyDescriptor;
-  $DP.f = $defineProperty;
-  __webpack_require__(37).f = gOPNExt.f = $getOwnPropertyNames;
-  __webpack_require__(26).f = $propertyIsEnumerable;
-  __webpack_require__(36).f = $getOwnPropertySymbols;
-
-  if (DESCRIPTORS && !__webpack_require__(9)) {
-    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
-  }
-
-  wksExt.f = function (name) {
-    return wrap(wks(name));
-  };
-}
-
-$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });
-
-for (var es6Symbols = (
-  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
-  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
-).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);
-
-for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);
-
-$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
-  // 19.4.2.1 Symbol.for(key)
-  'for': function (key) {
-    return has(SymbolRegistry, key += '')
-      ? SymbolRegistry[key]
-      : SymbolRegistry[key] = $Symbol(key);
-  },
-  // 19.4.2.5 Symbol.keyFor(sym)
-  keyFor: function keyFor(sym) {
-    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');
-    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;
-  },
-  useSetter: function () { setter = true; },
-  useSimple: function () { setter = false; }
-});
-
-$export($export.S + $export.F * !USE_NATIVE, 'Object', {
-  // 19.1.2.2 Object.create(O [, Properties])
-  create: $create,
-  // 19.1.2.4 Object.defineProperty(O, P, Attributes)
-  defineProperty: $defineProperty,
-  // 19.1.2.3 Object.defineProperties(O, Properties)
-  defineProperties: $defineProperties,
-  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
-  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
-  // 19.1.2.7 Object.getOwnPropertyNames(O)
-  getOwnPropertyNames: $getOwnPropertyNames,
-  // 19.1.2.8 Object.getOwnPropertySymbols(O)
-  getOwnPropertySymbols: $getOwnPropertySymbols
-});
-
-// 24.3.2 JSON.stringify(value [, replacer [, space]])
-$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {
-  var S = $Symbol();
-  // MS Edge converts symbol values to JSON as {}
-  // WebKit converts symbol values to JSON as null
-  // V8 throws on boxed symbols
-  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';
-})), 'JSON', {
-  stringify: function stringify(it) {
-    var args = [it];
-    var i = 1;
-    var replacer, $replacer;
-    while (arguments.length > i) args.push(arguments[i++]);
-    $replacer = replacer = args[1];
-    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
-    if (!isArray(replacer)) replacer = function (key, value) {
-      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
-      if (!isSymbol(value)) return value;
-    };
-    args[1] = replacer;
-    return _stringify.apply($JSON, args);
-  }
-});
-
-// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
-$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(5)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
-// 19.4.3.5 Symbol.prototype[@@toStringTag]
-setToStringTag($Symbol, 'Symbol');
-// 20.2.1.9 Math[@@toStringTag]
-setToStringTag(Math, 'Math', true);
-// 24.3.3 JSON[@@toStringTag]
-setToStringTag(global.JSON, 'JSON', true);
-
-
-/***/ }),
-/* 65 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var META = __webpack_require__(13)('meta');
-var isObject = __webpack_require__(8);
-var has = __webpack_require__(3);
-var setDesc = __webpack_require__(1).f;
-var id = 0;
-var isExtensible = Object.isExtensible || function () {
-  return true;
-};
-var FREEZE = !__webpack_require__(11)(function () {
-  return isExtensible(Object.preventExtensions({}));
-});
-var setMeta = function (it) {
-  setDesc(it, META, { value: {
-    i: 'O' + ++id, // object ID
-    w: {}          // weak collections IDs
-  } });
-};
-var fastKey = function (it, create) {
-  // return primitive with prefix
-  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
-  if (!has(it, META)) {
-    // can't set metadata to uncaught frozen object
-    if (!isExtensible(it)) return 'F';
-    // not necessary to add metadata
-    if (!create) return 'E';
-    // add missing metadata
-    setMeta(it);
-  // return object ID
-  } return it[META].i;
-};
-var getWeak = function (it, create) {
-  if (!has(it, META)) {
-    // can't set metadata to uncaught frozen object
-    if (!isExtensible(it)) return true;
-    // not necessary to add metadata
-    if (!create) return false;
-    // add missing metadata
-    setMeta(it);
-  // return hash weak collections IDs
-  } return it[META].w;
-};
-// add metadata on freeze-family methods calling
-var onFreeze = function (it) {
-  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
-  return it;
-};
-var meta = module.exports = {
-  KEY: META,
-  NEED: false,
-  fastKey: fastKey,
-  getWeak: getWeak,
-  onFreeze: onFreeze
-};
-
-
-/***/ }),
-/* 66 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// all enumerable object keys, includes symbols
-var getKeys = __webpack_require__(19);
-var gOPS = __webpack_require__(36);
-var pIE = __webpack_require__(26);
-module.exports = function (it) {
-  var result = getKeys(it);
-  var getSymbols = gOPS.f;
-  if (getSymbols) {
-    var symbols = getSymbols(it);
-    var isEnum = pIE.f;
-    var i = 0;
-    var key;
-    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
-  } return result;
-};
-
-
-/***/ }),
-/* 67 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// 7.2.2 IsArray(argument)
-var cof = __webpack_require__(35);
-module.exports = Array.isArray || function isArray(arg) {
-  return cof(arg) == 'Array';
-};
-
-
-/***/ }),
-/* 68 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
-var toIObject = __webpack_require__(6);
-var gOPN = __webpack_require__(37).f;
-var toString = {}.toString;
-
-var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
-  ? Object.getOwnPropertyNames(window) : [];
-
-var getWindowNames = function (it) {
-  try {
-    return gOPN(it);
-  } catch (e) {
-    return windowNames.slice();
-  }
-};
-
-module.exports.f = function getOwnPropertyNames(it) {
-  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
-};
-
-
-/***/ }),
-/* 69 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var pIE = __webpack_require__(26);
-var createDesc = __webpack_require__(12);
-var toIObject = __webpack_require__(6);
-var toPrimitive = __webpack_require__(17);
-var has = __webpack_require__(3);
-var IE8_DOM_DEFINE = __webpack_require__(30);
-var gOPD = Object.getOwnPropertyDescriptor;
-
-exports.f = __webpack_require__(2) ? gOPD : function getOwnPropertyDescriptor(O, P) {
-  O = toIObject(O);
-  P = toPrimitive(P, true);
-  if (IE8_DOM_DEFINE) try {
-    return gOPD(O, P);
-  } catch (e) { /* empty */ }
-  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
-};
-
-
-/***/ }),
-/* 70 */
-/***/ (function(module, exports) {
-
-
-
-/***/ }),
-/* 71 */
-/***/ (function(module, exports, __webpack_require__) {
-
-__webpack_require__(25)('asyncIterator');
-
-
-/***/ }),
-/* 72 */
-/***/ (function(module, exports, __webpack_require__) {
-
-__webpack_require__(25)('observable');
-
-
-/***/ }),
-/* 73 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var __vue_exports__, __vue_options__
-var __vue_styles__ = []
-
-/* styles */
-__vue_styles__.push(__webpack_require__(74)
-)
-
-/* script */
-__vue_exports__ = __webpack_require__(75)
-
-/* template */
-var __vue_template__ = __webpack_require__(86)
-__vue_options__ = __vue_exports__ = __vue_exports__ || {}
-if (
-  typeof __vue_exports__.default === "object" ||
-  typeof __vue_exports__.default === "function"
-) {
-if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
-__vue_options__ = __vue_exports__ = __vue_exports__.default
-}
-if (typeof __vue_options__ === "function") {
-  __vue_options__ = __vue_options__.options
-}
-__vue_options__.__file = "/Users/kw/github/weex-vue-examples/src/pages/about/About.vue"
-__vue_options__.render = __vue_template__.render
-__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
-__vue_options__._scopeId = "data-v-13681c5e"
-__vue_options__.style = __vue_options__.style || {}
-__vue_styles__.forEach(function (module) {
-  for (var name in module) {
-    __vue_options__.style[name] = module[name]
-  }
-})
-if (typeof __register_static_styles__ === "function") {
-  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
-}
-
-module.exports = __vue_exports__
-
-
-/***/ }),
-/* 74 */
-/***/ (function(module, exports) {
-
-module.exports = {
-  "list": {
-    "backgroundColor": "#F5F5F5"
-  },
-  "item": {
-    "paddingTop": "30",
-    "paddingBottom": "30",
-    "paddingLeft": "60",
-    "paddingRight": "40",
-    "borderBottomWidth": "1",
-    "borderBottomStyle": "solid",
-    "borderBottomColor": "#E6E6E6",
-    "backgroundColor": "#FFFFFF",
-    "flexDirection": "row",
-    "justifyContent": "space-between",
-    "alignItems": "center"
-  },
-  "item-1": {
-    "borderTopWidth": "1",
-    "borderTopStyle": "solid",
-    "borderTopColor": "#E6E6E6"
-  },
-  "item-title": {
-    "fontSize": "42",
-    "color": "#606060"
-  },
-  "item-value": {
-    "fontSize": "36",
-    "color": "#999999"
-  },
-  "arrow-icon": {
-    "width": "22",
-    "height": "36"
-  },
-  "copyright": {
-    "marginTop": "50",
-    "paddingBottom": "20"
-  },
-  "copyright-text": {
-    "fontSize": "22",
-    "color": "#A0A0A0",
-    "textAlign": "center"
-  }
-}
-
-/***/ }),
-/* 75 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _utils = __webpack_require__(27);
-
-var utils = _interopRequireWildcard(_utils);
-
-var _mock = __webpack_require__(76);
-
-var _AppInfoCard = __webpack_require__(82);
-
-var _AppInfoCard2 = _interopRequireDefault(_AppInfoCard);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
-
-var picker = weex.requireModule('picker'); //
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-
-var channel = new BroadcastChannel('language');
-exports.default = {
-  components: { AppInfoCard: _AppInfoCard2.default },
-  data: function data() {
-    return {
-      language: 'en',
-      followSystemLanguage: true,
-      navigationBarOptions: {
-        title: {
-          zh: '关于 Weex',
-          en: 'About Weex'
-        }
-      },
-      dict: {
-        FOLLOW_SYSTEM: { en: 'Follow System', zh: '跟随系统' },
-        LANGUAGE: { en: 'Language', zh: '语言' }
-      },
-      aboutApp: _mock.aboutApp
-    };
-  },
-
-  watch: {
-    language: function language() {
-      channel.postMessage({ language: this.language });
-    }
-  },
-  computed: {
-    languageName: function languageName() {
-      if (this.followSystemLanguage) {
-        return this.i18n(this.dict.FOLLOW_SYSTEM);
-      }
-      return this.i18n({ en: 'English', zh: '简体中文' });
-    }
-  },
-  created: function created() {
-    var _this = this;
-
-    utils.readAbout(function (about) {
-      _this.aboutApp = about;
-    });
-    utils.getStorageLanguage(function (lang) {
-      return _this.followSystemLanguage = false;
-    }, function () {
-      return _this.followSystemLanguage = true;
-    });
-  },
-
-  methods: {
-    chooseLanguage: function chooseLanguage() {
-      var _this2 = this;
-
-      var options = ['', 'en', 'zh'];
-      var index = this.followSystemLanguage ? 0 : options.indexOf(this.language);
-      picker.pick({
-        index: index,
-        items: [this.i18n(this.dict.FOLLOW_SYSTEM), 'English', '中文']
-      }, function (_ref) {
-        var result = _ref.result,
-            data = _ref.data;
-
-        if (result === 'success') {
-          var select = options[data];
-          if (select) {
-            _this2.followSystemLanguage = false;
-            _this2.language = select;
-            utils.setLanguage(select);
-          } else {
-            _this2.followSystemLanguage = true;
-            utils.clearStorageLanguage();
-            utils.getSystemLanguage(function (lang) {
-              _this2.language = lang;
-            }, function (error) {
-              _this2.language = 'en';
-            });
-          }
-        }
-      });
-    }
-  }
-};
-
-/***/ }),
-/* 76 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.aboutApp = exports.guideLessons = undefined;
-
-var _sliders = __webpack_require__(77);
-
-var _sliders2 = _interopRequireDefault(_sliders);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var guideLessons = exports.guideLessons = _sliders2.default;
-
-var aboutApp = exports.aboutApp = [{
-  title: { en: 'Weex Official Website', zh: 'Weex 官方网站' },
-  link: {
-    en: 'http://weex-project.io/',
-    zh: 'http://weex-project.io/cn/'
-  }
-}, {
-  title: { en: 'Apache Software Foundation', zh: 'Apache 软件基金会' },
-  link: 'http://www.apache.org/'
-}, {
-  title: { en: 'Who is using Weex', zh: '谁在使用 Weex' },
-  link: {
-    en: 'http://weex-project.io/who-is-using-weex.html',
-    zh: 'http://weex-project.io/cn/who-is-using-weex.html'
-  }
-}, {
-  title: { en: 'Contribution', zh: '参与贡献' },
-  link: {
-    en: 'http://weex-project.io/guide/contributing.html',
-    zh: 'http://weex-project.io/cn/guide/contributing.html'
-  }
-}, {
-  title: { en: 'Release Note', zh: '版本变更' },
-  link: {
-    en: 'http://weex-project.io/releasenote.html',
-    zh: 'http://weex-project.io/cn/releasenote.html'
-  }
-}, {
-  title: { en: 'FAQ', zh: '常见问题' },
-  link: {
-    en: 'http://weex-project.io/faq.html',
-    zh: 'http://weex-project.io/cn/faq.html'
-  }
-}];
-
-/***/ }),
-/* 77 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _defineProperty2 = __webpack_require__(78);
-
-var _defineProperty3 = _interopRequireDefault(_defineProperty2);
-
-var _ref, _ref2, _ref3;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-exports.default = [{
-  subject: 'weex',
-  mainColor: '#00B4FF',
-  title: { zh: '学习 Weex', en: 'Learn Weex' },
-  poster: 'https://gw.alicdn.com/tfs/TB1.8Vdl9_I8KJjy0FoXXaFnVXa-3799-1615.png',
-  posterBg: '#E5F7FF',
-  posterStyle: {
-    width: '650px',
-    height: '304px'
-  },
-  copyright: {
-    zh: '来自 http://weex-project.io/cn/',
-    en: 'From http://weex-project.io/'
-  },
-  lessons: [{
-    title: {
-      zh: '快速入门',
-      en: 'Getting Started'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/guide/index.html',
-      en: 'http://weex-project.io/guide/index.html'
-    }
-  }, {
-    title: {
-      zh: '工作原理',
-      en: 'How it Works'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/wiki/index.html',
-      en: 'http://weex-project.io/wiki/index.html'
-    }
-  }, {
-    title: {
-      zh: 'Weex 中的前端框架',
-      en: 'Front-end Frameworks'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/guide/front-end-frameworks.html',
-      en: 'http://weex-project.io/guide/front-end-frameworks.html'
-    }
-  }, {
-    title: {
-      zh: '在 Weex 中使用 Vue.js',
-      en: 'Use Vue.js on Weex'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/guide/use-vue.html',
-      en: 'http://weex-project.io/guide/use-vue.html'
-    }
-  }, {
-    title: {
-      zh: '与 Web 平台的差异',
-      en: 'Platform difference with Web'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/wiki/platform-difference.html',
-      en: 'http://weex-project.io/wiki/platform-difference.html'
-    }
-  }, {
-    title: {
-      zh: '集成 Weex 到已有应用',
-      en: 'Integrate to Your App'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/guide/integrate-to-your-app.html',
-      en: 'http://weex-project.io/guide/integrate-to-your-app.html'
-    }
-  }, {
-    title: {
-      zh: '搭建开发环境',
-      en: 'Set Up Dev Environment'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/guide/set-up-env.html',
-      en: 'http://weex-project.io/guide/set-up-env.html'
-    }
-  }, {
-    title: {
-      zh: '通用样式',
-      en: 'Common Styles'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/wiki/common-styles.html',
-      en: 'http://weex-project.io/wiki/common-styles.html'
-    }
-  }, {
-    title: {
-      zh: '通用事件',
-      en: 'Common Events'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/wiki/common-events.html',
-      en: 'http://weex-project.io/wiki/common-events.html'
-    }
-  }, {
-    title: {
-      zh: 'Weex 实例变量',
-      en: 'The "weex" Variable'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/references/weex-variable.html',
-      en: 'http://weex-project.io/references/weex-variable.html'
-    }
-  }, {
-    title: {
-      zh: '内置组件',
-      en: 'Built-in Components'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/references/components/index.html',
-      en: 'http://weex-project.io/references/components/index.html'
-    }
-  }, {
-    title: {
-      zh: '内置模块',
-      en: 'Built-in Modules'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/references/modules/index.html',
-      en: 'http://weex-project.io/references/modules/index.html'
-    }
-  }, {
-    title: {
-      zh: '扩展 Android 组件/模块',
-      en: 'Extend Android'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/guide/extend-android.html',
-      en: 'http://weex-project.io/guide/extend-android.html'
-    }
-  }, {
-    title: {
-      zh: '扩展 iOS 组件/模块',
-      en: 'Extend iOS'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/guide/extend-ios.html',
-      en: 'http://weex-project.io/guide/extend-ios.html'
-    }
-  }, {
-    title: {
-      zh: '使用 weex-toolkit',
-      en: 'Use weex-toolkit'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/tools/toolkit.html',
-      en: 'http://weex-project.io/tools/toolkit.html'
-    }
-  }, {
-    title: {
-      zh: '如何参与贡献',
-      en: 'How to Contribute'
-    },
-    docLink: {
-      zh: 'http://weex-project.io/cn/contributing.html',
-      en: 'http://weex-project.io/contributing.html'
-    }
-  }]
-}, (_ref = {
-  subject: 'vue',
-  mainColor: '#42b983',
-  title: { zh: '学习 Vue.js', en: 'Learn Vue.js' },
-  poster: 'https://gw.alicdn.com/tfs/TB1J_uKcMMPMeJjy1XdXXasrXXa-400-400.png',
-  posterBg: '#E7FBF2',
-  posterStyle: {
-    width: '300px',
-    height: '300px'
-  }
-}, (0, _defineProperty3.default)(_ref, 'title', {
-  zh: '学习 Vue.js',
-  en: 'Learn Vue.js'
-}), (0, _defineProperty3.default)(_ref, 'copyright', {
-  zh: '来自 https://cn.vuejs.org/',
-  en: 'From https://vuejs.org/'
-}), (0, _defineProperty3.default)(_ref, 'lessons', [{
-  title: {
-    zh: 'Vue.js 是什么?',
-    en: 'What is Vue.js ?'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/index.html',
-    en: 'https://vuejs.org/v2/guide/index.html'
-  }
-}, {
-  title: {
-    zh: '单文件组件',
-    en: 'Single File Components'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/single-file-components.html',
-    en: 'https://vuejs.org/v2/guide/single-file-components.html'
-  }
-}, {
-  title: {
-    zh: '模板语法',
-    en: 'Template Syntax'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/syntax.html',
-    en: 'https://vuejs.org/v2/guide/syntax.html'
-  }
-}, {
-  title: {
-    zh: 'Class 与 Style 绑定',
-    en: 'Class and Style Bindings'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/class-and-style.html',
-    en: 'https://vuejs.org/v2/guide/class-and-style.html'
-  }
-}, {
-  title: {
-    zh: '条件渲染',
-    en: 'Conditional Rendering'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/conditional.html',
-    en: 'https://vuejs.org/v2/guide/conditional.html'
-  }
-}, {
-  title: {
-    zh: '列表渲染',
-    en: 'List Rendering'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/list.html',
-    en: 'https://vuejs.org/v2/guide/list.html'
-  }
-}, {
-  title: {
-    zh: '事件处理',
-    en: 'Event Handling'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/events.html',
-    en: 'https://vuejs.org/v2/guide/events.html'
-  }
-}, {
-  title: {
-    zh: '表单输入绑定',
-    en: 'Form Input Bindings'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/forms.html',
-    en: 'https://vuejs.org/v2/guide/forms.html'
-  }
-}, {
-  title: {
-    zh: 'Vue 实例',
-    en: 'The Vue Instance'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/instance.html',
-    en: 'https://vuejs.org/v2/guide/instance.html'
-  }
-}, {
-  title: {
-    zh: '在 Weex 中使用 Vue.js',
-    en: 'Use Vue.js on Weex'
-  },
-  docLink: {
-    zh: 'http://weex-project.io/cn/guide/use-vue.html',
-    en: 'http://weex-project.io/guide/use-vue.html'
-  }
-}, {
-  title: {
-    zh: '混合(mixins)',
-    en: 'Mixins'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/mixins.html',
-    en: 'https://vuejs.org/v2/guide/mixins.html'
-  }
-}, {
-  title: {
-    zh: '过滤器(filters)',
-    en: 'Filters'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/filters.html',
-    en: 'https://vuejs.org/v2/guide/filters.html'
-  }
-}, {
-  title: {
-    zh: '插件(plugins)',
-    en: 'Plugins'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/plugins.html',
-    en: 'https://vuejs.org/v2/guide/plugins.html'
-  }
-}, {
-  title: {
-    zh: '自定义指令',
-    en: 'Custom Directives'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/custom-directive.html',
-    en: 'https://vuejs.org/v2/guide/custom-directive.html'
-  }
-}, {
-  title: {
-    zh: '状态管理',
-    en: 'State Management'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/state-management.html',
-    en: 'https://vuejs.org/v2/guide/state-management.html'
-  }
-}, {
-  title: {
-    zh: '深入响应式原理',
-    en: 'Reactivity in Depth'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/reactivity.html',
-    en: 'https://vuejs.org/v2/guide/reactivity.html'
-  }
-}, {
-  title: {
-    zh: '渲染函数',
-    en: 'Render Functions'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/render-function.html',
-    en: 'https://vuejs.org/v2/guide/render-function.html'
-  }
-}, {
-  title: {
-    zh: 'TypeScript 支持',
-    en: 'TypeScript Support'
-  },
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/guide/typescript.html',
-    en: 'https://vuejs.org/v2/guide/typescript.html'
-  }
-}, {
-  title: 'API',
-  docLink: {
-    zh: 'https://cn.vuejs.org/v2/api/',
-    en: 'https://vuejs.org/v2/api/'
-  }
-}]), _ref), (_ref2 = {
-  subject: 'javascript',
-  mainColor: '#F7BD2A',
-  title: { zh: '学习 Javascript', en: 'Learn Javascript' },
-  poster: 'https://gw.alicdn.com/tfs/TB1bT98hMoQMeJjy0FpXXcTxpXa-1500-700.png',
-  posterBg: '#FAF3EB',
-  posterStyle: {
-    width: '750px',
-    height: '350px'
-  }
-}, (0, _defineProperty3.default)(_ref2, 'title', {
-  zh: '学习 Javascript',
-  en: 'Learn Javascript'
-}), (0, _defineProperty3.default)(_ref2, 'copyright', {
-  zh: '来自 MDN (Mozilla Developer Network)',
-  en: 'From MDN (Mozilla Developer Network)'
-}), (0, _defineProperty3.default)(_ref2, 'lessons', [{
-  title: {
-    zh: '什么是 Javascript ?',
-    en: 'What is Javascript ?'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/What_is_JavaScript',
-    en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/What_is_JavaScript'
-  }
-}, {
-  title: {
-    zh: 'JavaScript基础',
-    en: 'JavaScript basics'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/Getting_started_with_the_web/JavaScript_basics',
-    en: 'https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/JavaScript_basics'
-  }
-}, {
-  title: {
-    zh: '重新介绍 JavaScript',
-    en: 'A re-introduction to JavaScript'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/A_re-introduction_to_JavaScript',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript'
-  }
-}, {
-  title: {
-    zh: '语法和数据类型',
-    en: 'Grammar and types'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Grammar_and_types#Variable_scope',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variable_scope'
-  }
-}, {
-  title: {
-    zh: '数据类型和数据结构',
-    en: 'Data types and data structures'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures'
-  }
-}, {
-  title: {
-    zh: '变量',
-    en: 'Variables'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Variables',
-    en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Variables'
-  }
-}, {
-  title: {
-    zh: '数字和操作符',
-    en: 'Numbers and operators'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Math',
-    en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Math'
-  }
-}, {
-  title: {
-    zh: '字符串',
-    en: 'Handling text'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Strings',
-    en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Strings'
-  }
-}, {
-  title: {
-    zh: '常用的 String 方法',
-    en: 'Useful string methods'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Useful_string_methods',
-    en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Useful_string_methods'
-  }
-}, {
-  title: {
-    zh: '数组',
-    en: 'Arrays'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Arrays',
-    en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Arrays'
-  }
-}, {
-  title: {
-    zh: '函数',
-    en: 'Functions'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Functions',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions'
-  }
-}, {
-  title: {
-    zh: 'JavaScript 对象基础',
-    en: 'JavaScript object basics'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Basics',
-    en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Basics'
-  }
-}, {
-  title: {
-    zh: '使用对象',
-    en: 'Working with objects'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Working_with_Objects',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects'
-  }
-}, {
-  title: {
-    zh: '使用 JSON 数据',
-    en: 'Working with JSON'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/JSON',
-    en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON'
-  }
-}, {
-  title: {
-    zh: '对象模型的细节',
-    en: 'Details of the object model'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Details_of_the_Object_Model',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model'
-  }
-}, {
-  title: {
-    zh: '对象原型',
-    en: 'Object prototypes'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object_prototypes',
-    en: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Object_prototypes'
-  }
-}, {
-  title: {
-    zh: 'JavaScript 中的继承',
-    en: 'Inheritance in JavaScript'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Inheritance',
-    en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Inheritance'
-  }
-}, {
-  title: {
-    zh: '继承与原型链',
-    en: 'Inheritance and the prototype chain'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain'
-  }
-}, {
-  title: {
-    zh: '严格模式',
-    en: 'Strict mode'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode'
-  }
-}, {
-  title: {
-    zh: '内存管理',
-    en: 'Memory Management'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Memory_Management',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management'
-  }
-}, {
-  title: {
-    zh: '并发模型与事件循环',
-    en: 'Concurrency model and Event Loop'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/EventLoop',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop'
-  }
-}, {
-  //   title: {
-  //     zh: '索引集合类',
-  //     en: 'Indexed collections'
-  //   },
-  //   docLink: {
-  //     zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Indexed_collections',
-  //     en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Indexed_collections'
-  //   }
-  // }, {
-  //   title: {
-  //     zh: '带键的集合',
-  //     en: 'Keyed collections'
-  //   },
-  //   docLink: {
-  //     zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Keyed_collections',
-  //     en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Keyed_collections'
-  //   }
-  // }, {
-  title: {
-    zh: 'JavaScript 标准库',
-    en: 'Standard built-in objects'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects'
-  }
-}]), _ref2), (_ref3 = {
-  subject: 'css',
-  mainColor: '#F56FC6',
-  title: { zh: '学习 CSS', en: 'Learn CSS' },
-  titleColor: '#FFFFFF',
-  poster: 'https://gw.alicdn.com/tfs/TB1k6anhMMPMeJjy1XdXXasrXXa-427-190.jpg',
-  posterBg: '#FFA2DE',
-  posterStyle: {
-    width: '517px',
-    height: '230px'
-  }
-}, (0, _defineProperty3.default)(_ref3, 'title', {
-  zh: '学习 CSS',
-  en: 'Learn CSS'
-}), (0, _defineProperty3.default)(_ref3, 'copyright', {
-  zh: '来自 MDN (Mozilla Developer Network)',
-  en: 'From MDN (Mozilla Developer Network)'
-}), (0, _defineProperty3.default)(_ref3, 'lessons', [{
-  title: {
-    zh: '什么是 CSS ?',
-    en: 'What is CSS ?'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Getting_started/What_is_CSS',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started/What_is_CSS'
-  }
-}, {
-  title: {
-    zh: 'CSS 语法',
-    en: 'CSS Syntax'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/CSS/Introduction_to_CSS/Syntax',
-    en: 'https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Syntax'
-  }
-}, {
-  title: {
-    zh: 'CSS的值和单位',
-    en: 'CSS Values and Units'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/CSS/Introduction_to_CSS/Values_and_units',
-    en: 'https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Values_and_units'
-  }
-}, {
-  title: {
-    zh: '盒模型',
-    en: 'The Box Model'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/CSS/Introduction_to_CSS/Box_model',
-    en: 'https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Box_model'
-  }
-}, {
-  title: {
-    zh: '盒模型的属性',
-    en: 'Box Model Properties'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Box_Model',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Box_Model'
-  }
-}, {
-  title: {
-    zh: '定位布局',
-    en: 'Positioning'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/%E5%AE%9A%E4%BD%8Dx',
-    en: 'https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/positioning'
-  }
-}, {
-  title: {
-    zh: '定位布局的属性',
-    en: 'CSS Positioning'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Positioning',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning'
-  }
-}, {
-  title: {
-    zh: 'Flexbox 布局',
-    en: 'Flexbox Layout'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Flexbox',
-    en: 'https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Flexbox'
-  }
-}, {
-  title: {
-    zh: 'Flexbox 布局的属性',
-    en: 'CSS Flexible Box Layout'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout'
-  }
-}, {
-  title: {
-    zh: 'Weex 中的通用样式',
-    en: 'Common Styles in Weex'
-  },
-  docLink: {
-    zh: 'http://weex-project.io/cn/references/common-style.html',
-    en: 'http://weex-project.io/references/common-style.html'
-  }
-}, {
-  title: {
-    zh: 'Weex 中的文本样式',
-    en: 'Text Styles in Weex'
-  },
-  docLink: {
-    zh: 'http://weex-project.io/cn/references/text-style.html',
-    en: 'http://weex-project.io/references/text-style.html'
-  }
-}, {
-  title: {
-    zh: '块格式化上下文(BFC)',
-    en: 'Block Formatting Context'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Block_formatting_context',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context'
-  }
-}, {
-  title: {
-    zh: '视觉格式化模型',
-    en: 'Visual Formatting Model'
-  },
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Visual_formatting_model',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Visual_formatting_model'
-  }
-}, {
-  title: 'CSS Reference',
-  docLink: {
-    zh: 'https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference',
-    en: 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference'
-  }
-}]), _ref3)];
-
-/***/ }),
-/* 78 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-exports.__esModule = true;
-
-var _defineProperty = __webpack_require__(79);
-
-var _defineProperty2 = _interopRequireDefault(_defineProperty);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-exports.default = function (obj, key, value) {
-  if (key in obj) {
-    (0, _defineProperty2.default)(obj, key, {
-      value: value,
-      enumerable: true,
-      configurable: true,
-      writable: true
-    });
-  } else {
-    obj[key] = value;
-  }
-
-  return obj;
-};
-
-/***/ }),
-/* 79 */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = { "default": __webpack_require__(80), __esModule: true };
-
-/***/ }),
-/* 80 */
-/***/ (function(module, exports, __webpack_require__) {
-
-__webpack_require__(81);
-var $Object = __webpack_require__(4).Object;
-module.exports = function defineProperty(it, key, desc) {
-  return $Object.defineProperty(it, key, desc);
-};
-
-
-/***/ }),
-/* 81 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var $export = __webpack_require__(16);
-// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
-$export($export.S + $export.F * !__webpack_require__(2), 'Object', { defineProperty: __webpack_require__(1).f });
-
-
-/***/ }),
-/* 82 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var __vue_exports__, __vue_options__
-var __vue_styles__ = []
-
-/* styles */
-__vue_styles__.push(__webpack_require__(83)
-)
-
-/* script */
-__vue_exports__ = __webpack_require__(84)
-
-/* template */
-var __vue_template__ = __webpack_require__(85)
-__vue_options__ = __vue_exports__ = __vue_exports__ || {}
-if (
-  typeof __vue_exports__.default === "object" ||
-  typeof __vue_exports__.default === "function"
-) {
-if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
-__vue_options__ = __vue_exports__ = __vue_exports__.default
-}
-if (typeof __vue_options__ === "function") {
-  __vue_options__ = __vue_options__.options
-}
-__vue_options__.__file = "/Users/kw/github/weex-vue-examples/src/components/AppInfoCard.vue"
-__vue_options__.render = __vue_template__.render
-__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
-__vue_options__._scopeId = "data-v-0ba305b6"
-__vue_options__.style = __vue_options__.style || {}
-__vue_styles__.forEach(function (module) {
-  for (var name in module) {
-    __vue_options__.style[name] = module[name]
-  }
-})
-if (typeof __register_static_styles__ === "function") {
-  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
-}
-
-module.exports = __vue_exports__
-
-
-/***/ }),
-/* 83 */
-/***/ (function(module, exports) {
-
-module.exports = {
-  "card": {
-    "width": "650",
-    "justifyContent": "center",
-    "borderWidth": "1",
-    "borderColor": "#DDDDDD",
-    "borderRadius": "20",
-    "paddingTop": "50",
-    "paddingRight": "50",
-    "paddingBottom": "50",
-    "paddingLeft": "50",
-    "marginTop": "50",
-    "marginRight": "50",
-    "marginBottom": "50",
-    "marginLeft": "50",
-    "backgroundColor": "#FFFFFF"
-  },
-  "title": {
-    "fontSize": "34",
-    "textAlign": "center",
-    "color": "#808080",
-    "marginBottom": "20"
-  },
-  "version": {
-    "fontSize": "80",
-    "textAlign": "center",
-    "marginBottom": "30",
-    "color": "#323232"
-  },
-  "group": {
-    "marginTop": "10",
-    "flexDirection": "row"
-  },
-  "label": {
-    "width": "260",
-    "fontSize": "32",
-    "textAlign": "right",
-    "color": "#888888"
-  },
-  "value": {
-    "width": "230",
-    "paddingLeft": "50",
-    "fontSize": "32",
-    "color": "#414141"
-  }
-}
-
-/***/ }),
-/* 84 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _typeof2 = __webpack_require__(28);
-
-var _typeof3 = _interopRequireDefault(_typeof2);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-
-var invalid = '- invalid -';
-var unknown = '- - -';
-exports.default = {
-  data: function data() {
-    return {
-      version: invalid,
-      jsfmVersion: invalid,
-      platform: invalid,
-      osVersion: invalid,
-      deviceModel: invalid
-    };
-  },
-  created: function created() {
-    try {
-      this.jsfmVersion = getJSFMVersion();
-    } catch (e) {
-      this.jsfmVersion = '≤ 0.15.6';
-    }
-    if ((typeof WXEnvironment === 'undefined' ? 'undefined' : (0, _typeof3.default)(WXEnvironment)) === 'object') {
-      this.version = WXEnvironment.weexVersion || unknown;
-      this.platform = WXEnvironment.platform || unknown;
-      this.osVersion = WXEnvironment.osVersion || unknown;
-      this.deviceModel = WXEnvironment.deviceModel || unknown;
-    }
-  }
-};
-
-/***/ }),
-/* 85 */
-/***/ (function(module, exports) {
-
-module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-  return _c('div', {
-    staticClass: ["card"]
-  }, [_c('div', {
-    staticClass: ["info"]
-  }, [_c('text', {
-    staticClass: ["title"]
-  }, [_vm._v("Weex SDK Version")]), _c('text', {
-    staticClass: ["version"]
-  }, [_vm._v(_vm._s(_vm.version))]), _c('div', {
-    staticClass: ["group"]
-  }, [_c('text', {
-    staticClass: ["label"]
-  }, [_vm._v("JS Framework")]), _c('text', {
-    staticClass: ["value"]
-  }, [_vm._v(_vm._s(_vm.jsfmVersion))])]), _c('div', {
-    staticClass: ["group"]
-  }, [_c('text', {
-    staticClass: ["label"]
-  }, [_vm._v("platform")]), _c('text', {
-    staticClass: ["value"]
-  }, [_vm._v(_vm._s(_vm.platform))])]), _c('div', {
-    staticClass: ["group"]
-  }, [_c('text', {
-    staticClass: ["label"]
-  }, [_vm._v("osVersion")]), _c('text', {
-    staticClass: ["value"]
-  }, [_vm._v(_vm._s(_vm.osVersion))])]), _c('div', {
-    staticClass: ["group"]
-  }, [_c('text', {
-    staticClass: ["label"]
-  }, [_vm._v("deviceModel")]), _c('text', {
-    staticClass: ["value"]
-  }, [_vm._v(_vm._s(_vm.deviceModel))])])])])
-},staticRenderFns: []}
-module.exports.render._withStripped = true
-
-/***/ }),
-/* 86 */
-/***/ (function(module, exports) {
-
-module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-  return _c('list', {
-    staticClass: ["list"]
-  }, [_c('cell', {
-    appendAsTree: true,
-    attrs: {
-      "append": "tree"
-    }
-  }, [_c('app-info-card')], 1), _vm._l((_vm.aboutApp), function(item, i) {
-    return _c('cell', {
-      key: i,
-      class: ['item-cell', ("item-cell-" + (i+1))],
-      appendAsTree: true,
-      attrs: {
-        "append": "tree"
-      }
-    }, [(item.link) ? _c('div', {
-      class: ['item', ("item-" + (i+1))],
-      on: {
-        "click": function($event) {
-          _vm.jumpTo(item.link, _vm.i18n(item.title))
-        }
-      }
-    }, [_c('text', {
-      staticClass: ["item-title"]
-    }, [_vm._v(_vm._s(_vm.i18n(item.title)))]), _c('image', {
-      staticClass: ["arrow-icon"],
-      attrs: {
-        "src": "https://gw.alicdn.com/tfs/TB1iL2fkLDH8KJjy1XcXXcpdXXa-32-49.png"
-      }
-    })]) : _vm._e()])
-  }), _c('cell', {
-    staticClass: ["item-cell"],
-    appendAsTree: true,
-    attrs: {
-      "append": "tree"
-    }
-  }, [_c('div', {
-    staticClass: ["item"],
-    on: {
-      "click": _vm.chooseLanguage
-    }
-  }, [_c('text', {
-    staticClass: ["item-title"]
-  }, [_vm._v(_vm._s(_vm.i18n(_vm.dict.LANGUAGE)))]), _c('text', {
-    staticClass: ["item-value"]
-  }, [_vm._v(_vm._s(_vm.languageName))])])]), _vm._m(0)], 2)
-},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-  return _c('cell', {
-    appendAsTree: true,
-    attrs: {
-      "append": "tree"
-    }
-  }, [_c('div', {
-    staticClass: ["copyright"]
-  }, [_c('text', {
-    staticClass: ["copyright-text"]
-  }, [_vm._v("Copyright(c) 2017 The Apache Software Foundation.")]), _c('text', {
-    staticClass: ["copyright-text"]
-  }, [_vm._v("Licensed under the Apache License, Version 2.0")])])])
-}]}
-module.exports.render._withStripped = true
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/ios/playground/bundlejs/examples.weex.js b/ios/playground/bundlejs/examples.weex.js
deleted file mode 100644
index 68d81c8..0000000
--- a/ios/playground/bundlejs/examples.weex.js
+++ /dev/null
@@ -1,2598 +0,0 @@
-// { "framework": "Vue" }
-"use weex:vue";
-
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId]) {
-/******/ 			return installedModules[moduleId].exports;
-/******/ 		}
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			i: moduleId,
-/******/ 			l: false,
-/******/ 			exports: {}
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.l = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// define getter function for harmony exports
-/******/ 	__webpack_require__.d = function(exports, name, getter) {
-/******/ 		if(!__webpack_require__.o(exports, name)) {
-/******/ 			Object.defineProperty(exports, name, {
-/******/ 				configurable: false,
-/******/ 				enumerable: true,
-/******/ 				get: getter
-/******/ 			});
-/******/ 		}
-/******/ 	};
-/******/
-/******/ 	// getDefaultExport function for compatibility with non-harmony modules
-/******/ 	__webpack_require__.n = function(module) {
-/******/ 		var getter = module && module.__esModule ?
-/******/ 			function getDefault() { return module['default']; } :
-/******/ 			function getModuleExports() { return module; };
-/******/ 		__webpack_require__.d(getter, 'a', getter);
-/******/ 		return getter;
-/******/ 	};
-/******/
-/******/ 	// Object.prototype.hasOwnProperty.call
-/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 37);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports) {
-
-// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
-var global = module.exports = typeof window != 'undefined' && window.Math == Math
-  ? window : typeof self != 'undefined' && self.Math == Math ? self
-  // eslint-disable-next-line no-new-func
-  : Function('return this')();
-if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
-var hasOwnProperty = {}.hasOwnProperty;
-module.exports = function (it, key) {
-  return hasOwnProperty.call(it, key);
-};
-
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var dP = __webpack_require__(3);
-var createDesc = __webpack_require__(12);
-module.exports = __webpack_require__(4) ? function (object, key, value) {
-  return dP.f(object, key, createDesc(1, value));
-} : function (object, key, value) {
-  object[key] = value;
-  return object;
-};
-
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var anObject = __webpack_require__(10);
-var IE8_DOM_DEFINE = __webpack_require__(29);
-var toPrimitive = __webpack_require__(17);
-var dP = Object.defineProperty;
-
-exports.f = __webpack_require__(4) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
-  anObject(O);
-  P = toPrimitive(P, true);
-  anObject(Attributes);
-  if (IE8_DOM_DEFINE) try {
-    return dP(O, P, Attributes);
-  } catch (e) { /* empty */ }
-  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
-  if ('value' in Attributes) O[P] = Attributes.value;
-  return O;
-};
-
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// Thank's IE8 for his funny defineProperty
-module.exports = !__webpack_require__(11)(function () {
-  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
-});
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// to indexed object, toObject with fallback for non-array-like ES3 strings
-var IObject = __webpack_require__(51);
-var defined = __webpack_require__(16);
-module.exports = function (it) {
-  return IObject(defined(it));
-};
-
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var store = __webpack_require__(21)('wks');
-var uid = __webpack_require__(13);
-var Symbol = __webpack_require__(0).Symbol;
-var USE_SYMBOL = typeof Symbol == 'function';
-
-var $exports = module.exports = function (name) {
-  return store[name] || (store[name] =
-    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
-};
-
-$exports.store = store;
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports) {
-
-var core = module.exports = { version: '2.5.7' };
-if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
-
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports) {
-
-module.exports = function (it) {
-  return typeof it === 'object' ? it !== null : typeof it === 'function';
-};
-
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports) {
-
-module.exports = true;
-
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var isObject = __webpack_require__(8);
-module.exports = function (it) {
-  if (!isObject(it)) throw TypeError(it + ' is not an object!');
-  return it;
-};
-
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports) {
-
-module.exports = function (exec) {
-  try {
-    return !!exec();
-  } catch (e) {
-    return true;
-  }
-};
-
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports) {
-
-module.exports = function (bitmap, value) {
-  return {
-    enumerable: !(bitmap & 1),
-    configurable: !(bitmap & 2),
-    writable: !(bitmap & 4),
-    value: value
-  };
-};
-
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports) {
-
-var id = 0;
-var px = Math.random();
-module.exports = function (key) {
-  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
-};
-
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.fetchNews = exports.fetchDoodle = exports.readAbout = exports.saveAbout = exports.fetchAbout = exports.readGuide = exports.saveGuide = exports.fetchGuide = exports.readExamples = exports.saveExamples = exports.fetchExamples = undefined;
-
-var _stringify = __webpack_require__(40);
-
-var _stringify2 = _interopRequireDefault(_stringify);
-
-var _typeof2 = __webpack_require__(42);
-
-var _typeof3 = _interopRequireDefault(_typeof2);
-
-exports.createLink = createLink;
-exports.createURL = createURL;
-exports.i18n = i18n;
-exports.parseLanguage = parseLanguage;
-exports.setLanguage = setLanguage;
-exports.clearStorageLanguage = clearStorageLanguage;
-exports.getStorageLanguage = getStorageLanguage;
-exports.getSystemLanguage = getSystemLanguage;
-exports.getLanguage = getLanguage;
-exports.jumpTo = jumpTo;
-exports.viewSource = viewSource;
-exports.setTitleBar = setTitleBar;
-exports.fetchData = fetchData;
-exports.saveData = saveData;
-exports.readData = readData;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var stream = weex.requireModule('stream');
-var storage = weex.requireModule('storage');
-var navigator = weex.requireModule('navigator');
-
-var encoder = typeof encodeURIComponent === 'function' ? encodeURIComponent : typeof encodeURI === 'function' ? encodeURI : function (x) {
-  return x;
-};
-
-function encodeParams(params) {
-  if (!params || (typeof params === 'undefined' ? 'undefined' : (0, _typeof3.default)(params)) !== 'object') {
-    return '';
-  }
-  var array = [];
-  for (var key in params) {
-    if (typeof params[key] === 'string') {
-      array.push(encoder(key) + '=' + encoder(params[key]));
-    }
-  }
-  return array.join('&');
-}
-
-function createLink(name) {
-  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-
-  var args = [];
-  for (var key in params) {
-    if (typeof params[key] === 'string') {
-      args.push(encoder(key) + '=' + encoder(params[key]));
-    }
-  }
-  if (WXEnvironment.platform === 'Web') {
-    args.unshift('page=' + name + '.web.js');
-    return '/?' + args.join('&');
-  }
-  var base = getBaseURL();
-  return '' + base + name + '.weex.js' + (args.length ? '?' + args.join('&') : '');
-}
-
-function createURL(hash, params) {
-  if (WXEnvironment.platform === 'Web') {
-    return 'http://dotwe.org/raw/htmlVue/' + hash;
-  }
-  var url = 'http://dotwe.org/raw/dist/' + hash + '.bundle.wx';
-  var paramString = encodeParams(params);
-  if (WXEnvironment.appName === 'TB') {
-    return url + '?_wx_tpl=' + url + '&' + paramString;
-  }
-  if (WXEnvironment.appName === 'WXSample') {
-    return url + '?' + paramString;
-  }
-  return url + '?wx_weex=true&' + paramString;
-}
-
-function getBaseURL() {
-  var bundleUrl = weex.config.bundleUrl;
-  var isAndroidAssets = bundleUrl.indexOf('your_current_IP') >= 0 || bundleUrl.indexOf('file://assets/') >= 0;
-  var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
-  if (isAndroidAssets) {
-    return 'file://assets/';
-  } else if (isiOSAssets) {
-    // file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
-    // file:///Users/{user}/Library/Developer/CoreSimulator/Devices/{id}/data/Containers/Bundle/Application/{id}/WeexDemo.app/
-    return bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
-  }
-  return '';
-}
-
-function i18n(text, language) {
-  if (typeof text === 'string') {
-    return text;
-  }
-  if (Object.prototype.toString.call(text) === '[object Object]') {
-    var lang = this && this.language || language || 'en';
-    return text[lang];
-  }
-}
-
-var supportedLanguageRE = /(en|zh)\_?\w*/i;
-function parseLanguage(language) {
-  var match = supportedLanguageRE.exec(language + '');
-  if (match && match[1]) {
-    return match[1];
-  }
-  return '';
-}
-
-function setLanguage(language) {
-  var lang = parseLanguage(language);
-  if (lang) {
-    storage.setItem('WEEX_PLAYGROUND_LANGUAGE', lang);
-  }
-}
-
-function clearStorageLanguage() {
-  storage.removeItem('WEEX_PLAYGROUND_LANGUAGE');
-}
-
-function getStorageLanguage(done) {
-  var fail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
-
-  if (!(typeof done === 'undefined' ? 'undefined' : (0, _typeof3.default)(done)) === 'function') {
-    return;
-  }
-  try {
-    storage.getItem('WEEX_PLAYGROUND_LANGUAGE', function (event) {
-      if (event.result === 'success') {
-        var lang = parseLanguage(event.data);
-        lang ? done(lang) : fail();
-      } else {
-        fail(event);
-      }
-    });
-  } catch (err) {
-    fail(err);
-  }
-}
-
-function getSystemLanguage(done) {
-  var fail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
-
-  if (!(typeof done === 'undefined' ? 'undefined' : (0, _typeof3.default)(done)) === 'function') {
-    return;
-  }
-  if (WXEnvironment.platform.toLowerCase() === 'web') {
-    var lang = parseLanguage(window.navigator.language);
-    lang ? done(lang) : fail();
-  } else {
-    try {
-      var locale = weex.requireModule('locale') || weex.requireModule('local');
-      var useSync = false;
-      var resSync = locale.getLanguage(function (language) {
-        var lang = parseLanguage(language);
-        if (lang) {
-          useSync || done(lang);
-        } else {
-          fail();
-        }
-      });
-      var langSync = parseLanguage(resSync);
-      if (langSync) {
-        useSync = true;
-        done(langSync);
-      } else {
-        fail();
-      }
-    } catch (e) {
-      fail(e);
-    }
-  }
-}
-
-var languageRE = /.+[\?\&]{1}language=([\d\w]+)[\?\&]?.*/i;
-function getLanguage() {
-  var done = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
-
-  var match = languageRE.exec(weex.config.bundleUrl || '');
-  var lang = parseLanguage(match && match[1]);
-  if (lang) {
-    done(lang);
-  } else {
-    getStorageLanguage(done, function () {
-      getSystemLanguage(done, function () {
-        done('en');
-      });
-    });
-  }
-}
-
-function jumpTo(url, title, lang) {
-  getLanguage(function (language) {
-    storage.setItem('CURRENT_DOCUMENT_URL', i18n(url, lang || language));
-    navigator.push({
-      url: createURL('bf0305c14b511b24a4e616f53926432b', { language: language, title: i18n(title, lang || language) })
-    });
-  });
-}
-
-function viewSource(hash) {
-  getLanguage(function (language) {
-    navigator.push({
-      url: createURL('f6ce29faf686eabc38b410bf4828fa5a', { hash: hash, language: language })
-    });
-  });
-}
-
-function setTitleBar(options) {
-  var language = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en';
-
-  if (Object.prototype.toString.apply(options) !== '[object Object]') {
-    return;
-  }
-  var titleBar = weex.requireModule('titleBar');
-  if (options.color || options.backgroundColor) {
-    try {
-      titleBar.setStyle({
-        foregroundColor: options.color || '#FFFFFF',
-        backgroundColor: options.backgroundColor || '#00B4FF'
-      });
-    } catch (e) {}
-  }
-  var title = i18n(options.title, language);
-  if (title) {
-    try {
-      titleBar.setTitle(title);
-    } catch (e) {}
-  }
-}
-
-var storageKeys = {
-  doodle: 'WEEX_PLAYGROUND_APP_DOODLE',
-  guide: 'WEEX_PLAYGROUND_APP_GUIDE',
-  examples: 'WEEX_PLAYGROUND_APP_EXAMPLES',
-  news: 'WEEX_PLAYGROUND_APP_NEWS',
-  about: 'WEEX_PLAYGROUND_APP_ABOUT'
-};
-function fetchData(name) {
-  var done = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
-  var fail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
-
-  try {
-    stream.fetch({
-      url: 'http://dotwe.org/query/weex-playground-app',
-      method: 'post',
-      headers: {
-        'Content-Type': 'application/x-www-form-urlencoded'
-      },
-      type: 'json',
-      body: 'name=' + name
-    }, function (res) {
-      if (res.ok && res.data && res.data.success) {
-        done(res.data);
-      } else {
-        fail(res);
-      }
-    });
-  } catch (err) {
-    fail(err);
-  }
-}
-function saveData(name, result) {
-  var key = storageKeys[name];
-  if (!key) return;
-  if (result && (typeof result === 'undefined' ? 'undefined' : (0, _typeof3.default)(result)) === 'object') {
-    result.timestamp = Date.now();
-    storage.setItem(key, (0, _stringify2.default)(result));
-  }
-}
-function readData(name) {
-  var done = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
-  var fail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
-
-  var key = storageKeys[name];
-  if (!key) return fail();
-  try {
-    storage.getItem(key, function (event) {
-      if (event.result === 'success') {
-        var result = JSON.parse(event.data);
-        if (result && Array.isArray(result[name])) {
-          return done(result[name]);
-        }
-      }
-      fail(event);
-    });
-  } catch (e) {
-    fail(e);
-  }
-}
-
-var fetchExamples = exports.fetchExamples = function fetchExamples() {
-  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
-    args[_key] = arguments[_key];
-  }
-
-  return fetchData.apply(undefined, ['examples'].concat(args));
-};
-var saveExamples = exports.saveExamples = function saveExamples() {
-  for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
-    args[_key2] = arguments[_key2];
-  }
-
-  return saveData.apply(undefined, ['examples'].concat(args));
-};
-var readExamples = exports.readExamples = function readExamples() {
-  for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
-    args[_key3] = arguments[_key3];
-  }
-
-  return readData.apply(undefined, ['examples'].concat(args));
-};
-
-var fetchGuide = exports.fetchGuide = function fetchGuide() {
-  for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
-    args[_key4] = arguments[_key4];
-  }
-
-  return fetchData.apply(undefined, ['guide'].concat(args));
-};
-var saveGuide = exports.saveGuide = function saveGuide() {
-  for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
-    args[_key5] = arguments[_key5];
-  }
-
-  return saveData.apply(undefined, ['guide'].concat(args));
-};
-var readGuide = exports.readGuide = function readGuide() {
-  for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
-    args[_key6] = arguments[_key6];
-  }
-
-  return readData.apply(undefined, ['guide'].concat(args));
-};
-
-var fetchAbout = exports.fetchAbout = function fetchAbout() {
-  for (var _len7 = arguments.length, args = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
-    args[_key7] = arguments[_key7];
-  }
-
-  return fetchData.apply(undefined, ['about'].concat(args));
-};
-var saveAbout = exports.saveAbout = function saveAbout() {
-  for (var _len8 = arguments.length, args = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
-    args[_key8] = arguments[_key8];
-  }
-
-  return saveData.apply(undefined, ['about'].concat(args));
-};
-var readAbout = exports.readAbout = function readAbout() {
-  for (var _len9 = arguments.length, args = Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
-    args[_key9] = arguments[_key9];
-  }
-
-  return readData.apply(undefined, ['about'].concat(args));
-};
-
-var fetchDoodle = exports.fetchDoodle = function fetchDoodle() {
-  for (var _len10 = arguments.length, args = Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
-    args[_key10] = arguments[_key10];
-  }
-
-  return fetchData.apply(undefined, ['doodle'].concat(args));
-};
-var fetchNews = exports.fetchNews = function fetchNews() {
-  for (var _len11 = arguments.length, args = Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
-    args[_key11] = arguments[_key11];
-  }
-
-  return fetchData.apply(undefined, ['news'].concat(args));
-};
-
-/***/ }),
-/* 15 */
-/***/ (function(module, exports) {
-
-// 7.1.4 ToInteger
-var ceil = Math.ceil;
-var floor = Math.floor;
-module.exports = function (it) {
-  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
-};
-
-
-/***/ }),
-/* 16 */
-/***/ (function(module, exports) {
-
-// 7.2.1 RequireObjectCoercible(argument)
-module.exports = function (it) {
-  if (it == undefined) throw TypeError("Can't call method on  " + it);
-  return it;
-};
-
-
-/***/ }),
-/* 17 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// 7.1.1 ToPrimitive(input [, PreferredType])
-var isObject = __webpack_require__(8);
-// instead of the ES6 spec version, we didn't implement @@toPrimitive case
-// and the second argument - flag - preferred type is a string
-module.exports = function (it, S) {
-  if (!isObject(it)) return it;
-  var fn, val;
-  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
-  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
-  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
-  throw TypeError("Can't convert object to primitive value");
-};
-
-
-/***/ }),
-/* 18 */
-/***/ (function(module, exports) {
-
-module.exports = {};
-
-
-/***/ }),
-/* 19 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// 19.1.2.14 / 15.2.3.14 Object.keys(O)
-var $keys = __webpack_require__(33);
-var enumBugKeys = __webpack_require__(22);
-
-module.exports = Object.keys || function keys(O) {
-  return $keys(O, enumBugKeys);
-};
-
-
-/***/ }),
-/* 20 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var shared = __webpack_require__(21)('keys');
-var uid = __webpack_require__(13);
-module.exports = function (key) {
-  return shared[key] || (shared[key] = uid(key));
-};
-
-
-/***/ }),
-/* 21 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var core = __webpack_require__(7);
-var global = __webpack_require__(0);
-var SHARED = '__core-js_shared__';
-var store = global[SHARED] || (global[SHARED] = {});
-
-(module.exports = function (key, value) {
-  return store[key] || (store[key] = value !== undefined ? value : {});
-})('versions', []).push({
-  version: core.version,
-  mode: __webpack_require__(9) ? 'pure' : 'global',
-  copyright: '© 2018 Denis Pushkarev (zloirock.ru)'
-});
-
-
-/***/ }),
-/* 22 */
-/***/ (function(module, exports) {
-
-// IE 8- don't enum bug keys
-module.exports = (
-  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
-).split(',');
-
-
-/***/ }),
-/* 23 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var def = __webpack_require__(3).f;
-var has = __webpack_require__(1);
-var TAG = __webpack_require__(6)('toStringTag');
-
-module.exports = function (it, tag, stat) {
-  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
-};
-
-
-/***/ }),
-/* 24 */
-/***/ (function(module, exports, __webpack_require__) {
-
-exports.f = __webpack_require__(6);
-
-
-/***/ }),
-/* 25 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var global = __webpack_require__(0);
-var core = __webpack_require__(7);
-var LIBRARY = __webpack_require__(9);
-var wksExt = __webpack_require__(24);
-var defineProperty = __webpack_require__(3).f;
-module.exports = function (name) {
-  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
-  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
-};
-
-
-/***/ }),
-/* 26 */
-/***/ (function(module, exports) {
-
-exports.f = {}.propertyIsEnumerable;
-
-
-/***/ }),
-/* 27 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var LIBRARY = __webpack_require__(9);
-var $export = __webpack_require__(28);
-var redefine = __webpack_require__(31);
-var hide = __webpack_require__(2);
-var Iterators = __webpack_require__(18);
-var $iterCreate = __webpack_require__(49);
-var setToStringTag = __webpack_require__(23);
-var getPrototypeOf = __webpack_require__(56);
-var ITERATOR = __webpack_require__(6)('iterator');
-var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
-var FF_ITERATOR = '@@iterator';
-var KEYS = 'keys';
-var VALUES = 'values';
-
-var returnThis = function () { return this; };
-
-module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
-  $iterCreate(Constructor, NAME, next);
-  var getMethod = function (kind) {
-    if (!BUGGY && kind in proto) return proto[kind];
-    switch (kind) {
-      case KEYS: return function keys() { return new Constructor(this, kind); };
-      case VALUES: return function values() { return new Constructor(this, kind); };
-    } return function entries() { return new Constructor(this, kind); };
-  };
-  var TAG = NAME + ' Iterator';
-  var DEF_VALUES = DEFAULT == VALUES;
-  var VALUES_BUG = false;
-  var proto = Base.prototype;
-  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
-  var $default = $native || getMethod(DEFAULT);
-  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
-  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
-  var methods, key, IteratorPrototype;
-  // Fix native
-  if ($anyNative) {
-    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
-    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
-      // Set @@toStringTag to native iterators
-      setToStringTag(IteratorPrototype, TAG, true);
-      // fix for some old engines
-      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
-    }
-  }
-  // fix Array#{values, @@iterator}.name in V8 / FF
-  if (DEF_VALUES && $native && $native.name !== VALUES) {
-    VALUES_BUG = true;
-    $default = function values() { return $native.call(this); };
-  }
-  // Define iterator
-  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
-    hide(proto, ITERATOR, $default);
-  }
-  // Plug for library
-  Iterators[NAME] = $default;
-  Iterators[TAG] = returnThis;
-  if (DEFAULT) {
-    methods = {
-      values: DEF_VALUES ? $default : getMethod(VALUES),
-      keys: IS_SET ? $default : getMethod(KEYS),
-      entries: $entries
-    };
-    if (FORCED) for (key in methods) {
-      if (!(key in proto)) redefine(proto, key, methods[key]);
-    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
-  }
-  return methods;
-};
-
-
-/***/ }),
-/* 28 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var global = __webpack_require__(0);
-var core = __webpack_require__(7);
-var ctx = __webpack_require__(47);
-var hide = __webpack_require__(2);
-var has = __webpack_require__(1);
-var PROTOTYPE = 'prototype';
-
-var $export = function (type, name, source) {
-  var IS_FORCED = type & $export.F;
-  var IS_GLOBAL = type & $export.G;
-  var IS_STATIC = type & $export.S;
-  var IS_PROTO = type & $export.P;
-  var IS_BIND = type & $export.B;
-  var IS_WRAP = type & $export.W;
-  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
-  var expProto = exports[PROTOTYPE];
-  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];
-  var key, own, out;
-  if (IS_GLOBAL) source = name;
-  for (key in source) {
-    // contains in native
-    own = !IS_FORCED && target && target[key] !== undefined;
-    if (own && has(exports, key)) continue;
-    // export native or passed
-    out = own ? target[key] : source[key];
-    // prevent global pollution for namespaces
-    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
-    // bind timers to global for call from export context
-    : IS_BIND && own ? ctx(out, global)
-    // wrap global constructors for prevent change them in library
-    : IS_WRAP && target[key] == out ? (function (C) {
-      var F = function (a, b, c) {
-        if (this instanceof C) {
-          switch (arguments.length) {
-            case 0: return new C();
-            case 1: return new C(a);
-            case 2: return new C(a, b);
... 9534 lines suppressed ...