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

[iOS] export eagle exception #2402

Merged
merged 1 commit into from
May 8, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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