Skip to content
This repository has been archived by the owner on Jun 3, 2021. It is now read-only.

Commit

Permalink
[iOS] export eagle exception (#2402)
Browse files Browse the repository at this point in the history
  • Loading branch information
jianhan-he authored and lucky-chen committed May 8, 2019
1 parent 9eb13af commit 650cb5b
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 30 deletions.
45 changes: 30 additions & 15 deletions ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
Original file line number Diff line number Diff line change
Expand Up @@ -154,9 +154,12 @@ - (void)registerGlobalFunctions
}
else {
WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];
WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
instance.onFailed(error);
WXComponentManager *manager = instance.componentManager;
if (manager.isValid) {
WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
[manager renderFailed:error];
}
}
return 0;
}];
Expand Down Expand Up @@ -429,9 +432,12 @@ - (void)createInstance:(NSString *)instanceIdString
});
}
else {
WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
sdkInstance.onFailed(error);
WXComponentManager *manager = sdkInstance.componentManager;
if (manager.isValid) {
WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
[manager renderFailed:error];
}
}
WX_MONITOR_INSTANCE_PERF_END(WXPTJSCreateInstance, [WXSDKManager instanceForID:instanceIdString]);
[sdkInstance.apmInstance onStage:KEY_PAGE_STAGES_LOAD_BUNDLE_END];
Expand Down Expand Up @@ -604,9 +610,12 @@ - (void)createInstance:(NSString *)instanceIdString
});
}
else {
WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
sdkInstance.onFailed(error);
WXComponentManager *manager = sdkInstance.componentManager;
if (manager.isValid) {
WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
[manager renderFailed:error];
}
}
WX_MONITOR_INSTANCE_PERF_END(WXPTJSCreateInstance, [WXSDKManager instanceForID:instanceIdString]);
[sdkInstance.apmInstance onStage:KEY_PAGE_STAGES_LOAD_BUNDLE_END];
Expand Down Expand Up @@ -739,9 +748,12 @@ - (void)destroyInstance:(NSString *)instance
});
}
else {
WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
sdkInstance.onFailed(error);
WXComponentManager *manager = sdkInstance.componentManager;
if (manager.isValid) {
WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
[manager renderFailed:error];
}
}
} else {
[self callJSMethod:@"destroyInstance" args:@[instance]];
Expand All @@ -766,9 +778,12 @@ - (void)refreshInstance:(NSString *)instance
WXSDKInstance *sdkInstance = [WXSDKManager instanceForID:instance];
if (sdkInstance.dataRender) {
if (!_dataRenderHandler) {
WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
sdkInstance.onFailed(error);
WXComponentManager *manager = sdkInstance.componentManager;
if (manager.isValid) {
WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
[manager renderFailed:error];
}
return;
}
WXPerformBlockOnComponentThread(^{
Expand Down
2 changes: 1 addition & 1 deletion ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ static void MergeBorderWidthValues(NSMutableDictionary* dict,
WXSDKErrCode errorCode = WX_ERR_JS_EXECUTE;
BOOL is_render_failed = NO;
if (func && (strcmp(func, "CreatePageWithContent") == 0 || strcmp(func, "UpdateComponentData") == 0)) {
errorCode = WX_ERR_EAGLE_RENDER;
errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
WXComponentManager *manager = instance.componentManager;
if (manager.isValid) {
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":[NSString stringWithUTF8String:exception], @"exception function:":@(func)}];
Expand Down
3 changes: 2 additions & 1 deletion ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ typedef NS_ENUM(int, WXSDKErrCode)
WX_ERR_RENDER_REMOVEEVENT = -2107,
WX_ERR_RENDER_SCROLLTOELEMENT = -2110,
WX_ERR_RENDER_TWICE = -2111,
WX_ERR_EAGLE_RENDER = -2112,
WX_ERR_RENDER_END = -2199,

WX_ERR_DOWNLOAD_START = -2201,
Expand All @@ -76,6 +75,8 @@ typedef NS_ENUM(int, WXSDKErrCode)
WX_KEY_EXCEPTION_DEGRADE_BUNDLE_CONTENTTYPE_ERROR = -9502,
WX_KEY_EXCEPTION_DEGRADE_OTHER_CAUSE = -9503,
WX_KEY_EXCEPTION_DEGRADE_NET_CODE_CAUSE = -9504,
WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR = -9505,
WX_KEY_EXCEPTION_DEGRADE_EAGLE_JS_DOWNLOAD_ERROR = -9506,

WX_KEY_EXCEPTION_ABILITY_DOWN = -9600,
WX_KEY_EXCEPTION_ABILITY_DOWN_IMAGE = -9601,
Expand Down
2 changes: 2 additions & 0 deletions ios/sdk/WeexSDK/Sources/Engine/WXSDKError.m
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ +(NSDictionary *) getMap
@(WX_KEY_EXCEPTION_DEGRADE):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
@(WX_KEY_EXCEPTION_DEGRADE_CHECK_CONTENT_LENGTH_FAILED):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_NET)},
@(WX_KEY_EXCEPTION_DEGRADE_BUNDLE_CONTENTTYPE_ERROR):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_NET)},
@(WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_JS)},
@(WX_KEY_EXCEPTION_DEGRADE_EAGLE_JS_DOWNLOAD_ERROR):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_JS)},
@(WX_KEY_EXCEPTION_DEGRADE_OTHER_CAUSE):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
@(WX_KEY_EXCEPTION_DEGRADE_NET_CODE_CAUSE):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_NET)},

Expand Down
30 changes: 20 additions & 10 deletions ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#import "WXBridgeMethod.h"
#import "WXCallJSMethod.h"
#import "WXSDKManager.h"
#import "WXSDKInstance_private.h"
#import "WXServiceFactory.h"
#import "WXResourceRequest.h"
#import "WXResourceLoader.h"
Expand Down Expand Up @@ -322,10 +323,13 @@ - (void)DownloadJS:(NSString*)instance url:(NSURL *)scriptUrl completion:(void (
}

WXSDKInstance *sdkInstance = [WXSDKManager instanceForID:instance];
NSString *errorMessage = [NSString stringWithFormat:@"Request to %@ occurs an error:%@, info:%@", request.URL, loadError.localizedDescription, loadError.userInfo];
WXSDKErrCode errorCode = WX_KEY_EXCEPTION_JS_DOWNLOAD;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{NSLocalizedDescriptionKey:(errorMessage?:@"No message")}];
sdkInstance.onFailed(error);
WXComponentManager *manager = sdkInstance.componentManager;
if (manager.isValid) {
NSString *errorMessage = [NSString stringWithFormat:@"Request to %@ occurs an error:%@, info:%@", request.URL, loadError.localizedDescription, loadError.userInfo];
WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_JS_DOWNLOAD_ERROR;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{NSLocalizedDescriptionKey:(errorMessage?:@"No message")}];
[manager renderFailed:error];
}
};

[jsLoader start];
Expand Down Expand Up @@ -435,9 +439,12 @@ - (void)fireEvent:(NSString *)instanceId ref:(NSString *)ref type:(NSString *)ty
});
}
else {
WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
instance.onFailed(error);
WXComponentManager *manager = instance.componentManager;
if (manager.isValid) {
WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
[manager renderFailed:error];
}
}
return;
}
Expand Down Expand Up @@ -510,9 +517,12 @@ - (void)callBack:(NSString *)instanceId funcId:(NSString *)funcId params:(id)par
});
}
else {
WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
instance.onFailed(error);
WXComponentManager *manager = instance.componentManager;
if (manager.isValid) {
WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
[manager renderFailed:error];
}
}
}
else {
Expand Down
8 changes: 5 additions & 3 deletions ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
Original file line number Diff line number Diff line change
Expand Up @@ -287,9 +287,11 @@ - (void)_downloadAndExecScript:(NSURL *)url {
});
}
else {
WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
self.onFailed(error);
if (self.componentManager.isValid) {
WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
[self.componentManager renderFailed:error];
}
}
return;
}
Expand Down

0 comments on commit 650cb5b

Please sign in to comment.