mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-29 04:35:36 +08:00
Kill RCTWebViewExecutor
Summary: public The WebView executor has no benefits compared to the JSC executor (slower, no extra debugging tools...), and it's pretty hacky (since it injects the code in a script tag we have to check for tags in the comments and etc...). Reviewed By: nicklockwood, javache Differential Revision: D2636465 fb-gh-sync-id: 0d0f8a59e2c12fe7905b02060b3938c894d2802b
This commit is contained in:
committed by
facebook-github-bot-3
parent
2eb8068cf1
commit
0764e4ef29
@@ -24,7 +24,6 @@
|
|||||||
#import "RCTUIManager.h"
|
#import "RCTUIManager.h"
|
||||||
#import "RCTUtils.h"
|
#import "RCTUtils.h"
|
||||||
#import "RCTView.h"
|
#import "RCTView.h"
|
||||||
#import "RCTWebViewExecutor.h"
|
|
||||||
#import "UIView+React.h"
|
#import "UIView+React.h"
|
||||||
|
|
||||||
NSString *const RCTContentDidAppearNotification = @"RCTContentDidAppearNotification";
|
NSString *const RCTContentDidAppearNotification = @"RCTContentDidAppearNotification";
|
||||||
|
|||||||
@@ -1,48 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) 2015-present, Facebook, Inc.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the BSD-style license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree. An additional grant
|
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#import "RCTDefines.h"
|
|
||||||
|
|
||||||
#if RCT_DEV // Debug executors are only supported in dev mode
|
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
|
||||||
|
|
||||||
#import "RCTJavaScriptExecutor.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Uses an embedded web view merely for the purpose of being able to reuse the
|
|
||||||
* existing webkit debugging tools. Fulfills the role of a very constrained
|
|
||||||
* `JSContext`, which we call `RCTJavaScriptExecutor`.
|
|
||||||
*
|
|
||||||
* TODO: To ensure production-identical execution, scrub the window
|
|
||||||
* environment. And ensure main thread operations are actually added to a queue
|
|
||||||
* instead of being executed immediately if already on the main thread.
|
|
||||||
*/
|
|
||||||
@interface RCTWebViewExecutor : NSObject<RCTJavaScriptExecutor>
|
|
||||||
|
|
||||||
// Only one callback stored - will only be invoked for the latest issued
|
|
||||||
// application script request.
|
|
||||||
@property (nonatomic, copy) RCTJavaScriptCompleteBlock onApplicationScriptLoaded;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiate with a specific webview instance
|
|
||||||
*/
|
|
||||||
- (instancetype)initWithWebView:(UIWebView *)webView NS_DESIGNATED_INITIALIZER;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Invoke this to reclaim the web view for reuse. This is necessary in order to
|
|
||||||
* allow debuggers to remain open, when creating a new `RCTWebViewExecutor`.
|
|
||||||
* This guards against the web view being invalidated, and makes sure the
|
|
||||||
* `delegate` is cleared first.
|
|
||||||
*/
|
|
||||||
- (UIWebView *)invalidateAndReclaimWebView;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,229 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) 2015-present, Facebook, Inc.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the BSD-style license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree. An additional grant
|
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#import "RCTDefines.h"
|
|
||||||
|
|
||||||
#if RCT_DEV // Debug executors are only supported in dev mode
|
|
||||||
|
|
||||||
#import "RCTWebViewExecutor.h"
|
|
||||||
|
|
||||||
#import <objc/runtime.h>
|
|
||||||
|
|
||||||
#import "RCTLog.h"
|
|
||||||
#import "RCTUtils.h"
|
|
||||||
|
|
||||||
static void RCTReportError(RCTJavaScriptCallback callback, NSString *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
va_start(args, fmt);
|
|
||||||
|
|
||||||
NSString *description = [[NSString alloc] initWithFormat:fmt arguments:args];
|
|
||||||
RCTLogError(@"%@", description);
|
|
||||||
|
|
||||||
NSError *error = [NSError errorWithDomain:NSStringFromClass([RCTWebViewExecutor class])
|
|
||||||
code:3
|
|
||||||
userInfo:@{NSLocalizedDescriptionKey:description}];
|
|
||||||
callback(nil, error);
|
|
||||||
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
@interface RCTWebViewExecutor () <UIWebViewDelegate>
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation RCTWebViewExecutor
|
|
||||||
{
|
|
||||||
UIWebView *_webView;
|
|
||||||
NSMutableDictionary *_objectsToInject;
|
|
||||||
NSRegularExpression *_commentsRegex;
|
|
||||||
NSRegularExpression *_scriptTagsRegex;
|
|
||||||
}
|
|
||||||
|
|
||||||
RCT_EXPORT_MODULE()
|
|
||||||
|
|
||||||
@synthesize valid = _valid;
|
|
||||||
|
|
||||||
- (instancetype)initWithWebView:(UIWebView *)webView
|
|
||||||
{
|
|
||||||
if ((self = [super init])) {
|
|
||||||
_webView = webView;
|
|
||||||
}
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (instancetype)init
|
|
||||||
{
|
|
||||||
return [self initWithWebView:nil];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setUp
|
|
||||||
{
|
|
||||||
if (!_webView) {
|
|
||||||
[self executeBlockOnJavaScriptQueue:^{
|
|
||||||
_webView = [UIWebView new];
|
|
||||||
_webView.delegate = self;
|
|
||||||
}];
|
|
||||||
}
|
|
||||||
|
|
||||||
_objectsToInject = [NSMutableDictionary new];
|
|
||||||
_commentsRegex = [NSRegularExpression regularExpressionWithPattern:@"(^ *?\\/\\/.*?$|\\/\\*\\*[\\s\\S]*?\\*\\/)" options:NSRegularExpressionAnchorsMatchLines error:NULL];
|
|
||||||
_scriptTagsRegex = [NSRegularExpression regularExpressionWithPattern:@"<(\\/?script[^>]*?)>" options:0 error:NULL];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)invalidate
|
|
||||||
{
|
|
||||||
_valid = NO;
|
|
||||||
_webView.delegate = nil;
|
|
||||||
_webView = nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (UIWebView *)invalidateAndReclaimWebView
|
|
||||||
{
|
|
||||||
UIWebView *webView = _webView;
|
|
||||||
[self invalidate];
|
|
||||||
return webView;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)executeJSCall:(NSString *)name
|
|
||||||
method:(NSString *)method
|
|
||||||
arguments:(NSArray *)arguments
|
|
||||||
callback:(RCTJavaScriptCallback)onComplete
|
|
||||||
{
|
|
||||||
RCTAssert(onComplete != nil, @"");
|
|
||||||
[self executeBlockOnJavaScriptQueue:^{
|
|
||||||
if (!self.isValid) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
NSError *error;
|
|
||||||
NSString *argsString = RCTJSONStringify(arguments, &error);
|
|
||||||
if (!argsString) {
|
|
||||||
RCTReportError(onComplete, @"Cannot convert argument to string: %@", error);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
NSString *execString = [NSString stringWithFormat:@"JSON.stringify(require('%@').%@.apply(null, %@));", name, method, argsString];
|
|
||||||
|
|
||||||
NSString *ret = [_webView stringByEvaluatingJavaScriptFromString:execString];
|
|
||||||
if (ret.length == 0) {
|
|
||||||
RCTReportError(onComplete, @"Empty return string: JavaScript error running script: %@", execString);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
id objcValue = RCTJSONParse(ret, &error);
|
|
||||||
if (!objcValue) {
|
|
||||||
RCTReportError(onComplete, @"Cannot parse json response: %@", error);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
onComplete(objcValue, nil);
|
|
||||||
}];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* We cannot use the standard eval JS method. Source will not show up in the
|
|
||||||
* debugger. So we have to use this (essentially) async API - and register
|
|
||||||
* ourselves as the webview delegate to be notified when load is complete.
|
|
||||||
*/
|
|
||||||
- (void)executeApplicationScript:(NSData *)script
|
|
||||||
sourceURL:(NSURL *)url
|
|
||||||
onComplete:(RCTJavaScriptCompleteBlock)onComplete
|
|
||||||
{
|
|
||||||
if (![NSThread isMainThread]) {
|
|
||||||
dispatch_sync(dispatch_get_main_queue(), ^{
|
|
||||||
[self executeApplicationScript:script sourceURL:url onComplete:onComplete];
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
RCTAssert(onComplete != nil, @"");
|
|
||||||
NSString *scriptString = [[NSString alloc] initWithData:script encoding:NSUTF8StringEncoding];
|
|
||||||
__weak RCTWebViewExecutor *weakSelf = self;
|
|
||||||
_onApplicationScriptLoaded = ^(NSError *error){
|
|
||||||
RCTWebViewExecutor *strongSelf = weakSelf;
|
|
||||||
if (!strongSelf) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
strongSelf->_valid = error == nil;
|
|
||||||
onComplete(error);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_objectsToInject.count > 0) {
|
|
||||||
NSMutableString *scriptWithInjections = [[NSMutableString alloc] initWithString:@"/* BEGIN NATIVELY INJECTED OBJECTS */\n"];
|
|
||||||
[_objectsToInject enumerateKeysAndObjectsUsingBlock:
|
|
||||||
^(NSString *objectName, NSString *blockScript, __unused BOOL *stop) {
|
|
||||||
[scriptWithInjections appendString:objectName];
|
|
||||||
[scriptWithInjections appendString:@" = ("];
|
|
||||||
[scriptWithInjections appendString:blockScript];
|
|
||||||
[scriptWithInjections appendString:@");\n"];
|
|
||||||
}];
|
|
||||||
[_objectsToInject removeAllObjects];
|
|
||||||
[scriptWithInjections appendString:@"/* END NATIVELY INJECTED OBJECTS */\n"];
|
|
||||||
[scriptWithInjections appendString:scriptString];
|
|
||||||
scriptString = scriptWithInjections;
|
|
||||||
}
|
|
||||||
|
|
||||||
scriptString = [_commentsRegex stringByReplacingMatchesInString:scriptString
|
|
||||||
options:0
|
|
||||||
range:NSMakeRange(0, script.length)
|
|
||||||
withTemplate:@""];
|
|
||||||
scriptString = [_scriptTagsRegex stringByReplacingMatchesInString:scriptString
|
|
||||||
options:0
|
|
||||||
range:NSMakeRange(0, script.length)
|
|
||||||
withTemplate:@"\\\\<$1\\\\>"];
|
|
||||||
|
|
||||||
NSString *runScript =
|
|
||||||
[NSString
|
|
||||||
stringWithFormat:@"<html><head></head><body><script type='text/javascript'>%@</script></body></html>",
|
|
||||||
scriptString
|
|
||||||
];
|
|
||||||
[_webView loadHTMLString:runScript baseURL:url];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)executeBlockOnJavaScriptQueue:(dispatch_block_t)block
|
|
||||||
{
|
|
||||||
|
|
||||||
if ([NSThread isMainThread]) {
|
|
||||||
block();
|
|
||||||
} else {
|
|
||||||
dispatch_async(dispatch_get_main_queue(), block);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)executeAsyncBlockOnJavaScriptQueue:(dispatch_block_t)block
|
|
||||||
{
|
|
||||||
dispatch_async(dispatch_get_main_queue(), block);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* `UIWebViewDelegate` methods. Handle application script load.
|
|
||||||
*/
|
|
||||||
- (void)webViewDidFinishLoad:(__unused UIWebView *)webView
|
|
||||||
{
|
|
||||||
RCTAssertMainThread();
|
|
||||||
if (_onApplicationScriptLoaded) {
|
|
||||||
_onApplicationScriptLoaded(nil); // TODO(frantic): how to fetch error from UIWebView?
|
|
||||||
}
|
|
||||||
_onApplicationScriptLoaded = nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)injectJSONText:(NSString *)script
|
|
||||||
asGlobalObjectNamed:(NSString *)objectName
|
|
||||||
callback:(RCTJavaScriptCompleteBlock)onComplete
|
|
||||||
{
|
|
||||||
if (RCT_DEBUG) {
|
|
||||||
RCTAssert(!_objectsToInject[objectName],
|
|
||||||
@"already injected object named %@", _objectsToInject[objectName]);
|
|
||||||
}
|
|
||||||
_objectsToInject[objectName] = script;
|
|
||||||
onComplete(nil);
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -415,13 +415,6 @@ RCT_EXPORT_MODULE()
|
|||||||
}]];
|
}]];
|
||||||
}
|
}
|
||||||
|
|
||||||
Class safariExecutorClass = NSClassFromString(@"RCTWebViewExecutor");
|
|
||||||
BOOL isDebuggingInSafari = _executorClass && _executorClass == safariExecutorClass;
|
|
||||||
NSString *debugTitleSafari = isDebuggingInSafari ? @"Disable Safari Debugging" : @"Debug in Safari";
|
|
||||||
[items addObject:[RCTDevMenuItem buttonItemWithTitle:debugTitleSafari handler:^{
|
|
||||||
weakSelf.executorClass = isDebuggingInSafari ? Nil : safariExecutorClass;
|
|
||||||
}]];
|
|
||||||
|
|
||||||
if (_liveReloadURL) {
|
if (_liveReloadURL) {
|
||||||
NSString *liveReloadTitle = _liveReloadEnabled ? @"Disable Live Reload" : @"Enable Live Reload";
|
NSString *liveReloadTitle = _liveReloadEnabled ? @"Disable Live Reload" : @"Enable Live Reload";
|
||||||
[items addObject:[RCTDevMenuItem buttonItemWithTitle:liveReloadTitle handler:^{
|
[items addObject:[RCTDevMenuItem buttonItemWithTitle:liveReloadTitle handler:^{
|
||||||
@@ -552,8 +545,7 @@ RCT_EXPORT_METHOD(reload)
|
|||||||
// needed to prevent overriding a custom executor with the default if a
|
// needed to prevent overriding a custom executor with the default if a
|
||||||
// custom executor has been set directly on the bridge
|
// custom executor has been set directly on the bridge
|
||||||
if (executorClass == Nil &&
|
if (executorClass == Nil &&
|
||||||
(_bridge.executorClass != NSClassFromString(@"RCTWebSocketExecutor") &&
|
_bridge.executorClass != NSClassFromString(@"RCTWebSocketExecutor")) {
|
||||||
_bridge.executorClass != NSClassFromString(@"RCTWebViewExecutor"))) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
13456E961ADAD482009F94A7 /* RCTConvert+MapKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 13456E951ADAD482009F94A7 /* RCTConvert+MapKit.m */; };
|
13456E961ADAD482009F94A7 /* RCTConvert+MapKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 13456E951ADAD482009F94A7 /* RCTConvert+MapKit.m */; };
|
||||||
134FCB361A6D42D900051CC8 /* RCTSparseArray.m in Sources */ = {isa = PBXBuildFile; fileRef = 83BEE46D1A6D19BC00B5863B /* RCTSparseArray.m */; };
|
134FCB361A6D42D900051CC8 /* RCTSparseArray.m in Sources */ = {isa = PBXBuildFile; fileRef = 83BEE46D1A6D19BC00B5863B /* RCTSparseArray.m */; };
|
||||||
134FCB3D1A6E7F0800051CC8 /* RCTContextExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 134FCB3A1A6E7F0800051CC8 /* RCTContextExecutor.m */; };
|
134FCB3D1A6E7F0800051CC8 /* RCTContextExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 134FCB3A1A6E7F0800051CC8 /* RCTContextExecutor.m */; };
|
||||||
134FCB3E1A6E7F0800051CC8 /* RCTWebViewExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 134FCB3C1A6E7F0800051CC8 /* RCTWebViewExecutor.m */; };
|
|
||||||
13513F3C1B1F43F400FCE529 /* RCTProgressViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13513F3B1B1F43F400FCE529 /* RCTProgressViewManager.m */; };
|
13513F3C1B1F43F400FCE529 /* RCTProgressViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13513F3B1B1F43F400FCE529 /* RCTProgressViewManager.m */; };
|
||||||
13723B501A82FD3C00F88898 /* RCTStatusBarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13723B4F1A82FD3C00F88898 /* RCTStatusBarManager.m */; };
|
13723B501A82FD3C00F88898 /* RCTStatusBarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13723B4F1A82FD3C00F88898 /* RCTStatusBarManager.m */; };
|
||||||
1372B70A1AB030C200659ED6 /* RCTAppState.m in Sources */ = {isa = PBXBuildFile; fileRef = 1372B7091AB030C200659ED6 /* RCTAppState.m */; };
|
1372B70A1AB030C200659ED6 /* RCTAppState.m in Sources */ = {isa = PBXBuildFile; fileRef = 1372B7091AB030C200659ED6 /* RCTAppState.m */; };
|
||||||
@@ -53,11 +52,11 @@
|
|||||||
142014191B32094000CC17BA /* RCTPerformanceLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 142014171B32094000CC17BA /* RCTPerformanceLogger.m */; };
|
142014191B32094000CC17BA /* RCTPerformanceLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 142014171B32094000CC17BA /* RCTPerformanceLogger.m */; };
|
||||||
14435CE51AAC4AE100FC20F4 /* RCTMap.m in Sources */ = {isa = PBXBuildFile; fileRef = 14435CE21AAC4AE100FC20F4 /* RCTMap.m */; };
|
14435CE51AAC4AE100FC20F4 /* RCTMap.m in Sources */ = {isa = PBXBuildFile; fileRef = 14435CE21AAC4AE100FC20F4 /* RCTMap.m */; };
|
||||||
14435CE61AAC4AE100FC20F4 /* RCTMapManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 14435CE41AAC4AE100FC20F4 /* RCTMapManager.m */; };
|
14435CE61AAC4AE100FC20F4 /* RCTMapManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 14435CE41AAC4AE100FC20F4 /* RCTMapManager.m */; };
|
||||||
1450FF861BCFF28A00208362 /* RCTProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF811BCFF28A00208362 /* RCTProfile.m */; settings = {ASSET_TAGS = (); }; };
|
1450FF861BCFF28A00208362 /* RCTProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF811BCFF28A00208362 /* RCTProfile.m */; };
|
||||||
1450FF871BCFF28A00208362 /* RCTProfileTrampoline-arm.S in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF821BCFF28A00208362 /* RCTProfileTrampoline-arm.S */; settings = {ASSET_TAGS = (); }; };
|
1450FF871BCFF28A00208362 /* RCTProfileTrampoline-arm.S in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF821BCFF28A00208362 /* RCTProfileTrampoline-arm.S */; };
|
||||||
1450FF881BCFF28A00208362 /* RCTProfileTrampoline-arm64.S in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF831BCFF28A00208362 /* RCTProfileTrampoline-arm64.S */; settings = {ASSET_TAGS = (); }; };
|
1450FF881BCFF28A00208362 /* RCTProfileTrampoline-arm64.S in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF831BCFF28A00208362 /* RCTProfileTrampoline-arm64.S */; };
|
||||||
1450FF891BCFF28A00208362 /* RCTProfileTrampoline-x86.S in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF841BCFF28A00208362 /* RCTProfileTrampoline-x86.S */; settings = {ASSET_TAGS = (); }; };
|
1450FF891BCFF28A00208362 /* RCTProfileTrampoline-x86.S in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF841BCFF28A00208362 /* RCTProfileTrampoline-x86.S */; };
|
||||||
1450FF8A1BCFF28A00208362 /* RCTProfileTrampoline-x86_64.S in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF851BCFF28A00208362 /* RCTProfileTrampoline-x86_64.S */; settings = {ASSET_TAGS = (); }; };
|
1450FF8A1BCFF28A00208362 /* RCTProfileTrampoline-x86_64.S in Sources */ = {isa = PBXBuildFile; fileRef = 1450FF851BCFF28A00208362 /* RCTProfileTrampoline-x86_64.S */; };
|
||||||
14C2CA711B3AC63800E6CBB2 /* RCTModuleMethod.m in Sources */ = {isa = PBXBuildFile; fileRef = 14C2CA701B3AC63800E6CBB2 /* RCTModuleMethod.m */; };
|
14C2CA711B3AC63800E6CBB2 /* RCTModuleMethod.m in Sources */ = {isa = PBXBuildFile; fileRef = 14C2CA701B3AC63800E6CBB2 /* RCTModuleMethod.m */; };
|
||||||
14C2CA741B3AC64300E6CBB2 /* RCTModuleData.m in Sources */ = {isa = PBXBuildFile; fileRef = 14C2CA731B3AC64300E6CBB2 /* RCTModuleData.m */; };
|
14C2CA741B3AC64300E6CBB2 /* RCTModuleData.m in Sources */ = {isa = PBXBuildFile; fileRef = 14C2CA731B3AC64300E6CBB2 /* RCTModuleData.m */; };
|
||||||
14C2CA761B3AC64F00E6CBB2 /* RCTFrameUpdate.m in Sources */ = {isa = PBXBuildFile; fileRef = 14C2CA751B3AC64F00E6CBB2 /* RCTFrameUpdate.m */; };
|
14C2CA761B3AC64F00E6CBB2 /* RCTFrameUpdate.m in Sources */ = {isa = PBXBuildFile; fileRef = 14C2CA751B3AC64F00E6CBB2 /* RCTFrameUpdate.m */; };
|
||||||
@@ -65,8 +64,8 @@
|
|||||||
14F3620D1AABD06A001CE568 /* RCTSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F362081AABD06A001CE568 /* RCTSwitch.m */; };
|
14F3620D1AABD06A001CE568 /* RCTSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F362081AABD06A001CE568 /* RCTSwitch.m */; };
|
||||||
14F3620E1AABD06A001CE568 /* RCTSwitchManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F3620A1AABD06A001CE568 /* RCTSwitchManager.m */; };
|
14F3620E1AABD06A001CE568 /* RCTSwitchManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F3620A1AABD06A001CE568 /* RCTSwitchManager.m */; };
|
||||||
14F484561AABFCE100FDF6B9 /* RCTSliderManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F484551AABFCE100FDF6B9 /* RCTSliderManager.m */; };
|
14F484561AABFCE100FDF6B9 /* RCTSliderManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F484551AABFCE100FDF6B9 /* RCTSliderManager.m */; };
|
||||||
14F7A0EC1BDA3B3C003C6C10 /* RCTPerfMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F7A0EB1BDA3B3C003C6C10 /* RCTPerfMonitor.m */; settings = {ASSET_TAGS = (); }; };
|
14F7A0EC1BDA3B3C003C6C10 /* RCTPerfMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F7A0EB1BDA3B3C003C6C10 /* RCTPerfMonitor.m */; };
|
||||||
14F7A0F01BDA714B003C6C10 /* RCTFPSGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F7A0EF1BDA714B003C6C10 /* RCTFPSGraph.m */; settings = {ASSET_TAGS = (); }; };
|
14F7A0F01BDA714B003C6C10 /* RCTFPSGraph.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F7A0EF1BDA714B003C6C10 /* RCTFPSGraph.m */; };
|
||||||
58114A161AAE854800E7D092 /* RCTPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 58114A131AAE854800E7D092 /* RCTPicker.m */; };
|
58114A161AAE854800E7D092 /* RCTPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 58114A131AAE854800E7D092 /* RCTPicker.m */; };
|
||||||
58114A171AAE854800E7D092 /* RCTPickerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 58114A151AAE854800E7D092 /* RCTPickerManager.m */; };
|
58114A171AAE854800E7D092 /* RCTPickerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 58114A151AAE854800E7D092 /* RCTPickerManager.m */; };
|
||||||
58114A501AAE93D500E7D092 /* RCTAsyncLocalStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 58114A4E1AAE93D500E7D092 /* RCTAsyncLocalStorage.m */; };
|
58114A501AAE93D500E7D092 /* RCTAsyncLocalStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 58114A4E1AAE93D500E7D092 /* RCTAsyncLocalStorage.m */; };
|
||||||
@@ -121,8 +120,6 @@
|
|||||||
1345A83B1B265A0E00583190 /* RCTURLRequestHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTURLRequestHandler.h; sourceTree = "<group>"; };
|
1345A83B1B265A0E00583190 /* RCTURLRequestHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTURLRequestHandler.h; sourceTree = "<group>"; };
|
||||||
134FCB391A6E7F0800051CC8 /* RCTContextExecutor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTContextExecutor.h; sourceTree = "<group>"; };
|
134FCB391A6E7F0800051CC8 /* RCTContextExecutor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTContextExecutor.h; sourceTree = "<group>"; };
|
||||||
134FCB3A1A6E7F0800051CC8 /* RCTContextExecutor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTContextExecutor.m; sourceTree = "<group>"; };
|
134FCB3A1A6E7F0800051CC8 /* RCTContextExecutor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTContextExecutor.m; sourceTree = "<group>"; };
|
||||||
134FCB3B1A6E7F0800051CC8 /* RCTWebViewExecutor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTWebViewExecutor.h; sourceTree = "<group>"; };
|
|
||||||
134FCB3C1A6E7F0800051CC8 /* RCTWebViewExecutor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTWebViewExecutor.m; sourceTree = "<group>"; };
|
|
||||||
13513F3A1B1F43F400FCE529 /* RCTProgressViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTProgressViewManager.h; sourceTree = "<group>"; };
|
13513F3A1B1F43F400FCE529 /* RCTProgressViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTProgressViewManager.h; sourceTree = "<group>"; };
|
||||||
13513F3B1B1F43F400FCE529 /* RCTProgressViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTProgressViewManager.m; sourceTree = "<group>"; };
|
13513F3B1B1F43F400FCE529 /* RCTProgressViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTProgressViewManager.m; sourceTree = "<group>"; };
|
||||||
13723B4E1A82FD3C00F88898 /* RCTStatusBarManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTStatusBarManager.h; sourceTree = "<group>"; };
|
13723B4E1A82FD3C00F88898 /* RCTStatusBarManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTStatusBarManager.h; sourceTree = "<group>"; };
|
||||||
@@ -290,8 +287,6 @@
|
|||||||
children = (
|
children = (
|
||||||
134FCB391A6E7F0800051CC8 /* RCTContextExecutor.h */,
|
134FCB391A6E7F0800051CC8 /* RCTContextExecutor.h */,
|
||||||
134FCB3A1A6E7F0800051CC8 /* RCTContextExecutor.m */,
|
134FCB3A1A6E7F0800051CC8 /* RCTContextExecutor.m */,
|
||||||
134FCB3B1A6E7F0800051CC8 /* RCTWebViewExecutor.h */,
|
|
||||||
134FCB3C1A6E7F0800051CC8 /* RCTWebViewExecutor.m */,
|
|
||||||
);
|
);
|
||||||
path = Executors;
|
path = Executors;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -686,7 +681,6 @@
|
|||||||
83392EB31B6634E10013B15F /* RCTModalHostViewController.m in Sources */,
|
83392EB31B6634E10013B15F /* RCTModalHostViewController.m in Sources */,
|
||||||
14435CE51AAC4AE100FC20F4 /* RCTMap.m in Sources */,
|
14435CE51AAC4AE100FC20F4 /* RCTMap.m in Sources */,
|
||||||
1450FF891BCFF28A00208362 /* RCTProfileTrampoline-x86.S in Sources */,
|
1450FF891BCFF28A00208362 /* RCTProfileTrampoline-x86.S in Sources */,
|
||||||
134FCB3E1A6E7F0800051CC8 /* RCTWebViewExecutor.m in Sources */,
|
|
||||||
13B0801C1A69489C00A75B9A /* RCTNavItem.m in Sources */,
|
13B0801C1A69489C00A75B9A /* RCTNavItem.m in Sources */,
|
||||||
1385D0341B665AAE000A309B /* RCTModuleMap.m in Sources */,
|
1385D0341B665AAE000A309B /* RCTModuleMap.m in Sources */,
|
||||||
83CBBA691A601EF300E9B192 /* RCTEventDispatcher.m in Sources */,
|
83CBBA691A601EF300E9B192 /* RCTEventDispatcher.m in Sources */,
|
||||||
|
|||||||
Reference in New Issue
Block a user