Repository: incubator-weex
Updated Branches:
  refs/heads/release-0.16 65c0910d2 -> febb72075


* [ios] add jserror upload method, add trigger positions on sdk 
init,jsservice,jsbridge


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/e3b9c10e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/e3b9c10e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/e3b9c10e

Branch: refs/heads/release-0.16
Commit: e3b9c10ee99b3c6236f5e67867b634fd3377d7e6
Parents: db5b1e0
Author: gurisxie <279483...@qq.com>
Authored: Thu Oct 19 11:45:16 2017 +0800
Committer: gurisxie <279483...@qq.com>
Committed: Thu Oct 19 11:45:16 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj       | 12 +++++
 .../WeexSDK/Sources/Bridge/WXBridgeContext.m    | 13 +++--
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m | 16 +++---
 ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m    |  5 +-
 ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h     |  6 +++
 .../WeexSDK/Sources/Monitor/WXExceptionUtils.h  | 29 ++++++++++
 .../WeexSDK/Sources/Monitor/WXExceptionUtils.m  | 57 ++++++++++++++++++++
 ios/sdk/WeexSDK/Sources/WeexSDK.h               |  1 +
 8 files changed, 128 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e3b9c10e/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK.xcodeproj/project.pbxproj 
b/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
index 8addaca..749cb8c 100644
--- a/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
+++ b/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
@@ -264,6 +264,10 @@
                77E65A161C155EB5008B8775 /* WXTextComponent.m in Sources */ = 
{isa = PBXBuildFile; fileRef = 77E65A141C155EB5008B8775 /* WXTextComponent.m 
*/; };
                77E65A191C155F25008B8775 /* WXScrollerComponent.h in Headers */ 
= {isa = PBXBuildFile; fileRef = 77E65A171C155F25008B8775 /* 
WXScrollerComponent.h */; settings = {ATTRIBUTES = (Public, ); }; };
                77E65A1A1C155F25008B8775 /* WXScrollerComponent.m in Sources */ 
= {isa = PBXBuildFile; fileRef = 77E65A181C155F25008B8775 /* 
WXScrollerComponent.m */; };
+               841CD1031F9739890081196D /* WXExceptionUtils.m in Sources */ = 
{isa = PBXBuildFile; fileRef = 841CD1021F9739890081196D /* WXExceptionUtils.m 
*/; };
+               841CD1051F974DFA0081196D /* WXExceptionUtils.h in Headers */ = 
{isa = PBXBuildFile; fileRef = 841CD1041F97399C0081196D /* WXExceptionUtils.h 
*/; settings = {ATTRIBUTES = (Public, ); }; };
+               841CD1061F974DFA0081196D /* WXExceptionUtils.h in Headers */ = 
{isa = PBXBuildFile; fileRef = 841CD1041F97399C0081196D /* WXExceptionUtils.h 
*/; settings = {ATTRIBUTES = (Public, ); }; };
+               841CD1071F974E000081196D /* WXExceptionUtils.m in Sources */ = 
{isa = PBXBuildFile; fileRef = 841CD1021F9739890081196D /* WXExceptionUtils.m 
*/; };
                C401945E1E344E8300D19C31 /* WXFloatCompareTests.m in Sources */ 
= {isa = PBXBuildFile; fileRef = C401945D1E344E8300D19C31 /* 
WXFloatCompareTests.m */; };
                C41E1A971DC1FD15009C7F90 /* WXDatePickerManager.h in Headers */ 
= {isa = PBXBuildFile; fileRef = C41E1A951DC1FD15009C7F90 /* 
WXDatePickerManager.h */; };
                C41E1A981DC1FD15009C7F90 /* WXDatePickerManager.m in Sources */ 
= {isa = PBXBuildFile; fileRef = C41E1A961DC1FD15009C7F90 /* 
WXDatePickerManager.m */; };
@@ -851,6 +855,8 @@
                77E65A141C155EB5008B8775 /* WXTextComponent.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= WXTextComponent.m; sourceTree = "<group>"; };
                77E65A171C155F25008B8775 /* WXScrollerComponent.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
WXScrollerComponent.h; sourceTree = "<group>"; };
                77E65A181C155F25008B8775 /* WXScrollerComponent.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= WXScrollerComponent.m; sourceTree = "<group>"; };
+               841CD1021F9739890081196D /* WXExceptionUtils.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= WXExceptionUtils.m; sourceTree = "<group>"; };
+               841CD1041F97399C0081196D /* WXExceptionUtils.h */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 
WXExceptionUtils.h; sourceTree = "<group>"; };
                C401945D1E344E8300D19C31 /* WXFloatCompareTests.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= WXFloatCompareTests.m; sourceTree = "<group>"; };
                C41E1A951DC1FD15009C7F90 /* WXDatePickerManager.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
WXDatePickerManager.h; sourceTree = "<group>"; };
                C41E1A961DC1FD15009C7F90 /* WXDatePickerManager.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= WXDatePickerManager.m; sourceTree = "<group>"; };
@@ -1082,6 +1088,8 @@
                                2AAFC1B41C48DFF70026D2FE /* WXSDKError.h */,
                                749DC2791D40827B009E1C91 /* WXMonitor.h */,
                                749DC27A1D40827B009E1C91 /* WXMonitor.m */,
+                               841CD1041F97399C0081196D /* WXExceptionUtils.h 
*/,
+                               841CD1021F9739890081196D /* WXExceptionUtils.m 
*/,
                        );
                        name = Monitor;
                        path = WeexSDK/Sources/Monitor;
@@ -1602,6 +1610,7 @@
                                DCA0EF641D6EED6F00CB18B9 /* 
WXGlobalEventModule.h in Headers */,
                                2A837AB21CD9DE9200AEDF03 /* 
WXLoadingComponent.h in Headers */,
                                DCA446271EFA5DAF00D0CFA8 /* WeexSDK.h in 
Headers */,
+                               841CD1051F974DFA0081196D /* WXExceptionUtils.h 
in Headers */,
                                C42E8F9B1F39DF07001EBE9D /* WXTracingProtocol.h 
in Headers */,
                                7423899F1C32733800D748CA /* WXType.h in Headers 
*/,
                                59A582FC1CF5B17B0081FD3E /* WXBridgeContext.h 
in Headers */,
@@ -1793,6 +1802,7 @@
                                DCA445D51EFA598200D0CFA8 /* 
WXComponent+PseudoClassManagement.h in Headers */,
                                DCA4460E1EFA5A7E00D0CFA8 /* WXLength.h in 
Headers */,
                                DCA445FA1EFA5A3A00D0CFA8 /* WXNavigatorModule.h 
in Headers */,
+                               841CD1061F974DFA0081196D /* WXExceptionUtils.h 
in Headers */,
                                DCA446081EFA5A6A00D0CFA8 /* NSArray+Weex.h in 
Headers */,
                                74B81AE51F73C3E900D3A61D /* 
WXRecycleListDataManager.h in Headers */,
                                DCA445F21EFA5A2300D0CFA8 /* WXHeaderComponent.h 
in Headers */,
@@ -2200,6 +2210,7 @@
                                7463192A1C71B92600EFEBD4 /* WXModalUIModule.m 
in Sources */,
                                77D161501C02E3880010B15B /* WXUtility.m in 
Sources */,
                                74A4BA9F1CB3C0A100195969 /* WXHandlerFactory.m 
in Sources */,
+                               841CD1031F9739890081196D /* WXExceptionUtils.m 
in Sources */,
                                C4E97D341F1EF46D00ABC314 /* WXTracingManager.m 
in Sources */,
                                742AD72F1DF98C45007DC46C /* WXResourceRequest.m 
in Sources */,
                                7461F8931CFB373100F62D44 /* WXLayer.m in 
Sources */,
@@ -2278,6 +2289,7 @@
                                DCA4455E1EFA55B300D0CFA8 /* WXFooterComponent.m 
in Sources */,
                                DCA4455F1EFA55B300D0CFA8 /* 
WXNavigationDefaultImpl.m in Sources */,
                                74B81AF21F73C3E900D3A61D /* WXJSASTParser.mm in 
Sources */,
+                               841CD1071F974E000081196D /* WXExceptionUtils.m 
in Sources */,
                                DCA445601EFA55B300D0CFA8 /* 
WXURLRewriteDefaultImpl.m in Sources */,
                                DCA445611EFA55B300D0CFA8 /* 
WXPrerenderManager.m in Sources */,
                                DCA445631EFA55B300D0CFA8 /* WXPickerModule.m in 
Sources */,

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e3b9c10e/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m 
b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
index 7985fe5..24801cc 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
@@ -40,6 +40,7 @@
 #import "WXSDKInstance_private.h"
 #import "WXPrerenderManager.h"
 #import "WXTracingManager.h"
+#import "WXExceptionUtils.h"
 
 #define SuppressPerformSelectorLeakWarning(Stuff) \
 do { \
@@ -506,8 +507,10 @@ _Pragma("clang diagnostic pop") \
     WX_MONITOR_PERF_END(WXPTFrameworkExecute);
     
     if ([self.jsBridge exception]) {
-        NSString *message = [NSString stringWithFormat:@"JSFramework executes 
error: %@", [self.jsBridge exception]];
-        WX_MONITOR_FAIL(WXMTJSFramework, WX_ERR_JSFRAMEWORK_EXECUTE, message);
+        NSString *exception = [[self.jsBridge exception] toString];
+        NSMutableString *errMsg = [NSMutableString 
stringWithFormat:@"[WX_KEY_EXCEPTION_SDK_INIT_JSFM_INIT_FAILED] %@",exception];
+        [WXExceptionUtils 
commitCriticalExceptionRT:@"WX_KEY_EXCEPTION_SDK_INIT" errCode:[NSString 
stringWithFormat:@"%d", WX_KEY_EXCEPTION_SDK_INIT] function:@"" 
exception:errMsg extParams:nil];
+        WX_MONITOR_FAIL(WXMTJSFramework, WX_ERR_JSFRAMEWORK_EXECUTE, errMsg);
     } else {
         WX_MONITOR_SUCCESS(WXMTJSFramework);
         //the JSFramework has been load successfully.
@@ -568,8 +571,10 @@ _Pragma("clang diagnostic pop") \
         [self.jsBridge executeJavascript:script];
         
         if ([self.jsBridge exception]) {
-            NSString *message = [NSString stringWithFormat:@"JSService 
executes error: %@", [self.jsBridge exception]];
-            WX_MONITOR_FAIL(WXMTJSService, WX_ERR_JSFRAMEWORK_EXECUTE, 
message);
+            NSString *exception = [[self.jsBridge exception] toString];
+            NSMutableString *errMsg = [NSMutableString 
stringWithFormat:@"[WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE] %@",exception];
+            [WXExceptionUtils 
commitCriticalExceptionRT:@"WX_KEY_EXCEPTION_INVOKE" errCode:[NSString 
stringWithFormat:@"%d", WX_KEY_EXCEPTION_INVOKE] function:@"" exception:errMsg 
extParams:nil];
+            WX_MONITOR_FAIL(WXMTJSService, WX_ERR_JSFRAMEWORK_EXECUTE, errMsg);
         } else {
             // success
         }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e3b9c10e/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m 
b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
index ec81b22..f076817 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
@@ -36,6 +36,7 @@
 #import "WXSDKManager.h"
 #import "WXExtendCallNativeManager.h"
 #import "WXTracingManager.h"
+#import "WXExceptionUtils.h"
 
 #import <dlfcn.h>
 
@@ -154,14 +155,17 @@
         
         _jsContext.exceptionHandler = ^(JSContext *context, JSValue 
*exception){
             context.exception = exception;
-            NSString *message = [NSString stringWithFormat:@"[%@:%@:%@] 
%@\n%@", exception[@"sourceURL"], exception[@"line"], exception[@"column"], 
exception, [exception[@"stack"] toObject]];
-            id<WXJSExceptionProtocol> jsExceptionHandler = [WXHandlerFactory 
handlerForProtocol:@protocol(WXJSExceptionProtocol)];
             
             WXSDKInstance *instance = [WXSDKEngine topInstance];
-            WXJSExceptionInfo * jsExceptionInfo = [[WXJSExceptionInfo alloc] 
initWithInstanceId:instance.instanceId bundleUrl:[instance.scriptURL 
absoluteString] errorCode:[NSString stringWithFormat:@"%d", WX_ERR_JS_EXECUTE] 
functionName:@"" exception:[NSString stringWithFormat:@"[%@:%@] %@\n%@ 
\njsMainBundleStringContentLength:%@\njsMainBundleStringContentMd5:%@",exception[@"line"],
 exception[@"column"],[exception toString], exception[@"stack"], 
instance.userInfo[@"jsMainBundleStringContentLength"]?:@"",instance.userInfo[@"jsMainBundleStringContentMd5"]?:@""]
 userInfo:nil];
-            if ([jsExceptionHandler 
respondsToSelector:@selector(onJSException:)]) {
-                [jsExceptionHandler onJSException:jsExceptionInfo];
-            }
+            NSString *bundleUrl = [instance.scriptURL 
absoluteString]?:@"WX_KEY_EXCEPTION_WXBRIDGE";
+            NSString *errorCode = [NSString stringWithFormat:@"%d", 
WX_KEY_EXCEPTION_WXBRIDGE];
+            NSString *message = [NSString 
stringWithFormat:@"[WX_KEY_EXCEPTION_WXBRIDGE] [%@:%@:%@] %@\n%@", 
exception[@"sourceURL"], exception[@"line"], exception[@"column"], [exception 
toString], [exception[@"stack"] toObject]];
+            NSMutableDictionary *userInfo = [NSMutableDictionary 
dictionaryWithObjectsAndKeys:
+                
instance.userInfo[@"jsMainBundleStringContentLength"]?:@"",@"jsMainBundleStringContentLength",
+                
instance.userInfo[@"jsMainBundleStringContentMd5"]?:@"",@"jsMainBundleStringContentMd5",nil];
+            WXJSExceptionInfo * jsExceptionInfo = [[WXJSExceptionInfo alloc] 
initWithInstanceId:instance.instanceId bundleUrl:bundleUrl errorCode:errorCode 
functionName:@"" exception:message userInfo:userInfo];
+            
+            [WXExceptionUtils commitCriticalExceptionRT:jsExceptionInfo];
             WX_MONITOR_FAIL(WXMTJSBridge, WX_ERR_JS_EXECUTE, message);
             if (instance.onJSRuntimeException) {
                 instance.onJSRuntimeException(jsExceptionInfo);

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e3b9c10e/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m 
b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
index e86221d..fbd62b9 100644
--- a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
+++ b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
@@ -37,6 +37,7 @@
 #import "WXLog.h"
 #import "WXUtility.h"
 #import "WXExtendCallNativeManager.h"
+#import "WXExceptionUtils.h"
 
 @implementation WXSDKEngine
 
@@ -230,7 +231,9 @@
     WX_MONITOR_PERF_START(WXPTInitalizeSync)
     
     if (!script || script.length <= 0) {
-        WX_MONITOR_FAIL(WXMTJSFramework, WX_ERR_JSFRAMEWORK_LOAD, @"framework 
loading is failure!");
+        NSMutableString *errMsg = [NSMutableString 
stringWithFormat:@"[WX_KEY_EXCEPTION_SDK_INIT_JSFM_INIT_FAILED] script don't 
exist:%@",script];
+        [WXExceptionUtils 
commitCriticalExceptionRT:@"WX_KEY_EXCEPTION_SDK_INIT" errCode:[NSString 
stringWithFormat:@"%d", WX_KEY_EXCEPTION_SDK_INIT] 
function:@"initSDKEnvironment" exception:errMsg extParams:nil];
+        WX_MONITOR_FAIL(WXMTJSFramework, WX_ERR_JSFRAMEWORK_LOAD, errMsg);
         return;
     }
     static dispatch_once_t onceToken;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e3b9c10e/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h 
b/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h
index 38b1e2b..e47cb1c 100644
--- a/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h
+++ b/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h
@@ -51,5 +51,11 @@ typedef NS_ENUM(int, WXSDKErrCode)
     WX_ERR_NOT_CONNECTED_TO_INTERNET = -2205,
     WX_ERR_CANCEL = -2204,
     WX_ERR_DOWNLOAD_END = -2299,
+    
+    WX_KEY_EXCEPTION_SDK_INIT = -9000,
+    WX_KEY_EXCEPTION_INVOKE = -9100,
+    WX_KEY_EXCEPTION_JS_DOWNLOAD =-9200,
+    WX_KEY_EXCEPTION_DOM = -9300,
+    WX_KEY_EXCEPTION_WXBRIDGE=-9400,
 };
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e3b9c10e/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.h 
b/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.h
new file mode 100644
index 0000000..c0bcf4b
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.h
@@ -0,0 +1,29 @@
+/*
+ * 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 "WXJSExceptionInfo.h"
+
+@interface WXExceptionUtils : NSObject
+
++ (void)commitCriticalExceptionRT:(NSString *)instanceId errCode:(NSString 
*)errCode function:(NSString *)function exception:(NSString *)exception 
extParams:(NSDictionary *)extParams;
+
++ (void)commitCriticalExceptionRT:(WXJSExceptionInfo*)jsExceptionInfo;
+@end
+

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e3b9c10e/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.m 
b/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.m
new file mode 100644
index 0000000..0ed7297
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.m
@@ -0,0 +1,57 @@
+/*
+ * 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 "WXExceptionUtils.h"
+#import "WXJSExceptionProtocol.h"
+#import "WXHandlerFactory.h"
+#import "WXSDKEngine.h"
+#import "WXSDKError.h"
+#import "WXJSExceptionInfo.h"
+#import "WXUtility.h"
+#import "WXSDKManager.h"
+
+
+@implementation WXExceptionUtils
+
++ (void)commitCriticalExceptionRT:(NSString *)instanceId errCode:(NSString 
*)errCode function:(NSString *)function exception:(NSString *)exception 
extParams:(NSDictionary *)extParams{
+    NSString *bundleUrlCommit = @"BundleUrlDefault";
+    NSString *instanceIdCommit = @"InstanceIdDefalut";
+    
+    if(![WXUtility isBlankString:instanceId]){
+        instanceIdCommit = instanceId;
+        WXSDKInstance * instance = [WXSDKManager instanceForID:instanceId];
+        if(instance){
+            bundleUrlCommit = [instance.scriptURL 
absoluteString]?:bundleUrlCommit;
+        }else if([instanceIdCommit hasPrefix:@"WX_KEY_EXCEPTION"]){
+            bundleUrlCommit = instanceId;
+        }
+    }
+    
+    WXJSExceptionInfo * jsExceptionInfo = [[WXJSExceptionInfo alloc] 
initWithInstanceId:instanceIdCommit bundleUrl:bundleUrlCommit errorCode:errCode 
functionName:function exception:exception userInfo: [extParams mutableCopy]];
+    [WXExceptionUtils commitCriticalExceptionRT:jsExceptionInfo];
+}
+
++ (void)commitCriticalExceptionRT:(WXJSExceptionInfo *)jsExceptionInfo{
+    id<WXJSExceptionProtocol> jsExceptionHandler = [WXHandlerFactory 
handlerForProtocol:@protocol(WXJSExceptionProtocol)];
+    if ([jsExceptionHandler respondsToSelector:@selector(onJSException:)]) {
+        [jsExceptionHandler onJSException:jsExceptionInfo];
+    }
+}
+
+@end

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e3b9c10e/ios/sdk/WeexSDK/Sources/WeexSDK.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/WeexSDK.h 
b/ios/sdk/WeexSDK/Sources/WeexSDK.h
index 3bbc3ea..562cfa8 100644
--- a/ios/sdk/WeexSDK/Sources/WeexSDK.h
+++ b/ios/sdk/WeexSDK/Sources/WeexSDK.h
@@ -53,6 +53,7 @@
 #import "WXIndicatorComponent.h"
 #import "WXImgLoaderProtocol.h"
 #import "WXExtendCallNativeProtocol.h"
+#import "WXExceptionUtils.h"
 #import "WXEventModuleProtocol.h"
 #import "WXErrorView.h"
 #import "WXDefine.h"

Reply via email to