From 70601412471437257bf594cf8da0c0ded100b462 Mon Sep 17 00:00:00 2001 From: Christopher Chedeau Date: Mon, 2 Mar 2015 11:36:55 -0800 Subject: [PATCH] Updates from Mon Mar 2 - [ReactNative] Move merge & mergeInto from downstream to vendor | Christopher Chedeau - [ReactNative] Replace all the call sites of mergeInto by Object.assign | Christopher Chedeau - [WIP] Migrated View Managers over to new architecture | Nick Lockwood - [ReactNative] Replace all the call sites of copyProperties by Object.assign | Christopher Chedeau - [ReactNative] Migrate navigator.geolocation to open source | Christopher Chedeau - [ReactNative] Remove README.md, LICENSE and .travis.yml from fbobjc | Christopher Chedeau - [react-packager] Better transform errors | Amjad Masad - [React Native][react-packager] Fix test runner and fialing tests | Amjad Masad --- .../RCTNetworkImage/RCTNetworkImageView.h | 3 +- .../Pods/Headers/Public/ReactKit/RCTBridge.h | 46 +- .../Headers/Public/ReactKit/RCTBridgeModule.h | 24 +- .../Public/ReactKit/RCTJavaScriptExecutor.h | 2 +- .../Public/ReactKit/RCTLocationObserver.h | 7 + .../Pods/Headers/Public/ReactKit/RCTLog.h | 51 +- .../Headers/Public/ReactKit/RCTNavigator.h | 2 +- .../Headers/Public/ReactKit/RCTScrollView.h | 4 +- .../Headers/Public/ReactKit/RCTShadowView.h | 44 +- .../Headers/Public/ReactKit/RCTTextField.h | 2 +- .../Headers/Public/ReactKit/RCTTouchHandler.h | 2 +- .../Headers/Public/ReactKit/RCTUIManager.h | 30 + .../Pods/Headers/Public/ReactKit/RCTUtils.h | 19 +- .../Pods/Headers/Public/ReactKit/RCTView.h | 1 - .../Headers/Public/ReactKit/RCTViewManager.h | 55 +- .../Public/ReactKit/RCTViewNodeProtocol.h | 4 +- .../ReactKit/RCTWrapperViewController.h | 7 +- .../Pods/Pods.xcodeproj/project.pbxproj | 4880 +++++++++-------- .../RCTNetworkImage/RCTNetworkImageView.h | 3 +- .../Pods/Headers/Public/ReactKit/RCTBridge.h | 46 +- .../Headers/Public/ReactKit/RCTBridgeModule.h | 24 +- .../Public/ReactKit/RCTJavaScriptExecutor.h | 2 +- .../Public/ReactKit/RCTLocationObserver.h | 7 + .../Pods/Headers/Public/ReactKit/RCTLog.h | 51 +- .../Headers/Public/ReactKit/RCTNavigator.h | 2 +- .../Headers/Public/ReactKit/RCTScrollView.h | 4 +- .../Headers/Public/ReactKit/RCTShadowView.h | 44 +- .../Headers/Public/ReactKit/RCTTextField.h | 2 +- .../Headers/Public/ReactKit/RCTTouchHandler.h | 2 +- .../Headers/Public/ReactKit/RCTUIManager.h | 30 + .../Pods/Headers/Public/ReactKit/RCTUtils.h | 19 +- .../Pods/Headers/Public/ReactKit/RCTView.h | 1 - .../Headers/Public/ReactKit/RCTViewManager.h | 55 +- .../Public/ReactKit/RCTViewNodeProtocol.h | 4 +- .../ReactKit/RCTWrapperViewController.h | 7 +- .../Pods/Pods.xcodeproj/project.pbxproj | 4158 +++++++------- Examples/UIExplorer/GeoLocationExample.js | 72 + Examples/UIExplorer/Info.plist | 2 + .../UIExplorer.xcodeproj/project.pbxproj | 136 +- Examples/UIExplorer/UIExplorerList.js | 1 + .../Components/Navigation/NavigatorIOS.ios.js | 4 +- .../Components/TextInput/TextInput.ios.js | 3 +- .../Touchable/TouchableWithoutFeedback.js | 3 +- Libraries/GeoLocation/GeoLocation.js | 98 + Libraries/Image/RCTNetworkImageView.h | 3 +- Libraries/Image/RCTNetworkImageView.m | 5 - .../InitializeJavaScriptAppEngine.js | 6 + Libraries/Network/RCTDataManager.m | 3 +- .../RCTDataManager.xcodeproj/project.pbxproj | 8 + Libraries/Text/RCTTextManager.m | 46 +- Libraries/Utilities/Dimensions.js | 3 +- Libraries/vendor/core/merge.js | 50 + Libraries/vendor/core/mergeInto.js | 59 + ReactKit/Base/RCTBridge.h | 46 +- ReactKit/Base/RCTBridge.m | 654 +-- ReactKit/Base/RCTBridgeModule.h | 24 +- ReactKit/Base/RCTJavaScriptExecutor.h | 2 +- ReactKit/Base/RCTLog.h | 51 +- ReactKit/Base/RCTLog.m | 36 +- ReactKit/Base/RCTRedBox.m | 47 +- ReactKit/Base/RCTRootView.m | 16 +- ReactKit/Base/RCTTouchHandler.h | 2 +- ReactKit/Base/RCTTouchHandler.m | 5 - ReactKit/Base/RCTUtils.h | 19 +- ReactKit/Base/RCTUtils.m | 25 + ReactKit/Base/RCTViewNodeProtocol.h | 4 +- ReactKit/Executors/RCTContextExecutor.m | 2 +- ReactKit/Modules/RCTAlertManager.m | 6 +- ReactKit/Modules/RCTLocationObserver.h | 7 + ReactKit/Modules/RCTLocationObserver.m | 185 + ReactKit/Modules/RCTStatusBarManager.m | 2 +- ReactKit/Modules/RCTTiming.m | 30 +- ReactKit/Modules/RCTUIManager.h | 30 + ReactKit/Modules/RCTUIManager.m | 368 +- ReactKit/ReactKit.xcodeproj/project.pbxproj | 6 + ReactKit/Views/RCTNavigator.h | 2 +- ReactKit/Views/RCTNavigator.m | 34 +- ReactKit/Views/RCTNavigatorManager.m | 25 +- ReactKit/Views/RCTScrollView.h | 4 +- ReactKit/Views/RCTScrollView.m | 8 +- ReactKit/Views/RCTScrollViewManager.m | 17 +- ReactKit/Views/RCTShadowView.h | 44 +- ReactKit/Views/RCTShadowView.m | 104 +- ReactKit/Views/RCTStaticImageManager.m | 6 +- ReactKit/Views/RCTTextField.h | 2 +- ReactKit/Views/RCTTextField.m | 9 +- ReactKit/Views/RCTTextFieldManager.m | 29 +- .../Views/RCTUIActivityIndicatorViewManager.m | 9 +- ReactKit/Views/RCTView.h | 1 - ReactKit/Views/RCTView.m | 8 +- ReactKit/Views/RCTViewManager.h | 55 +- ReactKit/Views/RCTViewManager.m | 88 +- ReactKit/Views/RCTWrapperViewController.h | 7 +- ReactKit/Views/RCTWrapperViewController.m | 5 - jestSupport/scriptPreprocess.js | 6 +- .../src/Activity/__tests__/Activity-test.js | 6 +- .../__tests__/DependencyGraph-test.js | 1 - .../src/FileWatcher/__mocks__/sane.js | 5 + .../src/JSTransformer/__mocks__/q.js | 6 + .../src/JSTransformer/__mocks__/underscore.js | 5 + .../src/JSTransformer/__tests__/Cache-test.js | 3 +- .../__tests__/Transformer-test.js | 5 +- .../react-packager/src/JSTransformer/index.js | 34 +- .../src/Packager/__tests__/Package-test.js | 6 +- .../src/Packager/__tests__/Packager-test.js | 2 +- packager/react-packager/src/Packager/index.js | 4 +- .../src/Server/__tests__/Server-test.js | 14 +- packager/react-packager/src/Server/index.js | 1 + packager/transformer.js | 9 +- 109 files changed, 6394 insertions(+), 5883 deletions(-) create mode 100644 Examples/Movies/Pods/Headers/Public/ReactKit/RCTLocationObserver.h create mode 100644 Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTLocationObserver.h create mode 100644 Examples/UIExplorer/GeoLocationExample.js create mode 100644 Libraries/GeoLocation/GeoLocation.js create mode 100644 Libraries/vendor/core/merge.js create mode 100644 Libraries/vendor/core/mergeInto.js create mode 100644 ReactKit/Modules/RCTLocationObserver.h create mode 100644 ReactKit/Modules/RCTLocationObserver.m create mode 100644 packager/react-packager/src/FileWatcher/__mocks__/sane.js create mode 100644 packager/react-packager/src/JSTransformer/__mocks__/q.js create mode 100644 packager/react-packager/src/JSTransformer/__mocks__/underscore.js diff --git a/Examples/Movies/Pods/Headers/Public/RCTNetworkImage/RCTNetworkImageView.h b/Examples/Movies/Pods/Headers/Public/RCTNetworkImage/RCTNetworkImageView.h index c99ed0689aed78..920bf705c5f50d 100644 --- a/Examples/Movies/Pods/Headers/Public/RCTNetworkImage/RCTNetworkImageView.h +++ b/Examples/Movies/Pods/Headers/Public/RCTNetworkImage/RCTNetworkImageView.h @@ -6,7 +6,8 @@ @interface RCTNetworkImageView : UIView -- (instancetype)initWithFrame:(CGRect)frame imageDownloader:(RCTImageDownloader *)imageDownloader; +- (instancetype)initWithFrame:(CGRect)frame + imageDownloader:(RCTImageDownloader *)imageDownloader NS_DESIGNATED_INITIALIZER; /** * An image that will appear while the view is loading the image from the network, diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTBridge.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTBridge.h index 9a890a07acf50c..4dcaee8e2381c3 100644 --- a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTBridge.h +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTBridge.h @@ -6,32 +6,16 @@ @class RCTBridge; @class RCTEventDispatcher; -@class RCTRootView; - -/** - * Utilities for constructing common response objects. When sending a - * systemError back to JS, it's important to describe whether or not it was a - * system error, or API usage error. System errors should never happen and are - * therefore logged using `RCTLogError()`. API usage errors are expected if the - * API is misused and will therefore not be logged using `RCTLogError()`. The JS - * application code is expected to handle them. Regardless of type, each error - * should be logged at most once. - */ -static inline NSDictionary *RCTSystemErrorObject(NSString *msg) -{ - return @{@"systemError": msg ?: @""}; -} - -static inline NSDictionary *RCTAPIErrorObject(NSString *msg) -{ - return @{@"apiError": msg ?: @""}; -} /** * This block can be used to instantiate modules that require additional * init parameters, or additional configuration prior to being used. + * The bridge will call this block to instatiate the modules, and will + * be responsible for invalidating/releasing them when the bridge is destroyed. + * For this reason, the block should always return new module instances, and + * module instances should not be shared between bridges. */ -typedef NSArray *(^RCTBridgeModuleProviderBlock)(RCTBridge *bridge); +typedef NSArray *(^RCTBridgeModuleProviderBlock)(void); /** * Async batched bridge used to communicate with the JavaScript application. @@ -42,12 +26,12 @@ typedef NSArray *(^RCTBridgeModuleProviderBlock)(RCTBridge *bridge); * The designated initializer. This creates a new bridge on top of the specified * executor. The bridge should then be used for all subsequent communication * with the JavaScript code running in the executor. Modules will be automatically - * instantiated using the default contructor, but you can optionally pass in a - * module provider block to manually instantiate modules that require additional - * init parameters or configuration. + * instantiated using the default contructor, but you can optionally pass in an + * array of pre-initialized module instances if they require additional init + * parameters or configuration. */ -- (instancetype)initWithJavaScriptExecutor:(id)javaScriptExecutor - moduleProvider:(RCTBridgeModuleProviderBlock)block NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithExecutor:(id)executor + moduleProvider:(RCTBridgeModuleProviderBlock)block NS_DESIGNATED_INITIALIZER; /** * This method is used to call functions in the JavaScript application context. @@ -81,16 +65,6 @@ typedef NSArray *(^RCTBridgeModuleProviderBlock)(RCTBridge *bridge); */ @property (nonatomic, readonly) dispatch_queue_t shadowQueue; -// For use in implementing delegates, which may need to queue responses. -- (RCTResponseSenderBlock)createResponseSenderBlock:(NSInteger)callbackID; - -/** - * Register a root view with the bridge. Theorectically, a single bridge can - * support multiple root views, however this feature is not currently exposed - * and may eventually be removed. - */ -- (void)registerRootView:(RCTRootView *)rootView; - /** * Global logging function that will print to both xcode and JS debugger consoles. * diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTBridgeModule.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTBridgeModule.h index d9df70a228abfe..2627a0b9fa03a8 100644 --- a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTBridgeModule.h +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTBridgeModule.h @@ -19,10 +19,12 @@ typedef void (^RCTResponseSenderBlock)(NSArray *response); @optional /** - * Optional initializer for modules that require access - * to bridge features, such as sending events or making JS calls + * A reference to the RCTBridge. Useful for modules that require access + * to bridge features, such as sending events or making JS calls. This + * will be set automatically by the bridge when it initializes the module. +* To implement this in your module, just add @synthesize bridge = _bridge; */ -- (instancetype)initWithBridge:(RCTBridge *)bridge; +@property (nonatomic, strong) RCTBridge *bridge; /** * The module name exposed to JS. If omitted, this will be inferred @@ -42,17 +44,11 @@ typedef void (^RCTResponseSenderBlock)(NSArray *response); /** * Injects constants into JS. These constants are made accessible via - * NativeModules.moduleName.X. Note that this method is not inherited when you - * subclass a module, and you should not call [super constantsToExport] when - * implementing it. - */ -+ (NSDictionary *)constantsToExport; - -/** - * Some "constants" are not really constant, and need to be re-generated - * each time the bridge module is created. Support for this feature is - * deprecated and may be going away or changing, but for now you can use - * the -constantsToExport instance method to register these "pseudo-constants". + * NativeModules.ModuleName.X. This method is called when the module is + * registered by the bridge. It is only called once for the lifetime of the + * bridge, so it is not suitable for returning dynamic values, but may be + * used for long-lived values such as session keys, that are regenerated only + * as part of a reload of the entire React application. */ - (NSDictionary *)constantsToExport; diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTJavaScriptExecutor.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTJavaScriptExecutor.h index 7062570a4e0c66..4d32f1c2f6b93a 100644 --- a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTJavaScriptExecutor.h +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTJavaScriptExecutor.h @@ -5,7 +5,7 @@ #import "RCTInvalidating.h" typedef void (^RCTJavaScriptCompleteBlock)(NSError *error); -typedef void (^RCTJavaScriptCallback)(id objcValue, NSError *error); +typedef void (^RCTJavaScriptCallback)(id json, NSError *error); /** * Abstracts away a JavaScript execution context - we may be running code in a diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTLocationObserver.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTLocationObserver.h new file mode 100644 index 00000000000000..ad3ba2ce29bd27 --- /dev/null +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTLocationObserver.h @@ -0,0 +1,7 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#import "RCTBridgeModule.h" + +@interface RCTLocationObserver : NSObject + +@end diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTLog.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTLog.h index a97d134584ea6b..ba72bc8ff3993e 100644 --- a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTLog.h +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTLog.h @@ -20,28 +20,22 @@ // If defined, only log messages that match this regex will fatal #define RCTLOG_FATAL_REGEX nil -#define _RCTLog(__RCTLog__level, ...) do { \ - NSString *__RCTLog__levelStr; \ - switch(__RCTLog__level) { \ - case RCTLOG_INFO: __RCTLog__levelStr = @"info"; break; \ - case RCTLOG_WARN: __RCTLog__levelStr = @"warn"; break; \ - case RCTLOG_ERROR: __RCTLog__levelStr = @"error"; break; \ - case RCTLOG_MUSTFIX: __RCTLog__levelStr = @"mustfix"; break; \ - } \ - NSString *__RCTLog__msg = _RCTLogObjects(RCTLogFormat(__VA_ARGS__), __RCTLog__levelStr); \ - if (__RCTLog__level >= RCTLOG_FATAL_LEVEL) { \ - BOOL __RCTLog__fail = YES; \ - if (RCTLOG_FATAL_REGEX) { \ - NSError *__RCTLog__e; \ - NSRegularExpression *__RCTLog__regex = [NSRegularExpression regularExpressionWithPattern:RCTLOG_FATAL_REGEX options:0 error:&__RCTLog__e]; \ - __RCTLog__fail = [__RCTLog__regex numberOfMatchesInString:__RCTLog__msg options:0 range:NSMakeRange(0, [__RCTLog__msg length])] > 0; \ - } \ - RCTCAssert(!__RCTLog__fail, @"RCTLOG_FATAL_LEVEL %@: %@", __RCTLog__levelStr, __RCTLog__msg); \ - } \ - if (__RCTLog__level >= RCTLOG_REDBOX_LEVEL) { \ - RCTRedBox *__RCTLog__redBox = [RCTRedBox sharedInstance]; \ - [__RCTLog__redBox showErrorMessage:__RCTLog__msg]; \ - } \ +extern __unsafe_unretained NSString *RCTLogLevels[]; + +#define _RCTLog(_level, ...) do { \ + NSString *__RCTLog__levelStr = RCTLogLevels[_level - 1]; \ + NSString *__RCTLog__msg = RCTLogObjects(RCTLogFormat(__FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__), __RCTLog__levelStr); \ + if (_level >= RCTLOG_FATAL_LEVEL) { \ + BOOL __RCTLog__fail = YES; \ + if (RCTLOG_FATAL_REGEX) { \ + NSRegularExpression *__RCTLog__regex = [NSRegularExpression regularExpressionWithPattern:RCTLOG_FATAL_REGEX options:0 error:NULL]; \ + __RCTLog__fail = [__RCTLog__regex numberOfMatchesInString:__RCTLog__msg options:0 range:NSMakeRange(0, [__RCTLog__msg length])] > 0; \ + } \ + RCTCAssert(!__RCTLog__fail, @"RCTLOG_FATAL_LEVEL %@: %@", __RCTLog__levelStr, __RCTLog__msg); \ + } \ + if (_level >= RCTLOG_REDBOX_LEVEL) { \ + [[RCTRedBox sharedInstance] showErrorMessage:__RCTLog__msg]; \ + } \ } while (0) #define RCTLog(...) _RCTLog(RCTLOG_INFO, __VA_ARGS__) @@ -50,20 +44,15 @@ #define RCTLogError(...) _RCTLog(RCTLOG_ERROR, __VA_ARGS__) #define RCTLogMustFix(...) _RCTLog(RCTLOG_MUSTFIX, __VA_ARGS__) -#define RCTLogFormat(...) _RCTLogFormat(__FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__) -#define RCTLogFormatString(...) _RCTLogFormatString(__FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__) - #ifdef __cplusplus extern "C" { #endif -NSString *_RCTLogObjects(NSArray *objects, NSString *level); -NSArray *_RCTLogFormat(const char *file, int lineNumber, const char *funcName, NSString *format, ...) NS_FORMAT_FUNCTION(4,5); -NSString *_RCTLogFormatString(const char *file, int lineNumber, const char *funcName, NSString *format, ...) NS_FORMAT_FUNCTION(4,5); +NSString *RCTLogObjects(NSArray *objects, NSString *level); +NSArray *RCTLogFormat(const char *file, int lineNumber, const char *funcName, NSString *format, ...) NS_FORMAT_FUNCTION(4,5); + +void RCTInjectLogFunction(void (^logFunction)(NSString *msg)); #ifdef __cplusplus } #endif - -typedef void (^RCTLogFunction)(NSString *format, NSString *str); -void RCTInjectLogFunction(RCTLogFunction func); diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTNavigator.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTNavigator.h index 5d928efa7bddbe..c9051c75387da4 100644 --- a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTNavigator.h +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTNavigator.h @@ -11,7 +11,7 @@ @property (nonatomic, strong) UIView *reactNavSuperviewLink; @property (nonatomic, assign) NSInteger requestedTopOfStack; -- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher; +- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; /** * Schedules a JavaScript navigation and prevents `UIKit` from navigating until diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTScrollView.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTScrollView.h index 82667b2051b1a5..204ddf494145b4 100644 --- a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTScrollView.h +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTScrollView.h @@ -12,6 +12,8 @@ @interface RCTScrollView : RCTView +- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; + /** * If the `contentSize` is not provided, then the `contentSize` will * automatically be determined by the size of the `RKScrollView` subview. @@ -32,6 +34,4 @@ @property (nonatomic, assign) BOOL centerContent; @property (nonatomic, copy) NSArray *stickyHeaderIndices; -- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher; - @end diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTShadowView.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTShadowView.h index ec2b8c3537e4fa..9a09bad4fe48f2 100644 --- a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTShadowView.h +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTShadowView.h @@ -3,29 +3,15 @@ #import #import "Layout.h" +#import "RCTUIManager.h" #import "RCTViewNodeProtocol.h" @class RCTSparseArray; -// TODO: amalgamate these enums? -typedef NS_ENUM(NSUInteger, RCTLayoutLifecycle) { - RCTLayoutLifecycleUninitialized = 0, - RCTLayoutLifecycleComputed, - RCTLayoutLifecycleDirtied, -}; - -// TODO: is this still needed? -typedef NS_ENUM(NSUInteger, RCTPropagationLifecycle) { - RCTPropagationLifecycleUninitialized = 0, - RCTPropagationLifecycleComputed, - RCTPropagationLifecycleDirtied, -}; - -// TODO: move this to text node? -typedef NS_ENUM(NSUInteger, RCTTextLifecycle) { - RCTTextLifecycleUninitialized = 0, - RCTTextLifecycleComputed, - RCTTextLifecycleDirtied, +typedef NS_ENUM(NSUInteger, RCTUpdateLifecycle) { + RCTUpdateLifecycleUninitialized = 0, + RCTUpdateLifecycleComputed, + RCTUpdateLifecycleDirtied, }; // TODO: is this redundact now? @@ -48,7 +34,7 @@ typedef void (^RCTApplierBlock)(RCTSparseArray *); @property (nonatomic, copy) NSString *moduleName; @property (nonatomic, assign) BOOL isBGColorExplicitlySet; // Used to propogate to children @property (nonatomic, strong) UIColor *backgroundColor; // Used to propogate to children -@property (nonatomic, assign) RCTLayoutLifecycle layoutLifecycle; +@property (nonatomic, assign) RCTUpdateLifecycle layoutLifecycle; /** * isNewView - Used to track the first time the view is introduced into the hierarchy. It is initialized YES, then is @@ -122,11 +108,23 @@ typedef void (^RCTApplierBlock)(RCTSparseArray *); @property (nonatomic, assign) css_wrap_type_t flexWrap; @property (nonatomic, assign) CGFloat flex; -- (void)collectUpdatedProperties:(NSMutableSet *)viewsWithNewProperties parentProperties:(NSDictionary *)parentProperties; +/** + * Calculate property changes that need to be propagated to the view. + * The applierBlocks set contains RCTApplierBlock functions that must be applied + * on the main thread in order to update the view. + */ +- (void)collectUpdatedProperties:(NSMutableSet *)applierBlocks parentProperties:(NSDictionary *)parentProperties; + +/** + * Calculate all views whose frame needs updating after layout has been calculated. + * The viewsWithNewFrame set contains the reactTags of the views that need updating. + */ - (void)collectRootUpdatedFrames:(NSMutableSet *)viewsWithNewFrame parentConstraint:(CGSize)parentConstraint; -- (void)fillCSSNode:(css_node_t *)node; -// The following are implementation details exposed to subclasses. Do not call them directly +/** + * The following are implementation details exposed to subclasses. Do not call them directly + */ +- (void)fillCSSNode:(css_node_t *)node; - (void)dirtyLayout; - (BOOL)isLayoutDirty; diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTTextField.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTTextField.h index 2a0225f27682d4..1688f8fdc0c138 100644 --- a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTTextField.h +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTTextField.h @@ -10,6 +10,6 @@ @property (nonatomic, assign) BOOL autoCorrect; @property (nonatomic, assign) UIEdgeInsets paddingEdgeInsets; // TODO: contentInset -- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher; +- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; @end diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTTouchHandler.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTTouchHandler.h index 53379a78a3b119..46c81b9ef5ea53 100644 --- a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTTouchHandler.h +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTTouchHandler.h @@ -8,7 +8,7 @@ @interface RCTTouchHandler : UIGestureRecognizer -- (instancetype)initWithBridge:(RCTBridge *)bridge; +- (instancetype)initWithBridge:(RCTBridge *)bridge NS_DESIGNATED_INITIALIZER; - (void)startOrResetInteractionTiming; - (NSDictionary *)endAndResetInteractionTiming; diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTUIManager.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTUIManager.h index 87e91118aeaff0..701c37f930aacc 100644 --- a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTUIManager.h +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTUIManager.h @@ -2,13 +2,18 @@ #import +#import "RCTBridge.h" #import "RCTBridgeModule.h" #import "RCTInvalidating.h" +#import "RCTViewManager.h" @class RCTRootView; @protocol RCTScrollableProtocol; +/** + * The RCTUIManager is the module responsible for updating the view hierarchy. + */ @interface RCTUIManager : NSObject @property (nonatomic, weak) id mainScrollView; @@ -19,8 +24,33 @@ */ @property (nonatomic, readwrite, weak) id nativeMainScrollDelegate; +/** + * Register a root view with the RCTUIManager. Theoretically, a single manager + * can support multiple root views, however this feature is not currently exposed + * and may eventually be removed. + */ - (void)registerRootView:(RCTRootView *)rootView; +/** + * Schedule a block to be executed on the UI thread. Useful if you need to execute + * view logic after all currently queued view updates have completed. + */ +- (void)addUIBlock:(RCTViewManagerUIBlock)block; + +/** + * The view that is currently first responder, according to the JS context. + */ + (UIView *)JSResponder; @end + +/** + * This category makes the current RCTUIManager instance available via the + * RCTBridge, which is useful for RCTBridgeModules or RCTViewManagers that + * need to access the RCTUIManager. + */ +@interface RCTBridge (RCTUIManager) + +@property (nonatomic, readonly) RCTUIManager *uiManager; + +@end diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTUtils.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTUtils.h index 3612b1f274b774..de203e4aeeba47 100644 --- a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTUtils.h +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTUtils.h @@ -1,17 +1,15 @@ // Copyright 2004-present Facebook. All Rights Reserved. +#import + #import #import -#import #import "RCTAssert.h" -// Macro to indicate when inherited initializer is not to be used -#define RCT_NOT_DESIGNATED_INITIALIZER() \ -do { \ - RCTAssert(NO, @"%@ is not the designated initializer for instances of %@.", NSStringFromSelector(_cmd), [self class]); \ - return nil; \ -} while (0) +#ifdef __cplusplus +extern "C" { +#endif // Utility functions for JSON object <-> string serialization/deserialization NSString *RCTJSONStringify(id jsonObject, NSError **error); @@ -39,3 +37,10 @@ void RCTSwapInstanceMethods(Class cls, SEL original, SEL replacement); // Module subclass support BOOL RCTClassOverridesClassMethod(Class cls, SEL selector); BOOL RCTClassOverridesInstanceMethod(Class cls, SEL selector); + +// Enumerate all classes that conform to NSObject protocol +void RCTEnumerateClasses(void (^block)(Class cls)); + +#ifdef __cplusplus +} +#endif diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTView.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTView.h index 77dee1df8cab89..8023366331505d 100644 --- a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTView.h +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTView.h @@ -11,7 +11,6 @@ @interface RCTView : UIView @property (nonatomic, assign) RCTPointerEvents pointerEvents; -@property (nonatomic, copy) NSString *overrideAccessibilityLabel; + (void)autoAdjustInsetsForView:(UIView *)parentView withScrollView:(UIScrollView *)scrollView diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTViewManager.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTViewManager.h index e77be09c12baf4..d3b7c8a017aefe 100644 --- a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTViewManager.h +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTViewManager.h @@ -2,9 +2,11 @@ #import +#import "RCTBridgeModule.h" #import "RCTConvert.h" #import "RCTLog.h" +@class RCTBridge; @class RCTEventDispatcher; @class RCTShadowView; @class RCTSparseArray; @@ -12,19 +14,22 @@ typedef void (^RCTViewManagerUIBlock)(RCTUIManager *uiManager, RCTSparseArray *viewRegistry); -@interface RCTViewManager : NSObject +@interface RCTViewManager : NSObject /** - * Designated initializer for view modules. Override this when subclassing. + * The bridge can be used to access both the RCTUIIManager and the RCTEventDispatcher, + * allowing the manager (or the views that it manages) to manipulate the view + * hierarchy and send events back to the JS context. */ -- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; +@property (nonatomic, strong) RCTBridge *bridge; /** * The event dispatcher is used to send events back to the JavaScript application. * It can either be used directly by the module, or passed on to instantiated * view subclasses so that they can handle their own events. */ -@property (nonatomic, readonly, weak) RCTEventDispatcher *eventDispatcher; +// TODO: remove this, as it can be accessed directly from bridge +@property (nonatomic, readonly) RCTEventDispatcher *eventDispatcher; /** * The module name exposed to React JS. If omitted, this will be inferred @@ -88,34 +93,19 @@ typedef void (^RCTViewManagerUIBlock)(RCTUIManager *uiManager, RCTSparseArray *v + (NSDictionary *)customDirectEventTypes; /** - * Injects constants into JS. These constants are made accessible via - * NativeModules.moduleName.X. Note that this method is not inherited when you - * subclass a view module, and you should not call [super constantsToExport] - * when overriding it. + * Called to notify manager that layout has finished, in case any calculated + * properties need to be copied over from shadow view to view. */ -+ (NSDictionary *)constantsToExport; +- (RCTViewManagerUIBlock)uiBlockToAmendWithShadowView:(RCTShadowView *)shadowView; /** - * To deprecate, hopefully + * Called after view hierarchy manipulation has finished, and all shadow props + * have been set, but before layout has been performed. Useful for performing + * custo layout logic or tasks that involve walking the view hierarchy. + * To be deprecated, hopefully. */ - (RCTViewManagerUIBlock)uiBlockToAmendWithShadowViewRegistry:(RCTSparseArray *)shadowViewRegistry; -/** - * Informal protocol for setting view and shadowView properties. - * Implement methods matching these patterns to set any properties that - * require special treatment (e.g. where the type or name cannot be inferred). - * - * - (void)set_:(id)property - * forView:(UIView *)view - * withDefaultView:(UIView *)defaultView; - * - * - (void)set_:(id)property - * forShadowView:(RCTShadowView *)view - * withDefaultView:(RCTShadowView *)defaultView; - * - * For simple cases, use the macros below: - */ - /** * This handles the simple case, where JS and native property names match * And the type can be automatically inferred. @@ -131,10 +121,21 @@ RCT_REMAP_VIEW_PROPERTY(name, name) - (void)set_##name:(id)json forView:(id)view withDefaultView:(id)defaultView { \ if ((json && !RCTSetProperty(view, @#keypath, json)) || \ (!json && !RCTCopyProperty(view, defaultView, @#keypath))) { \ - RCTLogMustFix(@"%@ does not have setter for `%s` property", [view class], #name); \ + RCTLogError(@"%@ does not have setter for `%s` property", [view class], #name); \ } \ } +/** + * These macros can be used when you need to provide custom logic for setting + * view properties. The macro should be followed by a method body, which can + * refer to "json", "view" and "defaultView" to implement the required logic. + */ +#define RCT_CUSTOM_VIEW_PROPERTY(name, viewType) \ +- (void)set_##name:(id)json forView:(viewType)view withDefaultView:(viewType)defaultView + +#define RCT_CUSTOM_SHADOW_PROPERTY(name, viewType) \ +- (void)set_##name:(id)json forShadowView:(viewType)view withDefaultView:(viewType)defaultView + /** * These are useful in cases where the module's superclass handles a * property, but you wish to "unhandle" it, so it will be ignored. diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTViewNodeProtocol.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTViewNodeProtocol.h index 1fa3e252b3c1b7..b6f59ea103567e 100644 --- a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTViewNodeProtocol.h +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTViewNodeProtocol.h @@ -8,7 +8,7 @@ */ @protocol RCTViewNodeProtocol -@property (nonatomic, strong) NSNumber *reactTag; +@property (nonatomic, copy) NSNumber *reactTag; - (void)insertReactSubview:(id)subview atIndex:(NSInteger)atIndex; - (void)removeReactSubview:(id)subview; @@ -21,6 +21,8 @@ @optional // TODO: Deprecate this +// This method is called after layout has been performed for all views known +// to the RCTViewManager. It is only called on UIViews, not shadow views. - (void)reactBridgeDidFinishTransaction; @end diff --git a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTWrapperViewController.h b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTWrapperViewController.h index d8f22270a23c63..69075c6a4dcb92 100644 --- a/Examples/Movies/Pods/Headers/Public/ReactKit/RCTWrapperViewController.h +++ b/Examples/Movies/Pods/Headers/Public/ReactKit/RCTWrapperViewController.h @@ -15,8 +15,11 @@ didMoveToNavigationController:(UINavigationController *)navigationController; @interface RCTWrapperViewController : UIViewController -- (instancetype)initWithContentView:(UIView *)contentView eventDispatcher:(RCTEventDispatcher *)eventDispatcher; -- (instancetype)initWithNavItem:(RCTNavItem *)navItem eventDispatcher:(RCTEventDispatcher *)eventDispatcher; +- (instancetype)initWithContentView:(UIView *)contentView + eventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; + +- (instancetype)initWithNavItem:(RCTNavItem *)navItem + eventDispatcher:(RCTEventDispatcher *)eventDispatcher; @property (nonatomic, readwrite, weak) id navigationListener; @property (nonatomic, strong, readwrite) RCTNavItem *navItem; diff --git a/Examples/Movies/Pods/Pods.xcodeproj/project.pbxproj b/Examples/Movies/Pods/Pods.xcodeproj/project.pbxproj index 4c4cbbb9939af7..78abb2853f0fb0 100644 --- a/Examples/Movies/Pods/Pods.xcodeproj/project.pbxproj +++ b/Examples/Movies/Pods/Pods.xcodeproj/project.pbxproj @@ -10,76 +10,42 @@ 46 objects - 01DCDFB27A48C1C7A65C2FE6 + 0173994FBD7222C1B4B85D39 - fileRef - 6DDC3764218E410C0E170649 - isa - PBXBuildFile - - 048B0A5A6D3AE173A67CAE93 - - children + buildConfigurations - ADAA64389F188489440FF394 - 7643C57FD9EC1838B0876BBD - 1E172C103C8DDDD51C260454 - 07EC0B27D8891E964C48E4D7 + F68B2AE07F4085B87FF52821 + C2BDC288A96EC2C204FACAE4 + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXGroup - name - Support Files - path - ../../Examples/Movies/Pods/Target Support Files/Pods-RCTDataManager - sourceTree - <group> + XCConfigurationList - 0612C8DB98399C9428864589 + 01B6DA188F10AE9FFA70E61D fileRef - 12E89F4AD5820CD9722AD8D0 + F2ABD2CA1B8437A717A8B02E isa PBXBuildFile - 06C6AEB41647779AE72D05D0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RCTView.h - path - Views/RCTView.h - sourceTree - <group> - - 07192780F349FFB50B16BAE0 + 01D7CE13EF89CFA0018C19A0 fileRef - 2CD30CF1663697474B87D08E + 8A82870BBCE2FA926206ED2D isa PBXBuildFile - 075ECFDD9BCF0E8901AE8625 + 02C832411CE32F64BDD67CC1 - children - - 581AF9074AC1929D0D1DAB9E - F5B54251AEB97ECA54054310 - 90D5389E9D73CDBB276C1B34 - 9DD770C9F0909D7B663F79B9 - 19DA60B0FDB51F564823798C - + fileRef + 96F2CE3DEDD063F8FA50FC85 isa - PBXGroup - sourceTree - <group> + PBXBuildFile - 07EC0B27D8891E964C48E4D7 + 03530ADCDC580A57166AA806 includeInIndex 1 @@ -87,175 +53,239 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + RCTWebViewExecutor.h path - Pods-RCTDataManager-prefix.pch + Executors/RCTWebViewExecutor.h sourceTree <group> - 09567798D374D77BC5D172B2 + 03FD3C8DB550D1282CBB9C3E includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h + name + RCTViewNodeProtocol.h path - RCTRawTextManager.m + Base/RCTViewNodeProtocol.h sourceTree <group> - 0A9F33FAC1AE68D789D1776C - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-ReactKit.a - sourceTree - BUILT_PRODUCTS_DIR - - 0AC9EE10D9CD5E34ACCC37E0 + 044BBEB63131E9FE2F872148 buildActionMask 2147483647 files - 275C0B2E6CA279611D94AA46 - AC11EC6BAF7ED8F76E48397C - 79BE258178E49FD51E2CC4B8 - 7CAF752A4A0E37B9583A87DB - CDB49A44CDED422DC861AC80 + 4E6A93805B58D09C4600FF05 + C282F1B7233E10C31D165549 + D75EAAB4BC589DDF11232D56 + A8C61C98F7AD6EECE46F23A1 + 33916283B42A90EB2B8F2140 + 01B6DA188F10AE9FFA70E61D + 633B6147455573AD11D33B17 + D76CEC171F408A47616D2702 + 5D9B90F9719D985B55F7C18C + 5ECB6108E445CF5DE8A722E1 + 062503FBD206E26790A623AD + 5B6F23C6AAC6BB99EE21DB9C + DC18D421A4941275A1E7BAD4 + BB31A06505EACAC92D4D0A0B + EFF3190D434856C25227FE84 + 41AF61FF5047AC2A90E63243 + 4EE692971713B878D06E68BF + E7374582F5A63129724C8E68 + 88B72F3A6A40EC4748301F91 + 29BBF9FA713A5AB704D306E9 + F8081DBFD37093C1EEE34411 + BCB593A7E334E01470803D73 + E3096E2B995B282B80B5EB43 + 35A397022DF088C1172B1838 + 8DCC86B6F4E41374D0531909 + 7DB6785802A84DD169F83470 + BF614E05BE9314CB6B03CFF4 + FE2FDD4E39D0988AC7EFFDA9 + 4D889E6AAD0CCC67149429C8 + E334AB4D0391D82A0DE38C55 + 02C832411CE32F64BDD67CC1 + 837C1CE5C1C60B6A6F190B9C + 6F52D92057414C873A177506 + 1679781612747FFA6AAE8C09 + CBD46C255D226CC91750FF6E + 1B7076F6FD3566344815F47D + 3AD6AA2C3BC5D95361491E47 + 24598A9A8938EC9559EC5124 isa - PBXHeadersBuildPhase + PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 - 0B6D46780D0C5F037B9E50AF - - fileRef - 99F944FDFA42E71DFD034D19 - isa - PBXBuildFile - - 0C7A5A737917BA18817CC207 + 05D4613D8454536A0C582506 - children - - 88505E4377E9058030C956B9 - 48C4ACFA9C0F6598C47536AE - 35138A0F59E8056491258E07 - B1A56B88049B3F5961BAEF1F - 36CB892D416C92B38A7AB919 - 9F9D9AED8316D779EAEA6CBB - 6ECB652E72348E5A2B4636FC - + baseConfigurationReference + 4C90FAF8FBD658990410C082 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.0 + OTHER_LDFLAGS + + OTHER_LIBTOOLFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + isa - PBXGroup + XCBuildConfiguration name - Pods - path - Target Support Files/Pods - sourceTree - <group> - - 0D505D056F591E9588F343AA - - containerPortal - BF94ECC553449F9486D48453 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - F3743E4364DCD50F66E07E03 - remoteInfo - Pods-ReactKit + Debug - 0D8B5E4BC6B802176DDD88E5 + 062503FBD206E26790A623AD fileRef - E64248B361B8929CFE00FADC + 7ED6FCDD892431F7AC6D6C5A isa PBXBuildFile - 0EA55D4BFB9E3A24AB05482E + 0685D213EE86B64A622AFE5D includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTBridgeModule.h + RCTTextField.m path - Base/RCTBridgeModule.h + Views/RCTTextField.m sourceTree <group> - 0EAFFB5E66ACE63398007604 + 06AAAC565037D8EF25720E03 + + fileRef + 7D2FB16662B96BDA8D478530 + isa + PBXBuildFile + + 093628ECA081B518E7705B0B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RCTUIActivityIndicatorViewManager.m + RCTUIManager.h path - Views/RCTUIActivityIndicatorViewManager.m + Modules/RCTUIManager.h sourceTree <group> - 100E0F66BB2561CD9C5403B1 + 0974827BD5B31C816AC72CAC + explicitFileType + archive.ar includeInIndex - 1 + 0 isa PBXFileReference - lastKnownFileType - sourcecode.c.h path - RCTShadowText.h + libPods-ReactKit.a sourceTree - <group> - - 106C230D038A62D2C37E5D75 - - fileRef - 59BF11297A6B39FFEBBB7861 - isa - PBXBuildFile + BUILT_PRODUCTS_DIR - 12E89F4AD5820CD9722AD8D0 + 09DD900CDB912629197918C6 - includeInIndex - 1 + baseConfigurationReference + EACA5CCAD77673E65C1833FF + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Target Support Files/Pods-RCTDataManager/Pods-RCTDataManager-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.0 + OTHER_LDFLAGS + + OTHER_LIBTOOLFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + XCBuildConfiguration name - RCTViewNodeProtocol.h - path - Base/RCTViewNodeProtocol.h - sourceTree - <group> + Debug - 149C58083427CE1CD36C8B10 + 0AA8E7CAAA1EB4DFFBF6912C fileRef - B6BB65B0F788DFF2F121D4F7 + 2EA25D395FD517EFB3A63CE0 isa PBXBuildFile - 1592E2F41A2DC2C927EBBF12 + 0B4C1F8311751A431A9E43EB includeInIndex 1 @@ -264,13 +294,13 @@ lastKnownFileType sourcecode.c.h name - RCTRootView.h + RCTNavItem.h path - Base/RCTRootView.h + Views/RCTNavItem.h sourceTree <group> - 15F0D204E7BD9B1607786736 + 0D86E23D02587E54BDB5A0D7 includeInIndex 1 @@ -278,106 +308,181 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - RCTAnimationType.h path - Base/RCTAnimationType.h + RCTShadowRawText.h sourceTree <group> - 1782BB92C0A529BF6AD72DFF + 0D97C6D9FE8F0AF312C3ADBD includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + text name - RCTJavaScriptExecutor.h + Podfile path - Base/RCTJavaScriptExecutor.h + ../Podfile sourceTree - <group> + SOURCE_ROOT + xcLanguageSpecificationIdentifier + xcode.lang.ruby - 17C0992A90EEBE80108AEF54 + 10C5E9DA9022285D577594CC - includeInIndex - 1 + buildConfigurations + + 6375425963FF6C21603732B4 + C3421858755177699D9E6345 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RCTWrapperViewController.h - path - Views/RCTWrapperViewController.h - sourceTree - <group> + XCConfigurationList - 19CACF004F780E3053926DAD + 10D002B7A1565F524A1F72C4 + fileRef + C7DAA61CA1B9FB9112DC5983 isa - PBXTargetDependency - name - Pods-ReactKit - target - F3743E4364DCD50F66E07E03 - targetProxy - 0D505D056F591E9588F343AA + PBXBuildFile + + 114860C3B3984FFBF421B47A + + containerPortal + AF4E3BAC82C6DDA51BDA9F71 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 13B7E1C57803F05652F30C1F + remoteInfo + Pods-ReactKit + + 11B7060CF244E44DEEF1FCD2 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RCTNavigator.m + path + Views/RCTNavigator.m + sourceTree + <group> - 19DA60B0FDB51F564823798C + 13031656FE090AFA478A0C2E children - 0C7A5A737917BA18817CC207 + 87B7D30CEC087A04E202DDF9 + EFC27C70A2E94665DCBD987F + 2E8B8AAB1186EB8F52D6EFC0 isa PBXGroup name - Targets Support Files + RCTDataManager + path + ../../../Libraries/Network sourceTree <group> - 1AD314273817E152C7E315BA + 13B7E1C57803F05652F30C1F + + buildConfigurationList + 89592EB56DDBF7B54A3F915E + buildPhases + + 044BBEB63131E9FE2F872148 + 4F32A425781BE2418E5CD092 + EAAA2A06300750F7AF266715 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-ReactKit + productName + Pods-ReactKit + productReference + 0974827BD5B31C816AC72CAC + productType + com.apple.product-type.library.static + + 1475284FDEE790E29FEF888A fileRef - 3ED59FDCF3B8DE44DD4C1667 + 7C11EEBC74FF8F6EFB8BD6E5 isa PBXBuildFile - 1B55097A38652E47A94193F2 + 1679781612747FFA6AAE8C09 fileRef - 1EA900AAF1440F65670A2F9D + 3390C2E3EC519AA76A894A7D isa PBXBuildFile - 1D2F520811E96888A497E24D + 17E61BB696CF0023E490D3CA + fileRef + 2DA988B3C7927462F6BB59D3 isa - PBXTargetDependency - name - Pods-RCTDataManager - target - 932A9309F808F533D40582BB - targetProxy - 21457A5B7E5C5541936A2CAD + PBXBuildFile + + 1ACF8F46B5AD479EC0466814 + + fileRef + 38F25FBF3DBBC640787DE1CA + isa + PBXBuildFile + + 1B7076F6FD3566344815F47D + + fileRef + E6E580D9802C99CB05F48910 + isa + PBXBuildFile - 1E172C103C8DDDD51C260454 + 1C1136F66431443A895D4575 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h + name + RCTStaticImageManager.h path - Pods-RCTDataManager-dummy.m + Views/RCTStaticImageManager.h sourceTree <group> - 1EA900AAF1440F65670A2F9D + 1D5C968D81BECC8D8DEDC3A7 + + isa + PBXTargetDependency + name + Pods-RCTDataManager + target + 3FF676DAA336F8ABDEA584D9 + targetProxy + 3D469FC246B36C81E1EA93D2 + + 1EDA6F4B89391190F7502F3D includeInIndex 1 @@ -386,73 +491,96 @@ lastKnownFileType sourcecode.c.objc name - RCTLog.m + RCTRootView.m path - Base/RCTLog.m + Base/RCTRootView.m sourceTree <group> - 1F99DFDC314091E129914F82 + 212CF767A11B52D3DC51414C - buildConfigurations + children - 4CA65E88D9B0A200CE9C9118 - 36CE53F49AD09C21E10675B8 + 0D97C6D9FE8F0AF312C3ADBD + D8261275342CB017F0469C64 + 9048736F9B1A3F0F27F9756B + D9BE4CF160D48568F7B2FACB + 638F2CE8FA7884834B7EAC77 - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release isa - XCConfigurationList + PBXGroup + sourceTree + <group> - 2108DCEFAE6CF37482CF1C0A + 22E5124B31E3B321E794DC94 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RCTKeyCommands.m + Layout.h path - Base/RCTKeyCommands.m + Layout/Layout.h sourceTree <group> - 21457A5B7E5C5541936A2CAD + 22E9B6EECA586FBF58E275F4 - containerPortal - BF94ECC553449F9486D48453 + fileRef + F1AF16AE6F3215C601C8BF2A isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 932A9309F808F533D40582BB - remoteInfo - Pods-RCTDataManager + PBXBuildFile + + 23395DE50939F65252BF47BB + + fileRef + 3AC91EE176996201C149C349 + isa + PBXBuildFile - 21B434F724639E29EE45E44A + 2361BD02D0DF3561CD7AEF1B isa PBXTargetDependency name - Pods-ReactKit + Pods-RCTText target - F3743E4364DCD50F66E07E03 + 7E2C54A003A5BC8A330804F4 targetProxy - ED320F983C718810619BABED + DACF3CCEA461A0EFF3A35E2F + + 24598A9A8938EC9559EC5124 + + fileRef + A8023D6299F24D6877BEF258 + isa + PBXBuildFile - 237ECCFD5EBD9B7C1250F4EB + 25489EEC4989DEA64FAE8023 fileRef - 9574DCBBFE4EFAB138C43844 + 4D5D8632A9C98162B3121441 isa PBXBuildFile - 2409A610D6AB34EA92D33BE8 + 257F1B1261EF6B02C93E5D38 + + buildConfigurations + + 5F0D2152E1F3FFF4904B8AD1 + 9A3A4BADEAD95DF2CD29E9FF + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 2642D314F24DD3D6748B767E includeInIndex 1 @@ -461,40 +589,26 @@ lastKnownFileType sourcecode.c.h name - RCTScrollableProtocol.h + RCTShadowView.h path - Base/RCTScrollableProtocol.h + Views/RCTShadowView.h sourceTree <group> - 246059A6C46C6F40327D9399 + 26A204DC9AB5C60041E26549 - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + text.xcconfig path - libPods-RCTNetworkImage.a + Pods-RCTNetworkImage-Private.xcconfig sourceTree - BUILT_PRODUCTS_DIR - - 2572FEE8678A128A03571950 - - fileRef - 56FB9B47588CF0F36FC96390 - isa - PBXBuildFile - - 275C0B2E6CA279611D94AA46 - - fileRef - 6D4728D5CA14DC2EE7EA3544 - isa - PBXBuildFile + <group> - 284A37E0CFFCA95AD5134C06 + 26B3254CC05AAA7C7F9BAA92 includeInIndex 1 @@ -502,14 +616,12 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - RCTUtils.h path - Base/RCTUtils.h + Pods-RCTDataManager-prefix.pch sourceTree <group> - 290C5E10241C0B2C924F14E6 + 2857546735111E15C0AA45AC includeInIndex 1 @@ -518,20 +630,13 @@ lastKnownFileType sourcecode.c.h name - RCTViewManager.h + RCTExceptionsManager.h path - Views/RCTViewManager.h + Modules/RCTExceptionsManager.h sourceTree <group> - 291C4B433C922679BD458D5D - - fileRef - 6AEEF603053FE768ED3E5E4D - isa - PBXBuildFile - - 2BA58703E0C4B2559E28AE42 + 2873C87E10A36AE0FCBCC365 includeInIndex 1 @@ -540,28 +645,26 @@ lastKnownFileType sourcecode.c.objc name - RCTUIManager.m + RCTUtils.m path - Modules/RCTUIManager.m + Base/RCTUtils.m sourceTree <group> - 2CD30CF1663697474B87D08E + 2909FAB5B87A982551EDB4EB includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - RCTAutoInsetsProtocol.h + sourcecode.c.objc path - Base/RCTAutoInsetsProtocol.h + RCTNetworkImageViewManager.m sourceTree <group> - 2D208141DE8BC9DD7F5B8235 + 293F7285A686B031D78DF112 includeInIndex 1 @@ -570,20 +673,20 @@ lastKnownFileType sourcecode.c.objc name - RCTAlertManager.m + RCTTiming.m path - Modules/RCTAlertManager.m + Modules/RCTTiming.m sourceTree <group> - 2F5591055141A2D7A7918CE8 + 29BBF9FA713A5AB704D306E9 fileRef - C6EB359CFF6D72170FEF1C91 + 882FB9B260693792E2AFDABC isa PBXBuildFile - 311B1F10DB6ECD376C2C410D + 2DA988B3C7927462F6BB59D3 includeInIndex 1 @@ -591,12 +694,32 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + RCTScrollableProtocol.h path - RCTNetworkImageView.h + Base/RCTScrollableProtocol.h + sourceTree + <group> + + 2E8B8AAB1186EB8F52D6EFC0 + + children + + F360C8A48A0EF89F49435FCC + EACA5CCAD77673E65C1833FF + B894B8E147E4FB2BB7ACA437 + 26B3254CC05AAA7C7F9BAA92 + + isa + PBXGroup + name + Support Files + path + ../../Examples/Movies/Pods/Target Support Files/Pods-RCTDataManager sourceTree <group> - 31A2F342B0F590C341B80E22 + 2EA25D395FD517EFB3A63CE0 includeInIndex 1 @@ -605,60 +728,46 @@ lastKnownFileType sourcecode.c.objc path - RCTShadowRawText.m + RCTImageDownloader.m sourceTree <group> - 33E7FC15EBE6599AD3335BD8 + 307038CC5432B6825D99CCBE - buildConfigurationList - 71F3A1261352CEB12D1EFE4E - buildPhases - - DB81D9FD0801A42A48152E0C - 9C430EF11704FB8793CA009C - - buildRules - - dependencies + fileRef + F70008E1D19432CFDECE123B + isa + PBXBuildFile + + 30DF4E19DFA1C80A5362DF26 + + buildActionMask + 2147483647 + files - 1D2F520811E96888A497E24D - 88CBD87EEA9FF31AAF273687 - BAD9616489752B70E709809C - 21B434F724639E29EE45E44A + CD51637ED2FE910623A957AB isa - PBXNativeTarget - name - Pods - productName - Pods - productReference - 84D089AE2FBBC9A674F6ED90 - productType - com.apple.product-type.library.static + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 341FFB9C954C6FBBDA1D4CBB + 33092F9AC97DCFFCA7A6BEA5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc + name + RCTSparseArray.m path - Pods-ReactKit-prefix.pch + Base/RCTSparseArray.m sourceTree <group> - 34DBA23002D2E96B79EF3FBE - - fileRef - 8FEF9214746F53A78E8F115F - isa - PBXBuildFile - - 35138A0F59E8056491258E07 + 3390C2E3EC519AA76A894A7D includeInIndex 1 @@ -666,195 +775,371 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + RCTView.m path - Pods-dummy.m + Views/RCTView.m sourceTree <group> - 369763B76533786A8E5353A4 + 33916283B42A90EB2B8F2140 + + fileRef + 686E67C6B83BF51888A3313F + isa + PBXBuildFile + + 346B439D0B302F06A3944961 fileRef - 4B4D221F3651E112595964E6 + C1273C2B1A34EE7896A3D5FA isa PBXBuildFile - 36CB892D416C92B38A7AB919 + 354EDECEBDF81C85B10548DE includeInIndex 1 isa PBXFileReference lastKnownFileType - text.script.sh + sourcecode.c.h path - Pods-resources.sh + RCTRawTextManager.h sourceTree <group> - 36CE53F49AD09C21E10675B8 + 355261A12E64B026B300EB1C - baseConfigurationReference - D7A44E0FB5FD0083354541D0 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-RCTNetworkImage/Pods-RCTNetworkImage-prefix.pch - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - + includeInIndex + 1 isa - XCBuildConfiguration + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Release + RCTNavigatorManager.m + path + Views/RCTNavigatorManager.m + sourceTree + <group> - 38E413F00F71503B4358BF3A + 35A397022DF088C1172B1838 - buildActionMask - 2147483647 - files + fileRef + D394735C135D36533551DF37 + isa + PBXBuildFile + + 35FADD2E366746654FDF0073 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTUtils.h + path + Base/RCTUtils.h + sourceTree + <group> + + 36C25DD43B6139727D23ABDE + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RCTTextFieldManager.m + path + Views/RCTTextFieldManager.m + sourceTree + <group> + + 37701A8B9A2FBF4FBAA01F9C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RCTEventDispatcher.m + path + Base/RCTEventDispatcher.m + sourceTree + <group> + + 38F25FBF3DBBC640787DE1CA + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTJavaScriptExecutor.h + path + Base/RCTJavaScriptExecutor.h + sourceTree + <group> + + 3AC91EE176996201C149C349 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + RCTText.h + sourceTree + <group> + + 3AD6AA2C3BC5D95361491E47 + + fileRef + 953CEE4B6D3D941453109D23 + isa + PBXBuildFile + + 3B1C86DC544A391311D0F119 + + fileRef + 43BB352AA7823226332FE80B + isa + PBXBuildFile + + 3B2EF60D760BB2D99E79CE51 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTUIActivityIndicatorViewManager.h + path + Views/RCTUIActivityIndicatorViewManager.h + sourceTree + <group> + + 3BDF7BEBB78C16E879E444E2 + + containerPortal + AF4E3BAC82C6DDA51BDA9F71 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 13B7E1C57803F05652F30C1F + remoteInfo + Pods-ReactKit + + 3C9A4805273F33EF92D439A4 + + fileRef + 35FADD2E366746654FDF0073 + isa + PBXBuildFile + + 3CD60F36DF6CEECFF4758BEE + + children - 538D24A47F778BE37D482A70 - B233C279B7F95C416BE7460F - 01DCDFB27A48C1C7A65C2FE6 - 6FC60E013E6B084708F80E1D + 354EDECEBDF81C85B10548DE + 63887528ABF88595D89EDA8E + 0D86E23D02587E54BDB5A0D7 + 7D2FB16662B96BDA8D478530 + 4BC269B918F30C81607B1FEA + 4E4EF91447A42AE99235BDF8 + 3AC91EE176996201C149C349 + D2906EE46F872A418B6B33AB + B406BF0BF6506637A35D5167 + 45BE4B1D1F55EE3D947EB961 + 87E9F10D0A968F86A2D3E064 isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXGroup + name + RCTText + path + ../../../Libraries/Text + sourceTree + <group> + + 3D469FC246B36C81E1EA93D2 + + containerPortal + AF4E3BAC82C6DDA51BDA9F71 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 3FF676DAA336F8ABDEA584D9 + remoteInfo + Pods-RCTDataManager + + 3DE934F8F76F207BD55AB677 + + fileRef + EE584546150D3E55E6515F2E + isa + PBXBuildFile + + 3E20F8895633E084956AFB54 + + fileRef + D0FD74048B7D3439EDC0DDCF + isa + PBXBuildFile + + 3F92F6DE3C2C780DD4346C6D + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTStaticImage.h + path + Views/RCTStaticImage.h + sourceTree + <group> + + 3FF676DAA336F8ABDEA584D9 + + buildConfigurationList + 7E77223E8EF39DF16D41D603 + buildPhases + + 63359DD37C363E5C5515E6DE + 30DF4E19DFA1C80A5362DF26 + E4450895EB5C944681A11604 + + buildRules + + dependencies + + FE9545D71B365894A20387A0 + + isa + PBXNativeTarget + name + Pods-RCTDataManager + productName + Pods-RCTDataManager + productReference + 89664286C51C7DFFF1F672C7 + productType + com.apple.product-type.library.static + + 409B932149D89EC4BF4440F9 + + fileRef + 354EDECEBDF81C85B10548DE + isa + PBXBuildFile + + 4103A439B8CB9FEE139E77F9 + + containerPortal + AF4E3BAC82C6DDA51BDA9F71 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 13B7E1C57803F05652F30C1F + remoteInfo + Pods-ReactKit + + 41AF61FF5047AC2A90E63243 + + fileRef + 11B7060CF244E44DEEF1FCD2 + isa + PBXBuildFile + + 41D8E6FE5E575AF2F24ED506 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-environment.h + sourceTree + <group> + + 42E74C2012329B8DC0CDD8C0 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTAnimationType.h + path + Base/RCTAnimationType.h + sourceTree + <group> + + 43BB352AA7823226332FE80B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTTiming.h + path + Modules/RCTTiming.h + sourceTree + <group> - 3AB2DFC2566FB389056F3BAC + 44A3273EA768EAD9FB3033B0 - baseConfigurationReference - 9F9D9AED8316D779EAEA6CBB - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - + fileRef + B5A92E4318F13DCE45C534F2 isa - XCBuildConfiguration - name - Debug + PBXBuildFile - 3AF0EA123B1D6D47095D8F69 + 45760E0B6F7A35A5C23C8B46 - baseConfigurationReference - 7643C57FD9EC1838B0876BBD - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-RCTDataManager/Pods-RCTDataManager-prefix.pch - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - + includeInIndex + 1 isa - XCBuildConfiguration + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Release + RCTTouchHandler.h + path + Base/RCTTouchHandler.h + sourceTree + <group> - 3C0A45593BBE3C2A57E72C81 + 45BE4B1D1F55EE3D947EB961 includeInIndex 1 @@ -863,11 +1148,18 @@ lastKnownFileType sourcecode.c.objc path - RCTDataManager.m + RCTTextManager.m sourceTree <group> - 3D1E50AF744E283AA07F6B6A + 45D22F90E12DC985BE508454 + + fileRef + 03530ADCDC580A57166AA806 + isa + PBXBuildFile + + 472F97575D9645EDA8B23D43 includeInIndex 1 @@ -876,332 +1168,340 @@ lastKnownFileType sourcecode.c.h name - RCTStaticImageManager.h + RCTRedBox.h path - Views/RCTStaticImageManager.h + Base/RCTRedBox.h sourceTree <group> - 3D6FC3872FA9FE79857A9533 + 48B2F9A5EEA775E9BDF2360D - 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 - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - COPY_PHASE_STRIP - YES - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - ONLY_ACTIVE_ARCH - YES - STRIP_INSTALLED_PRODUCT - NO - + explicitFileType + archive.ar + includeInIndex + 0 isa - XCBuildConfiguration - name - Debug + PBXFileReference + path + libPods.a + sourceTree + BUILT_PRODUCTS_DIR + + 496F484960908F7F255D665C + + fileRef + 8D0822A18641950E39DF6E85 + isa + PBXBuildFile - 3E42DBB95C1805122AE2171D + 4B893B55D3B47F56554BCEEB fileRef - 290C5E10241C0B2C924F14E6 + CC7A4C8E06F6C0B809F1ADF6 isa PBXBuildFile - 3ED59FDCF3B8DE44DD4C1667 + 4BC269B918F30C81607B1FEA includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - RCTBridge.m + sourcecode.c.h path - Base/RCTBridge.m + RCTShadowText.h sourceTree <group> - 3EDE783B10222492880DD3AB + 4C90FAF8FBD658990410C082 - buildActionMask - 2147483647 - files - - 63E51C8504EA2C10E68B02ED - + includeInIndex + 1 isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods.debug.xcconfig + sourceTree + <group> + + 4D5D8632A9C98162B3121441 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + RCTNetworkImageView.m + sourceTree + <group> - 3FFDD3C8378B7BB621BC78E9 + 4D889E6AAD0CCC67149429C8 fileRef - DFA3EC5E1764BCB1C6CDEC48 + 293F7285A686B031D78DF112 isa PBXBuildFile - 41135E6FEF13B7C0629B2504 + 4E4EF91447A42AE99235BDF8 - buildConfigurations + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + RCTShadowText.m + sourceTree + <group> + + 4E58EBB9F3E15EDD045ABDA5 + + buildConfigurationList + 10C5E9DA9022285D577594CC + buildPhases - 3D6FC3872FA9FE79857A9533 - C2E82E03DD326AD6B9E61CA8 + 9B86394A814DD0363FFDB8E4 + AE10B2159AD52275F05F8AC9 + F6713859D76D7A17020FF1D7 + + buildRules + + dependencies + + 9E55FC1AF8AFBA8E3DA00D8E - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release isa - XCConfigurationList + PBXNativeTarget + name + Pods-RCTNetworkImage + productName + Pods-RCTNetworkImage + productReference + 5571F59D7888CF59E6621A86 + productType + com.apple.product-type.library.static - 4144C0A7A0B5E9B910A49112 + 4E6A93805B58D09C4600FF05 - includeInIndex - 1 + fileRef + 55B5D865F1152367A8FBFA15 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-RCTNetworkImage-prefix.pch - sourceTree - <group> + PBXBuildFile - 41D67C49FE5405FBC354B2D8 + 4EE692971713B878D06E68BF fileRef - FFAA9FB176212ECB441C158B + 355261A12E64B026B300EB1C isa PBXBuildFile - 42DD1ABF71E7DDE8F625D75F + 4F32A425781BE2418E5CD092 buildActionMask 2147483647 files - DDFF4F45838A985D83EB4388 + 10D002B7A1565F524A1F72C4 isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 - 432AFAC69A94AA5F06088B28 - - fileRef - D9E56A6CF4CE4A04E95C3014 - isa - PBXBuildFile - - 44B64536F5CA954B8E61E64A + 4F4B2DFFE6DB1F3F056D7A88 fileRef - 31A2F342B0F590C341B80E22 + 958F3D9CD59D82649DC4BBD0 isa PBXBuildFile - 45315E8BEBC17056E67EC4FB + 516150EA2C83F095456330AE - includeInIndex - 1 + children + + 55B5D865F1152367A8FBFA15 + 22E5124B31E3B321E794DC94 + EA5B9962C9C69FF5B105130C + B9F1F805E855F9FFAAEE736B + 42E74C2012329B8DC0CDD8C0 + 89108038536B016307C54316 + F3FA21714693F02F20D877A2 + 7331993774BA4B5BCBE7AF55 + C18BF11BD79C83BBFB1BD210 + 686E67C6B83BF51888A3313F + 958F3D9CD59D82649DC4BBD0 + 8A82870BBCE2FA926206ED2D + F2ABD2CA1B8437A717A8B02E + FCFDA7AB4DB749DFF1E2511E + C1B075D45591A6568ECCD18C + 726EFD60805D922BEDE76C15 + 8A3990D8C3642C990B243791 + F1AF16AE6F3215C601C8BF2A + 37701A8B9A2FBF4FBAA01F9C + 2857546735111E15C0AA45AC + 74AA991D11A77BC7C2AC8B39 + FB45A4C5FE56C74F2EA4BD34 + 55CC7DF41E9AAAB8B442F56B + 38F25FBF3DBBC640787DE1CA + 8CA5B2C0AF0A2725E53213B8 + 7ED6FCDD892431F7AC6D6C5A + EE584546150D3E55E6515F2E + C7DB5E0D273A12A263E3DF66 + E646155312572FA2F9C110A7 + A019FBFA9536047BFD4E8566 + 0B4C1F8311751A431A9E43EB + E90505537034D18BAC56279F + CC7A4C8E06F6C0B809F1ADF6 + F603040661CEDD4C306E6127 + 8C22AEF2E3B1B90ABF364B0F + 11B7060CF244E44DEEF1FCD2 + B8787968B4F54434A7E1511D + 355261A12E64B026B300EB1C + 7CAEE77776D2737B9F4302B2 + 472F97575D9645EDA8B23D43 + C076C6CC906607E83876CCC2 + 8D0822A18641950E39DF6E85 + 1EDA6F4B89391190F7502F3D + 697FA9A4B81DC1D336772B85 + 882FB9B260693792E2AFDABC + 9A52282291CFFDE6377AD032 + B758DF7D0F574FFF532D9764 + 2DA988B3C7927462F6BB59D3 + 2642D314F24DD3D6748B767E + 8B41BD0CA63A64FE32256CE7 + C564A2FC0A0C23D983F6A99B + 33092F9AC97DCFFCA7A6BEA5 + 3F92F6DE3C2C780DD4346C6D + D394735C135D36533551DF37 + 1C1136F66431443A895D4575 + C5B608C0F41A84743C23F253 + 7C11EEBC74FF8F6EFB8BD6E5 + 79A57B4BA9D5AF486080B4FF + B5A92E4318F13DCE45C534F2 + 0685D213EE86B64A622AFE5D + D0FD74048B7D3439EDC0DDCF + 36C25DD43B6139727D23ABDE + 43BB352AA7823226332FE80B + 293F7285A686B031D78DF112 + 45760E0B6F7A35A5C23C8B46 + AD89D20777D9EE94627336E2 + 3B2EF60D760BB2D99E79CE51 + 96F2CE3DEDD063F8FA50FC85 + 093628ECA081B518E7705B0B + 86A99FB3CFC16EAE185D6C86 + 35FADD2E366746654FDF0073 + 2873C87E10A36AE0FCBCC365 + 5D4352EBC14E9D6839CC937E + 3390C2E3EC519AA76A894A7D + C816B4169D2425B6E0DCBF6F + 63310B6F2F3EBE6CC8C9A58A + 03FD3C8DB550D1282CBB9C3E + 03530ADCDC580A57166AA806 + E6E580D9802C99CB05F48910 + 60D9D364FBF1236491FDE4DD + 953CEE4B6D3D941453109D23 + B888803D97B219E6B4E00A03 + A8023D6299F24D6877BEF258 + FB5BEEF19CFBB7012E80C408 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXGroup name - RCTUtils.m + ReactKit path - Base/RCTUtils.m + ../../../ReactKit sourceTree <group> - 455EF31DC16195410CAEED8B - - baseConfigurationReference - 98E2279571F800AAEC885852 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-RCTText/Pods-RCTText-prefix.pch - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 46DBB7DDD201455CC7822443 + 527AA636955F4145805B828C includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - UIView+ReactKit.h + text.xcconfig path - Views/UIView+ReactKit.h + Pods.release.xcconfig sourceTree <group> - 4819361C459238E768D0623F - - fileRef - F13F01D5CEF7D509D7FB3A75 - isa - PBXBuildFile - - 486A508147DE414B1C54DB3B + 5445A5107FDF059DA476582F fileRef - CF75A4E5C983EFE50EF23864 + 3F92F6DE3C2C780DD4346C6D isa PBXBuildFile - 48BCE09A6E673A5F0771E3A0 + 556D48417573C2CCC7132F1A fileRef - BC0819432142676ED7CD8D13 + 60D9D364FBF1236491FDE4DD isa PBXBuildFile - 48C4ACFA9C0F6598C47536AE + 5571F59D7888CF59E6621A86 + explicitFileType + archive.ar includeInIndex - 1 + 0 isa PBXFileReference - lastKnownFileType - text.plist.xml path - Pods-acknowledgements.plist + libPods-RCTNetworkImage.a sourceTree - <group> + BUILT_PRODUCTS_DIR - 4B4D221F3651E112595964E6 + 55B5D865F1152367A8FBFA15 includeInIndex 1 isa PBXFileReference - lastKnownFileType - sourcecode.c.h name - RCTUIManager.h + Layout.c path - Modules/RCTUIManager.h + Layout/Layout.c sourceTree <group> - 4B5DA911DA22390C5E95B750 + 55CC7DF41E9AAAB8B442F56B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h + name + RCTJSMethodRegistrar.h path - RCTImageDownloader.m + Base/RCTJSMethodRegistrar.h sourceTree <group> - 4BE2DDA0BCC878EB8CB26C5A + 58B5D9EFD4CDD5F7431E1416 + + fileRef + 03FD3C8DB550D1282CBB9C3E + isa + PBXBuildFile + + 5B6F23C6AAC6BB99EE21DB9C fileRef - 56F3B2390EEE3D197152D75F + C7DB5E0D273A12A263E3DF66 isa PBXBuildFile - 4C96B8E009C3509E8C4A58F4 + 5D4352EBC14E9D6839CC937E includeInIndex 1 @@ -1210,16 +1510,44 @@ lastKnownFileType sourcecode.c.h name - RCTUIActivityIndicatorViewManager.h + RCTView.h path - Views/RCTUIActivityIndicatorViewManager.h + Views/RCTView.h sourceTree <group> - 4CA65E88D9B0A200CE9C9118 + 5D9B90F9719D985B55F7C18C + + fileRef + 37701A8B9A2FBF4FBAA01F9C + isa + PBXBuildFile + + 5E978F1482C798C60C70F510 + + fileRef + C7DAA61CA1B9FB9112DC5983 + isa + PBXBuildFile + + 5ECB6108E445CF5DE8A722E1 + + fileRef + 74AA991D11A77BC7C2AC8B39 + isa + PBXBuildFile + + 5ED39030F4CF73704BE6DCB1 + + fileRef + EFC27C70A2E94665DCBD987F + isa + PBXBuildFile + + 5F0D2152E1F3FFF4904B8AD1 baseConfigurationReference - D7A44E0FB5FD0083354541D0 + 9E440049436804CE51BB0FC0 buildSettings ALWAYS_SEARCH_USER_PATHS @@ -1235,7 +1563,7 @@ GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER - Target Support Files/Pods-RCTNetworkImage/Pods-RCTNetworkImage-prefix.pch + Target Support Files/Pods-RCTText/Pods-RCTText-prefix.pch GCC_PREPROCESSOR_DEFINITIONS DEBUG=1 @@ -1265,21 +1593,20 @@ name Debug - 4DEEE0266BA65632F6A0E7B1 - - fileRef - 2BA58703E0C4B2559E28AE42 - isa - PBXBuildFile - - 504176B67DCF8860EE15B6DE + 606C88223FB67B48CDAC1C52 - fileRef - 94FE868251742B4D99E9D44C + buildActionMask + 2147483647 + files + + 7901388968A3D19E9512DA4B + isa - PBXBuildFile + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 5219B1A509941D57D929D39A + 60D9D364FBF1236491FDE4DD includeInIndex 1 @@ -1288,41 +1615,27 @@ lastKnownFileType sourcecode.c.h name - RCTNavItem.h + RCTWrapperViewController.h path - Views/RCTNavItem.h + Views/RCTWrapperViewController.h sourceTree <group> - 52B8E3C21D812BBDA6A21D90 + 6157197253F577A6D0DB0372 - includeInIndex - 1 + fileRef + 0D86E23D02587E54BDB5A0D7 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - RCTImageDownloader.h - sourceTree - <group> + PBXBuildFile - 52C2F8683752617A087B61F9 + 61A02A7F08FC7D80DFBA7084 - includeInIndex - 1 + fileRef + D2906EE46F872A418B6B33AB isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RCTTextFieldManager.h - path - Views/RCTTextFieldManager.h - sourceTree - <group> + PBXBuildFile - 5346BE5B4464865BE370DAE3 + 63310B6F2F3EBE6CC8C9A58A includeInIndex 1 @@ -1331,40 +1644,83 @@ lastKnownFileType sourcecode.c.objc name - RCTSparseArray.m + RCTViewManager.m path - Base/RCTSparseArray.m + Views/RCTViewManager.m sourceTree <group> - 538D24A47F778BE37D482A70 + 63359DD37C363E5C5515E6DE - fileRef - CECB70566BB387FCC3E72F82 + buildActionMask + 2147483647 + files + + C8CCB40239E2009CC5655B6B + 5ED39030F4CF73704BE6DCB1 + isa - PBXBuildFile + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 5424AF4790E65783BDA933AE + 633B6147455573AD11D33B17 fileRef - 1E172C103C8DDDD51C260454 + C1B075D45591A6568ECCD18C isa PBXBuildFile - 556F7551D750FD292977EAF3 + 6375425963FF6C21603732B4 - containerPortal - BF94ECC553449F9486D48453 + baseConfigurationReference + 26A204DC9AB5C60041E26549 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Target Support Files/Pods-RCTNetworkImage/Pods-RCTNetworkImage-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.0 + OTHER_LDFLAGS + + OTHER_LIBTOOLFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - DF58F2F4E6B0B43A57E1D871 - remoteInfo - Pods-RCTNetworkImage + XCBuildConfiguration + name + Debug - 56F3B2390EEE3D197152D75F + 63887528ABF88595D89EDA8E includeInIndex 1 @@ -1373,237 +1729,136 @@ lastKnownFileType sourcecode.c.objc path - RCTShadowText.m + RCTRawTextManager.m sourceTree <group> - 56FB9B47588CF0F36FC96390 + 638F2CE8FA7884834B7EAC77 - includeInIndex - 1 + children + + C3908657E1A50F7F808796C1 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + PBXGroup name - RCTEventDispatcher.h - path - Base/RCTEventDispatcher.h + Targets Support Files sourceTree <group> - 5789BD634633A460A15D2CFB - - buildActionMask - 2147483647 - files - - 73E9110E36C881B06618F651 - BE549016B7D84400A9C21554 - E03E37E50B395F68909D68F1 - 7BFF3710C1742EDD464C3907 - 1AD314273817E152C7E315BA - FCF9FA9A52C6466496834D9B - 72812F427CD41F84EDF7463F - B311A068CB02A3CB5731DF3F - AE2F0C5806A4C1B2923B9AA4 - C830647EE856312FD4703ADA - 6CBFC20798CA2E3F0D05E09A - 1B55097A38652E47A94193F2 - 8415074B62BAA6A44BAFDB9E - 5D6D65155F2608108E24323C - 8239340F32AD35797AFF5916 - A0519A4649CCB73011B039D4 - B917A72C88A3FFCC8B3A78BF - B7BF08D30812CE93EE5B73B8 - A827664554976694F2C33FCC - A8A1B6892A1330983405EBBE - 98C030E0A13DB99C7DF1BB7F - E2DE70C97989E3B70384CE53 - 504176B67DCF8860EE15B6DE - 76644CC3854953214A130D8B - 80DD4040D6A9CCBB3CD0EF7A - DF8895F638ACA4C5989F506D - BCDA3D97529987F3AF6E1E94 - CCDED8EEB351B73EEC8B9F7E - 819EE00153E0D7A318574D69 - A55433F81EC7E8C30974067B - 4DEEE0266BA65632F6A0E7B1 - A245979CC966F650E1C70D22 - 48BCE09A6E673A5F0771E3A0 - F8A906774F36E8CD2451E82E - 6A98A23B930054B26DC54F35 - 7AA8475783959E32EDA602E8 - 8A95730DCFBE1F08DB29B75A - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 581AF9074AC1929D0D1DAB9E + 645997F70491670B86F2BA96 + explicitFileType + archive.ar includeInIndex - 1 + 0 isa PBXFileReference - lastKnownFileType - text - name - Podfile path - ../Podfile + libPods-RCTText.a sourceTree - SOURCE_ROOT - xcLanguageSpecificationIdentifier - xcode.lang.ruby + BUILT_PRODUCTS_DIR - 5840BACA98667C60F6B3A0C1 + 64CFDB05AE3A6A9975FFBCEA - buildConfigurations - - BD4F6574C5906CCB6FC42D7F - BBE817045F170ECDCB05EF56 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release + fileRef + 2642D314F24DD3D6748B767E isa - XCConfigurationList + PBXBuildFile - 59186CF0F15087A1C2B440DD + 6664ADDDE2CD563193D50725 - includeInIndex - 1 + fileRef + FCFDA7AB4DB749DFF1E2511E isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RCTEventDispatcher.m - path - Base/RCTEventDispatcher.m - sourceTree - <group> + PBXBuildFile - 59BF11297A6B39FFEBBB7861 + 673ACA8D38F46D1E3F6C7B36 - includeInIndex - 1 + fileRef + B8787968B4F54434A7E1511D isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - Layout.h - path - Layout/Layout.h - sourceTree - <group> + PBXBuildFile - 5A0B5C72A1AA647B3A4B14F6 + 686E67C6B83BF51888A3313F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTKeyCommands.h + RCTBridge.m path - Base/RCTKeyCommands.h + Base/RCTBridge.m sourceTree <group> - 5BC09E97F41420AF1394ADCE + 697FA9A4B81DC1D336772B85 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - UIView+ReactKit.m + RCTScrollView.h path - Views/UIView+ReactKit.m + Views/RCTScrollView.h sourceTree <group> - 5BE5302E054DBFAF040EF61B + 6A34E09DEECEAFFE61EE78A4 - fileRef - EEE942E8275043E8ADF16BE2 - isa - PBXBuildFile - - 5C36071912941101A0924D87 - - children - - 9574DCBBFE4EFAB138C43844 - + containerPortal + AF4E3BAC82C6DDA51BDA9F71 isa - PBXGroup - name - iOS - sourceTree - <group> + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 4E58EBB9F3E15EDD045ABDA5 + remoteInfo + Pods-RCTNetworkImage - 5D6D65155F2608108E24323C + 6C14CDB69262D0CF9F277492 fileRef - 94F63AC21292EE02A10FEC17 + 5D4352EBC14E9D6839CC937E isa PBXBuildFile - 5DCF6A84FBACA3015BC22399 + 6F14A0EF8B554164C0913DD8 - includeInIndex - 1 + fileRef + 697FA9A4B81DC1D336772B85 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - RCTNetworkImageViewManager.m - sourceTree - <group> + PBXBuildFile - 5E5C5A95047BB06B9931B5DF + 6F52D92057414C873A177506 + fileRef + 2873C87E10A36AE0FCBCC365 isa - PBXTargetDependency - name - Pods-ReactKit - target - F3743E4364DCD50F66E07E03 - targetProxy - EFDFA99290EC74C5612841DA + PBXBuildFile - 5F5E7CC68557DA53129800AD + 7055E300F1E69B7B2328046D fileRef - 0EA55D4BFB9E3A24AB05482E + D7DCC1BDDF6B30BCCF621E17 isa PBXBuildFile - 5F835835D10C7DFB6A9CF6A3 + 706802052B608499FD490789 - containerPortal - BF94ECC553449F9486D48453 + fileRef + B406BF0BF6506637A35D5167 isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 607D2E44EB1F20343CE3456B - remoteInfo - Pods-RCTText + PBXBuildFile - 5F8F95C34626059B26772C85 + 726EFD60805D922BEDE76C15 includeInIndex 1 @@ -1611,241 +1866,150 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + RCTConvert.h path - RCTTextManager.h + Base/RCTConvert.h sourceTree <group> - 607D2E44EB1F20343CE3456B - - buildConfigurationList - 7122D1CC40CFBB02C49EA8FE - buildPhases - - 8915B8D680F07A5E87AE7951 - CD226C6942B1DF7EA0A2D228 - 0AC9EE10D9CD5E34ACCC37E0 - - buildRules - - dependencies - - 860C43275459A739AC102F54 - - isa - PBXNativeTarget - name - Pods-RCTText - productName - Pods-RCTText - productReference - 8E4605DF173DA988811CD0D0 - productType - com.apple.product-type.library.static - - 63A3B7B3C237D15908758757 + 7331993774BA4B5BCBE7AF55 - children - - BF7B4B3789866923E16FA948 - D7A44E0FB5FD0083354541D0 - CECB70566BB387FCC3E72F82 - 4144C0A7A0B5E9B910A49112 - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Support Files + RCTAutoInsetsProtocol.h path - ../../Examples/Movies/Pods/Target Support Files/Pods-RCTNetworkImage + Base/RCTAutoInsetsProtocol.h sourceTree <group> - 63E51C8504EA2C10E68B02ED - - fileRef - 88C9CCC953EB2CBD7D57EED8 - isa - PBXBuildFile - - 65319A04EE7272D8823EC289 + 74640D1CD100B3C90CF9387E - children + buildActionMask + 2147483647 + files - 6D4728D5CA14DC2EE7EA3544 - 09567798D374D77BC5D172B2 - 98AF860C16DE530EE9D5FAD5 - 31A2F342B0F590C341B80E22 - 100E0F66BB2561CD9C5403B1 - 56F3B2390EEE3D197152D75F - E7825F1E43104ED6A50EDB98 - 8FEF9214746F53A78E8F115F - 5F8F95C34626059B26772C85 - 77338B0BEA88CD60DC1ABF10 - EBE596AB2811F489419F35E9 + 7055E300F1E69B7B2328046D + E9778064D3F51028ADAE1A34 + 06AAAC565037D8EF25720E03 + 800F0AE9DD1C771B302C5840 + 61A02A7F08FC7D80DFBA7084 + 83BB290765484ABEA89B8CCA isa - PBXGroup - name - RCTText - path - ../../../Libraries/Text - sourceTree - <group> - - 68F34AEA31C32834FA5BC3A8 - - baseConfigurationReference - 6ECB652E72348E5A2B4636FC - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 69E8EA4F874212E989F8E5F8 - - fileRef - 06C6AEB41647779AE72D05D0 - isa - PBXBuildFile - - 6A98A23B930054B26DC54F35 - - fileRef - B998DFBC2EC7B340775C2514 - isa - PBXBuildFile + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 6AEEF603053FE768ED3E5E4D + 74AA991D11A77BC7C2AC8B39 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTSparseArray.h + RCTExceptionsManager.m path - Base/RCTSparseArray.h + Modules/RCTExceptionsManager.m sourceTree <group> - 6CBFC20798CA2E3F0D05E09A + 7614DE0CECD1B9FF0338EB3F - fileRef - 2108DCEFAE6CF37482CF1C0A isa - PBXBuildFile + PBXTargetDependency + name + Pods-ReactKit + target + 13B7E1C57803F05652F30C1F + targetProxy + 3BDF7BEBB78C16E879E444E2 - 6D4728D5CA14DC2EE7EA3544 + 782532E10015155FB2604DE6 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + text.xcconfig path - RCTRawTextManager.h + Pods-ReactKit.xcconfig sourceTree <group> - 6DDC3764218E410C0E170649 + 7830A204AA05E610158D3092 - includeInIndex + containerPortal + AF4E3BAC82C6DDA51BDA9F71 + isa + PBXContainerItemProxy + proxyType 1 + remoteGlobalIDString + 13B7E1C57803F05652F30C1F + remoteInfo + Pods-ReactKit + + 78C6E228F82F244A224CDAAC + + fileRef + 8C22AEF2E3B1B90ABF364B0F isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - RCTNetworkImageView.m - sourceTree - <group> + PBXBuildFile - 6E6299B7449D2F456EA2F26F + 7901388968A3D19E9512DA4B fileRef - 5219B1A509941D57D929D39A + C7DAA61CA1B9FB9112DC5983 isa PBXBuildFile - 6ECB652E72348E5A2B4636FC + 79A57B4BA9D5AF486080B4FF includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.objc + name + RCTStatusBarManager.m path - Pods.release.xcconfig + Modules/RCTStatusBarManager.m sourceTree <group> - 6FC60E013E6B084708F80E1D + 7B3E398E836D3D5B284BE497 fileRef - 5DCF6A84FBACA3015BC22399 + 42E74C2012329B8DC0CDD8C0 isa PBXBuildFile - 7050957C06196020470EC5C2 + 7C11EEBC74FF8F6EFB8BD6E5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RCTScrollViewManager.m + RCTStatusBarManager.h path - Views/RCTScrollViewManager.m + Modules/RCTStatusBarManager.h sourceTree <group> - 70C56F45AD4CAD933ACBE2D4 + 7CAEE77776D2737B9F4302B2 includeInIndex 1 @@ -1854,152 +2018,60 @@ lastKnownFileType sourcecode.c.h name - RCTBridge.h + RCTPointerEvents.h path - Base/RCTBridge.h + Base/RCTPointerEvents.h sourceTree <group> - 710A1B01FA9E8F0E95876C75 + 7D2FB16662B96BDA8D478530 - children - - 8A7EF5F8BDA27A8EFB7E7B50 - 8F5CED50CE2BB3EBC5A0C8B7 - 9D269D2372F1ADF83E59D0E1 - 341FFB9C954C6FBBDA1D4CBB - + includeInIndex + 1 isa - PBXGroup - name - Support Files + PBXFileReference + lastKnownFileType + sourcecode.c.objc path - ../Examples/Movies/Pods/Target Support Files/Pods-ReactKit + RCTShadowRawText.m sourceTree <group> - 7122D1CC40CFBB02C49EA8FE - - buildConfigurations - - 788577F7D39EEA8E639BA335 - 455EF31DC16195410CAEED8B - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 7158773877C1566031B98AA7 - - buildActionMask - 2147483647 - files - - FE86C2EE891C09720566A5D9 - E340F8420234B32BB795E0EE - F0B848BA6E9EB162430D912B - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 7196F57776FE75B146C23681 + 7DB6785802A84DD169F83470 fileRef - 35138A0F59E8056491258E07 + 79A57B4BA9D5AF486080B4FF isa PBXBuildFile - 71F3A1261352CEB12D1EFE4E + 7E2C54A003A5BC8A330804F4 - buildConfigurations + buildConfigurationList + 257F1B1261EF6B02C93E5D38 + buildPhases - 3AB2DFC2566FB389056F3BAC - 68F34AEA31C32834FA5BC3A8 + 74640D1CD100B3C90CF9387E + 606C88223FB67B48CDAC1C52 + A90788D6B35021C956CEFB59 - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 7244C28261391D75E3F0B0EF - - fileRef - 46DBB7DDD201455CC7822443 - isa - PBXBuildFile - - 7253CC6B6B8F6AE678B3B19C - - buildActionMask - 2147483647 - files + buildRules + + dependencies - 106C230D038A62D2C37E5D75 - 432AFAC69A94AA5F06088B28 - 946BDFB1A5D5787E85175DC1 - F3DAEC86B758048B5930EF1B - 07192780F349FFB50B16BAE0 - 7F35C840463DEBE2ACAF026B - 5F5E7CC68557DA53129800AD - 85B47B09FA27F727DAFF911C - 0D8B5E4BC6B802176DDD88E5 - A803356E590BE34243DE7EFE - 2572FEE8678A128A03571950 - B9F42C9908AD31F4BC1F091D - 7650C106B8A5FA38ED23274F - 5BE5302E054DBFAF040EF61B - 907AF60B5B92038D240EC19C - D41179E6AAD395F25177A5F8 - CEFADE7A58F7E4400EE18E25 - 6E6299B7449D2F456EA2F26F - 7611C500CF8043E1E1A8FEA5 - DF924C16971D9C2C83A36133 - F4AB97BA6A8BC00071F62ED2 - 4819361C459238E768D0623F - 837435BB2245CCE3D1565029 - 73BE5712EFEC793AD4B710E1 - BD4CB1806A00FC955BECE0B1 - 2F5591055141A2D7A7918CE8 - 85FA6019949634CBE9A346BE - 149C58083427CE1CD36C8B10 - 291C4B433C922679BD458D5D - AC2A48152BD918215CA11AD5 - F26F1444F50B137ED3B72374 - 486A508147DE414B1C54DB3B - 3FFDD3C8378B7BB621BC78E9 - C3F3445613B7F46DC6BF3E3B - 8620DB570E79F86DF025BEC8 - 41D67C49FE5405FBC354B2D8 - 7FDFCDB3E73CFA4EF24EFC43 - 369763B76533786A8E5353A4 - C8D2916466298AD52317576B - 69E8EA4F874212E989F8E5F8 - 3E42DBB95C1805122AE2171D - 0612C8DB98399C9428864589 - 0B6D46780D0C5F037B9E50AF - B8EFB7E653F82E82FDEBD4EF - 7244C28261391D75E3F0B0EF + 7614DE0CECD1B9FF0338EB3F isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 72812F427CD41F84EDF7463F - - fileRef - EF98585B892E19B5AE731973 - isa - PBXBuildFile + PBXNativeTarget + name + Pods-RCTText + productName + Pods-RCTText + productReference + 645997F70491670B86F2BA96 + productType + com.apple.product-type.library.static - 737BA62A1374F34098A61A3C + 7E4612BAA564E326F5CE9D8E includeInIndex 1 @@ -2007,120 +2079,108 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - RCTNavigator.h path - Views/RCTNavigator.h + RCTNetworkImageViewManager.h sourceTree <group> - 73BE5712EFEC793AD4B710E1 - - fileRef - 1592E2F41A2DC2C927EBBF12 - isa - PBXBuildFile - - 73E9110E36C881B06618F651 - - fileRef - CBE8ADD69617298088FF9ACF - isa - PBXBuildFile - - 7440BE86AA8D5D86F9E0972C + 7E53CCE7BC2F97B8D7A64AD0 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - RCTViewManager.m + sourcecode.c.h path - Views/RCTViewManager.m + Pods-ReactKit-prefix.pch sourceTree <group> - 7611C500CF8043E1E1A8FEA5 + 7E77223E8EF39DF16D41D603 - fileRef - E59EC5A1D60FD731E0AA3C44 + buildConfigurations + + 09DD900CDB912629197918C6 + 963B62DCD1695389691DAA05 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXBuildFile + XCConfigurationList - 7643C57FD9EC1838B0876BBD + 7ED6FCDD892431F7AC6D6C5A includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.objc + name + RCTKeyCommands.m path - Pods-RCTDataManager-Private.xcconfig + Base/RCTKeyCommands.m sourceTree <group> - 7650C106B8A5FA38ED23274F + 7EF8DB527F9619E040F0C6AE - fileRef - C37AAC16F286B1DB8F7BD60C + children + + C7DAA61CA1B9FB9112DC5983 + isa - PBXBuildFile + PBXGroup + name + iOS + sourceTree + <group> - 76644CC3854953214A130D8B + 800F0AE9DD1C771B302C5840 fileRef - CF563F829B165F3323ABC0A1 + 4E4EF91447A42AE99235BDF8 isa PBXBuildFile - 77338B0BEA88CD60DC1ABF10 + 8074519FA3432A12365C723C - includeInIndex - 1 + fileRef + E646155312572FA2F9C110A7 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - RCTTextManager.m - sourceTree - <group> + PBXBuildFile - 788577F7D39EEA8E639BA335 + 81BC72A103E1C577C1B19212 baseConfigurationReference - 98E2279571F800AAEC885852 + 527AA636955F4145805B828C buildSettings ALWAYS_SEARCH_USER_PATHS NO COPY_PHASE_STRIP - NO + YES DSTROOT /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 GCC_PRECOMPILE_PREFIX_HEADER YES - GCC_PREFIX_HEADER - Target Support Files/Pods-RCTText/Pods-RCTText-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO INSTALL_PATH $(BUILT_PRODUCTS_DIR) IPHONEOS_DEPLOYMENT_TARGET 7.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + OTHER_LDFLAGS OTHER_LIBTOOLFLAGS @@ -2133,120 +2193,54 @@ iphoneos SKIP_INSTALL YES + VALIDATE_PRODUCT + YES isa XCBuildConfiguration name - Debug - - 78C294F35FA33A84D8E83D01 - - buildActionMask - 2147483647 - files - - 5424AF4790E65783BDA933AE - AF2BC09B042EBB50F1A78EB5 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 793AE1E6D8A0F5D66EC764FC - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RCTExceptionsManager.h - path - Modules/RCTExceptionsManager.h - sourceTree - <group> - - 79AC1D0DBC09CA9546BA5DC2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RCTConvert.m - path - Base/RCTConvert.m - sourceTree - <group> - - 79BE258178E49FD51E2CC4B8 - - fileRef - 100E0F66BB2561CD9C5403B1 - isa - PBXBuildFile - - 79CA05DA910EEC1FB74AF8B1 - - fileRef - 9574DCBBFE4EFAB138C43844 - isa - PBXBuildFile - - 7AA8475783959E32EDA602E8 - - fileRef - DD631F9387065E2C8158E9D2 - isa - PBXBuildFile + Release - 7AF4222A15F4D8545D8C75EE + 837C1CE5C1C60B6A6F190B9C fileRef - 09567798D374D77BC5D172B2 + 86A99FB3CFC16EAE185D6C86 isa PBXBuildFile - 7BFF3710C1742EDD464C3907 + 8389891D3F795245EEC47D4B fileRef - C3885B5209E462E315C1A082 + 093628ECA081B518E7705B0B isa PBXBuildFile - 7CAF752A4A0E37B9583A87DB + 83BB290765484ABEA89B8CCA fileRef - E7825F1E43104ED6A50EDB98 + 45BE4B1D1F55EE3D947EB961 isa PBXBuildFile - 7D3032A8B618BED47A896B35 + 83F79A097E2909089E3FC524 children - 52B8E3C21D812BBDA6A21D90 - 4B5DA911DA22390C5E95B750 - 311B1F10DB6ECD376C2C410D - 6DDC3764218E410C0E170649 - D01D41AF354CCA45EB9E3F09 - 5DCF6A84FBACA3015BC22399 - 63A3B7B3C237D15908758757 + D3875E94710A862C72C9D02D + 26A204DC9AB5C60041E26549 + F70008E1D19432CFDECE123B + 9A4B507CFD331E8018748CF1 isa PBXGroup name - RCTNetworkImage + Support Files path - ../../../Libraries/Image + ../../Examples/Movies/Pods/Target Support Files/Pods-RCTNetworkImage sourceTree <group> - 7EFF5F80196820ED0BAC85A2 + 86A99FB3CFC16EAE185D6C86 includeInIndex 1 @@ -2255,27 +2249,13 @@ lastKnownFileType sourcecode.c.objc name - RCTStatusBarManager.m + RCTUIManager.m path - Modules/RCTStatusBarManager.m + Modules/RCTUIManager.m sourceTree <group> - 7F35C840463DEBE2ACAF026B - - fileRef - 70C56F45AD4CAD933ACBE2D4 - isa - PBXBuildFile - - 7FDFCDB3E73CFA4EF24EFC43 - - fileRef - 4C96B8E009C3509E8C4A58F4 - isa - PBXBuildFile - - 800F02FE328BD54F6A90FD91 + 87B7D30CEC087A04E202DDF9 includeInIndex 1 @@ -2283,21 +2263,30 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - RCTAssert.h path - Base/RCTAssert.h + RCTDataManager.h sourceTree <group> - 80DD4040D6A9CCBB3CD0EF7A + 87E9F10D0A968F86A2D3E064 - fileRef - 7EFF5F80196820ED0BAC85A2 + children + + 8FC0E1EC00909042A664442B + 9E440049436804CE51BB0FC0 + D7DCC1BDDF6B30BCCF621E17 + F398EE4EDB2C9867D5FF4E79 + isa - PBXBuildFile + PBXGroup + name + Support Files + path + ../../Examples/Movies/Pods/Target Support Files/Pods-RCTText + sourceTree + <group> - 80FE5B00B155529379660FC4 + 882FB9B260693792E2AFDABC includeInIndex 1 @@ -2306,54 +2295,49 @@ lastKnownFileType sourcecode.c.objc name - RCTTiming.m + RCTScrollView.m path - Modules/RCTTiming.m + Views/RCTScrollView.m sourceTree <group> - 819EE00153E0D7A318574D69 - - fileRef - A3895AC4CDB2372877228F14 - isa - PBXBuildFile - - 8239340F32AD35797AFF5916 + 88B72F3A6A40EC4748301F91 fileRef - CA8DFA708A0CA7DF5695D590 + 1EDA6F4B89391190F7502F3D isa PBXBuildFile - 83566DF45DEB3320EB352903 + 89108038536B016307C54316 - containerPortal - BF94ECC553449F9486D48453 - isa - PBXContainerItemProxy - proxyType + includeInIndex 1 - remoteGlobalIDString - F3743E4364DCD50F66E07E03 - remoteInfo - Pods-ReactKit - - 837435BB2245CCE3D1565029 - - fileRef - D324AB785A55E2706E36A274 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTAssert.h + path + Base/RCTAssert.h + sourceTree + <group> - 8415074B62BAA6A44BAFDB9E + 89592EB56DDBF7B54A3F915E - fileRef - CEEE4CFBC9BE5736ECAB62E6 + buildConfigurations + + CDE95CDA8C87779EFE778F9A + D50240220E277743B098DBAD + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXBuildFile + XCConfigurationList - 84D089AE2FBBC9A674F6ED90 + 89664286C51C7DFFF1F672C7 explicitFileType archive.ar @@ -2362,11 +2346,18 @@ isa PBXFileReference path - libPods.a + libPods-RCTDataManager.a sourceTree BUILT_PRODUCTS_DIR - 84DC232D4E0A3B5F77BD4BC2 + 8989408E16B49A592CECE05E + + fileRef + 55CC7DF41E9AAAB8B442F56B + isa + PBXBuildFile + + 8A3990D8C3642C990B243791 includeInIndex 1 @@ -2375,170 +2366,271 @@ lastKnownFileType sourcecode.c.objc name - RCTTextField.m + RCTConvert.m path - Views/RCTTextField.m + Base/RCTConvert.m sourceTree <group> - 85AD0EB6443ECE478262D6C6 + 8A82870BBCE2FA926206ED2D includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RCTExceptionsManager.m + RCTCache.h path - Modules/RCTExceptionsManager.m + Base/RCTCache.h sourceTree <group> - 85B47B09FA27F727DAFF911C + 8B41BD0CA63A64FE32256CE7 - fileRef - 95C56C7BFE0773470DD423D4 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RCTShadowView.m + path + Views/RCTShadowView.m + sourceTree + <group> - 85FA6019949634CBE9A346BE + 8BFDB4E6A534A18777DD9413 fileRef - 2409A610D6AB34EA92D33BE8 + 7E4612BAA564E326F5CE9D8E isa PBXBuildFile - 860C43275459A739AC102F54 + 8C22AEF2E3B1B90ABF364B0F + includeInIndex + 1 isa - PBXTargetDependency + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Pods-ReactKit - target - F3743E4364DCD50F66E07E03 - targetProxy - 83566DF45DEB3320EB352903 + RCTNavigator.h + path + Views/RCTNavigator.h + sourceTree + <group> - 8620DB570E79F86DF025BEC8 + 8CA5B2C0AF0A2725E53213B8 - fileRef - A0E7CDD7949470FE40475426 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTKeyCommands.h + path + Base/RCTKeyCommands.h + sourceTree + <group> - 8775A8D4E6338D61BF1064C5 + 8D0822A18641950E39DF6E85 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RCTShadowView.m + RCTRootView.h path - Views/RCTShadowView.m + Base/RCTRootView.h sourceTree <group> - 880D38F15FF447F995573AB3 + 8D89762D01606FF08D2D0415 + + fileRef + 9A52282291CFFDE6377AD032 + isa + PBXBuildFile + + 8DCC86B6F4E41374D0531909 fileRef - 77338B0BEA88CD60DC1ABF10 + C5B608C0F41A84743C23F253 isa PBXBuildFile - 88505E4377E9058030C956B9 + 8F2CA114699B27A7CF43562C + + buildConfigurationList + ECA2414C9D669EE25B29026B + buildPhases + + E79C749F7C18402B8FAC543A + F81FAD337D3D121CA8A5A4CA + + buildRules + + dependencies + + 1D5C968D81BECC8D8DEDC3A7 + D73FE49574ED6F2E1BE3AF20 + 2361BD02D0DF3561CD7AEF1B + DFFD02DED71CBF8CF075A273 + + isa + PBXNativeTarget + name + Pods + productName + Pods + productReference + 48B2F9A5EEA775E9BDF2360D + productType + com.apple.product-type.library.static + + 8FC0E1EC00909042A664442B includeInIndex 1 isa PBXFileReference lastKnownFileType - text + text.xcconfig path - Pods-acknowledgements.markdown + Pods-RCTText.xcconfig sourceTree <group> - 88C9CCC953EB2CBD7D57EED8 + 9048736F9B1A3F0F27F9756B - includeInIndex - 1 + children + + 7EF8DB527F9619E040F0C6AE + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - RCTDataManager.h + PBXGroup + name + Frameworks sourceTree <group> - 88CBD87EEA9FF31AAF273687 + 90B9883EFAE5BB4CA68AA7ED + fileRef + C564A2FC0A0C23D983F6A99B isa - PBXTargetDependency - name - Pods-RCTNetworkImage - target - DF58F2F4E6B0B43A57E1D871 - targetProxy - 556F7551D750FD292977EAF3 + PBXBuildFile - 8915B8D680F07A5E87AE7951 + 953CEE4B6D3D941453109D23 - buildActionMask - 2147483647 - files - - 9CAF0499B0A74F5CFA2A1E3B - 7AF4222A15F4D8545D8C75EE - 44B64536F5CA954B8E61E64A - 4BE2DDA0BCC878EB8CB26C5A - 34DBA23002D2E96B79EF3FBE - 880D38F15FF447F995573AB3 - + includeInIndex + 1 isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RCTWrapperViewController.m + path + Views/RCTWrapperViewController.m + sourceTree + <group> - 8A7EF5F8BDA27A8EFB7E7B50 + 958F3D9CD59D82649DC4BBD0 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h + name + RCTBridgeModule.h path - Pods-ReactKit.xcconfig + Base/RCTBridgeModule.h sourceTree <group> - 8A95730DCFBE1F08DB29B75A + 95F60EF688D3DC27638042A2 fileRef - 5BC09E97F41420AF1394ADCE + 89108038536B016307C54316 + isa + PBXBuildFile + + 963B62DCD1695389691DAA05 + + baseConfigurationReference + EACA5CCAD77673E65C1833FF + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Target Support Files/Pods-RCTDataManager/Pods-RCTDataManager-prefix.pch + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + OTHER_LIBTOOLFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + isa - PBXBuildFile + XCBuildConfiguration + name + Release - 8AAEE8636EA9A9FF644ED344 + 965D54B6354201E9C547F888 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h path - Pods-RCTText.xcconfig + RCTNetworkImageView.h sourceTree <group> - 8B70E5434E2CB2792BB8CC44 + 96F2CE3DEDD063F8FA50FC85 includeInIndex 1 @@ -2547,136 +2639,145 @@ lastKnownFileType sourcecode.c.objc name - RCTNavigatorManager.m + RCTUIActivityIndicatorViewManager.m path - Views/RCTNavigatorManager.m + Views/RCTUIActivityIndicatorViewManager.m sourceTree <group> - 8E4605DF173DA988811CD0D0 + 9725F8B362AF089826F00A64 - explicitFileType - archive.ar - includeInIndex - 0 + fileRef + 8CA5B2C0AF0A2725E53213B8 isa - PBXFileReference - path - libPods-RCTText.a - sourceTree - BUILT_PRODUCTS_DIR + PBXBuildFile + + 99294162E5C2E03148EBF05C + + fileRef + 726EFD60805D922BEDE76C15 + isa + PBXBuildFile + + 9A3A4BADEAD95DF2CD29E9FF + + baseConfigurationReference + 9E440049436804CE51BB0FC0 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Target Support Files/Pods-RCTText/Pods-RCTText-prefix.pch + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + OTHER_LIBTOOLFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release - 8F5CED50CE2BB3EBC5A0C8B7 + 9A4B507CFD331E8018748CF1 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h path - Pods-ReactKit-Private.xcconfig + Pods-RCTNetworkImage-prefix.pch sourceTree <group> - 8FEF9214746F53A78E8F115F + 9A52282291CFFDE6377AD032 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - path - RCTText.m - sourceTree - <group> - - 907AF60B5B92038D240EC19C - - fileRef - 1782BB92C0A529BF6AD72DFF - isa - PBXBuildFile - - 90D5389E9D73CDBB276C1B34 - - children - - 5C36071912941101A0924D87 - - isa - PBXGroup + sourcecode.c.h name - Frameworks + RCTScrollViewManager.h + path + Views/RCTScrollViewManager.h sourceTree <group> - 932A9309F808F533D40582BB + 9B86394A814DD0363FFDB8E4 - buildConfigurationList - AC60249688E27C48CD0E62A1 - buildPhases - - 78C294F35FA33A84D8E83D01 - 42DD1ABF71E7DDE8F625D75F - 3EDE783B10222492880DD3AB - - buildRules - - dependencies + buildActionMask + 2147483647 + files - 5E5C5A95047BB06B9931B5DF + 307038CC5432B6825D99CCBE + 0AA8E7CAAA1EB4DFFBF6912C + 25489EEC4989DEA64FAE8023 + B1BD47DA44AC279A3EDA0440 isa - PBXNativeTarget - name - Pods-RCTDataManager - productName - Pods-RCTDataManager - productReference - C9D66CDB1AB4CA948A39E26D - productType - com.apple.product-type.library.static + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 9361F6C165FFAD1CE1130BA7 + 9E440049436804CE51BB0FC0 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - RCTStaticImage.h + text.xcconfig path - Views/RCTStaticImage.h + Pods-RCTText-Private.xcconfig sourceTree <group> - 946BDFB1A5D5787E85175DC1 - - fileRef - 15F0D204E7BD9B1607786736 - isa - PBXBuildFile - - 94F63AC21292EE02A10FEC17 + 9E55FC1AF8AFBA8E3DA00D8E - includeInIndex - 1 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXTargetDependency name - RCTNavItemManager.m - path - Views/RCTNavItemManager.m - sourceTree - <group> + Pods-ReactKit + target + 13B7E1C57803F05652F30C1F + targetProxy + 4103A439B8CB9FEE139E77F9 - 94FE868251742B4D99E9D44C + A019FBFA9536047BFD4E8566 includeInIndex 1 @@ -2685,122 +2786,92 @@ lastKnownFileType sourcecode.c.objc name - RCTStaticImage.m + RCTLog.m path - Views/RCTStaticImage.m + Base/RCTLog.m sourceTree <group> - 9574DCBBFE4EFAB138C43844 + A1DCC56E57BB6053E663E32D + fileRef + 7331993774BA4B5BCBE7AF55 isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Foundation.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework - sourceTree - DEVELOPER_DIR + PBXBuildFile - 95C56C7BFE0773470DD423D4 + A2CDF46CB581C9C678ECAC7C includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - RCTCache.h + text path - Base/RCTCache.h + Pods-acknowledgements.markdown sourceTree <group> - 98AF860C16DE530EE9D5FAD5 + A8023D6299F24D6877BEF258 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc + name + UIView+ReactKit.m path - RCTShadowRawText.h + Views/UIView+ReactKit.m sourceTree <group> - 98C030E0A13DB99C7DF1BB7F + A8C61C98F7AD6EECE46F23A1 fileRef - 8775A8D4E6338D61BF1064C5 + F3FA21714693F02F20D877A2 isa PBXBuildFile - 98E2279571F800AAEC885852 + A8F2BA66EAD7DCC7C47897EC includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig - path - Pods-RCTText-Private.xcconfig - sourceTree - <group> - - 99F944FDFA42E71DFD034D19 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RCTWebViewExecutor.h + text.script.sh path - Executors/RCTWebViewExecutor.h + Pods-resources.sh sourceTree <group> - 9C430EF11704FB8793CA009C - - buildActionMask - 2147483647 - files - - 79CA05DA910EEC1FB74AF8B1 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 9CAACB75648220203821AF2C + A90788D6B35021C956CEFB59 buildActionMask 2147483647 files - 237ECCFD5EBD9B7C1250F4EB + 409B932149D89EC4BF4440F9 + 6157197253F577A6D0DB0372 + DFF568166262DEA96AFD5450 + 23395DE50939F65252BF47BB + 706802052B608499FD490789 isa - PBXFrameworksBuildPhase + PBXHeadersBuildPhase runOnlyForDeploymentPostprocessing 0 - 9CAF0499B0A74F5CFA2A1E3B + AD2B1C2233FF46325D39E241 fileRef - DFBDE4922D5AE7807A0676AB + F00FE630E41F44E6FFD45A71 isa PBXBuildFile - 9D269D2372F1ADF83E59D0E1 + AD89D20777D9EE94627336E2 includeInIndex 1 @@ -2808,49 +2879,94 @@ PBXFileReference lastKnownFileType sourcecode.c.objc + name + RCTTouchHandler.m path - Pods-ReactKit-dummy.m + Base/RCTTouchHandler.m sourceTree <group> - 9DD770C9F0909D7B663F79B9 + AE10B2159AD52275F05F8AC9 - children + buildActionMask + 2147483647 + files - 84D089AE2FBBC9A674F6ED90 - C9D66CDB1AB4CA948A39E26D - 246059A6C46C6F40327D9399 - 8E4605DF173DA988811CD0D0 - 0A9F33FAC1AE68D789D1776C + B58CA75AF8AD019B55CD1E32 isa - PBXGroup - name - Products - sourceTree - <group> + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + AF4E3BAC82C6DDA51BDA9F71 + + attributes + + LastUpgradeCheck + 0510 + + buildConfigurationList + 0173994FBD7222C1B4B85D39 + compatibilityVersion + Xcode 3.2 + developmentRegion + English + hasScannedForEncodings + 0 + isa + PBXProject + knownRegions + + en + + mainGroup + 212CF767A11B52D3DC51414C + productRefGroup + D9BE4CF160D48568F7B2FACB + projectDirPath + + projectReferences + + projectRoot + + targets + + 8F2CA114699B27A7CF43562C + 3FF676DAA336F8ABDEA584D9 + 4E58EBB9F3E15EDD045ABDA5 + 7E2C54A003A5BC8A330804F4 + 13B7E1C57803F05652F30C1F + + + B1BD47DA44AC279A3EDA0440 + + fileRef + 2909FAB5B87A982551EDB4EB + isa + PBXBuildFile - 9F9D9AED8316D779EAEA6CBB + B406BF0BF6506637A35D5167 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h path - Pods.debug.xcconfig + RCTTextManager.h sourceTree <group> - A0519A4649CCB73011B039D4 + B58CA75AF8AD019B55CD1E32 fileRef - 8B70E5434E2CB2792BB8CC44 + C7DAA61CA1B9FB9112DC5983 isa PBXBuildFile - A0E7CDD7949470FE40475426 + B5A92E4318F13DCE45C534F2 includeInIndex 1 @@ -2859,69 +2975,35 @@ lastKnownFileType sourcecode.c.h name - RCTTiming.h + RCTTextField.h path - Modules/RCTTiming.h + Views/RCTTextField.h sourceTree <group> - A23F22A624E7020BCB6E7BA5 + B758DF7D0F574FFF532D9764 - baseConfigurationReference - 7643C57FD9EC1838B0876BBD - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-RCTDataManager/Pods-RCTDataManager-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - + includeInIndex + 1 isa - XCBuildConfiguration + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Debug + RCTScrollViewManager.m + path + Views/RCTScrollViewManager.m + sourceTree + <group> - A245979CC966F650E1C70D22 + B8121D544B10403943F18595 fileRef - 45315E8BEBC17056E67EC4FB + 87B7D30CEC087A04E202DDF9 isa PBXBuildFile - A381C58516139C34B8364CD6 + B8787968B4F54434A7E1511D includeInIndex 1 @@ -2930,35 +3012,48 @@ lastKnownFileType sourcecode.c.h name - RCTConvert.h + RCTNavigatorManager.h path - Base/RCTConvert.h + Views/RCTNavigatorManager.h sourceTree <group> - A3895AC4CDB2372877228F14 + B888803D97B219E6B4E00A03 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RCTTouchHandler.m + UIView+ReactKit.h path - Base/RCTTouchHandler.m + Views/UIView+ReactKit.h + sourceTree + <group> + + B894B8E147E4FB2BB7ACA437 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-RCTDataManager-dummy.m sourceTree <group> - A55433F81EC7E8C30974067B + B9160C07A1D8C010D44E96BB fileRef - 0EAFFB5E66ACE63398007604 + FB45A4C5FE56C74F2EA4BD34 isa PBXBuildFile - A70A067FFB2FCBB711D7F5FD + B9F1F805E855F9FFAAEE736B includeInIndex 1 @@ -2967,34 +3062,83 @@ lastKnownFileType sourcecode.c.objc name - RCTTextFieldManager.m + RCTAlertManager.m path - Views/RCTTextFieldManager.m + Modules/RCTAlertManager.m sourceTree <group> - A803356E590BE34243DE7EFE + BB31A06505EACAC92D4D0A0B + + fileRef + E90505537034D18BAC56279F + isa + PBXBuildFile + + BCB593A7E334E01470803D73 + + fileRef + 8B41BD0CA63A64FE32256CE7 + isa + PBXBuildFile + + BE5C6A85BE08DB53D14CE20A + + fileRef + 7CAEE77776D2737B9F4302B2 + isa + PBXBuildFile + + BF614E05BE9314CB6B03CFF4 fileRef - A381C58516139C34B8364CD6 + 0685D213EE86B64A622AFE5D isa PBXBuildFile - A827664554976694F2C33FCC + C004F0768C26A0FC14249BB2 fileRef - E6F823FCA4D283EAAAD0D577 + 0B4C1F8311751A431A9E43EB isa PBXBuildFile - A8A1B6892A1330983405EBBE + C076C6CC906607E83876CCC2 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RCTRedBox.m + path + Base/RCTRedBox.m + sourceTree + <group> + + C0BCC72ACD29F6AAC357B59C fileRef - 7050957C06196020470EC5C2 + 472F97575D9645EDA8B23D43 isa PBXBuildFile - AABC0F0E4C257651C752A272 + C1273C2B1A34EE7896A3D5FA + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + RCTImageDownloader.h + sourceTree + <group> + + C18BF11BD79C83BBFB1BD210 includeInIndex 1 @@ -3003,13 +3147,13 @@ lastKnownFileType sourcecode.c.h name - RCTNavigatorManager.h + RCTBridge.h path - Views/RCTNavigatorManager.h + Base/RCTBridge.h sourceTree <group> - AB42C08CAF730F8AF9C8ADAB + C1B075D45591A6568ECCD18C includeInIndex 1 @@ -3018,117 +3162,211 @@ lastKnownFileType sourcecode.c.objc name - RCTRedBox.m + RCTContextExecutor.m path - Base/RCTRedBox.m + Executors/RCTContextExecutor.m sourceTree <group> - AC11EC6BAF7ED8F76E48397C + C282F1B7233E10C31D165549 fileRef - 98AF860C16DE530EE9D5FAD5 + CD2F169E76E103DA4112FFEC isa PBXBuildFile - AC2A48152BD918215CA11AD5 + C2BDC288A96EC2C204FACAE4 - fileRef - 9361F6C165FFAD1CE1130BA7 + 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 + CLANG_WARN_EMPTY_BODY + YES + CLANG_WARN_ENUM_CONVERSION + YES + CLANG_WARN_INT_CONVERSION + YES + CLANG_WARN_OBJC_ROOT_CLASS + YES + COPY_PHASE_STRIP + NO + ENABLE_NS_ASSERTIONS + NO + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PREPROCESSOR_DEFINITIONS + + RELEASE=1 + + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES + GCC_WARN_UNDECLARED_SELECTOR + YES + GCC_WARN_UNINITIALIZED_AUTOS + YES + GCC_WARN_UNUSED_FUNCTION + YES + GCC_WARN_UNUSED_VARIABLE + YES + IPHONEOS_DEPLOYMENT_TARGET + 7.0 + STRIP_INSTALLED_PRODUCT + NO + VALIDATE_PRODUCT + YES + isa - PBXBuildFile + XCBuildConfiguration + name + Release - AC60249688E27C48CD0E62A1 + C3421858755177699D9E6345 - buildConfigurations + baseConfigurationReference + 26A204DC9AB5C60041E26549 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Target Support Files/Pods-RCTNetworkImage/Pods-RCTNetworkImage-prefix.pch + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + OTHER_LIBTOOLFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + C3908657E1A50F7F808796C1 + + children - A23F22A624E7020BCB6E7BA5 - 3AF0EA123B1D6D47095D8F69 + A2CDF46CB581C9C678ECAC7C + E1F996C0BFA1F4C1D6EFC235 + F00FE630E41F44E6FFD45A71 + 41D8E6FE5E575AF2F24ED506 + A8F2BA66EAD7DCC7C47897EC + 4C90FAF8FBD658990410C082 + 527AA636955F4145805B828C - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release isa - XCConfigurationList + PBXGroup + name + Pods + path + Target Support Files/Pods + sourceTree + <group> - ADAA64389F188489440FF394 + C564A2FC0A0C23D983F6A99B includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h + name + RCTSparseArray.h path - Pods-RCTDataManager.xcconfig + Base/RCTSparseArray.h sourceTree <group> - AE2F0C5806A4C1B2923B9AA4 - - fileRef - 59186CF0F15087A1C2B440DD - isa - PBXBuildFile - - AE5A12E81280D6C3660A8555 - - fileRef - 9574DCBBFE4EFAB138C43844 - isa - PBXBuildFile - - AF2BC09B042EBB50F1A78EB5 - - fileRef - 3C0A45593BBE3C2A57E72C81 - isa - PBXBuildFile - - B1A56B88049B3F5961BAEF1F + C5B608C0F41A84743C23F253 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc + name + RCTStaticImageManager.m path - Pods-environment.h + Views/RCTStaticImageManager.m sourceTree <group> - B233C279B7F95C416BE7460F + C7DAA61CA1B9FB9112DC5983 - fileRef - 4B5DA911DA22390C5E95B750 - isa - PBXBuildFile - - B311A068CB02A3CB5731DF3F - - fileRef - 79AC1D0DBC09CA9546BA5DC2 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + wrapper.framework + name + Foundation.framework + path + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework + sourceTree + DEVELOPER_DIR - B31D0718AFFBEBA633A5AB25 + C7DB5E0D273A12A263E3DF66 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTLog.h + RCTLocationObserver.m path - Base/RCTLog.h + Modules/RCTLocationObserver.m sourceTree <group> - B6BB65B0F788DFF2F121D4F7 + C816B4169D2425B6E0DCBF6F includeInIndex 1 @@ -3137,117 +3375,42 @@ lastKnownFileType sourcecode.c.h name - RCTShadowView.h + RCTViewManager.h path - Views/RCTShadowView.h + Views/RCTViewManager.h sourceTree <group> - B7BF08D30812CE93EE5B73B8 + C8CCB40239E2009CC5655B6B fileRef - F101BBCEB615F24C5BA2B161 + B894B8E147E4FB2BB7ACA437 isa PBXBuildFile - B8EFB7E653F82E82FDEBD4EF + CBD46C255D226CC91750FF6E fileRef - 17C0992A90EEBE80108AEF54 + 63310B6F2F3EBE6CC8C9A58A isa PBXBuildFile - B917A72C88A3FFCC8B3A78BF - - fileRef - AB42C08CAF730F8AF9C8ADAB - isa - PBXBuildFile - - B998DFBC2EC7B340775C2514 + CC7A4C8E06F6C0B809F1ADF6 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RCTWebViewExecutor.m + RCTNavItemManager.h path - Executors/RCTWebViewExecutor.m + Views/RCTNavItemManager.h sourceTree <group> - B9F42C9908AD31F4BC1F091D - - fileRef - 793AE1E6D8A0F5D66EC764FC - isa - PBXBuildFile - - BAD9616489752B70E709809C - - isa - PBXTargetDependency - name - Pods-RCTText - target - 607D2E44EB1F20343CE3456B - targetProxy - 5F835835D10C7DFB6A9CF6A3 - - BBE817045F170ECDCB05EF56 - - baseConfigurationReference - 8F5CED50CE2BB3EBC5A0C8B7 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-ReactKit/Pods-ReactKit-prefix.pch - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - BC0819432142676ED7CD8D13 + CD2F169E76E103DA4112FFEC includeInIndex 1 @@ -3255,31 +3418,22 @@ PBXFileReference lastKnownFileType sourcecode.c.objc - name - RCTView.m path - Views/RCTView.m + Pods-ReactKit-dummy.m sourceTree <group> - BCDA3D97529987F3AF6E1E94 - - fileRef - A70A067FFB2FCBB711D7F5FD - isa - PBXBuildFile - - BD4CB1806A00FC955BECE0B1 + CD51637ED2FE910623A957AB fileRef - E56829432E0DA699D11DF890 + C7DAA61CA1B9FB9112DC5983 isa PBXBuildFile - BD4F6574C5906CCB6FC42D7F + CDE95CDA8C87779EFE778F9A baseConfigurationReference - 8F5CED50CE2BB3EBC5A0C8B7 + E84F2418584963830725CDE6 buildSettings ALWAYS_SEARCH_USER_PATHS @@ -3325,14 +3479,42 @@ name Debug - BE549016B7D84400A9C21554 + D04E5DBEFDC4B2FA70ECBB57 fileRef - 9D269D2372F1ADF83E59D0E1 + B888803D97B219E6B4E00A03 isa PBXBuildFile - BF7B4B3789866923E16FA948 + D0FD74048B7D3439EDC0DDCF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTTextFieldManager.h + path + Views/RCTTextFieldManager.h + sourceTree + <group> + + D2906EE46F872A418B6B33AB + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + RCTText.m + sourceTree + <group> + + D3875E94710A862C72C9D02D includeInIndex 1 @@ -3345,100 +3527,63 @@ sourceTree <group> - BF94ECC553449F9486D48453 + D394735C135D36533551DF37 - attributes - - LastUpgradeCheck - 0510 - - buildConfigurationList - 41135E6FEF13B7C0629B2504 - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 + includeInIndex + 1 isa - PBXProject - knownRegions - - en - - mainGroup - 075ECFDD9BCF0E8901AE8625 - productRefGroup - 9DD770C9F0909D7B663F79B9 - projectDirPath - - projectReferences - - projectRoot - - targets - - 33E7FC15EBE6599AD3335BD8 - 932A9309F808F533D40582BB - DF58F2F4E6B0B43A57E1D871 - 607D2E44EB1F20343CE3456B - F3743E4364DCD50F66E07E03 - + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RCTStaticImage.m + path + Views/RCTStaticImage.m + sourceTree + <group> - C2E82E03DD326AD6B9E61CA8 + D50240220E277743B098DBAD + baseConfigurationReference + E84F2418584963830725CDE6 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 - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES COPY_PHASE_STRIP - NO - ENABLE_NS_ASSERTIONS - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PREPROCESSOR_DEFINITIONS - - RELEASE=1 - - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS YES - GCC_WARN_UNUSED_FUNCTION + DSTROOT + /tmp/xcodeproj.dst + GCC_PRECOMPILE_PREFIX_HEADER YES - GCC_WARN_UNUSED_VARIABLE + GCC_PREFIX_HEADER + Target Support Files/Pods-ReactKit/Pods-ReactKit-prefix.pch + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + OTHER_LIBTOOLFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL YES - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - STRIP_INSTALLED_PRODUCT - NO VALIDATE_PRODUCT YES @@ -3447,161 +3592,199 @@ name Release - C37AAC16F286B1DB8F7BD60C + D68FD95702012038D081A30C + + fileRef + C18BF11BD79C83BBFB1BD210 + isa + PBXBuildFile + + D73FE49574ED6F2E1BE3AF20 + + isa + PBXTargetDependency + name + Pods-RCTNetworkImage + target + 4E58EBB9F3E15EDD045ABDA5 + targetProxy + 6A34E09DEECEAFFE61EE78A4 + + D75EAAB4BC589DDF11232D56 + + fileRef + B9F1F805E855F9FFAAEE736B + isa + PBXBuildFile + + D76CEC171F408A47616D2702 + + fileRef + 8A3990D8C3642C990B243791 + isa + PBXBuildFile + + D7DCC1BDDF6B30BCCF621E17 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - RCTInvalidating.h + sourcecode.c.objc path - Base/RCTInvalidating.h + Pods-RCTText-dummy.m sourceTree <group> - C3885B5209E462E315C1A082 + D8261275342CB017F0469C64 - includeInIndex - 1 + children + + 13031656FE090AFA478A0C2E + EC0EF94CE6675DE213C63C55 + 3CD60F36DF6CEECFF4758BEE + 516150EA2C83F095456330AE + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXGroup name - RCTAssert.m - path - Base/RCTAssert.m + Development Pods sourceTree <group> - C3F3445613B7F46DC6BF3E3B + D8AC4BDDE87A9A5AEAFFE958 fileRef - 52C2F8683752617A087B61F9 + 965D54B6354201E9C547F888 isa PBXBuildFile - C6EB359CFF6D72170FEF1C91 + D9BE4CF160D48568F7B2FACB - includeInIndex - 1 + children + + 48B2F9A5EEA775E9BDF2360D + 89664286C51C7DFFF1F672C7 + 5571F59D7888CF59E6621A86 + 645997F70491670B86F2BA96 + 0974827BD5B31C816AC72CAC + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + PBXGroup name - RCTScrollViewManager.h - path - Views/RCTScrollViewManager.h + Products sourceTree <group> - C830647EE856312FD4703ADA + DACF3CCEA461A0EFF3A35E2F + + containerPortal + AF4E3BAC82C6DDA51BDA9F71 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 7E2C54A003A5BC8A330804F4 + remoteInfo + Pods-RCTText + + DC18D421A4941275A1E7BAD4 fileRef - 85AD0EB6443ECE478262D6C6 + A019FBFA9536047BFD4E8566 isa PBXBuildFile - C8D2916466298AD52317576B + DFF568166262DEA96AFD5450 fileRef - 284A37E0CFFCA95AD5134C06 + 4BC269B918F30C81607B1FEA isa PBXBuildFile - C9D66CDB1AB4CA948A39E26D + DFFD02DED71CBF8CF075A273 - explicitFileType - archive.ar - includeInIndex - 0 isa - PBXFileReference - path - libPods-RCTDataManager.a - sourceTree - BUILT_PRODUCTS_DIR + PBXTargetDependency + name + Pods-ReactKit + target + 13B7E1C57803F05652F30C1F + targetProxy + 7830A204AA05E610158D3092 - CA8DFA708A0CA7DF5695D590 + E1F996C0BFA1F4C1D6EFC235 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - RCTNavigator.m + text.plist.xml path - Views/RCTNavigator.m + Pods-acknowledgements.plist sourceTree <group> - CBE8ADD69617298088FF9ACF + E2FC6E20D98E105B4DE2C724 - includeInIndex - 1 + fileRef + 22E5124B31E3B321E794DC94 isa - PBXFileReference - name - Layout.c - path - Layout/Layout.c - sourceTree - <group> + PBXBuildFile - CC953A5B7DFF969670A89AF9 + E3096E2B995B282B80B5EB43 fileRef - 9574DCBBFE4EFAB138C43844 + 33092F9AC97DCFFCA7A6BEA5 isa PBXBuildFile - CCDED8EEB351B73EEC8B9F7E + E334AB4D0391D82A0DE38C55 fileRef - 80FE5B00B155529379660FC4 + AD89D20777D9EE94627336E2 isa PBXBuildFile - CD226C6942B1DF7EA0A2D228 + E4450895EB5C944681A11604 buildActionMask 2147483647 files - CC953A5B7DFF969670A89AF9 + B8121D544B10403943F18595 isa - PBXFrameworksBuildPhase + PBXHeadersBuildPhase runOnlyForDeploymentPostprocessing 0 - CDB49A44CDED422DC861AC80 + E5BB88DE7333103EDD6BFEFA fileRef - 5F8F95C34626059B26772C85 + EA5B9962C9C69FF5B105130C isa PBXBuildFile - CECB70566BB387FCC3E72F82 + E646155312572FA2F9C110A7 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h + name + RCTLog.h path - Pods-RCTNetworkImage-dummy.m + Base/RCTLog.h sourceTree <group> - CEEE4CFBC9BE5736ECAB62E6 + E6E580D9802C99CB05F48910 includeInIndex 1 @@ -3610,78 +3793,53 @@ lastKnownFileType sourcecode.c.objc name - RCTNavItem.m + RCTWebViewExecutor.m path - Views/RCTNavItem.m + Executors/RCTWebViewExecutor.m sourceTree <group> - CEFADE7A58F7E4400EE18E25 + E7374582F5A63129724C8E68 fileRef - B31D0718AFFBEBA633A5AB25 + C076C6CC906607E83876CCC2 isa PBXBuildFile - CF563F829B165F3323ABC0A1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RCTStaticImageManager.m - path - Views/RCTStaticImageManager.m - sourceTree - <group> - - CF75A4E5C983EFE50EF23864 + E73A41337A1AF48B8A39A088 - includeInIndex - 1 + fileRef + 2857546735111E15C0AA45AC isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RCTStatusBarManager.h - path - Modules/RCTStatusBarManager.h - sourceTree - <group> + PBXBuildFile - D01D41AF354CCA45EB9E3F09 + E79C749F7C18402B8FAC543A - includeInIndex - 1 + buildActionMask + 2147483647 + files + + AD2B1C2233FF46325D39E241 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - RCTNetworkImageViewManager.h - sourceTree - <group> + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - D324AB785A55E2706E36A274 + E84F2418584963830725CDE6 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - RCTRedBox.h + text.xcconfig path - Base/RCTRedBox.h + Pods-ReactKit-Private.xcconfig sourceTree <group> - D34FE18B7D368E5AD6584E23 + E90505537034D18BAC56279F includeInIndex 1 @@ -3690,50 +3848,20 @@ lastKnownFileType sourcecode.c.objc name - RCTCache.m + RCTNavItem.m path - Base/RCTCache.m + Views/RCTNavItem.m sourceTree <group> - D41179E6AAD395F25177A5F8 + E9778064D3F51028ADAE1A34 fileRef - 5A0B5C72A1AA647B3A4B14F6 + 63887528ABF88595D89EDA8E isa PBXBuildFile - D606AC45A684300C958D9C0C - - children - - 88C9CCC953EB2CBD7D57EED8 - 3C0A45593BBE3C2A57E72C81 - 048B0A5A6D3AE173A67CAE93 - - isa - PBXGroup - name - RCTDataManager - path - ../../../Libraries/Network - sourceTree - <group> - - D7A44E0FB5FD0083354541D0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-RCTNetworkImage-Private.xcconfig - sourceTree - <group> - - D9E56A6CF4CE4A04E95C3014 + EA5B9962C9C69FF5B105130C includeInIndex 1 @@ -3748,179 +3876,113 @@ sourceTree <group> - DB81D9FD0801A42A48152E0C + EAAA2A06300750F7AF266715 buildActionMask 2147483647 files - 7196F57776FE75B146C23681 + E2FC6E20D98E105B4DE2C724 + E5BB88DE7333103EDD6BFEFA + 7B3E398E836D3D5B284BE497 + 95F60EF688D3DC27638042A2 + A1DCC56E57BB6053E663E32D + D68FD95702012038D081A30C + 4F4B2DFFE6DB1F3F056D7A88 + 01D7CE13EF89CFA0018C19A0 + 6664ADDDE2CD563193D50725 + 99294162E5C2E03148EBF05C + 22E9B6EECA586FBF58E275F4 + E73A41337A1AF48B8A39A088 + B9160C07A1D8C010D44E96BB + 8989408E16B49A592CECE05E + 1ACF8F46B5AD479EC0466814 + 9725F8B362AF089826F00A64 + 3DE934F8F76F207BD55AB677 + 8074519FA3432A12365C723C + C004F0768C26A0FC14249BB2 + 4B893B55D3B47F56554BCEEB + 78C6E228F82F244A224CDAAC + 673ACA8D38F46D1E3F6C7B36 + BE5C6A85BE08DB53D14CE20A + C0BCC72ACD29F6AAC357B59C + 496F484960908F7F255D665C + 6F14A0EF8B554164C0913DD8 + 8D89762D01606FF08D2D0415 + 17E61BB696CF0023E490D3CA + 64CFDB05AE3A6A9975FFBCEA + 90B9883EFAE5BB4CA68AA7ED + 5445A5107FDF059DA476582F + FF564CF868E1285B9045D6EE + 1475284FDEE790E29FEF888A + 44A3273EA768EAD9FB3033B0 + 3E20F8895633E084956AFB54 + 3B1C86DC544A391311D0F119 + FDAA8DAAE150AAE129BA4846 + FB31D58A343DF9884B38F1FC + 8389891D3F795245EEC47D4B + 3C9A4805273F33EF92D439A4 + 6C14CDB69262D0CF9F277492 + F45F64B628ABB38034419973 + 58B5D9EFD4CDD5F7431E1416 + 45D22F90E12DC985BE508454 + 556D48417573C2CCC7132F1A + D04E5DBEFDC4B2FA70ECBB57 isa - PBXSourcesBuildPhase + PBXHeadersBuildPhase runOnlyForDeploymentPostprocessing 0 - DD25A411976BA72A8CB95128 - - children - - CBE8ADD69617298088FF9ACF - 59BF11297A6B39FFEBBB7861 - D9E56A6CF4CE4A04E95C3014 - 2D208141DE8BC9DD7F5B8235 - 15F0D204E7BD9B1607786736 - 800F02FE328BD54F6A90FD91 - C3885B5209E462E315C1A082 - 2CD30CF1663697474B87D08E - 70C56F45AD4CAD933ACBE2D4 - 3ED59FDCF3B8DE44DD4C1667 - 0EA55D4BFB9E3A24AB05482E - 95C56C7BFE0773470DD423D4 - D34FE18B7D368E5AD6584E23 - E64248B361B8929CFE00FADC - EF98585B892E19B5AE731973 - A381C58516139C34B8364CD6 - 79AC1D0DBC09CA9546BA5DC2 - 56FB9B47588CF0F36FC96390 - 59186CF0F15087A1C2B440DD - 793AE1E6D8A0F5D66EC764FC - 85AD0EB6443ECE478262D6C6 - C37AAC16F286B1DB8F7BD60C - EEE942E8275043E8ADF16BE2 - 1782BB92C0A529BF6AD72DFF - 5A0B5C72A1AA647B3A4B14F6 - 2108DCEFAE6CF37482CF1C0A - B31D0718AFFBEBA633A5AB25 - 1EA900AAF1440F65670A2F9D - 5219B1A509941D57D929D39A - CEEE4CFBC9BE5736ECAB62E6 - E59EC5A1D60FD731E0AA3C44 - 94F63AC21292EE02A10FEC17 - 737BA62A1374F34098A61A3C - CA8DFA708A0CA7DF5695D590 - AABC0F0E4C257651C752A272 - 8B70E5434E2CB2792BB8CC44 - F13F01D5CEF7D509D7FB3A75 - D324AB785A55E2706E36A274 - AB42C08CAF730F8AF9C8ADAB - 1592E2F41A2DC2C927EBBF12 - F101BBCEB615F24C5BA2B161 - E56829432E0DA699D11DF890 - E6F823FCA4D283EAAAD0D577 - C6EB359CFF6D72170FEF1C91 - 7050957C06196020470EC5C2 - 2409A610D6AB34EA92D33BE8 - B6BB65B0F788DFF2F121D4F7 - 8775A8D4E6338D61BF1064C5 - 6AEEF603053FE768ED3E5E4D - 5346BE5B4464865BE370DAE3 - 9361F6C165FFAD1CE1130BA7 - 94FE868251742B4D99E9D44C - 3D1E50AF744E283AA07F6B6A - CF563F829B165F3323ABC0A1 - CF75A4E5C983EFE50EF23864 - 7EFF5F80196820ED0BAC85A2 - DFA3EC5E1764BCB1C6CDEC48 - 84DC232D4E0A3B5F77BD4BC2 - 52C2F8683752617A087B61F9 - A70A067FFB2FCBB711D7F5FD - A0E7CDD7949470FE40475426 - 80FE5B00B155529379660FC4 - FFAA9FB176212ECB441C158B - A3895AC4CDB2372877228F14 - 4C96B8E009C3509E8C4A58F4 - 0EAFFB5E66ACE63398007604 - 4B4D221F3651E112595964E6 - 2BA58703E0C4B2559E28AE42 - 284A37E0CFFCA95AD5134C06 - 45315E8BEBC17056E67EC4FB - 06C6AEB41647779AE72D05D0 - BC0819432142676ED7CD8D13 - 290C5E10241C0B2C924F14E6 - 7440BE86AA8D5D86F9E0972C - 12E89F4AD5820CD9722AD8D0 - 99F944FDFA42E71DFD034D19 - B998DFBC2EC7B340775C2514 - 17C0992A90EEBE80108AEF54 - DD631F9387065E2C8158E9D2 - 46DBB7DDD201455CC7822443 - 5BC09E97F41420AF1394ADCE - 710A1B01FA9E8F0E95876C75 - - isa - PBXGroup - name - ReactKit - path - ../../../ReactKit - sourceTree - <group> - - DD631F9387065E2C8158E9D2 + EACA5CCAD77673E65C1833FF includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - RCTWrapperViewController.m + text.xcconfig path - Views/RCTWrapperViewController.m + Pods-RCTDataManager-Private.xcconfig sourceTree <group> - DDFF4F45838A985D83EB4388 - - fileRef - 9574DCBBFE4EFAB138C43844 - isa - PBXBuildFile - - DF58F2F4E6B0B43A57E1D871 + EC0EF94CE6675DE213C63C55 - buildConfigurationList - 1F99DFDC314091E129914F82 - buildPhases - - 38E413F00F71503B4358BF3A - 9CAACB75648220203821AF2C - 7158773877C1566031B98AA7 - - buildRules - - dependencies + children - 19CACF004F780E3053926DAD + C1273C2B1A34EE7896A3D5FA + 2EA25D395FD517EFB3A63CE0 + 965D54B6354201E9C547F888 + 4D5D8632A9C98162B3121441 + 7E4612BAA564E326F5CE9D8E + 2909FAB5B87A982551EDB4EB + 83F79A097E2909089E3FC524 isa - PBXNativeTarget + PBXGroup name - Pods-RCTNetworkImage - productName - Pods-RCTNetworkImage - productReference - 246059A6C46C6F40327D9399 - productType - com.apple.product-type.library.static - - DF8895F638ACA4C5989F506D - - fileRef - 84DC232D4E0A3B5F77BD4BC2 - isa - PBXBuildFile + RCTNetworkImage + path + ../../../Libraries/Image + sourceTree + <group> - DF924C16971D9C2C83A36133 + ECA2414C9D669EE25B29026B - fileRef - 737BA62A1374F34098A61A3C + buildConfigurations + + 05D4613D8454536A0C582506 + 81BC72A103E1C577C1B19212 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXBuildFile + XCConfigurationList - DFA3EC5E1764BCB1C6CDEC48 + EE584546150D3E55E6515F2E includeInIndex 1 @@ -3929,13 +3991,13 @@ lastKnownFileType sourcecode.c.h name - RCTTextField.h + RCTLocationObserver.h path - Views/RCTTextField.h + Modules/RCTLocationObserver.h sourceTree <group> - DFBDE4922D5AE7807A0676AB + EFC27C70A2E94665DCBD987F includeInIndex 1 @@ -3944,47 +4006,31 @@ lastKnownFileType sourcecode.c.objc path - Pods-RCTText-dummy.m + RCTDataManager.m sourceTree <group> - E03E37E50B395F68909D68F1 - - fileRef - 2D208141DE8BC9DD7F5B8235 - isa - PBXBuildFile - - E2DE70C97989E3B70384CE53 - - fileRef - 5346BE5B4464865BE370DAE3 - isa - PBXBuildFile - - E340F8420234B32BB795E0EE + EFF3190D434856C25227FE84 fileRef - 311B1F10DB6ECD376C2C410D + F603040661CEDD4C306E6127 isa PBXBuildFile - E56829432E0DA699D11DF890 + F00FE630E41F44E6FFD45A71 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - RCTScrollView.h + sourcecode.c.objc path - Views/RCTScrollView.h + Pods-dummy.m sourceTree <group> - E59EC5A1D60FD731E0AA3C44 + F1AF16AE6F3215C601C8BF2A includeInIndex 1 @@ -3993,43 +4039,41 @@ lastKnownFileType sourcecode.c.h name - RCTNavItemManager.h + RCTEventDispatcher.h path - Views/RCTNavItemManager.h + Base/RCTEventDispatcher.h sourceTree <group> - E64248B361B8929CFE00FADC + F2ABD2CA1B8437A717A8B02E includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTContextExecutor.h + RCTCache.m path - Executors/RCTContextExecutor.h + Base/RCTCache.m sourceTree <group> - E6F823FCA4D283EAAAD0D577 + F360C8A48A0EF89F49435FCC includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - RCTScrollView.m + text.xcconfig path - Views/RCTScrollView.m + Pods-RCTDataManager.xcconfig sourceTree <group> - E7825F1E43104ED6A50EDB98 + F398EE4EDB2C9867D5FF4E79 includeInIndex 1 @@ -4038,57 +4082,33 @@ lastKnownFileType sourcecode.c.h path - RCTText.h - sourceTree - <group> - - EBE596AB2811F489419F35E9 - - children - - 8AAEE8636EA9A9FF644ED344 - 98E2279571F800AAEC885852 - DFBDE4922D5AE7807A0676AB - F59352A24B5D8F8B1FF74ABC - - isa - PBXGroup - name - Support Files - path - ../../Examples/Movies/Pods/Target Support Files/Pods-RCTText + Pods-RCTText-prefix.pch sourceTree <group> - ED320F983C718810619BABED - - containerPortal - BF94ECC553449F9486D48453 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - F3743E4364DCD50F66E07E03 - remoteInfo - Pods-ReactKit - - EEE942E8275043E8ADF16BE2 + F3FA21714693F02F20D877A2 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTJSMethodRegistrar.h + RCTAssert.m path - Base/RCTJSMethodRegistrar.h + Base/RCTAssert.m sourceTree <group> - EF98585B892E19B5AE731973 + F45F64B628ABB38034419973 + + fileRef + C816B4169D2425B6E0DCBF6F + isa + PBXBuildFile + + F603040661CEDD4C306E6127 includeInIndex 1 @@ -4097,33 +4117,95 @@ lastKnownFileType sourcecode.c.objc name - RCTContextExecutor.m + RCTNavItemManager.m path - Executors/RCTContextExecutor.m + Views/RCTNavItemManager.m sourceTree <group> - EFDFA99290EC74C5612841DA + F6713859D76D7A17020FF1D7 - containerPortal - BF94ECC553449F9486D48453 + buildActionMask + 2147483647 + files + + 346B439D0B302F06A3944961 + D8AC4BDDE87A9A5AEAFFE958 + 8BFDB4E6A534A18777DD9413 + isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - F3743E4364DCD50F66E07E03 - remoteInfo - Pods-ReactKit + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 - F0B848BA6E9EB162430D912B + F68B2AE07F4085B87FF52821 - fileRef - D01D41AF354CCA45EB9E3F09 + 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 + CLANG_WARN_EMPTY_BODY + YES + CLANG_WARN_ENUM_CONVERSION + YES + CLANG_WARN_INT_CONVERSION + YES + CLANG_WARN_OBJC_ROOT_CLASS + YES + COPY_PHASE_STRIP + YES + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES + GCC_WARN_UNDECLARED_SELECTOR + YES + GCC_WARN_UNINITIALIZED_AUTOS + YES + GCC_WARN_UNUSED_FUNCTION + YES + GCC_WARN_UNUSED_VARIABLE + YES + IPHONEOS_DEPLOYMENT_TARGET + 7.0 + ONLY_ACTIVE_ARCH + YES + STRIP_INSTALLED_PRODUCT + NO + isa - PBXBuildFile + XCBuildConfiguration + name + Debug - F101BBCEB615F24C5BA2B161 + F70008E1D19432CFDECE123B includeInIndex 1 @@ -4131,88 +4213,39 @@ PBXFileReference lastKnownFileType sourcecode.c.objc - name - RCTRootView.m path - Base/RCTRootView.m + Pods-RCTNetworkImage-dummy.m sourceTree <group> - F13F01D5CEF7D509D7FB3A75 + F8081DBFD37093C1EEE34411 - includeInIndex - 1 + fileRef + B758DF7D0F574FFF532D9764 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RCTPointerEvents.h - path - Base/RCTPointerEvents.h - sourceTree - <group> + PBXBuildFile - F190DBB178201E2AC54C7F70 + F81FAD337D3D121CA8A5A4CA buildActionMask 2147483647 files - AE5A12E81280D6C3660A8555 + 5E978F1482C798C60C70F510 isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 - F26F1444F50B137ED3B72374 - - fileRef - 3D1E50AF744E283AA07F6B6A - isa - PBXBuildFile - - F3743E4364DCD50F66E07E03 - - buildConfigurationList - 5840BACA98667C60F6B3A0C1 - buildPhases - - 5789BD634633A460A15D2CFB - F190DBB178201E2AC54C7F70 - 7253CC6B6B8F6AE678B3B19C - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-ReactKit - productName - Pods-ReactKit - productReference - 0A9F33FAC1AE68D789D1776C - productType - com.apple.product-type.library.static - - F3DAEC86B758048B5930EF1B - - fileRef - 800F02FE328BD54F6A90FD91 - isa - PBXBuildFile - - F4AB97BA6A8BC00071F62ED2 + FB31D58A343DF9884B38F1FC fileRef - AABC0F0E4C257651C752A272 + 3B2EF60D760BB2D99E79CE51 isa PBXBuildFile - F59352A24B5D8F8B1FF74ABC + FB45A4C5FE56C74F2EA4BD34 includeInIndex 1 @@ -4220,65 +4253,80 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + RCTInvalidating.h path - Pods-RCTText-prefix.pch + Base/RCTInvalidating.h sourceTree <group> - F5B54251AEB97ECA54054310 + FB5BEEF19CFBB7012E80C408 children - D606AC45A684300C958D9C0C - 7D3032A8B618BED47A896B35 - 65319A04EE7272D8823EC289 - DD25A411976BA72A8CB95128 + 782532E10015155FB2604DE6 + E84F2418584963830725CDE6 + CD2F169E76E103DA4112FFEC + 7E53CCE7BC2F97B8D7A64AD0 isa PBXGroup name - Development Pods + Support Files + path + ../Examples/Movies/Pods/Target Support Files/Pods-ReactKit sourceTree <group> - F8A906774F36E8CD2451E82E + FCFDA7AB4DB749DFF1E2511E - fileRef - 7440BE86AA8D5D86F9E0972C + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTContextExecutor.h + path + Executors/RCTContextExecutor.h + sourceTree + <group> - FCF9FA9A52C6466496834D9B + FDAA8DAAE150AAE129BA4846 fileRef - D34FE18B7D368E5AD6584E23 + 45760E0B6F7A35A5C23C8B46 isa PBXBuildFile - FE86C2EE891C09720566A5D9 + FE2FDD4E39D0988AC7EFFDA9 fileRef - 52B8E3C21D812BBDA6A21D90 + 36C25DD43B6139727D23ABDE isa PBXBuildFile - FFAA9FB176212ECB441C158B + FE9545D71B365894A20387A0 - includeInIndex - 1 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + PBXTargetDependency name - RCTTouchHandler.h - path - Base/RCTTouchHandler.h - sourceTree - <group> + Pods-ReactKit + target + 13B7E1C57803F05652F30C1F + targetProxy + 114860C3B3984FFBF421B47A + + FF564CF868E1285B9045D6EE + + fileRef + 1C1136F66431443A895D4575 + isa + PBXBuildFile rootObject - BF94ECC553449F9486D48453 + AF4E3BAC82C6DDA51BDA9F71 diff --git a/Examples/TicTacToe/Pods/Headers/Public/RCTNetworkImage/RCTNetworkImageView.h b/Examples/TicTacToe/Pods/Headers/Public/RCTNetworkImage/RCTNetworkImageView.h index c99ed0689aed78..920bf705c5f50d 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/RCTNetworkImage/RCTNetworkImageView.h +++ b/Examples/TicTacToe/Pods/Headers/Public/RCTNetworkImage/RCTNetworkImageView.h @@ -6,7 +6,8 @@ @interface RCTNetworkImageView : UIView -- (instancetype)initWithFrame:(CGRect)frame imageDownloader:(RCTImageDownloader *)imageDownloader; +- (instancetype)initWithFrame:(CGRect)frame + imageDownloader:(RCTImageDownloader *)imageDownloader NS_DESIGNATED_INITIALIZER; /** * An image that will appear while the view is loading the image from the network, diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTBridge.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTBridge.h index 9a890a07acf50c..4dcaee8e2381c3 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTBridge.h +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTBridge.h @@ -6,32 +6,16 @@ @class RCTBridge; @class RCTEventDispatcher; -@class RCTRootView; - -/** - * Utilities for constructing common response objects. When sending a - * systemError back to JS, it's important to describe whether or not it was a - * system error, or API usage error. System errors should never happen and are - * therefore logged using `RCTLogError()`. API usage errors are expected if the - * API is misused and will therefore not be logged using `RCTLogError()`. The JS - * application code is expected to handle them. Regardless of type, each error - * should be logged at most once. - */ -static inline NSDictionary *RCTSystemErrorObject(NSString *msg) -{ - return @{@"systemError": msg ?: @""}; -} - -static inline NSDictionary *RCTAPIErrorObject(NSString *msg) -{ - return @{@"apiError": msg ?: @""}; -} /** * This block can be used to instantiate modules that require additional * init parameters, or additional configuration prior to being used. + * The bridge will call this block to instatiate the modules, and will + * be responsible for invalidating/releasing them when the bridge is destroyed. + * For this reason, the block should always return new module instances, and + * module instances should not be shared between bridges. */ -typedef NSArray *(^RCTBridgeModuleProviderBlock)(RCTBridge *bridge); +typedef NSArray *(^RCTBridgeModuleProviderBlock)(void); /** * Async batched bridge used to communicate with the JavaScript application. @@ -42,12 +26,12 @@ typedef NSArray *(^RCTBridgeModuleProviderBlock)(RCTBridge *bridge); * The designated initializer. This creates a new bridge on top of the specified * executor. The bridge should then be used for all subsequent communication * with the JavaScript code running in the executor. Modules will be automatically - * instantiated using the default contructor, but you can optionally pass in a - * module provider block to manually instantiate modules that require additional - * init parameters or configuration. + * instantiated using the default contructor, but you can optionally pass in an + * array of pre-initialized module instances if they require additional init + * parameters or configuration. */ -- (instancetype)initWithJavaScriptExecutor:(id)javaScriptExecutor - moduleProvider:(RCTBridgeModuleProviderBlock)block NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithExecutor:(id)executor + moduleProvider:(RCTBridgeModuleProviderBlock)block NS_DESIGNATED_INITIALIZER; /** * This method is used to call functions in the JavaScript application context. @@ -81,16 +65,6 @@ typedef NSArray *(^RCTBridgeModuleProviderBlock)(RCTBridge *bridge); */ @property (nonatomic, readonly) dispatch_queue_t shadowQueue; -// For use in implementing delegates, which may need to queue responses. -- (RCTResponseSenderBlock)createResponseSenderBlock:(NSInteger)callbackID; - -/** - * Register a root view with the bridge. Theorectically, a single bridge can - * support multiple root views, however this feature is not currently exposed - * and may eventually be removed. - */ -- (void)registerRootView:(RCTRootView *)rootView; - /** * Global logging function that will print to both xcode and JS debugger consoles. * diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTBridgeModule.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTBridgeModule.h index d9df70a228abfe..2627a0b9fa03a8 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTBridgeModule.h +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTBridgeModule.h @@ -19,10 +19,12 @@ typedef void (^RCTResponseSenderBlock)(NSArray *response); @optional /** - * Optional initializer for modules that require access - * to bridge features, such as sending events or making JS calls + * A reference to the RCTBridge. Useful for modules that require access + * to bridge features, such as sending events or making JS calls. This + * will be set automatically by the bridge when it initializes the module. +* To implement this in your module, just add @synthesize bridge = _bridge; */ -- (instancetype)initWithBridge:(RCTBridge *)bridge; +@property (nonatomic, strong) RCTBridge *bridge; /** * The module name exposed to JS. If omitted, this will be inferred @@ -42,17 +44,11 @@ typedef void (^RCTResponseSenderBlock)(NSArray *response); /** * Injects constants into JS. These constants are made accessible via - * NativeModules.moduleName.X. Note that this method is not inherited when you - * subclass a module, and you should not call [super constantsToExport] when - * implementing it. - */ -+ (NSDictionary *)constantsToExport; - -/** - * Some "constants" are not really constant, and need to be re-generated - * each time the bridge module is created. Support for this feature is - * deprecated and may be going away or changing, but for now you can use - * the -constantsToExport instance method to register these "pseudo-constants". + * NativeModules.ModuleName.X. This method is called when the module is + * registered by the bridge. It is only called once for the lifetime of the + * bridge, so it is not suitable for returning dynamic values, but may be + * used for long-lived values such as session keys, that are regenerated only + * as part of a reload of the entire React application. */ - (NSDictionary *)constantsToExport; diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTJavaScriptExecutor.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTJavaScriptExecutor.h index 7062570a4e0c66..4d32f1c2f6b93a 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTJavaScriptExecutor.h +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTJavaScriptExecutor.h @@ -5,7 +5,7 @@ #import "RCTInvalidating.h" typedef void (^RCTJavaScriptCompleteBlock)(NSError *error); -typedef void (^RCTJavaScriptCallback)(id objcValue, NSError *error); +typedef void (^RCTJavaScriptCallback)(id json, NSError *error); /** * Abstracts away a JavaScript execution context - we may be running code in a diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTLocationObserver.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTLocationObserver.h new file mode 100644 index 00000000000000..ad3ba2ce29bd27 --- /dev/null +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTLocationObserver.h @@ -0,0 +1,7 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#import "RCTBridgeModule.h" + +@interface RCTLocationObserver : NSObject + +@end diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTLog.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTLog.h index a97d134584ea6b..ba72bc8ff3993e 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTLog.h +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTLog.h @@ -20,28 +20,22 @@ // If defined, only log messages that match this regex will fatal #define RCTLOG_FATAL_REGEX nil -#define _RCTLog(__RCTLog__level, ...) do { \ - NSString *__RCTLog__levelStr; \ - switch(__RCTLog__level) { \ - case RCTLOG_INFO: __RCTLog__levelStr = @"info"; break; \ - case RCTLOG_WARN: __RCTLog__levelStr = @"warn"; break; \ - case RCTLOG_ERROR: __RCTLog__levelStr = @"error"; break; \ - case RCTLOG_MUSTFIX: __RCTLog__levelStr = @"mustfix"; break; \ - } \ - NSString *__RCTLog__msg = _RCTLogObjects(RCTLogFormat(__VA_ARGS__), __RCTLog__levelStr); \ - if (__RCTLog__level >= RCTLOG_FATAL_LEVEL) { \ - BOOL __RCTLog__fail = YES; \ - if (RCTLOG_FATAL_REGEX) { \ - NSError *__RCTLog__e; \ - NSRegularExpression *__RCTLog__regex = [NSRegularExpression regularExpressionWithPattern:RCTLOG_FATAL_REGEX options:0 error:&__RCTLog__e]; \ - __RCTLog__fail = [__RCTLog__regex numberOfMatchesInString:__RCTLog__msg options:0 range:NSMakeRange(0, [__RCTLog__msg length])] > 0; \ - } \ - RCTCAssert(!__RCTLog__fail, @"RCTLOG_FATAL_LEVEL %@: %@", __RCTLog__levelStr, __RCTLog__msg); \ - } \ - if (__RCTLog__level >= RCTLOG_REDBOX_LEVEL) { \ - RCTRedBox *__RCTLog__redBox = [RCTRedBox sharedInstance]; \ - [__RCTLog__redBox showErrorMessage:__RCTLog__msg]; \ - } \ +extern __unsafe_unretained NSString *RCTLogLevels[]; + +#define _RCTLog(_level, ...) do { \ + NSString *__RCTLog__levelStr = RCTLogLevels[_level - 1]; \ + NSString *__RCTLog__msg = RCTLogObjects(RCTLogFormat(__FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__), __RCTLog__levelStr); \ + if (_level >= RCTLOG_FATAL_LEVEL) { \ + BOOL __RCTLog__fail = YES; \ + if (RCTLOG_FATAL_REGEX) { \ + NSRegularExpression *__RCTLog__regex = [NSRegularExpression regularExpressionWithPattern:RCTLOG_FATAL_REGEX options:0 error:NULL]; \ + __RCTLog__fail = [__RCTLog__regex numberOfMatchesInString:__RCTLog__msg options:0 range:NSMakeRange(0, [__RCTLog__msg length])] > 0; \ + } \ + RCTCAssert(!__RCTLog__fail, @"RCTLOG_FATAL_LEVEL %@: %@", __RCTLog__levelStr, __RCTLog__msg); \ + } \ + if (_level >= RCTLOG_REDBOX_LEVEL) { \ + [[RCTRedBox sharedInstance] showErrorMessage:__RCTLog__msg]; \ + } \ } while (0) #define RCTLog(...) _RCTLog(RCTLOG_INFO, __VA_ARGS__) @@ -50,20 +44,15 @@ #define RCTLogError(...) _RCTLog(RCTLOG_ERROR, __VA_ARGS__) #define RCTLogMustFix(...) _RCTLog(RCTLOG_MUSTFIX, __VA_ARGS__) -#define RCTLogFormat(...) _RCTLogFormat(__FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__) -#define RCTLogFormatString(...) _RCTLogFormatString(__FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__) - #ifdef __cplusplus extern "C" { #endif -NSString *_RCTLogObjects(NSArray *objects, NSString *level); -NSArray *_RCTLogFormat(const char *file, int lineNumber, const char *funcName, NSString *format, ...) NS_FORMAT_FUNCTION(4,5); -NSString *_RCTLogFormatString(const char *file, int lineNumber, const char *funcName, NSString *format, ...) NS_FORMAT_FUNCTION(4,5); +NSString *RCTLogObjects(NSArray *objects, NSString *level); +NSArray *RCTLogFormat(const char *file, int lineNumber, const char *funcName, NSString *format, ...) NS_FORMAT_FUNCTION(4,5); + +void RCTInjectLogFunction(void (^logFunction)(NSString *msg)); #ifdef __cplusplus } #endif - -typedef void (^RCTLogFunction)(NSString *format, NSString *str); -void RCTInjectLogFunction(RCTLogFunction func); diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTNavigator.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTNavigator.h index 5d928efa7bddbe..c9051c75387da4 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTNavigator.h +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTNavigator.h @@ -11,7 +11,7 @@ @property (nonatomic, strong) UIView *reactNavSuperviewLink; @property (nonatomic, assign) NSInteger requestedTopOfStack; -- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher; +- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; /** * Schedules a JavaScript navigation and prevents `UIKit` from navigating until diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTScrollView.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTScrollView.h index 82667b2051b1a5..204ddf494145b4 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTScrollView.h +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTScrollView.h @@ -12,6 +12,8 @@ @interface RCTScrollView : RCTView +- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; + /** * If the `contentSize` is not provided, then the `contentSize` will * automatically be determined by the size of the `RKScrollView` subview. @@ -32,6 +34,4 @@ @property (nonatomic, assign) BOOL centerContent; @property (nonatomic, copy) NSArray *stickyHeaderIndices; -- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher; - @end diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTShadowView.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTShadowView.h index ec2b8c3537e4fa..9a09bad4fe48f2 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTShadowView.h +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTShadowView.h @@ -3,29 +3,15 @@ #import #import "Layout.h" +#import "RCTUIManager.h" #import "RCTViewNodeProtocol.h" @class RCTSparseArray; -// TODO: amalgamate these enums? -typedef NS_ENUM(NSUInteger, RCTLayoutLifecycle) { - RCTLayoutLifecycleUninitialized = 0, - RCTLayoutLifecycleComputed, - RCTLayoutLifecycleDirtied, -}; - -// TODO: is this still needed? -typedef NS_ENUM(NSUInteger, RCTPropagationLifecycle) { - RCTPropagationLifecycleUninitialized = 0, - RCTPropagationLifecycleComputed, - RCTPropagationLifecycleDirtied, -}; - -// TODO: move this to text node? -typedef NS_ENUM(NSUInteger, RCTTextLifecycle) { - RCTTextLifecycleUninitialized = 0, - RCTTextLifecycleComputed, - RCTTextLifecycleDirtied, +typedef NS_ENUM(NSUInteger, RCTUpdateLifecycle) { + RCTUpdateLifecycleUninitialized = 0, + RCTUpdateLifecycleComputed, + RCTUpdateLifecycleDirtied, }; // TODO: is this redundact now? @@ -48,7 +34,7 @@ typedef void (^RCTApplierBlock)(RCTSparseArray *); @property (nonatomic, copy) NSString *moduleName; @property (nonatomic, assign) BOOL isBGColorExplicitlySet; // Used to propogate to children @property (nonatomic, strong) UIColor *backgroundColor; // Used to propogate to children -@property (nonatomic, assign) RCTLayoutLifecycle layoutLifecycle; +@property (nonatomic, assign) RCTUpdateLifecycle layoutLifecycle; /** * isNewView - Used to track the first time the view is introduced into the hierarchy. It is initialized YES, then is @@ -122,11 +108,23 @@ typedef void (^RCTApplierBlock)(RCTSparseArray *); @property (nonatomic, assign) css_wrap_type_t flexWrap; @property (nonatomic, assign) CGFloat flex; -- (void)collectUpdatedProperties:(NSMutableSet *)viewsWithNewProperties parentProperties:(NSDictionary *)parentProperties; +/** + * Calculate property changes that need to be propagated to the view. + * The applierBlocks set contains RCTApplierBlock functions that must be applied + * on the main thread in order to update the view. + */ +- (void)collectUpdatedProperties:(NSMutableSet *)applierBlocks parentProperties:(NSDictionary *)parentProperties; + +/** + * Calculate all views whose frame needs updating after layout has been calculated. + * The viewsWithNewFrame set contains the reactTags of the views that need updating. + */ - (void)collectRootUpdatedFrames:(NSMutableSet *)viewsWithNewFrame parentConstraint:(CGSize)parentConstraint; -- (void)fillCSSNode:(css_node_t *)node; -// The following are implementation details exposed to subclasses. Do not call them directly +/** + * The following are implementation details exposed to subclasses. Do not call them directly + */ +- (void)fillCSSNode:(css_node_t *)node; - (void)dirtyLayout; - (BOOL)isLayoutDirty; diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTTextField.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTTextField.h index 2a0225f27682d4..1688f8fdc0c138 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTTextField.h +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTTextField.h @@ -10,6 +10,6 @@ @property (nonatomic, assign) BOOL autoCorrect; @property (nonatomic, assign) UIEdgeInsets paddingEdgeInsets; // TODO: contentInset -- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher; +- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; @end diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTTouchHandler.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTTouchHandler.h index 53379a78a3b119..46c81b9ef5ea53 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTTouchHandler.h +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTTouchHandler.h @@ -8,7 +8,7 @@ @interface RCTTouchHandler : UIGestureRecognizer -- (instancetype)initWithBridge:(RCTBridge *)bridge; +- (instancetype)initWithBridge:(RCTBridge *)bridge NS_DESIGNATED_INITIALIZER; - (void)startOrResetInteractionTiming; - (NSDictionary *)endAndResetInteractionTiming; diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTUIManager.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTUIManager.h index 87e91118aeaff0..701c37f930aacc 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTUIManager.h +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTUIManager.h @@ -2,13 +2,18 @@ #import +#import "RCTBridge.h" #import "RCTBridgeModule.h" #import "RCTInvalidating.h" +#import "RCTViewManager.h" @class RCTRootView; @protocol RCTScrollableProtocol; +/** + * The RCTUIManager is the module responsible for updating the view hierarchy. + */ @interface RCTUIManager : NSObject @property (nonatomic, weak) id mainScrollView; @@ -19,8 +24,33 @@ */ @property (nonatomic, readwrite, weak) id nativeMainScrollDelegate; +/** + * Register a root view with the RCTUIManager. Theoretically, a single manager + * can support multiple root views, however this feature is not currently exposed + * and may eventually be removed. + */ - (void)registerRootView:(RCTRootView *)rootView; +/** + * Schedule a block to be executed on the UI thread. Useful if you need to execute + * view logic after all currently queued view updates have completed. + */ +- (void)addUIBlock:(RCTViewManagerUIBlock)block; + +/** + * The view that is currently first responder, according to the JS context. + */ + (UIView *)JSResponder; @end + +/** + * This category makes the current RCTUIManager instance available via the + * RCTBridge, which is useful for RCTBridgeModules or RCTViewManagers that + * need to access the RCTUIManager. + */ +@interface RCTBridge (RCTUIManager) + +@property (nonatomic, readonly) RCTUIManager *uiManager; + +@end diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTUtils.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTUtils.h index 3612b1f274b774..de203e4aeeba47 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTUtils.h +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTUtils.h @@ -1,17 +1,15 @@ // Copyright 2004-present Facebook. All Rights Reserved. +#import + #import #import -#import #import "RCTAssert.h" -// Macro to indicate when inherited initializer is not to be used -#define RCT_NOT_DESIGNATED_INITIALIZER() \ -do { \ - RCTAssert(NO, @"%@ is not the designated initializer for instances of %@.", NSStringFromSelector(_cmd), [self class]); \ - return nil; \ -} while (0) +#ifdef __cplusplus +extern "C" { +#endif // Utility functions for JSON object <-> string serialization/deserialization NSString *RCTJSONStringify(id jsonObject, NSError **error); @@ -39,3 +37,10 @@ void RCTSwapInstanceMethods(Class cls, SEL original, SEL replacement); // Module subclass support BOOL RCTClassOverridesClassMethod(Class cls, SEL selector); BOOL RCTClassOverridesInstanceMethod(Class cls, SEL selector); + +// Enumerate all classes that conform to NSObject protocol +void RCTEnumerateClasses(void (^block)(Class cls)); + +#ifdef __cplusplus +} +#endif diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTView.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTView.h index 77dee1df8cab89..8023366331505d 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTView.h +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTView.h @@ -11,7 +11,6 @@ @interface RCTView : UIView @property (nonatomic, assign) RCTPointerEvents pointerEvents; -@property (nonatomic, copy) NSString *overrideAccessibilityLabel; + (void)autoAdjustInsetsForView:(UIView *)parentView withScrollView:(UIScrollView *)scrollView diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTViewManager.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTViewManager.h index e77be09c12baf4..d3b7c8a017aefe 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTViewManager.h +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTViewManager.h @@ -2,9 +2,11 @@ #import +#import "RCTBridgeModule.h" #import "RCTConvert.h" #import "RCTLog.h" +@class RCTBridge; @class RCTEventDispatcher; @class RCTShadowView; @class RCTSparseArray; @@ -12,19 +14,22 @@ typedef void (^RCTViewManagerUIBlock)(RCTUIManager *uiManager, RCTSparseArray *viewRegistry); -@interface RCTViewManager : NSObject +@interface RCTViewManager : NSObject /** - * Designated initializer for view modules. Override this when subclassing. + * The bridge can be used to access both the RCTUIIManager and the RCTEventDispatcher, + * allowing the manager (or the views that it manages) to manipulate the view + * hierarchy and send events back to the JS context. */ -- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; +@property (nonatomic, strong) RCTBridge *bridge; /** * The event dispatcher is used to send events back to the JavaScript application. * It can either be used directly by the module, or passed on to instantiated * view subclasses so that they can handle their own events. */ -@property (nonatomic, readonly, weak) RCTEventDispatcher *eventDispatcher; +// TODO: remove this, as it can be accessed directly from bridge +@property (nonatomic, readonly) RCTEventDispatcher *eventDispatcher; /** * The module name exposed to React JS. If omitted, this will be inferred @@ -88,34 +93,19 @@ typedef void (^RCTViewManagerUIBlock)(RCTUIManager *uiManager, RCTSparseArray *v + (NSDictionary *)customDirectEventTypes; /** - * Injects constants into JS. These constants are made accessible via - * NativeModules.moduleName.X. Note that this method is not inherited when you - * subclass a view module, and you should not call [super constantsToExport] - * when overriding it. + * Called to notify manager that layout has finished, in case any calculated + * properties need to be copied over from shadow view to view. */ -+ (NSDictionary *)constantsToExport; +- (RCTViewManagerUIBlock)uiBlockToAmendWithShadowView:(RCTShadowView *)shadowView; /** - * To deprecate, hopefully + * Called after view hierarchy manipulation has finished, and all shadow props + * have been set, but before layout has been performed. Useful for performing + * custo layout logic or tasks that involve walking the view hierarchy. + * To be deprecated, hopefully. */ - (RCTViewManagerUIBlock)uiBlockToAmendWithShadowViewRegistry:(RCTSparseArray *)shadowViewRegistry; -/** - * Informal protocol for setting view and shadowView properties. - * Implement methods matching these patterns to set any properties that - * require special treatment (e.g. where the type or name cannot be inferred). - * - * - (void)set_:(id)property - * forView:(UIView *)view - * withDefaultView:(UIView *)defaultView; - * - * - (void)set_:(id)property - * forShadowView:(RCTShadowView *)view - * withDefaultView:(RCTShadowView *)defaultView; - * - * For simple cases, use the macros below: - */ - /** * This handles the simple case, where JS and native property names match * And the type can be automatically inferred. @@ -131,10 +121,21 @@ RCT_REMAP_VIEW_PROPERTY(name, name) - (void)set_##name:(id)json forView:(id)view withDefaultView:(id)defaultView { \ if ((json && !RCTSetProperty(view, @#keypath, json)) || \ (!json && !RCTCopyProperty(view, defaultView, @#keypath))) { \ - RCTLogMustFix(@"%@ does not have setter for `%s` property", [view class], #name); \ + RCTLogError(@"%@ does not have setter for `%s` property", [view class], #name); \ } \ } +/** + * These macros can be used when you need to provide custom logic for setting + * view properties. The macro should be followed by a method body, which can + * refer to "json", "view" and "defaultView" to implement the required logic. + */ +#define RCT_CUSTOM_VIEW_PROPERTY(name, viewType) \ +- (void)set_##name:(id)json forView:(viewType)view withDefaultView:(viewType)defaultView + +#define RCT_CUSTOM_SHADOW_PROPERTY(name, viewType) \ +- (void)set_##name:(id)json forShadowView:(viewType)view withDefaultView:(viewType)defaultView + /** * These are useful in cases where the module's superclass handles a * property, but you wish to "unhandle" it, so it will be ignored. diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTViewNodeProtocol.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTViewNodeProtocol.h index 1fa3e252b3c1b7..b6f59ea103567e 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTViewNodeProtocol.h +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTViewNodeProtocol.h @@ -8,7 +8,7 @@ */ @protocol RCTViewNodeProtocol -@property (nonatomic, strong) NSNumber *reactTag; +@property (nonatomic, copy) NSNumber *reactTag; - (void)insertReactSubview:(id)subview atIndex:(NSInteger)atIndex; - (void)removeReactSubview:(id)subview; @@ -21,6 +21,8 @@ @optional // TODO: Deprecate this +// This method is called after layout has been performed for all views known +// to the RCTViewManager. It is only called on UIViews, not shadow views. - (void)reactBridgeDidFinishTransaction; @end diff --git a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTWrapperViewController.h b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTWrapperViewController.h index d8f22270a23c63..69075c6a4dcb92 100644 --- a/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTWrapperViewController.h +++ b/Examples/TicTacToe/Pods/Headers/Public/ReactKit/RCTWrapperViewController.h @@ -15,8 +15,11 @@ didMoveToNavigationController:(UINavigationController *)navigationController; @interface RCTWrapperViewController : UIViewController -- (instancetype)initWithContentView:(UIView *)contentView eventDispatcher:(RCTEventDispatcher *)eventDispatcher; -- (instancetype)initWithNavItem:(RCTNavItem *)navItem eventDispatcher:(RCTEventDispatcher *)eventDispatcher; +- (instancetype)initWithContentView:(UIView *)contentView + eventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; + +- (instancetype)initWithNavItem:(RCTNavItem *)navItem + eventDispatcher:(RCTEventDispatcher *)eventDispatcher; @property (nonatomic, readwrite, weak) id navigationListener; @property (nonatomic, strong, readwrite) RCTNavItem *navItem; diff --git a/Examples/TicTacToe/Pods/Pods.xcodeproj/project.pbxproj b/Examples/TicTacToe/Pods/Pods.xcodeproj/project.pbxproj index 970a5d205c1a65..9bc0e18a518854 100644 --- a/Examples/TicTacToe/Pods/Pods.xcodeproj/project.pbxproj +++ b/Examples/TicTacToe/Pods/Pods.xcodeproj/project.pbxproj @@ -10,162 +10,88 @@ 46 objects - 005E47CD37DA97006CE65B99 + 025A87130AD86B58E404D3C0 - includeInIndex - 1 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - RCTText.h - sourceTree - <group> + PBXTargetDependency + name + Pods-RCTNetworkImage + target + 769A717CAFE5B019B17120C7 + targetProxy + B1AB002CD8EBE409EC364BF4 - 00CA6F6E234DA9FAFC268F4C + 02CA42753891DE99F0C4A9F1 - 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 - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - COPY_PHASE_STRIP - NO - ENABLE_NS_ASSERTIONS - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PREPROCESSOR_DEFINITIONS - - RELEASE=1 - - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - STRIP_INSTALLED_PRODUCT - NO - VALIDATE_PRODUCT - YES - + fileRef + 80A2CDBEC4C2EA679BDFD05B isa - XCBuildConfiguration - name - Release + PBXBuildFile + + 034357B4792A8675BA3B962F + + fileRef + 31E92BD37BFCCB143ED614CB + isa + PBXBuildFile - 02011DF072CE86BD3AD237F3 + 05979756D746338C19D9CFE3 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTUIManager.h + RCTViewManager.m path - Modules/RCTUIManager.h + Views/RCTViewManager.m sourceTree <group> - 03219EE301E4BE34C4E26BF5 - - buildActionMask - 2147483647 - files - - ED09FCD5EBB9DAA998867B1F - 51DA8A2705C963385CCF407E - 244F3E3D12A6582888A3FDAC - 55461293CD520E1A61389C81 - BFEF41FE0A9C6E4BF083A1C4 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 0446F952AD32FA99CE53021F + 062BC4B46046CE4058393650 - buildActionMask - 2147483647 - files - - 43AA89FA9AC4BA1666D9422F - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 046F50050C1051EB89B1CC2D - - fileRef - 569C3E0B54CE022FD9433B66 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-ReactKit-Private.xcconfig + sourceTree + <group> - 0524E24381502D7EB46CCF29 + 069D2AD44B6410EACB1B2075 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTBridge.h + RCTTextField.m path - Base/RCTBridge.h + Views/RCTTextField.m sourceTree <group> - 054AB43B546728B2ACD9DE38 + 06B66FE3B127D202B1AC9803 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + text path - Pods-dummy.m + Pods-acknowledgements.markdown sourceTree <group> - 0678F15E5799E801FBBB82EE + 07576F9F34B4CADE96EDD698 includeInIndex 1 @@ -174,97 +100,170 @@ lastKnownFileType sourcecode.c.objc name - RCTWebViewExecutor.m + RCTContextExecutor.m path - Executors/RCTWebViewExecutor.m + Executors/RCTContextExecutor.m sourceTree <group> - 068A30BD4A2404B5DAEBE221 + 07C36347F29DC7BB656AED2E + + fileRef + A3B9259CF020C7A65A92AA0E + isa + PBXBuildFile + + 07F1BC4802790A12CD37323F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTShadowView.h + RCTAlertManager.m path - Views/RCTShadowView.h + Modules/RCTAlertManager.m sourceTree <group> - 0966A648227568DA76319358 + 08A0B2B369BFF8324CBBA029 - fileRef - 2461A7AF21FB638CED912FE3 + baseConfigurationReference + B753A0617AB77E1E91027A34 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Target Support Files/Pods-RCTText/Pods-RCTText-prefix.pch + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + OTHER_LIBTOOLFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + isa - PBXBuildFile + XCBuildConfiguration + name + Release - 097BE8E1E29CD333D067E047 + 09135B9EC1FBC85584FC4DBD - buildConfigurations + buildActionMask + 2147483647 + files - DFEDA529E62F398E0E66A864 - CCCA2CC55157BFF72767CEAB + 0BCB19DE972D8A076F5C2DAE - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release isa - XCConfigurationList + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 0C288D473E48E342E2E09095 + 0970729E477937347C8EBD83 - fileRef - 22669B7FF7DBBF51202945CD + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTAssert.h + path + Base/RCTAssert.h + sourceTree + <group> - 0D3A42D393008EEAD192C928 + 0B8869CDD72D9A8E218342F0 - fileRef - 12FAC13993C100C3FDBD0DD8 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTAnimationType.h + path + Base/RCTAnimationType.h + sourceTree + <group> - 0D4B28DA9FC2C4CB2B2874B3 + 0BCB19DE972D8A076F5C2DAE fileRef - 5F3DD45AD214483F15E95111 + B46B327243391CAF6E0717D9 isa PBXBuildFile - 0D723FDEF5CC9DBD086EAB39 + 0CB274EC48DFB07B4C8B240E - fileRef - 7E1B11B9B4C3FFCEFFD1F35D + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTCache.h + path + Base/RCTCache.h + sourceTree + <group> - 0EC776D336E22CBCEE4678E8 + 1036E6C4C58112D9A8A1D615 - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h path - libPods.a + RCTNetworkImageViewManager.h sourceTree - BUILT_PRODUCTS_DIR + <group> - 0F992DA69BD971F9C2BF439E + 107D57F0208D55DBB0B65853 fileRef - 78082D94239F5CEB5959B0B2 + 76DB22C9C8B38077354D35A8 isa PBXBuildFile - 12FAC13993C100C3FDBD0DD8 + 110F901C8F65A6EC1D683ED3 includeInIndex 1 @@ -273,85 +272,114 @@ lastKnownFileType sourcecode.c.objc name - RCTNavigatorManager.m + RCTExceptionsManager.m path - Views/RCTNavigatorManager.m + Modules/RCTExceptionsManager.m sourceTree <group> - 132DE36D6DB2D0F70C09CE89 + 11806B3CDA8E83E6F2FE8D17 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RCTAlertManager.m + RCTNavigator.h path - Modules/RCTAlertManager.m + Views/RCTNavigator.h + sourceTree + <group> + + 1196334A907C76F86D4A63CB + + fileRef + BADCCC41C7913287A31E51C9 + isa + PBXBuildFile + + 12507443D597BE1AFA5013A7 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-RCTText.xcconfig sourceTree <group> - 14F2CD18D70F8E4D68AC5B7A + 150C5DBA403D3B23A1EC6CDE + + fileRef + CB9F944208FFD7B3ADC7A00A + isa + PBXBuildFile + + 152C3E496F9D147818CDB260 buildActionMask 2147483647 files - BB0B04F7F63902EED012528E - 8ECFD3E48BD636104455BB71 - 38E3244F957866F7F0C32D86 - 62A59B690CB532CADE33707A - 28C1D5D42E3F1D2B39F0705C - 640DB00247945B46A90D77BB - EA79968832417354B40F6352 - 6817FF9F9174ADBAD78127A3 - 1AED708527053A371CD9B773 - D879CE28A1189AB3CA754538 - A9BAD3EC8ABCA9694CAF96F7 - 2DAADC70BCF143DF7CA581E1 - 9E520B28129AD787FE9C67D8 - 1CEA503C817DE70221AD83F8 - 4F949B8D09B678579C19C66A - FAE203974E438996878047C2 - 5D95EA92C79D8C7588A091E2 - F9ECFBDEC272AF69A54935F9 - B9DEE348987356C83C27DD9E - 4639D2C096C861AE4FEDB1BE - E1C485676C801FFCB46D93D0 - F68991A42B4CF608AF91EBB5 - 83C5FDC3F8BE71F2109194A8 - C07D1DDFE8D93ECEDF0E97C1 - ABFBF65F5D61F7EA440E25A8 - 404B71EC96CEA99711DAE44C - 69E62A75FE90251221950A25 - 7DE6E8E2D2109F67434864E2 - 47ECAF504BAF1A40ECB4755C - 0966A648227568DA76319358 - 4DA996F14A25031E40FF5B20 - 6966836B9D0C1BA7F411C883 - 716937CEA06BA6300F2CFD38 - 7A9E043C29916787D48A9DC3 - 97C2676E499C58904665B945 - 77BFD1192ACD1153CD3B92C2 - 759D943C6812DD195ABE9354 - 4E9FB0C0547065C3A59FF16D - F069246D046DFFE7CF05DE92 - C618E1B2CFF909C6273ABD4D - 529B63BA987480726B6C3FC3 - C77D22DADA6D43EC7CC8478A - 2566A98F79CE35E42FC8FBB8 - 046F50050C1051EB89B1CC2D - D4D507D020AD79183E1DD916 + 87E418B79822E8736EA41DE8 + 1A1C6BEEBA59CFC9D14FFB67 + A2AF525DC972EB0FDD47D962 + 535AB2CD3AD8C9EAC218E37B + D257C76E43E366FC0EA7A12E + FA29A9F03B11C2074DC5216D isa - PBXHeadersBuildPhase + PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 - 15478769A7025E67403CF8F6 + 1537FF13D7133AA6F8B3A1C9 + + fileRef + CCF7DF071515793DD6C0414D + isa + PBXBuildFile + + 15ADEBC28446EDAC35819C65 + + buildConfigurations + + 43C225961E6BF40B9C819C93 + 08A0B2B369BFF8324CBBA029 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 16955EC616390F52DD46F011 + + children + + 599BC72A5589AE2013BF6900 + + isa + PBXGroup + name + Targets Support Files + sourceTree + <group> + + 19636039A13AE878699E8DBB + + fileRef + E22151F70AA7C88D098C99BB + isa + PBXBuildFile + + 19B74DAEFA40E906DEDEADFA includeInIndex 1 @@ -360,54 +388,40 @@ lastKnownFileType sourcecode.c.objc path - RCTText.m + Pods-ReactKit-dummy.m sourceTree <group> - 1568A6E0A0EFBABC6271F94D + 1A1C6BEEBA59CFC9D14FFB67 + + fileRef + A8DBC5BF7CEEEDA937D3BE08 + isa + PBXBuildFile + + 1B18F1E7CA77F1AA1A12D304 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RCTUtils.m + RCTShadowView.h path - Base/RCTUtils.m + Views/RCTShadowView.h sourceTree <group> - 156E154B035C85C750DA3DE2 + 1D5C721F04A0D2846039D9B7 - buildConfigurationList - E484553771DAF5F08178C966 - buildPhases - - C043A8B738F0E880E4E71CF4 - DDEDAE8AD808715BBCF5DC6C - - buildRules - - dependencies - - EDBE5D54C93BC128C25036AD - 3ACDD0E0A9EED6CBCC130B09 - 85336AD28D003EA10FC44AD9 - + fileRef + 1B18F1E7CA77F1AA1A12D304 isa - PBXNativeTarget - name - Pods - productName - Pods - productReference - 0EC776D336E22CBCEE4678E8 - productType - com.apple.product-type.library.static + PBXBuildFile - 15D063218D733290ACAF6ECD + 1EA38AB62019C3EC36D2FC6A includeInIndex 1 @@ -416,41 +430,123 @@ lastKnownFileType sourcecode.c.h name - RCTScrollableProtocol.h + RCTBridgeModule.h path - Base/RCTScrollableProtocol.h + Base/RCTBridgeModule.h sourceTree <group> - 16B69D05ABC152C41B9129FB + 218485DF6D2557DEC0F8E74E + + fileRef + FBC74FE67BCC52FD85C1BAD0 + isa + PBXBuildFile + + 2222F067CA369E707A16AEF7 + + buildActionMask + 2147483647 + files + + 33FF0688ED2927D06FFA4C26 + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 22C673EC6E5974F93BB91F64 + + baseConfigurationReference + 39463588A39AA3E9757F0520 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Target Support Files/Pods-RCTNetworkImage/Pods-RCTNetworkImage-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.0 + OTHER_LDFLAGS + + OTHER_LIBTOOLFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration + name + Debug + + 24081C451F4316B44C32B7CC includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTLog.h + RCTShadowView.m path - Base/RCTLog.h + Views/RCTShadowView.m sourceTree <group> - 16E1299D87C2B7BE1D68024F + 25015EE62C53673BAF076DD7 + explicitFileType + archive.ar includeInIndex - 1 + 0 isa PBXFileReference - lastKnownFileType - sourcecode.c.objc path - RCTRawTextManager.m + libPods.a + sourceTree + BUILT_PRODUCTS_DIR + + 254E0C8ACCD2FF00E6FD2AE6 + + children + + AACE41F371930BDA2BE0D50F + + isa + PBXGroup + name + Frameworks sourceTree <group> - 175C559D2A89B7FC27EFD6C5 + 25B6E9DFFAE6A9540CEF75DE includeInIndex 1 @@ -459,92 +555,108 @@ lastKnownFileType sourcecode.c.h name - RCTViewNodeProtocol.h + RCTTiming.h path - Base/RCTViewNodeProtocol.h + Modules/RCTTiming.h sourceTree <group> - 198FD8078EB2E34708CAF463 + 261567BAE307BF57D88AC939 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h + name + RCTStatusBarManager.h path - RCTNetworkImageViewManager.m + Modules/RCTStatusBarManager.h sourceTree <group> - 1AED708527053A371CD9B773 + 27365C92F7FA6EF9E524A670 + + fileRef + D436BE9918549C192684657C + isa + PBXBuildFile + + 2747CB53DCACFABE26C705AA fileRef - 289322DAF960C6BD7F2FD8E1 + 110F901C8F65A6EC1D683ED3 isa PBXBuildFile - 1B437510B4F6BE59E0B8B24F + 277413A21FD87DA13511099F + + fileRef + 25B6E9DFFAE6A9540CEF75DE + isa + PBXBuildFile + + 2A073BDE36873311DA6A0EF5 includeInIndex 1 isa PBXFileReference - lastKnownFileType - text + name + Layout.c path - Pods-acknowledgements.markdown + Layout/Layout.c sourceTree <group> - 1CEA503C817DE70221AD83F8 + 2A8C42E95666925E6CEE303F - fileRef - E5FC33A15846273C981E0322 + children + + 48BBE16348C79B57F35F8DBF + 062BC4B46046CE4058393650 + 19B74DAEFA40E906DEDEADFA + F66B15C716DB00AB74903326 + isa - PBXBuildFile + PBXGroup + name + Support Files + path + ../Examples/TicTacToe/Pods/Target Support Files/Pods-ReactKit + sourceTree + <group> - 1E0B27EFE9498593A53775FC + 2B409A074C5817E5B40428E2 fileRef - FCAC9AFE3E61C78E93EA7E8C + 4451C03906E44804B163B854 isa PBXBuildFile - 1E8BDC022A45A44FA90E9BF5 + 2B475CAFC274FB31E95E5491 fileRef - 3CC9DC0433D77149CC4DE5DE + E5B280DE6A446D58C857B3C7 isa PBXBuildFile - 20F2231C1AEED2919F583DC7 + 2C552B02AE33C61830745E85 - buildConfigurationList - 919FCDB927A3933126B3DCFE - buildPhases + buildConfigurations - 7D6A37C994847E772C6CF039 - 0446F952AD32FA99CE53021F - 14F2CD18D70F8E4D68AC5B7A + D47F88D3F797D8EF95C0BA4D + ED0EAAAC662DFADD30EA5D11 - buildRules - - dependencies - + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXNativeTarget - name - Pods-ReactKit - productName - Pods-ReactKit - productReference - C575BB07E7B92FA3EBC10949 - productType - com.apple.product-type.library.static + XCConfigurationList - 22669B7FF7DBBF51202945CD + 2C7ED084B30FD91FBC08C10D includeInIndex 1 @@ -552,14 +664,12 @@ PBXFileReference lastKnownFileType sourcecode.c.objc - name - RCTContextExecutor.m path - Executors/RCTContextExecutor.m + RCTShadowRawText.m sourceTree <group> - 22CB86FDC9D99844724FDDD3 + 2E2A8AF7AB8F16F26CE07D8C includeInIndex 1 @@ -568,20 +678,20 @@ lastKnownFileType sourcecode.c.objc name - RCTTextFieldManager.m + RCTScrollView.m path - Views/RCTTextFieldManager.m + Views/RCTScrollView.m sourceTree <group> - 244F3E3D12A6582888A3FDAC + 2F5489066B626F5AA9656150 fileRef - FF03E617D571F159152581FC + 61063E1955F44DB956E55837 isa PBXBuildFile - 245789C2D4A68C88E27641D9 + 2FE386FFB0F3E3A3528409B9 includeInIndex 1 @@ -590,42 +700,75 @@ lastKnownFileType sourcecode.c.h name - RCTScrollView.h + RCTTouchHandler.h path - Views/RCTScrollView.h + Base/RCTTouchHandler.h sourceTree <group> - 2461A7AF21FB638CED912FE3 + 2FF3BF263DDDD5F909C02622 - includeInIndex - 1 + 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 + CLANG_WARN_EMPTY_BODY + YES + CLANG_WARN_ENUM_CONVERSION + YES + CLANG_WARN_INT_CONVERSION + YES + CLANG_WARN_OBJC_ROOT_CLASS + YES + COPY_PHASE_STRIP + NO + ENABLE_NS_ASSERTIONS + NO + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PREPROCESSOR_DEFINITIONS + + RELEASE=1 + + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES + GCC_WARN_UNDECLARED_SELECTOR + YES + GCC_WARN_UNINITIALIZED_AUTOS + YES + GCC_WARN_UNUSED_FUNCTION + YES + GCC_WARN_UNUSED_VARIABLE + YES + IPHONEOS_DEPLOYMENT_TARGET + 7.0 + STRIP_INSTALLED_PRODUCT + NO + VALIDATE_PRODUCT + YES + isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + XCBuildConfiguration name - RCTStaticImage.h - path - Views/RCTStaticImage.h - sourceTree - <group> - - 2566A98F79CE35E42FC8FBB8 - - fileRef - 9FF2D7B800439FD8B4118089 - isa - PBXBuildFile - - 2603E0CD923E37E10EED21A8 - - fileRef - 97138ACEE67BD2BDF8A3DEA0 - isa - PBXBuildFile + Release - 26C00EEFB778EFB7A6703E20 + 31815389CBA63C86E173EE9C includeInIndex 1 @@ -634,303 +777,228 @@ lastKnownFileType sourcecode.c.h name - RCTAnimationType.h + RCTAutoInsetsProtocol.h path - Base/RCTAnimationType.h + Base/RCTAutoInsetsProtocol.h sourceTree <group> - 27F37EEF056BA05A9FE6548A + 31CB0CA9F918FFFFCCDB8284 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTExceptionsManager.h + RCTLog.m path - Modules/RCTExceptionsManager.h + Base/RCTLog.m sourceTree <group> - 289322DAF960C6BD7F2FD8E1 + 31E92BD37BFCCB143ED614CB includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTContextExecutor.h + RCTKeyCommands.m path - Executors/RCTContextExecutor.h + Base/RCTKeyCommands.m sourceTree <group> - 28C1D5D42E3F1D2B39F0705C + 32451A95EB5079ED6F4F3E5A fileRef - CEAD6D174912D6D124A031D9 + 46EA953E96B6E60A9EA7253A isa PBXBuildFile - 2A5A7AE725AB3B07B61A40E9 + 329AC794493AD159BF606910 - baseConfigurationReference - A9E3206FA20E2CAD15028412 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - + fileRef + 05979756D746338C19D9CFE3 isa - XCBuildConfiguration - name - Release + PBXBuildFile - 2DA5F87EA2CDCEA0ED668578 + 33AC21BAE4072FDD0FC446AC - includeInIndex - 1 + fileRef + 865F2D07C98B4CA4B18F1F78 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RCTExceptionsManager.m - path - Modules/RCTExceptionsManager.m - sourceTree - <group> + PBXBuildFile + + 33FF0688ED2927D06FFA4C26 + + fileRef + B46B327243391CAF6E0717D9 + isa + PBXBuildFile - 2DAADC70BCF143DF7CA581E1 + 341F23664902CBD8947C5DB3 fileRef - 27F37EEF056BA05A9FE6548A + B46B327243391CAF6E0717D9 isa PBXBuildFile - 2E00E46C249C163EBC0418DC + 3569D3C1AD09FC147229AF8D includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTUIActivityIndicatorViewManager.h + RCTWebViewExecutor.m path - Views/RCTUIActivityIndicatorViewManager.h + Executors/RCTWebViewExecutor.m sourceTree <group> - 2F6BBA653E86409B28911661 + 35757FFD140D20F790EE2BDD includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RCTLog.m + RCTUIManager.h path - Base/RCTLog.m + Modules/RCTUIManager.h sourceTree <group> - 320294F910FF631F87E183B5 + 36A55CAD129917A8F65E897D - baseConfigurationReference - 504F7E363A7AFC9A64B86154 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-RCTText/Pods-RCTText-prefix.pch - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - + fileRef + 3569D3C1AD09FC147229AF8D isa - XCBuildConfiguration + PBXBuildFile + + 3859014F88232018A42BAC04 + + buildConfigurationList + 15ADEBC28446EDAC35819C65 + buildPhases + + 152C3E496F9D147818CDB260 + EC32BFBA00A39F59EB11C597 + BF6A636E87E3CA2080B277BD + + buildRules + + dependencies + + 971060A5AAD6681C19B92AFC + + isa + PBXNativeTarget name - Release + Pods-RCTText + productName + Pods-RCTText + productReference + A8383CD9E89EBD0486A2CFF1 + productType + com.apple.product-type.library.static - 32FFFCBE06BA47E77A58F52F + 38FFA89C70E4D1645D42E7ED fileRef - 22CB86FDC9D99844724FDDD3 + 2FE386FFB0F3E3A3528409B9 isa PBXBuildFile - 33E69C46AB97309D4EBFA432 + 39463588A39AA3E9757F0520 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - RCTViewManager.m + text.xcconfig path - Views/RCTViewManager.m + Pods-RCTNetworkImage-Private.xcconfig sourceTree <group> - 358919F57C8842F2A160F855 - - fileRef - 6AC9ACC04495648FA5060FCD - isa - PBXBuildFile - - 38E3244F957866F7F0C32D86 + 39D02CE2F933786AEA335F33 fileRef - 26C00EEFB778EFB7A6703E20 + 1036E6C4C58112D9A8A1D615 isa PBXBuildFile - 391E46E8F975CA6362AB5DE5 + 3A6DEBCF91BF88EE6FF0C53E includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h + name + Layout.h path - Pods-RCTText.xcconfig + Layout/Layout.h sourceTree <group> - 39206929A27DEBF5CBACB942 + 3BDB2D0EDA22488B2E6C76B7 - explicitFileType - archive.ar - includeInIndex - 0 + fileRef + 8D14C3BB217E003103E52CA1 isa - PBXFileReference - path - libPods-RCTText.a - sourceTree - BUILT_PRODUCTS_DIR + PBXBuildFile - 3938293AC4D9C3C8B8DDFDC7 + 3BF49B8ADD348B664CAA965D includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTViewManager.h + RCTCache.m path - Views/RCTViewManager.h + Base/RCTCache.m sourceTree <group> - 3ACDD0E0A9EED6CBCC130B09 + 3BFAD0347A551F0536E421F4 + fileRef + F9EB9D707F5B2AD7C1E442EF isa - PBXTargetDependency - name - Pods-RCTText - target - F5D2C09AFAA6986D234BF953 - targetProxy - E1C5A97B9865CABC567B000A + PBXBuildFile - 3CC9DC0433D77149CC4DE5DE + 3CC6BB454B8522DB5089F791 - includeInIndex - 1 + children + + 5CF875C3818A1F0206603D10 + 7327196C4F5BA97CA4539891 + B00A2CCF46A8FBC54A316DCC + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXGroup name - RCTCache.m - path - Base/RCTCache.m + Development Pods sourceTree <group> - 3D3089A4A62A68E4D5BB4562 + 3EA7887D20B6B743DE3C1DF5 includeInIndex 1 @@ -939,13 +1007,13 @@ lastKnownFileType sourcecode.c.objc name - RCTBridge.m + RCTNavItemManager.m path - Base/RCTBridge.m + Views/RCTNavItemManager.m sourceTree <group> - 3F06663863E59C187B84EAD2 + 3EF20A23049B63D8F1AB34ED includeInIndex 1 @@ -954,90 +1022,105 @@ lastKnownFileType sourcecode.c.h name - RCTStaticImageManager.h + RCTView.h path - Views/RCTStaticImageManager.h + Views/RCTView.h sourceTree <group> - 3FDDE45F64AE789BEAED2125 + 3F8AC8D36568DD378B90804B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTNavItem.h + RCTStatusBarManager.m path - Views/RCTNavItem.h - sourceTree - <group> - - 404B71EC96CEA99711DAE44C - - fileRef - E991F096165FA74435C7282D - isa - PBXBuildFile - - 411AACA7B5F606DA03793980 - - fileRef - F6CC16FA65BD5A265088B6B6 - isa - PBXBuildFile - - 427D3517A7FBC3A92AF9E9D4 - - children - - 5D7BCEA99DDC0B36A4C4EB31 - - isa - PBXGroup - name - Targets Support Files + Modules/RCTStatusBarManager.m sourceTree <group> - 42FCE12743FD1B4702208E0D + 41E7BCDB123D639D70221FE4 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - RCTUtils.h + sourcecode.c.objc path - Base/RCTUtils.h + Pods-RCTNetworkImage-dummy.m sourceTree <group> - 430F4C781E2E7EE9F8CB83FD + 42F3BF4E050BB621F3E00E3C includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.objc + name + RCTUIManager.m path - Pods-ReactKit-Private.xcconfig + Modules/RCTUIManager.m sourceTree <group> - 43AA89FA9AC4BA1666D9422F + 43C225961E6BF40B9C819C93 - fileRef - 5D5E4CDC94FE8212303F96ED + baseConfigurationReference + B753A0617AB77E1E91027A34 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Target Support Files/Pods-RCTText/Pods-RCTText-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.0 + OTHER_LDFLAGS + + OTHER_LIBTOOLFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + isa - PBXBuildFile + XCBuildConfiguration + name + Debug - 44161614652ABCC200708F4A + 4451C03906E44804B163B854 includeInIndex 1 @@ -1045,54 +1128,48 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + RCTContextExecutor.h path - RCTShadowRawText.h + Executors/RCTContextExecutor.h sourceTree <group> - 45775545A25B55D8FF631FF5 + 44BDDC5CCC328A8C9B3F8533 - includeInIndex - 1 + buildConfigurations + + 22C673EC6E5974F93BB91F64 + 5ED038F9CB64DEAC35C0C2CD + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RCTShadowView.m - path - Views/RCTShadowView.m - sourceTree - <group> + XCConfigurationList - 4608EE51074A11B61B7BAB45 + 457785C4F077FF2E7AA47B49 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.objc path - Pods-RCTNetworkImage.xcconfig + RCTNetworkImageView.m sourceTree <group> - 4637476226C7CEC79C7DE49E - - fileRef - 1568A6E0A0EFBABC6271F94D - isa - PBXBuildFile - - 4639D2C096C861AE4FEDB1BE + 45EB3392836956C146A52A0C fileRef - B40A54F9CD6C17782376DE87 + 6B82C5B8677FA77F9902CA0F isa PBXBuildFile - 4648080B27A50C8D028851B3 + 46EA953E96B6E60A9EA7253A includeInIndex 1 @@ -1101,42 +1178,26 @@ lastKnownFileType sourcecode.c.objc name - RCTAssert.m + UIView+ReactKit.m path - Base/RCTAssert.m + Views/UIView+ReactKit.m sourceTree <group> - 47B228B88421B943C6005B10 - - fileRef - F731109AFE06344ABBC4BBE6 - isa - PBXBuildFile - - 47ECAF504BAF1A40ECB4755C - - fileRef - 6C59A8B8703F0BD79C458591 - isa - PBXBuildFile - - 48039B7A25006CE8F45E9619 + 48BBE16348C79B57F35F8DBF includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - UIView+ReactKit.h + text.xcconfig path - Views/UIView+ReactKit.h + Pods-ReactKit.xcconfig sourceTree <group> - 491280116436017C4FEC9FD8 + 4B0397BE4FBD9F8FEDEBEAF4 includeInIndex 1 @@ -1145,13 +1206,80 @@ lastKnownFileType sourcecode.c.h name - Layout.h + RCTNavItem.h path - Layout/Layout.h + Views/RCTNavItem.h sourceTree <group> - 49199899EB7E17720A69A6A0 + 4B64AFA829DB76F2FE51E920 + + 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 + CLANG_WARN_EMPTY_BODY + YES + CLANG_WARN_ENUM_CONVERSION + YES + CLANG_WARN_INT_CONVERSION + YES + CLANG_WARN_OBJC_ROOT_CLASS + YES + COPY_PHASE_STRIP + YES + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES + GCC_WARN_UNDECLARED_SELECTOR + YES + GCC_WARN_UNINITIALIZED_AUTOS + YES + GCC_WARN_UNUSED_FUNCTION + YES + GCC_WARN_UNUSED_VARIABLE + YES + IPHONEOS_DEPLOYMENT_TARGET + 7.0 + ONLY_ACTIVE_ARCH + YES + STRIP_INSTALLED_PRODUCT + NO + + isa + XCBuildConfiguration + name + Debug + + 4CAAD0D6BF7C31F9871B5563 includeInIndex 1 @@ -1160,68 +1288,165 @@ lastKnownFileType sourcecode.c.h name - RCTNavItemManager.h + RCTWebViewExecutor.h path - Views/RCTNavItemManager.h + Executors/RCTWebViewExecutor.h sourceTree <group> - 4DA996F14A25031E40FF5B20 + 4D0FD9ED093EC8F8163C743A fileRef - 3F06663863E59C187B84EAD2 + C3D3D260900346C1CE93D5CA isa PBXBuildFile - 4E9FB0C0547065C3A59FF16D + 4EFC81CD3380F9556D86CC8C - fileRef - 02011DF072CE86BD3AD237F3 + includeInIndex + 1 isa - PBXBuildFile - - 4F949B8D09B678579C19C66A - - fileRef - DD1AEBDB914EF5C49CAAEB46 + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTUtils.h + path + Base/RCTUtils.h + sourceTree + <group> + + 4FDB96AA2F90818C413120ED + + baseConfigurationReference + D46C615416D298CD2EF32D8B + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_PRECOMPILE_PREFIX_HEADER + YES + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + OTHER_LIBTOOLFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + 5007E16F5C7E9EFC0185562F + + fileRef + 3A6DEBCF91BF88EE6FF0C53E + isa + PBXBuildFile + + 51455DB97B6F834E2B3A5AFF + + fileRef + 9EBCB645740BB4540527E698 + isa + PBXBuildFile + + 51597927537D12ADB1492F73 + + fileRef + 8E36491BC0A73F578A6F8D7F + isa + PBXBuildFile + + 5199984D66E0D4825EAFDE48 + + fileRef + 1EA38AB62019C3EC36D2FC6A isa PBXBuildFile - 504F7E363A7AFC9A64B86154 + 51FA8C21CA14626EB0416885 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h path - Pods-RCTText-Private.xcconfig + RCTShadowRawText.h sourceTree <group> - 51DA8A2705C963385CCF407E + 5208C78A6225B97814C99D43 + + fileRef + 55A208629844F66520167BA8 + isa + PBXBuildFile + + 5246EC6FB1C3F3B04BC17D19 fileRef - 44161614652ABCC200708F4A + 8EA2D7BE822E7CFD12194108 isa PBXBuildFile - 523EDE48CB10BED172EA70AA + 535AB2CD3AD8C9EAC218E37B fileRef - DF17E391C45D5B66999F6D99 + 92895F84F87A2CE56D4B3DD8 isa PBXBuildFile - 529B63BA987480726B6C3FC3 + 53906C4FE2269E04A9CBA745 fileRef - 3938293AC4D9C3C8B8DDFDC7 + 261567BAE307BF57D88AC939 isa PBXBuildFile - 530A6D73CAFF37DCB5A52103 + 549BC0F2811E2649ED299CAD + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-ReactKit.a + sourceTree + BUILT_PRODUCTS_DIR + + 55A208629844F66520167BA8 includeInIndex 1 @@ -1230,13 +1455,13 @@ lastKnownFileType sourcecode.c.objc name - RCTScrollViewManager.m + RCTStaticImageManager.m path - Views/RCTScrollViewManager.m + Views/RCTStaticImageManager.m sourceTree <group> - 54481109ECD4CD40F5F746F8 + 5650233E3ECB1C612AB3AA71 includeInIndex 1 @@ -1245,60 +1470,136 @@ lastKnownFileType sourcecode.c.h name - RCTPointerEvents.h + RCTViewManager.h path - Base/RCTPointerEvents.h + Views/RCTViewManager.h + sourceTree + <group> + + 568AF882FEE1A75F17DF8480 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RCTTextFieldManager.m + path + Views/RCTTextFieldManager.m sourceTree <group> - 55461293CD520E1A61389C81 + 574AFAFE072DE55BFB6F50CB fileRef - 005E47CD37DA97006CE65B99 + 41E7BCDB123D639D70221FE4 isa PBXBuildFile - 5675366766067D60156EEAA1 + 5897E6B3789429F1760006A5 fileRef - A53374892CD6B26138B38ADB + CDB3FDE1695B0706CA924FA5 isa PBXBuildFile - 569C3E0B54CE022FD9433B66 + 591F3D5FF66858A7F5F2834F - includeInIndex - 1 + fileRef + ED51F456809B09F7439C4D93 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + PBXBuildFile + + 599BC72A5589AE2013BF6900 + + children + + 06B66FE3B127D202B1AC9803 + B318A41A989E068CB405AD1F + 865F2D07C98B4CA4B18F1F78 + AF2C54E62D7D0120DB4D4DE5 + 625D2DAA384FD2F2F8763CC3 + C8F2F05D94C1A991A87B571E + D46C615416D298CD2EF32D8B + + isa + PBXGroup name - RCTWrapperViewController.h + Pods path - Views/RCTWrapperViewController.h + Target Support Files/Pods sourceTree <group> - 58A59E47157F3E11F33C044F + 59C8D74DD9C98E16056D5366 - buildActionMask - 2147483647 - files + fileRef + B3F5495EE23A8AB6596EB29A + isa + PBXBuildFile + + 5AAC51BC1BDDD9A9215CFBDD + + fileRef + 91219004BE0A4C162AF041A5 + isa + PBXBuildFile + + 5AECCCA812DA969CD5F83501 + + fileRef + D19D762ABD2DB814D5BA26CA + isa + PBXBuildFile + + 5C6CB7FDCCAA7A2DA6E404FA + + fileRef + 568AF882FEE1A75F17DF8480 + isa + PBXBuildFile + + 5CF875C3818A1F0206603D10 + + children - 7795BA5CF034328C6FAB5599 - 5C917B8E0FE26AB41B2FD624 - 0F992DA69BD971F9C2BF439E + BBF638A80E2895BEFE9C4730 + BA6C0E71C8E201475B68A2E3 + E8407ED863C88EC9CA04A11C + 457785C4F077FF2E7AA47B49 + 1036E6C4C58112D9A8A1D615 + 64819624F35D65C3AD434F7D + D41089EF6EAF70DF70BC0D25 isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing + PBXGroup + name + RCTNetworkImage + path + ../../../Libraries/Image + sourceTree + <group> + + 5E0ADAD263C01B5C07EBAD67 + + buildConfigurations + + 4B64AFA829DB76F2FE51E920 + 2FF3BF263DDDD5F909C02622 + + defaultConfigurationIsVisible 0 + defaultConfigurationName + Release + isa + XCConfigurationList - 5A541D6A294BA6E01BD0CD3A + 5ED038F9CB64DEAC35C0C2CD baseConfigurationReference - 430F4C781E2E7EE9F8CB83FD + 39463588A39AA3E9757F0520 buildSettings ALWAYS_SEARCH_USER_PATHS @@ -1310,7 +1611,7 @@ GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER - Target Support Files/Pods-ReactKit/Pods-ReactKit-prefix.pch + Target Support Files/Pods-RCTNetworkImage/Pods-RCTNetworkImage-prefix.pch INSTALL_PATH $(BUILT_PRODUCTS_DIR) IPHONEOS_DEPLOYMENT_TARGET @@ -1345,77 +1646,63 @@ name Release - 5A8146BE2B9A4E8B080899C7 + 5F698EE693825391F5ADB26A - includeInIndex - 1 + fileRef + B4992F13711EC0E2E61D9B72 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RCTStatusBarManager.h - path - Modules/RCTStatusBarManager.h - sourceTree - <group> + PBXBuildFile - 5C917B8E0FE26AB41B2FD624 + 5FF5D1DF04BA4E30E6268208 fileRef - 79ED42B49D21E04D9AA9DC7F + 2E2A8AF7AB8F16F26CE07D8C isa PBXBuildFile - 5D44D4115556BA5F81C67E07 + 6058DA074939167562CECB0B fileRef - EA77880FBBE6AA7511841605 + A5A887B5A0FE16862445E7FB isa PBXBuildFile - 5D5E4CDC94FE8212303F96ED + 61063E1955F44DB956E55837 + includeInIndex + 1 isa PBXFileReference lastKnownFileType - wrapper.framework + sourcecode.c.objc name - Foundation.framework + RCTSparseArray.m path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework + Base/RCTSparseArray.m sourceTree - DEVELOPER_DIR + <group> - 5D7BCEA99DDC0B36A4C4EB31 + 625D2DAA384FD2F2F8763CC3 - children - - 1B437510B4F6BE59E0B8B24F - 8F72A8B191D5505279E9254D - 054AB43B546728B2ACD9DE38 - 6B2DF6A0713908E45F8EBE75 - 7DA2E9C4F2BA3289E2668E17 - 6C4193D7074A9FE2AADD31C2 - A9E3206FA20E2CAD15028412 - + includeInIndex + 1 isa - PBXGroup - name - Pods + PBXFileReference + lastKnownFileType + text.script.sh path - Target Support Files/Pods + Pods-resources.sh sourceTree <group> - 5D95EA92C79D8C7588A091E2 + 6297A72A212404588E6F25E7 fileRef - 16B69D05ABC152C41B9129FB + D9D68BDCB56619CE484E1950 isa PBXBuildFile - 5F3DD45AD214483F15E95111 + 64819624F35D65C3AD434F7D includeInIndex 1 @@ -1424,105 +1711,59 @@ lastKnownFileType sourcecode.c.objc path - RCTShadowRawText.m + RCTNetworkImageViewManager.m sourceTree <group> - 5F70F61D02759E49CFA5E3EB - - fileRef - 2DA5F87EA2CDCEA0ED668578 - isa - PBXBuildFile - - 60662361B9CC9A2A8D49F638 + 673952613A34ACCA97161AA2 isa PBXTargetDependency name Pods-ReactKit target - 20F2231C1AEED2919F583DC7 + 973EEBD9F9591953DFB21C06 targetProxy - 7EDCA4090C484196C36B1977 + 992468CC66C0BCCDEE192DE6 - 62A59B690CB532CADE33707A + 686655033E6D4DF34CC8D72A - fileRef - 6FCFD749EEB3861EB75C0534 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RCTAssert.m + path + Base/RCTAssert.m + sourceTree + <group> + + 688A6AE7AC080B377719B148 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTBridge.h + path + Base/RCTBridge.h + sourceTree + <group> - 640DB00247945B46A90D77BB + 68A6B7F8A71634C7753A9D2D fileRef - 0524E24381502D7EB46CCF29 + BBF638A80E2895BEFE9C4730 isa PBXBuildFile - 648F4790538BD82BF2B083EF - - baseConfigurationReference - 430F4C781E2E7EE9F8CB83FD - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-ReactKit/Pods-ReactKit-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 6499B8CCEC40B282FFAADFA6 - - containerPortal - E88354D347CCC1EAC2E787C1 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 76D2A8D67E04D111A7938CED - remoteInfo - Pods-RCTNetworkImage - - 6522F5D072C47020817339D9 + 69903DC41C305CDC985BEA22 includeInIndex 1 @@ -1531,59 +1772,35 @@ lastKnownFileType sourcecode.c.h name - RCTInvalidating.h + RCTRedBox.h path - Base/RCTInvalidating.h + Base/RCTRedBox.h sourceTree <group> - 6707B683A72305367066EE6C - - fileRef - 33E69C46AB97309D4EBFA432 - isa - PBXBuildFile - - 6817FF9F9174ADBAD78127A3 + 6A93C2F4C1D0F2F9FFEA5116 fileRef - D0F5EC95B7EE03515326948E + 07576F9F34B4CADE96EDD698 isa PBXBuildFile - 69220AD94D86BCE4FAE46678 + 6B82C5B8677FA77F9902CA0F - children - - 4608EE51074A11B61B7BAB45 - A95BFEC22FBAC588E1B491ED - C9AA6ACBFD421C3D6FAC5329 - C8F7D06CE3D7F4FDED21933F - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Support Files + RCTUIActivityIndicatorViewManager.h path - ../../Examples/TicTacToe/Pods/Target Support Files/Pods-RCTNetworkImage + Views/RCTUIActivityIndicatorViewManager.h sourceTree <group> - 6966836B9D0C1BA7F411C883 - - fileRef - 5A8146BE2B9A4E8B080899C7 - isa - PBXBuildFile - - 69E62A75FE90251221950A25 - - fileRef - 15D063218D733290ACAF6ECD - isa - PBXBuildFile - - 6AC9ACC04495648FA5060FCD + 6B92A10C94541BEEFE730577 includeInIndex 1 @@ -1592,13 +1809,13 @@ lastKnownFileType sourcecode.c.objc name - RCTRedBox.m + RCTUIActivityIndicatorViewManager.m path - Base/RCTRedBox.m + Views/RCTUIActivityIndicatorViewManager.m sourceTree <group> - 6B2DF6A0713908E45F8EBE75 + 6BA39D6B07EFAE9F3D0C6239 includeInIndex 1 @@ -1606,48 +1823,47 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + UIView+ReactKit.h path - Pods-environment.h + Views/UIView+ReactKit.h sourceTree <group> - 6BC3EB96204A30E4A472DDE4 + 6E025D879E9E4EA39894CCF7 fileRef - 97BAEC30E32259F061CCB7DE + 79A5515EDEDBB9DA720BFE4A isa PBXBuildFile - 6BEE757D0B19EB927C04C0FA + 707BF0AC66323E30AB45EDFD - children + buildActionMask + 2147483647 + files - 0EC776D336E22CBCEE4678E8 - BCDC97F48090DACB87DEC04E - 39206929A27DEBF5CBACB942 - C575BB07E7B92FA3EBC10949 + 74877526C735AEA400666D26 isa - PBXGroup - name - Products - sourceTree - <group> + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 6C4193D7074A9FE2AADD31C2 + 7175E2D64BC6B577E9C8B508 - includeInIndex - 1 + containerPortal + A30671B7FF41C9CC88DDC48D isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.debug.xcconfig - sourceTree - <group> + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 973EEBD9F9591953DFB21C06 + remoteInfo + Pods-ReactKit - 6C59A8B8703F0BD79C458591 + 71C70C27906DAEB68FB0CF59 includeInIndex 1 @@ -1656,42 +1872,74 @@ lastKnownFileType sourcecode.c.h name - RCTSparseArray.h + RCTWrapperViewController.h path - Base/RCTSparseArray.h + Views/RCTWrapperViewController.h sourceTree <group> - 6C5C7F49C76DFD009CE24F54 + 71EF39441EAF6D8A62C981C5 - includeInIndex - 1 + fileRef + 69903DC41C305CDC985BEA22 isa - PBXFileReference - lastKnownFileType - sourcecode.c.h + PBXBuildFile + + 7327196C4F5BA97CA4539891 + + children + + D9D68BDCB56619CE484E1950 + A8DBC5BF7CEEEDA937D3BE08 + 51FA8C21CA14626EB0416885 + 2C7ED084B30FD91FBC08C10D + CEBFC03689DC0AC9CD1D45F6 + 92895F84F87A2CE56D4B3DD8 + B4992F13711EC0E2E61D9B72 + 7601163D57B34162C4CA1C48 + CB9F944208FFD7B3ADC7A00A + DCD06DFADE2DF0CA7278AB88 + F70F1BFEF9D1587A38666EEB + + isa + PBXGroup name - RCTRootView.h + RCTText path - Base/RCTRootView.h + ../../../Libraries/Text sourceTree <group> - 6D757E59E707D9B3474721D7 + 741F9A1822BB7EDBCBA63557 - buildConfigurations + children - CDCB9B4306F2967192C1DAAA - 00CA6F6E234DA9FAFC268F4C + E6F1A1F54DDCFD6330C02A56 + 3CC6BB454B8522DB5089F791 + 254E0C8ACCD2FF00E6FD2AE6 + 88771C44C3AA01999607AE8F + 16955EC616390F52DD46F011 - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release isa - XCConfigurationList + PBXGroup + sourceTree + <group> + + 74877526C735AEA400666D26 + + fileRef + B46B327243391CAF6E0717D9 + isa + PBXBuildFile + + 75728F9C40185E318ECF195B + + fileRef + 11806B3CDA8E83E6F2FE8D17 + isa + PBXBuildFile - 6DA156177295C36FC390E8E9 + 7601163D57B34162C4CA1C48 includeInIndex 1 @@ -1700,55 +1948,53 @@ lastKnownFileType sourcecode.c.objc path - RCTShadowText.m + RCTText.m sourceTree <group> - 6E38F96F68680D013AD0812A + 769A717CAFE5B019B17120C7 - includeInIndex - 1 + buildConfigurationList + 44BDDC5CCC328A8C9B3F8533 + buildPhases + + 7F1122EB52A6E58596E7B10E + 09135B9EC1FBC85584FC4DBD + 8751FDB8FC4A8FA0014F8438 + + buildRules + + dependencies + + 88177B2CC430A98CD146FC73 + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXNativeTarget name - RCTWrapperViewController.m - path - Views/RCTWrapperViewController.m - sourceTree - <group> + Pods-RCTNetworkImage + productName + Pods-RCTNetworkImage + productReference + 8671023CE4714E3C2336C9C8 + productType + com.apple.product-type.library.static - 6FCFD749EEB3861EB75C0534 + 76DB22C9C8B38077354D35A8 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTAssert.h + RCTRootView.m path - Base/RCTAssert.h + Base/RCTRootView.m sourceTree <group> - 716937CEA06BA6300F2CFD38 - - fileRef - F6F6566819F8D0B545E28AC4 - isa - PBXBuildFile - - 71B93A65A95640972062EC29 - - fileRef - 45775545A25B55D8FF631FF5 - isa - PBXBuildFile - - 72B306867705C5CA14B74DF2 + 79237C45AFA01938E517AD06 includeInIndex 1 @@ -1757,13 +2003,13 @@ lastKnownFileType sourcecode.c.objc name - RCTNavItemManager.m + RCTEventDispatcher.m path - Views/RCTNavItemManager.m + Base/RCTEventDispatcher.m sourceTree <group> - 7308A06BDA47FB20E2FC8005 + 79A5515EDEDBB9DA720BFE4A includeInIndex 1 @@ -1778,51 +2024,48 @@ sourceTree <group> - 759D943C6812DD195ABE9354 + 7AFFD53FE48F494D9736FB8D fileRef - 2E00E46C249C163EBC0418DC + EA4527C073CDB5189EBADCD7 isa PBXBuildFile - 76D2A8D67E04D111A7938CED + 7F1122EB52A6E58596E7B10E - buildConfigurationList - 097BE8E1E29CD333D067E047 - buildPhases - - BD29342538528D6DE4038BD2 - DEA6A4B98EA82BEDE81ED513 - 58A59E47157F3E11F33C044F - - buildRules - - dependencies + buildActionMask + 2147483647 + files - B495C09D4F5093AAB731E194 + 574AFAFE072DE55BFB6F50CB + CC1B51AD9B49FFAA1362B23F + 915B0A85BF984349115614CC + 8EBBCBAED11B750107770DB9 isa - PBXNativeTarget - name - Pods-RCTNetworkImage - productName - Pods-RCTNetworkImage - productReference - BCDC97F48090DACB87DEC04E - productType - com.apple.product-type.library.static + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 7701A5C43F0A8424984C6A6A + 7FEDFD81C12D696A75133BDA - fileRef - 6DA156177295C36FC390E8E9 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTLog.h + path + Base/RCTLog.h + sourceTree + <group> - 772EDE81A05CD3EA28A869CC + 8002A0260F2B1C62C0F465E9 baseConfigurationReference - 504F7E363A7AFC9A64B86154 + C8F2F05D94C1A991A87B571E buildSettings ALWAYS_SEARCH_USER_PATHS @@ -1837,8 +2080,6 @@ 0 GCC_PRECOMPILE_PREFIX_HEADER YES - GCC_PREFIX_HEADER - Target Support Files/Pods-RCTText/Pods-RCTText-prefix.pch GCC_PREPROCESSOR_DEFINITIONS DEBUG=1 @@ -1868,14 +2109,7 @@ name Debug - 7795BA5CF034328C6FAB5599 - - fileRef - 895928D325843E9D8B7285FA - isa - PBXBuildFile - - 77AEC7F8659C91198FFFF673 + 80A2CDBEC4C2EA679BDFD05B includeInIndex 1 @@ -1884,195 +2118,231 @@ lastKnownFileType sourcecode.c.h name - RCTNavigatorManager.h + RCTTextField.h path - Views/RCTNavigatorManager.h + Views/RCTTextField.h sourceTree <group> - 77BFD1192ACD1153CD3B92C2 + 80E2EA6586C8C5C71DFFA0B2 - fileRef - B2D7892A9C3245D8D7431C23 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTTextFieldManager.h + path + Views/RCTTextFieldManager.h + sourceTree + <group> - 78082D94239F5CEB5959B0B2 + 82A7154EBF9864584C0B6647 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc path - RCTNetworkImageViewManager.h + Pods-RCTText-dummy.m sourceTree <group> - 79ED42B49D21E04D9AA9DC7F + 865F2D07C98B4CA4B18F1F78 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc path - RCTNetworkImageView.h + Pods-dummy.m sourceTree <group> - 7A9E043C29916787D48A9DC3 + 8671023CE4714E3C2336C9C8 - fileRef - B32480BC0BA8A8BA551E9D00 + explicitFileType + archive.ar + includeInIndex + 0 isa - PBXBuildFile + PBXFileReference + path + libPods-RCTNetworkImage.a + sourceTree + BUILT_PRODUCTS_DIR - 7B322FB23DF6316D9D0FAB4F + 8751FDB8FC4A8FA0014F8438 - fileRef - 8E13E32022B45DA13AFC5404 + buildActionMask + 2147483647 + files + + 68A6B7F8A71634C7753A9D2D + D290C62BBB41818A93C7C1A1 + 39D02CE2F933786AEA335F33 + isa - PBXBuildFile + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 7D62F170107D856DB97A0F27 + 87E418B79822E8736EA41DE8 fileRef - 2F6BBA653E86409B28911661 + 82A7154EBF9864584C0B6647 isa PBXBuildFile - 7D6A37C994847E772C6CF039 + 8813F909BCAF027B0FC323D0 buildActionMask 2147483647 files - FB19B6A03634D6CC16E8D731 - 8C49B230561E49F529C012B5 - 949E5950C7964E60EE8037C2 - BE52F839238A59D2AB82159E - EC5F81AEBB86DCC1C9ECDE59 - 1E8BDC022A45A44FA90E9BF5 - 0C288D473E48E342E2E09095 - 7B322FB23DF6316D9D0FAB4F - 81A3FE9526EC90CC18E84790 - 5F70F61D02759E49CFA5E3EB - 523EDE48CB10BED172EA70AA - 7D62F170107D856DB97A0F27 - AC1A530CDB55406B05665766 - AF5A50F21A42CD8E0BBDF109 - 7EBF30F9E8C4AD6523928C97 - 0D3A42D393008EEAD192C928 - 358919F57C8842F2A160F855 - 2603E0CD923E37E10EED21A8 - E52753A376176D518B300161 - D65313F8C82EBB8E719F5006 - 71B93A65A95640972062EC29 - 0D723FDEF5CC9DBD086EAB39 - 9A489A5B6D91FD9AA80B1B50 - 47B228B88421B943C6005B10 - 5675366766067D60156EEAA1 - 1E0B27EFE9498593A53775FC - 32FFFCBE06BA47E77A58F52F - B1DC103317576FEAB1449D9F - 6BC3EB96204A30E4A472DDE4 - FADF4B43BFFF2AEF6F4A43B8 - 5D44D4115556BA5F81C67E07 - 4637476226C7CEC79C7DE49E - E5508477224F57D3312AC5B9 - 6707B683A72305367066EE6C - EDBE9B4FBE2888A89C7FAAAE - 8631A36CD036B7126537AE0B - F092F906C8A9E95FD09661CE + D8076A3A8F0FAA3CD5E1FC99 + DAFE568BA68CC1B9A1496B03 + BE75BC76971974B7D4C38A36 + D6CF22628A62FAE5C1C4F751 + 1196334A907C76F86D4A63CB + B88E04B1572FF6FEC2D3B465 + 6A93C2F4C1D0F2F9FFEA5116 + 51455DB97B6F834E2B3A5AFF + F8F9FC945C529FDD56EE046E + 2747CB53DCACFABE26C705AA + 034357B4792A8675BA3B962F + 591F3D5FF66858A7F5F2834F + DE5F1B9081628B9A5A573C5B + A1807A06CB52537883C3B54F + 8ED347D2E41CC3C7CAD08F95 + 8C339544ECA90DD852D2079D + 3BDB2D0EDA22488B2E6C76B7 + 7AFFD53FE48F494D9736FB8D + 107D57F0208D55DBB0B65853 + 5FF5D1DF04BA4E30E6268208 + E514DB237132E2FE887A871F + AEF6909F3ECCE95C6495B070 + 2F5489066B626F5AA9656150 + 5AECCCA812DA969CD5F83501 + 5208C78A6225B97814C99D43 + B6D4979E7A87393AD504C9F8 + A2A969DAE26BC783576D2EDE + 5C6CB7FDCCAA7A2DA6E404FA + CCBD98E709AB05D7FCCA9DD4 + 51597927537D12ADB1492F73 + F8A30B6BAB9EB9CAE3F5EE83 + EACA791D981259D849E9575C + 5246EC6FB1C3F3B04BC17D19 + 27365C92F7FA6EF9E524A670 + 329AC794493AD159BF606910 + 36A55CAD129917A8F65E897D + E3483608408169CD1A186EEA + 32451A95EB5079ED6F4F3E5A isa PBXSourcesBuildPhase runOnlyForDeploymentPostprocessing 0 - 7DA2E9C4F2BA3289E2668E17 + 88177B2CC430A98CD146FC73 - includeInIndex - 1 isa - PBXFileReference - lastKnownFileType - text.script.sh - path - Pods-resources.sh + PBXTargetDependency + name + Pods-ReactKit + target + 973EEBD9F9591953DFB21C06 + targetProxy + D3650CA7059AEE2BD3BE431F + + 88771C44C3AA01999607AE8F + + children + + 25015EE62C53673BAF076DD7 + 8671023CE4714E3C2336C9C8 + A8383CD9E89EBD0486A2CFF1 + 549BC0F2811E2649ED299CAD + + isa + PBXGroup + name + Products sourceTree <group> - 7DE6E8E2D2109F67434864E2 + 8A0B35F9B55AB9E9876DF4F4 + + fileRef + CEBFC03689DC0AC9CD1D45F6 + isa + PBXBuildFile + + 8AC6957EC29778E18C201992 fileRef - 068A30BD4A2404B5DAEBE221 + B6F5CFD1D6804D50A8EF31AC isa PBXBuildFile - 7E1B11B9B4C3FFCEFFD1F35D + 8AF331922DC4CDB6CF9DB6A9 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RCTSparseArray.m + RCTStaticImageManager.h path - Base/RCTSparseArray.m + Views/RCTStaticImageManager.h sourceTree <group> - 7EBF30F9E8C4AD6523928C97 + 8C09DDBC1987BC48B1173A6A fileRef - B70F784E53C151C33E1130FF + 0CB274EC48DFB07B4C8B240E isa PBXBuildFile - 7EDCA4090C484196C36B1977 + 8C339544ECA90DD852D2079D - containerPortal - E88354D347CCC1EAC2E787C1 + fileRef + A1B258FDC18C71176DA32CFE isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 20F2231C1AEED2919F583DC7 - remoteInfo - Pods-ReactKit + PBXBuildFile - 80DBEC5108DFE1F49442F2F9 + 8D14C3BB217E003103E52CA1 includeInIndex 1 isa PBXFileReference lastKnownFileType - text + sourcecode.c.objc name - Podfile + RCTNavigatorManager.m path - ../Podfile + Views/RCTNavigatorManager.m sourceTree - SOURCE_ROOT - xcLanguageSpecificationIdentifier - xcode.lang.ruby + <group> - 81A3FE9526EC90CC18E84790 + 8DE4BE955C41F35E0DE7BF39 fileRef - B42844BBEB0C3FCBB4CB7C98 + 6BA39D6B07EFAE9F3D0C6239 isa PBXBuildFile - 8307F3BCFAD957D08281164A + 8E36491BC0A73F578A6F8D7F includeInIndex 1 @@ -2081,154 +2351,147 @@ lastKnownFileType sourcecode.c.objc name - RCTTiming.m + RCTTouchHandler.m path - Modules/RCTTiming.m + Base/RCTTouchHandler.m sourceTree <group> - 8399DB76B770CB32FA2CD5FF + 8EA2D7BE822E7CFD12194108 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTKeyCommands.h + RCTUtils.m path - Base/RCTKeyCommands.h + Base/RCTUtils.m sourceTree <group> - 83C5FDC3F8BE71F2109194A8 + 8EBBCBAED11B750107770DB9 fileRef - DE4BA2446E5FB9E2F0C98C34 + 64819624F35D65C3AD434F7D isa PBXBuildFile - 84A6E86621CA19A1F15ECC01 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - RCTRawTextManager.h - sourceTree - <group> - - 85336AD28D003EA10FC44AD9 - - isa - PBXTargetDependency - name - Pods-ReactKit - target - 20F2231C1AEED2919F583DC7 - targetProxy - 89109953D98B8498BE8FE817 - - 8631A36CD036B7126537AE0B + 8ED347D2E41CC3C7CAD08F95 fileRef - 6E38F96F68680D013AD0812A + 3EA7887D20B6B743DE3C1DF5 isa PBXBuildFile - 88F100D7F9D61D558EF80D8A + 91219004BE0A4C162AF041A5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RCTView.m + RCTEventDispatcher.h path - Views/RCTView.m + Base/RCTEventDispatcher.h sourceTree <group> - 89109953D98B8498BE8FE817 + 915B0A85BF984349115614CC - containerPortal - E88354D347CCC1EAC2E787C1 + fileRef + 457785C4F077FF2E7AA47B49 isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 20F2231C1AEED2919F583DC7 - remoteInfo - Pods-ReactKit + PBXBuildFile - 895928D325843E9D8B7285FA + 92895F84F87A2CE56D4B3DD8 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc path - RCTImageDownloader.h + RCTShadowText.m sourceTree <group> - 8C49B230561E49F529C012B5 + 936FD7023BD4626A2EBF07A2 fileRef - A3731A42F61C724D93CD6A2E + 4CAAD0D6BF7C31F9871B5563 isa PBXBuildFile - 8E13E32022B45DA13AFC5404 + 93C181AF29A9C408FC907C4A includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RCTConvert.m + RCTScrollViewManager.h path - Base/RCTConvert.m + Views/RCTScrollViewManager.h sourceTree <group> - 8ECFD3E48BD636104455BB71 + 96611930547604A69128D37A fileRef - E7FA1D0590C4CB610C0FECF2 + 51FA8C21CA14626EB0416885 isa PBXBuildFile - 8F72A8B191D5505279E9254D + 971060A5AAD6681C19B92AFC - includeInIndex - 1 isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Pods-acknowledgements.plist - sourceTree - <group> + PBXTargetDependency + name + Pods-ReactKit + target + 973EEBD9F9591953DFB21C06 + targetProxy + 7175E2D64BC6B577E9C8B508 + + 973EEBD9F9591953DFB21C06 + + buildConfigurationList + 2C552B02AE33C61830745E85 + buildPhases + + 8813F909BCAF027B0FC323D0 + 2222F067CA369E707A16AEF7 + F55505C4FEE6D4B5BE545B36 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-ReactKit + productName + Pods-ReactKit + productReference + 549BC0F2811E2649ED299CAD + productType + com.apple.product-type.library.static - 919FCDB927A3933126B3DCFE + 974AE51E6EEA2E10FA244901 buildConfigurations - 648F4790538BD82BF2B083EF - 5A541D6A294BA6E01BD0CD3A + 8002A0260F2B1C62C0F465E9 + 4FDB96AA2F90818C413120ED defaultConfigurationIsVisible 0 @@ -2237,36 +2500,55 @@ isa XCConfigurationList - 932B25E8D26A525CAF6ABCC0 + 9792679800AFBB1E3AEA6C75 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - UIView+ReactKit.m + RCTInvalidating.h path - Views/UIView+ReactKit.m + Base/RCTInvalidating.h sourceTree <group> - 943F495152CC9318EB9F83B1 + 983AAB60C663D67F5EC651DF fileRef - 5D5E4CDC94FE8212303F96ED + A4689EAD31C2FA4EA3CC9562 isa PBXBuildFile - 949E5950C7964E60EE8037C2 + 992468CC66C0BCCDEE192DE6 - fileRef - 132DE36D6DB2D0F70C09CE89 + containerPortal + A30671B7FF41C9CC88DDC48D isa - PBXBuildFile + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 973EEBD9F9591953DFB21C06 + remoteInfo + Pods-ReactKit + + 9B331DCABA0319591332829F + + buildActionMask + 2147483647 + files + + 33AC21BAE4072FDD0FC446AC + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 - 9659D9A2FEA529295FE42173 + 9B65A75546F806AFC5B18A60 includeInIndex 1 @@ -2275,13 +2557,13 @@ lastKnownFileType sourcecode.c.objc name - RCTScrollView.m + RCTWrapperViewController.m path - Views/RCTScrollView.m + Views/RCTWrapperViewController.m sourceTree <group> - 97138ACEE67BD2BDF8A3DEA0 + 9EBCB645740BB4540527E698 includeInIndex 1 @@ -2290,117 +2572,138 @@ lastKnownFileType sourcecode.c.objc name - RCTRootView.m + RCTConvert.m path - Base/RCTRootView.m + Base/RCTConvert.m sourceTree <group> - 97BAEC30E32259F061CCB7DE + 9FAFE9BD1A59BB2AECB2C96F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RCTTouchHandler.m + RCTLocationObserver.h path - Base/RCTTouchHandler.m + Modules/RCTLocationObserver.h sourceTree <group> - 97C2676E499C58904665B945 + 9FB67D0E7544E5440575234D - fileRef - 9AAFEB3BA8925E0E14AE9A9E + buildConfigurationList + 974AE51E6EEA2E10FA244901 + buildPhases + + 9B331DCABA0319591332829F + 707BF0AC66323E30AB45EDFD + + buildRules + + dependencies + + 025A87130AD86B58E404D3C0 + B59B3D5BE50E22525A751AF2 + 673952613A34ACCA97161AA2 + isa - PBXBuildFile + PBXNativeTarget + name + Pods + productName + Pods + productReference + 25015EE62C53673BAF076DD7 + productType + com.apple.product-type.library.static - 9A489A5B6D91FD9AA80B1B50 + A1807A06CB52537883C3B54F fileRef - E55746E91186F585B21DFB68 + EDA82AB2D40C974A74CA74A9 isa PBXBuildFile - 9AAFEB3BA8925E0E14AE9A9E + A1B258FDC18C71176DA32CFE includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTTiming.h + RCTNavigator.m path - Modules/RCTTiming.h + Views/RCTNavigator.m sourceTree <group> - 9B18ECDA237344C06A230FB3 + A29B3475CEBEAF74694048F7 - containerPortal - E88354D347CCC1EAC2E787C1 + fileRef + 35757FFD140D20F790EE2BDD isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 20F2231C1AEED2919F583DC7 - remoteInfo - Pods-ReactKit + PBXBuildFile - 9C1FE5B0BAC9A97A8309591C + A2A969DAE26BC783576D2EDE - includeInIndex - 1 + fileRef + 069D2AD44B6410EACB1B2075 isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RCTUIActivityIndicatorViewManager.m - path - Views/RCTUIActivityIndicatorViewManager.m - sourceTree - <group> + PBXBuildFile - 9C8A29CEE6A594FF4F429DB3 + A2AF525DC972EB0FDD47D962 - children - - 84A6E86621CA19A1F15ECC01 - 16E1299D87C2B7BE1D68024F - 44161614652ABCC200708F4A - 5F3DD45AD214483F15E95111 - FF03E617D571F159152581FC - 6DA156177295C36FC390E8E9 - 005E47CD37DA97006CE65B99 - 15478769A7025E67403CF8F6 - F213CCB9CD13022BCF3B8578 - DA90B4FBB6B34AAFB1C03F28 - DAC7254DBCF13C5C31A7AF31 - + fileRef + 2C7ED084B30FD91FBC08C10D isa - PBXGroup - name - RCTText - path - ../../../Libraries/Text - sourceTree - <group> + PBXBuildFile - 9E520B28129AD787FE9C67D8 + A30671B7FF41C9CC88DDC48D - fileRef - 6522F5D072C47020817339D9 + attributes + + LastUpgradeCheck + 0510 + + buildConfigurationList + 5E0ADAD263C01B5C07EBAD67 + compatibilityVersion + Xcode 3.2 + developmentRegion + English + hasScannedForEncodings + 0 isa - PBXBuildFile + PBXProject + knownRegions + + en + + mainGroup + 741F9A1822BB7EDBCBA63557 + productRefGroup + 88771C44C3AA01999607AE8F + projectDirPath + + projectReferences + + projectRoot + + targets + + 9FB67D0E7544E5440575234D + 769A717CAFE5B019B17120C7 + 3859014F88232018A42BAC04 + 973EEBD9F9591953DFB21C06 + - 9FF2D7B800439FD8B4118089 + A3B9259CF020C7A65A92AA0E includeInIndex 1 @@ -2409,176 +2712,268 @@ lastKnownFileType sourcecode.c.h name - RCTWebViewExecutor.h + RCTScrollView.h path - Executors/RCTWebViewExecutor.h + Views/RCTScrollView.h sourceTree <group> - A3731A42F61C724D93CD6A2E + A4689EAD31C2FA4EA3CC9562 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h + name + RCTJSMethodRegistrar.h path - Pods-ReactKit-dummy.m + Base/RCTJSMethodRegistrar.h sourceTree <group> - A53374892CD6B26138B38ADB + A5A887B5A0FE16862445E7FB includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h name - RCTStatusBarManager.m + RCTNavigatorManager.h path - Modules/RCTStatusBarManager.m + Views/RCTNavigatorManager.h sourceTree <group> - A551474C8E2F85DBAEF20B96 + A66BCD8A2FAA1E8DADD7488E + fileRef + 8AF331922DC4CDB6CF9DB6A9 + isa + PBXBuildFile + + A8383CD9E89EBD0486A2CFF1 + + explicitFileType + archive.ar includeInIndex - 1 + 0 isa PBXFileReference - lastKnownFileType - sourcecode.c.objc path - RCTImageDownloader.m + libPods-RCTText.a sourceTree - <group> - - A63CEAE583EF5324F7786345 - - fileRef - C9AA6ACBFD421C3D6FAC5329 - isa - PBXBuildFile + BUILT_PRODUCTS_DIR - A95BFEC22FBAC588E1B491ED + A8DBC5BF7CEEEDA937D3BE08 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.objc path - Pods-RCTNetworkImage-Private.xcconfig + RCTRawTextManager.m sourceTree <group> - A9BAD3EC8ABCA9694CAF96F7 + AACA8FE0E3EC2035615EC0AE fileRef - ACC753B0E880892739890CD6 + 7FEDFD81C12D696A75133BDA isa PBXBuildFile - A9CA493A1D0DBFFAC416CF2B + AACE41F371930BDA2BE0D50F - buildActionMask - 2147483647 - files + children - BE926BD26838E67A959563DD - F69EE0ADB66942B5A2F06409 - 0D4B28DA9FC2C4CB2B2874B3 - 7701A5C43F0A8424984C6A6A - F6129F258DCA7C19228C218D - D1ADF19017FFB8A53F8F0885 + B46B327243391CAF6E0717D9 isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXGroup + name + iOS + sourceTree + <group> + + AEF6909F3ECCE95C6495B070 + + fileRef + 24081C451F4316B44C32B7CC + isa + PBXBuildFile - A9E3206FA20E2CAD15028412 + AF2C54E62D7D0120DB4D4DE5 includeInIndex 1 isa PBXFileReference lastKnownFileType - text.xcconfig + sourcecode.c.h path - Pods.release.xcconfig + Pods-environment.h sourceTree <group> - AB98ECCECFE588B641E804DD + AF458FAFFB109206A76292E6 + + fileRef + CDB7B6437EABB1154D9772C0 + isa + PBXBuildFile + + B00A2CCF46A8FBC54A316DCC children - 895928D325843E9D8B7285FA - A551474C8E2F85DBAEF20B96 - 79ED42B49D21E04D9AA9DC7F - F6CC16FA65BD5A265088B6B6 - 78082D94239F5CEB5959B0B2 - 198FD8078EB2E34708CAF463 - 69220AD94D86BCE4FAE46678 + 2A073BDE36873311DA6A0EF5 + 3A6DEBCF91BF88EE6FF0C53E + B3F5495EE23A8AB6596EB29A + 07F1BC4802790A12CD37323F + 0B8869CDD72D9A8E218342F0 + 0970729E477937347C8EBD83 + 686655033E6D4DF34CC8D72A + 31815389CBA63C86E173EE9C + 688A6AE7AC080B377719B148 + BADCCC41C7913287A31E51C9 + 1EA38AB62019C3EC36D2FC6A + 0CB274EC48DFB07B4C8B240E + 3BF49B8ADD348B664CAA965D + 4451C03906E44804B163B854 + 07576F9F34B4CADE96EDD698 + 79A5515EDEDBB9DA720BFE4A + 9EBCB645740BB4540527E698 + 91219004BE0A4C162AF041A5 + 79237C45AFA01938E517AD06 + C8023A8F586BE2C6323242D8 + 110F901C8F65A6EC1D683ED3 + 9792679800AFBB1E3AEA6C75 + A4689EAD31C2FA4EA3CC9562 + CCF7DF071515793DD6C0414D + E5B280DE6A446D58C857B3C7 + 31E92BD37BFCCB143ED614CB + 9FAFE9BD1A59BB2AECB2C96F + ED51F456809B09F7439C4D93 + 7FEDFD81C12D696A75133BDA + 31CB0CA9F918FFFFCCDB8284 + 4B0397BE4FBD9F8FEDEBEAF4 + EDA82AB2D40C974A74CA74A9 + CDB3FDE1695B0706CA924FA5 + 3EA7887D20B6B743DE3C1DF5 + 11806B3CDA8E83E6F2FE8D17 + A1B258FDC18C71176DA32CFE + A5A887B5A0FE16862445E7FB + 8D14C3BB217E003103E52CA1 + B6F5CFD1D6804D50A8EF31AC + 69903DC41C305CDC985BEA22 + EA4527C073CDB5189EBADCD7 + FBC74FE67BCC52FD85C1BAD0 + 76DB22C9C8B38077354D35A8 + A3B9259CF020C7A65A92AA0E + 2E2A8AF7AB8F16F26CE07D8C + 93C181AF29A9C408FC907C4A + D76CCDEFB1E46BB0C1532B99 + E22151F70AA7C88D098C99BB + 1B18F1E7CA77F1AA1A12D304 + 24081C451F4316B44C32B7CC + CDB7B6437EABB1154D9772C0 + 61063E1955F44DB956E55837 + C3D3D260900346C1CE93D5CA + D19D762ABD2DB814D5BA26CA + 8AF331922DC4CDB6CF9DB6A9 + 55A208629844F66520167BA8 + 261567BAE307BF57D88AC939 + 3F8AC8D36568DD378B90804B + 80A2CDBEC4C2EA679BDFD05B + 069D2AD44B6410EACB1B2075 + 80E2EA6586C8C5C71DFFA0B2 + 568AF882FEE1A75F17DF8480 + 25B6E9DFFAE6A9540CEF75DE + DC61985AB127017510FF47B0 + 2FE386FFB0F3E3A3528409B9 + 8E36491BC0A73F578A6F8D7F + 6B82C5B8677FA77F9902CA0F + 6B92A10C94541BEEFE730577 + 35757FFD140D20F790EE2BDD + 42F3BF4E050BB621F3E00E3C + 4EFC81CD3380F9556D86CC8C + 8EA2D7BE822E7CFD12194108 + 3EF20A23049B63D8F1AB34ED + D436BE9918549C192684657C + 5650233E3ECB1C612AB3AA71 + 05979756D746338C19D9CFE3 + F9EB9D707F5B2AD7C1E442EF + 4CAAD0D6BF7C31F9871B5563 + 3569D3C1AD09FC147229AF8D + 71C70C27906DAEB68FB0CF59 + 9B65A75546F806AFC5B18A60 + 6BA39D6B07EFAE9F3D0C6239 + 46EA953E96B6E60A9EA7253A + 2A8C42E95666925E6CEE303F isa PBXGroup name - RCTNetworkImage + ReactKit path - ../../../Libraries/Image + ../../../ReactKit sourceTree <group> - ABFBF65F5D61F7EA440E25A8 + B03DD49B4D0684DD664FA620 fileRef - 245789C2D4A68C88E27641D9 + 4B0397BE4FBD9F8FEDEBEAF4 isa PBXBuildFile - AC1A530CDB55406B05665766 + B1AB002CD8EBE409EC364BF4 + + containerPortal + A30671B7FF41C9CC88DDC48D + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 769A717CAFE5B019B17120C7 + remoteInfo + Pods-RCTNetworkImage + + B1CE62B16BA49B5F93E0F176 fileRef - DD9C58FDC618EFB182668F97 + 9792679800AFBB1E3AEA6C75 isa PBXBuildFile - ACC753B0E880892739890CD6 + B318A41A989E068CB405AD1F includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - RCTEventDispatcher.h + text.plist.xml path - Base/RCTEventDispatcher.h + Pods-acknowledgements.plist sourceTree <group> - AF5A50F21A42CD8E0BBDF109 + B3F415717620F1F12B992B0D fileRef - 72B306867705C5CA14B74DF2 + 0970729E477937347C8EBD83 isa PBXBuildFile - B1DC103317576FEAB1449D9F - - fileRef - 8307F3BCFAD957D08281164A - isa - PBXBuildFile - - B2D7892A9C3245D8D7431C23 + B3F5495EE23A8AB6596EB29A includeInIndex 1 @@ -2587,41 +2982,26 @@ lastKnownFileType sourcecode.c.h name - RCTTouchHandler.h + RCTAlertManager.h path - Base/RCTTouchHandler.h + Modules/RCTAlertManager.h sourceTree <group> - B32480BC0BA8A8BA551E9D00 + B46B327243391CAF6E0717D9 - includeInIndex - 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + wrapper.framework name - RCTTextFieldManager.h - path - Views/RCTTextFieldManager.h - sourceTree - <group> - - B32BDD61D5D87B095411A92F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig + Foundation.framework path - Pods-ReactKit.xcconfig + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework sourceTree - <group> + DEVELOPER_DIR - B40A54F9CD6C17782376DE87 + B4992F13711EC0E2E61D9B72 includeInIndex 1 @@ -2629,377 +3009,171 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - RCTNavigator.h - path - Views/RCTNavigator.h - sourceTree - <group> - - B42844BBEB0C3FCBB4CB7C98 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RCTEventDispatcher.m path - Base/RCTEventDispatcher.m + RCTText.h sourceTree <group> - B495C09D4F5093AAB731E194 + B59B3D5BE50E22525A751AF2 isa PBXTargetDependency name - Pods-ReactKit + Pods-RCTText target - 20F2231C1AEED2919F583DC7 + 3859014F88232018A42BAC04 targetProxy - 9B18ECDA237344C06A230FB3 - - B70F784E53C151C33E1130FF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RCTNavigator.m - path - Views/RCTNavigator.m - sourceTree - <group> + C3D2400BD002BB173CDFA171 - B9DEE348987356C83C27DD9E + B5FC682792E6A0447D287697 fileRef - 49199899EB7E17720A69A6A0 + 0B8869CDD72D9A8E218342F0 isa PBXBuildFile - BB0B04F7F63902EED012528E + B6D4979E7A87393AD504C9F8 fileRef - 491280116436017C4FEC9FD8 + 3F8AC8D36568DD378B90804B isa PBXBuildFile - BCDC97F48090DACB87DEC04E + B6F5CFD1D6804D50A8EF31AC - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h + name + RCTPointerEvents.h path - libPods-RCTNetworkImage.a + Base/RCTPointerEvents.h sourceTree - BUILT_PRODUCTS_DIR - - BD29342538528D6DE4038BD2 - - buildActionMask - 2147483647 - files - - A63CEAE583EF5324F7786345 - D3EA0626B08FB41301B71BA7 - 411AACA7B5F606DA03793980 - E2BA10A9D9813750516AA99F - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - BD88172D1A926B95F1965628 - - fileRef - 5D5E4CDC94FE8212303F96ED - isa - PBXBuildFile + <group> - BE52F839238A59D2AB82159E + B753A0617AB77E1E91027A34 - fileRef - 4648080B27A50C8D028851B3 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-RCTText-Private.xcconfig + sourceTree + <group> - BE926BD26838E67A959563DD + B88E04B1572FF6FEC2D3B465 fileRef - E68B47098BE36BB1B90E7BD6 + 3BF49B8ADD348B664CAA965D isa PBXBuildFile - BFEF41FE0A9C6E4BF083A1C4 + BA296894BFD973DE874868B8 fileRef - F213CCB9CD13022BCF3B8578 + 9FAFE9BD1A59BB2AECB2C96F isa PBXBuildFile - C043A8B738F0E880E4E71CF4 + BA6C0E71C8E201475B68A2E3 - buildActionMask - 2147483647 - files - - F7531B3CBFEDA85A72BF6805 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - C07D1DDFE8D93ECEDF0E97C1 - - fileRef - 6C5C7F49C76DFD009CE24F54 - isa - PBXBuildFile - - C09FDA6F8073916E1DC7FB77 - - children - - B32BDD61D5D87B095411A92F - 430F4C781E2E7EE9F8CB83FD - A3731A42F61C724D93CD6A2E - FDBD9515B1715137A4E1AD37 - + includeInIndex + 1 isa - PBXGroup - name - Support Files + PBXFileReference + lastKnownFileType + sourcecode.c.objc path - ../Examples/TicTacToe/Pods/Target Support Files/Pods-ReactKit + RCTImageDownloader.m sourceTree <group> - C23EA0774A0BD0ACB68E5B0F + BADCCC41C7913287A31E51C9 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTView.h + RCTBridge.m path - Views/RCTView.h - sourceTree - <group> - - C426A0F89138E32710FFDBCD - - children - - 80DBEC5108DFE1F49442F2F9 - FE1E926B5C3C10CA3797023E - C521253141932511E561C093 - 6BEE757D0B19EB927C04C0FA - 427D3517A7FBC3A92AF9E9D4 - - isa - PBXGroup - sourceTree - <group> - - C521253141932511E561C093 - - children - - D503EB0531912E6E58954932 - - isa - PBXGroup - name - Frameworks + Base/RCTBridge.m sourceTree <group> - C575BB07E7B92FA3EBC10949 + BBF638A80E2895BEFE9C4730 - explicitFileType - archive.ar includeInIndex - 0 + 1 isa PBXFileReference + lastKnownFileType + sourcecode.c.h path - libPods-ReactKit.a + RCTImageDownloader.h sourceTree - BUILT_PRODUCTS_DIR + <group> - C618E1B2CFF909C6273ABD4D + BE1D1748A0D0A88E8D9EBDC6 fileRef - C23EA0774A0BD0ACB68E5B0F + 31815389CBA63C86E173EE9C isa PBXBuildFile - C77D22DADA6D43EC7CC8478A + BE75BC76971974B7D4C38A36 fileRef - 175C559D2A89B7FC27EFD6C5 + 07F1BC4802790A12CD37323F isa PBXBuildFile - C8F7D06CE3D7F4FDED21933F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-RCTNetworkImage-prefix.pch - sourceTree - <group> - - C9AA6ACBFD421C3D6FAC5329 + BF6A636E87E3CA2080B277BD - includeInIndex - 1 + buildActionMask + 2147483647 + files + + 6297A72A212404588E6F25E7 + 96611930547604A69128D37A + 8A0B35F9B55AB9E9876DF4F4 + 5F698EE693825391F5ADB26A + 150C5DBA403D3B23A1EC6CDE + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-RCTNetworkImage-dummy.m - sourceTree - <group> + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 - CCCA2CC55157BFF72767CEAB + C10CEF62C1009D05C2E0E7DF - baseConfigurationReference - A95BFEC22FBAC588E1B491ED - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-RCTNetworkImage/Pods-RCTNetworkImage-prefix.pch - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - + fileRef + 80E2EA6586C8C5C71DFFA0B2 isa - XCBuildConfiguration - name - Release + PBXBuildFile - CDCB9B4306F2967192C1DAAA + C3D2400BD002BB173CDFA171 - 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 - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - COPY_PHASE_STRIP - YES - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - ONLY_ACTIVE_ARCH - YES - STRIP_INSTALLED_PRODUCT - NO - + containerPortal + A30671B7FF41C9CC88DDC48D isa - XCBuildConfiguration - name - Debug + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 3859014F88232018A42BAC04 + remoteInfo + Pods-RCTText - CEAD6D174912D6D124A031D9 + C3D3D260900346C1CE93D5CA includeInIndex 1 @@ -3008,13 +3182,13 @@ lastKnownFileType sourcecode.c.h name - RCTAutoInsetsProtocol.h + RCTStaticImage.h path - Base/RCTAutoInsetsProtocol.h + Views/RCTStaticImage.h sourceTree <group> - CEDE7930A786744ACDE6592B + C8023A8F586BE2C6323242D8 includeInIndex 1 @@ -3022,120 +3196,99 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + RCTExceptionsManager.h path - Pods-RCTText-prefix.pch + Modules/RCTExceptionsManager.h sourceTree <group> - D0F5EC95B7EE03515326948E + C8F2F05D94C1A991A87B571E includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h - name - RCTCache.h + text.xcconfig path - Base/RCTCache.h + Pods.debug.xcconfig sourceTree <group> - D1ADF19017FFB8A53F8F0885 + CB9F944208FFD7B3ADC7A00A - fileRef - DA90B4FBB6B34AAFB1C03F28 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + RCTTextManager.h + sourceTree + <group> - D3EA0626B08FB41301B71BA7 + CC1B51AD9B49FFAA1362B23F fileRef - A551474C8E2F85DBAEF20B96 + BA6C0E71C8E201475B68A2E3 isa PBXBuildFile - D43D7636AEF4C472723FF075 - - buildConfigurations - - 772EDE81A05CD3EA28A869CC - 320294F910FF631F87E183B5 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - D4D507D020AD79183E1DD916 + CCBD98E709AB05D7FCCA9DD4 fileRef - 48039B7A25006CE8F45E9619 + DC61985AB127017510FF47B0 isa PBXBuildFile - D503EB0531912E6E58954932 + CCF7DF071515793DD6C0414D - children - - 5D5E4CDC94FE8212303F96ED - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.h name - iOS + RCTJavaScriptExecutor.h + path + Base/RCTJavaScriptExecutor.h sourceTree <group> - D65313F8C82EBB8E719F5006 - - fileRef - 530A6D73CAFF37DCB5A52103 - isa - PBXBuildFile - - D879CE28A1189AB3CA754538 - - fileRef - 7308A06BDA47FB20E2FC8005 - isa - PBXBuildFile - - DA90B4FBB6B34AAFB1C03F28 + CDB3FDE1695B0706CA924FA5 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + sourcecode.c.h + name + RCTNavItemManager.h path - RCTTextManager.m + Views/RCTNavItemManager.h sourceTree <group> - DAC7254DBCF13C5C31A7AF31 + CDB7B6437EABB1154D9772C0 - children - - 391E46E8F975CA6362AB5DE5 - 504F7E363A7AFC9A64B86154 - E68B47098BE36BB1B90E7BD6 - CEDE7930A786744ACDE6592B - + includeInIndex + 1 isa - PBXGroup + PBXFileReference + lastKnownFileType + sourcecode.c.h name - Support Files + RCTSparseArray.h path - ../../Examples/TicTacToe/Pods/Target Support Files/Pods-RCTText + Base/RCTSparseArray.h sourceTree <group> - DD1AEBDB914EF5C49CAAEB46 + CEBFC03689DC0AC9CD1D45F6 includeInIndex 1 @@ -3143,14 +3296,12 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - RCTJavaScriptExecutor.h path - Base/RCTJavaScriptExecutor.h + RCTShadowText.h sourceTree <group> - DD9C58FDC618EFB182668F97 + D19D762ABD2DB814D5BA26CA includeInIndex 1 @@ -3159,72 +3310,89 @@ lastKnownFileType sourcecode.c.objc name - RCTNavItem.m + RCTStaticImage.m path - Views/RCTNavItem.m + Views/RCTStaticImage.m sourceTree <group> - DDEDAE8AD808715BBCF5DC6C + D257C76E43E366FC0EA7A12E - buildActionMask - 2147483647 - files + fileRef + 7601163D57B34162C4CA1C48 + isa + PBXBuildFile + + D290C62BBB41818A93C7C1A1 + + fileRef + E8407ED863C88EC9CA04A11C + isa + PBXBuildFile + + D3650CA7059AEE2BD3BE431F + + containerPortal + A30671B7FF41C9CC88DDC48D + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 973EEBD9F9591953DFB21C06 + remoteInfo + Pods-ReactKit + + D41089EF6EAF70DF70BC0D25 + + children - BD88172D1A926B95F1965628 + F2A1CE5BD796846DBD308A95 + 39463588A39AA3E9757F0520 + 41E7BCDB123D639D70221FE4 + DC8389FA6FBDA311577B6AD5 isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 + PBXGroup + name + Support Files + path + ../../Examples/TicTacToe/Pods/Target Support Files/Pods-RCTNetworkImage + sourceTree + <group> - DE4BA2446E5FB9E2F0C98C34 + D436BE9918549C192684657C includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc name - RCTRedBox.h + RCTView.m path - Base/RCTRedBox.h + Views/RCTView.m sourceTree <group> - DEA6A4B98EA82BEDE81ED513 - - buildActionMask - 2147483647 - files - - 943F495152CC9318EB9F83B1 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - DF17E391C45D5B66999F6D99 + D46C615416D298CD2EF32D8B includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc - name - RCTKeyCommands.m + text.xcconfig path - Base/RCTKeyCommands.m + Pods.release.xcconfig sourceTree <group> - DFEDA529E62F398E0E66A864 + D47F88D3F797D8EF95C0BA4D baseConfigurationReference - A95BFEC22FBAC588E1B491ED + 062BC4B46046CE4058393650 buildSettings ALWAYS_SEARCH_USER_PATHS @@ -3240,7 +3408,7 @@ GCC_PRECOMPILE_PREFIX_HEADER YES GCC_PREFIX_HEADER - Target Support Files/Pods-RCTNetworkImage/Pods-RCTNetworkImage-prefix.pch + Target Support Files/Pods-ReactKit/Pods-ReactKit-prefix.pch GCC_PREPROCESSOR_DEFINITIONS DEBUG=1 @@ -3270,158 +3438,56 @@ name Debug - E00F5EA71F725792D7FE1C0F - - children - - E9A7A3D5EC8AAF878D6A2CBE - 491280116436017C4FEC9FD8 - E7FA1D0590C4CB610C0FECF2 - 132DE36D6DB2D0F70C09CE89 - 26C00EEFB778EFB7A6703E20 - 6FCFD749EEB3861EB75C0534 - 4648080B27A50C8D028851B3 - CEAD6D174912D6D124A031D9 - 0524E24381502D7EB46CCF29 - 3D3089A4A62A68E4D5BB4562 - EE90F905D6EA51C12DA5F4ED - D0F5EC95B7EE03515326948E - 3CC9DC0433D77149CC4DE5DE - 289322DAF960C6BD7F2FD8E1 - 22669B7FF7DBBF51202945CD - 7308A06BDA47FB20E2FC8005 - 8E13E32022B45DA13AFC5404 - ACC753B0E880892739890CD6 - B42844BBEB0C3FCBB4CB7C98 - 27F37EEF056BA05A9FE6548A - 2DA5F87EA2CDCEA0ED668578 - 6522F5D072C47020817339D9 - E5FC33A15846273C981E0322 - DD1AEBDB914EF5C49CAAEB46 - 8399DB76B770CB32FA2CD5FF - DF17E391C45D5B66999F6D99 - 16B69D05ABC152C41B9129FB - 2F6BBA653E86409B28911661 - 3FDDE45F64AE789BEAED2125 - DD9C58FDC618EFB182668F97 - 49199899EB7E17720A69A6A0 - 72B306867705C5CA14B74DF2 - B40A54F9CD6C17782376DE87 - B70F784E53C151C33E1130FF - 77AEC7F8659C91198FFFF673 - 12FAC13993C100C3FDBD0DD8 - 54481109ECD4CD40F5F746F8 - DE4BA2446E5FB9E2F0C98C34 - 6AC9ACC04495648FA5060FCD - 6C5C7F49C76DFD009CE24F54 - 97138ACEE67BD2BDF8A3DEA0 - 245789C2D4A68C88E27641D9 - 9659D9A2FEA529295FE42173 - E991F096165FA74435C7282D - 530A6D73CAFF37DCB5A52103 - 15D063218D733290ACAF6ECD - 068A30BD4A2404B5DAEBE221 - 45775545A25B55D8FF631FF5 - 6C59A8B8703F0BD79C458591 - 7E1B11B9B4C3FFCEFFD1F35D - 2461A7AF21FB638CED912FE3 - E55746E91186F585B21DFB68 - 3F06663863E59C187B84EAD2 - F731109AFE06344ABBC4BBE6 - 5A8146BE2B9A4E8B080899C7 - A53374892CD6B26138B38ADB - F6F6566819F8D0B545E28AC4 - FCAC9AFE3E61C78E93EA7E8C - B32480BC0BA8A8BA551E9D00 - 22CB86FDC9D99844724FDDD3 - 9AAFEB3BA8925E0E14AE9A9E - 8307F3BCFAD957D08281164A - B2D7892A9C3245D8D7431C23 - 97BAEC30E32259F061CCB7DE - 2E00E46C249C163EBC0418DC - 9C1FE5B0BAC9A97A8309591C - 02011DF072CE86BD3AD237F3 - EA77880FBBE6AA7511841605 - 42FCE12743FD1B4702208E0D - 1568A6E0A0EFBABC6271F94D - C23EA0774A0BD0ACB68E5B0F - 88F100D7F9D61D558EF80D8A - 3938293AC4D9C3C8B8DDFDC7 - 33E69C46AB97309D4EBFA432 - 175C559D2A89B7FC27EFD6C5 - 9FF2D7B800439FD8B4118089 - 0678F15E5799E801FBBB82EE - 569C3E0B54CE022FD9433B66 - 6E38F96F68680D013AD0812A - 48039B7A25006CE8F45E9619 - 932B25E8D26A525CAF6ABCC0 - C09FDA6F8073916E1DC7FB77 - - isa - PBXGroup - name - ReactKit - path - ../../../ReactKit - sourceTree - <group> - - E1C485676C801FFCB46D93D0 + D6CF22628A62FAE5C1C4F751 fileRef - 77AEC7F8659C91198FFFF673 + 686655033E6D4DF34CC8D72A isa PBXBuildFile - E1C5A97B9865CABC567B000A + D76CCDEFB1E46BB0C1532B99 - containerPortal - E88354D347CCC1EAC2E787C1 - isa - PBXContainerItemProxy - proxyType + includeInIndex 1 - remoteGlobalIDString - F5D2C09AFAA6986D234BF953 - remoteInfo - Pods-RCTText + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + RCTScrollViewManager.m + path + Views/RCTScrollViewManager.m + sourceTree + <group> - E2BA10A9D9813750516AA99F + D8076A3A8F0FAA3CD5E1FC99 fileRef - 198FD8078EB2E34708CAF463 + 2A073BDE36873311DA6A0EF5 isa PBXBuildFile - E484553771DAF5F08178C966 + D9D68BDCB56619CE484E1950 - buildConfigurations - - EF728A6C52298117E9505250 - 2A5A7AE725AB3B07B61A40E9 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - E52753A376176D518B300161 - - fileRef - 9659D9A2FEA529295FE42173 + includeInIndex + 1 isa - PBXBuildFile + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + RCTRawTextManager.h + sourceTree + <group> - E5508477224F57D3312AC5B9 + DAFE568BA68CC1B9A1496B03 fileRef - 88F100D7F9D61D558EF80D8A + 19B74DAEFA40E906DEDEADFA isa PBXBuildFile - E55746E91186F585B21DFB68 + DC61985AB127017510FF47B0 includeInIndex 1 @@ -3430,13 +3496,13 @@ lastKnownFileType sourcecode.c.objc name - RCTStaticImage.m + RCTTiming.m path - Views/RCTStaticImage.m + Modules/RCTTiming.m sourceTree <group> - E5FC33A15846273C981E0322 + DC8389FA6FBDA311577B6AD5 includeInIndex 1 @@ -3444,14 +3510,12 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - RCTJSMethodRegistrar.h path - Base/RCTJSMethodRegistrar.h + Pods-RCTNetworkImage-prefix.pch sourceTree <group> - E68B47098BE36BB1B90E7BD6 + DCD06DFADE2DF0CA7278AB88 includeInIndex 1 @@ -3460,11 +3524,25 @@ lastKnownFileType sourcecode.c.objc path - Pods-RCTText-dummy.m + RCTTextManager.m sourceTree <group> - E7FA1D0590C4CB610C0FECF2 + DD8E4C13EE69D6954938439C + + fileRef + 71C70C27906DAEB68FB0CF59 + isa + PBXBuildFile + + DE5F1B9081628B9A5A573C5B + + fileRef + 31CB0CA9F918FFFFCCDB8284 + isa + PBXBuildFile + + E22151F70AA7C88D098C99BB includeInIndex 1 @@ -3473,52 +3551,54 @@ lastKnownFileType sourcecode.c.h name - RCTAlertManager.h + RCTScrollableProtocol.h path - Modules/RCTAlertManager.h + Base/RCTScrollableProtocol.h sourceTree <group> - E88354D347CCC1EAC2E787C1 + E2D61EA3810F0B25C4443657 - attributes - - LastUpgradeCheck - 0510 - - buildConfigurationList - 6D757E59E707D9B3474721D7 - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 + fileRef + C8023A8F586BE2C6323242D8 + isa + PBXBuildFile + + E3483608408169CD1A186EEA + + fileRef + 9B65A75546F806AFC5B18A60 + isa + PBXBuildFile + + E352220A2836A697446EE5ED + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-RCTText-prefix.pch + sourceTree + <group> + + E420F9974821AC873ADE0EB0 + + fileRef + 3EF20A23049B63D8F1AB34ED isa - PBXProject - knownRegions - - en - - mainGroup - C426A0F89138E32710FFDBCD - productRefGroup - 6BEE757D0B19EB927C04C0FA - projectDirPath - - projectReferences - - projectRoot - - targets - - 156E154B035C85C750DA3DE2 - 76D2A8D67E04D111A7938CED - F5D2C09AFAA6986D234BF953 - 20F2231C1AEED2919F583DC7 - + PBXBuildFile + + E514DB237132E2FE887A871F + + fileRef + D76CCDEFB1E46BB0C1532B99 + isa + PBXBuildFile - E991F096165FA74435C7282D + E5B280DE6A446D58C857B3C7 includeInIndex 1 @@ -3527,26 +3607,43 @@ lastKnownFileType sourcecode.c.h name - RCTScrollViewManager.h + RCTKeyCommands.h path - Views/RCTScrollViewManager.h + Base/RCTKeyCommands.h sourceTree <group> - E9A7A3D5EC8AAF878D6A2CBE + E6F1A1F54DDCFD6330C02A56 includeInIndex 1 isa PBXFileReference + lastKnownFileType + text name - Layout.c + Podfile path - Layout/Layout.c + ../Podfile + sourceTree + SOURCE_ROOT + xcLanguageSpecificationIdentifier + xcode.lang.ruby + + E8407ED863C88EC9CA04A11C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + RCTNetworkImageView.h sourceTree <group> - EA77880FBBE6AA7511841605 + EA4527C073CDB5189EBADCD7 includeInIndex 1 @@ -3555,108 +3652,69 @@ lastKnownFileType sourcecode.c.objc name - RCTUIManager.m + RCTRedBox.m path - Modules/RCTUIManager.m + Base/RCTRedBox.m sourceTree <group> - EA79968832417354B40F6352 + EACA791D981259D849E9575C + + fileRef + 42F3BF4E050BB621F3E00E3C + isa + PBXBuildFile + + EC011298F3945A65BF256861 fileRef - EE90F905D6EA51C12DA5F4ED + 4EFC81CD3380F9556D86CC8C isa PBXBuildFile - EA7CC42518555EE2C4B617E3 + EC32BFBA00A39F59EB11C597 buildActionMask 2147483647 files - FBE4E83A8EF948FF337B2436 + 341F23664902CBD8947C5DB3 isa PBXFrameworksBuildPhase runOnlyForDeploymentPostprocessing 0 - EC5F81AEBB86DCC1C9ECDE59 - - fileRef - 3D3089A4A62A68E4D5BB4562 - isa - PBXBuildFile - - ED09FCD5EBB9DAA998867B1F - - fileRef - 84A6E86621CA19A1F15ECC01 - isa - PBXBuildFile - - EDBE5D54C93BC128C25036AD - - isa - PBXTargetDependency - name - Pods-RCTNetworkImage - target - 76D2A8D67E04D111A7938CED - targetProxy - 6499B8CCEC40B282FFAADFA6 - - EDBE9B4FBE2888A89C7FAAAE - - fileRef - 0678F15E5799E801FBBB82EE - isa - PBXBuildFile - - EE90F905D6EA51C12DA5F4ED - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RCTBridgeModule.h - path - Base/RCTBridgeModule.h - sourceTree - <group> - - EF728A6C52298117E9505250 + ED0EAAAC662DFADD30EA5D11 baseConfigurationReference - 6C4193D7074A9FE2AADD31C2 + 062BC4B46046CE4058393650 buildSettings ALWAYS_SEARCH_USER_PATHS NO COPY_PHASE_STRIP - NO + YES DSTROOT /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 GCC_PRECOMPILE_PREFIX_HEADER YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO + GCC_PREFIX_HEADER + Target Support Files/Pods-ReactKit/Pods-ReactKit-prefix.pch INSTALL_PATH $(BUILT_PRODUCTS_DIR) IPHONEOS_DEPLOYMENT_TARGET 7.0 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + OTHER_LDFLAGS OTHER_LIBTOOLFLAGS @@ -3669,101 +3727,130 @@ iphoneos SKIP_INSTALL YES + VALIDATE_PRODUCT + YES isa XCBuildConfiguration name - Debug - - F069246D046DFFE7CF05DE92 - - fileRef - 42FCE12743FD1B4702208E0D - isa - PBXBuildFile - - F092F906C8A9E95FD09661CE - - fileRef - 932B25E8D26A525CAF6ABCC0 - isa - PBXBuildFile + Release - F213CCB9CD13022BCF3B8578 + ED51F456809B09F7439C4D93 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.h + sourcecode.c.objc + name + RCTLocationObserver.m path - RCTTextManager.h + Modules/RCTLocationObserver.m sourceTree <group> - F5D2C09AFAA6986D234BF953 + EDA82AB2D40C974A74CA74A9 - buildConfigurationList - D43D7636AEF4C472723FF075 - buildPhases - - A9CA493A1D0DBFFAC416CF2B - EA7CC42518555EE2C4B617E3 - 03219EE301E4BE34C4E26BF5 - - buildRules - - dependencies - - 60662361B9CC9A2A8D49F638 - + includeInIndex + 1 isa - PBXNativeTarget + PBXFileReference + lastKnownFileType + sourcecode.c.objc name - Pods-RCTText - productName - Pods-RCTText - productReference - 39206929A27DEBF5CBACB942 - productType - com.apple.product-type.library.static - - F6129F258DCA7C19228C218D - - fileRef - 15478769A7025E67403CF8F6 - isa - PBXBuildFile + RCTNavItem.m + path + Views/RCTNavItem.m + sourceTree + <group> - F68991A42B4CF608AF91EBB5 + EFCED6D21D4BB89711E40665 fileRef - 54481109ECD4CD40F5F746F8 + 93C181AF29A9C408FC907C4A isa PBXBuildFile - F69EE0ADB66942B5A2F06409 + F16F4721492709A369BC5C8D fileRef - 16E1299D87C2B7BE1D68024F + 5650233E3ECB1C612AB3AA71 isa PBXBuildFile - F6CC16FA65BD5A265088B6B6 + F2A1CE5BD796846DBD308A95 includeInIndex 1 isa PBXFileReference lastKnownFileType - sourcecode.c.objc + text.xcconfig path - RCTNetworkImageView.m + Pods-RCTNetworkImage.xcconfig sourceTree <group> - F6F6566819F8D0B545E28AC4 + F55505C4FEE6D4B5BE545B36 + + buildActionMask + 2147483647 + files + + 5007E16F5C7E9EFC0185562F + 59C8D74DD9C98E16056D5366 + B5FC682792E6A0447D287697 + B3F415717620F1F12B992B0D + BE1D1748A0D0A88E8D9EBDC6 + FC94E17D52247017A950BB80 + 5199984D66E0D4825EAFDE48 + 8C09DDBC1987BC48B1173A6A + 2B409A074C5817E5B40428E2 + 6E025D879E9E4EA39894CCF7 + 5AAC51BC1BDDD9A9215CFBDD + E2D61EA3810F0B25C4443657 + B1CE62B16BA49B5F93E0F176 + 983AAB60C663D67F5EC651DF + 1537FF13D7133AA6F8B3A1C9 + 2B475CAFC274FB31E95E5491 + BA296894BFD973DE874868B8 + AACA8FE0E3EC2035615EC0AE + B03DD49B4D0684DD664FA620 + 5897E6B3789429F1760006A5 + 75728F9C40185E318ECF195B + 6058DA074939167562CECB0B + 8AC6957EC29778E18C201992 + 71EF39441EAF6D8A62C981C5 + 218485DF6D2557DEC0F8E74E + 07C36347F29DC7BB656AED2E + EFCED6D21D4BB89711E40665 + 19636039A13AE878699E8DBB + 1D5C721F04A0D2846039D9B7 + AF458FAFFB109206A76292E6 + 4D0FD9ED093EC8F8163C743A + A66BCD8A2FAA1E8DADD7488E + 53906C4FE2269E04A9CBA745 + 02CA42753891DE99F0C4A9F1 + C10CEF62C1009D05C2E0E7DF + 277413A21FD87DA13511099F + 38FFA89C70E4D1645D42E7ED + 45EB3392836956C146A52A0C + A29B3475CEBEAF74694048F7 + EC011298F3945A65BF256861 + E420F9974821AC873ADE0EB0 + F16F4721492709A369BC5C8D + 3BFAD0347A551F0536E421F4 + 936FD7023BD4626A2EBF07A2 + DD8E4C13EE69D6954938439C + 8DE4BE955C41F35E0DE7BF39 + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + F66B15C716DB00AB74903326 includeInIndex 1 @@ -3771,86 +3858,44 @@ PBXFileReference lastKnownFileType sourcecode.c.h - name - RCTTextField.h path - Views/RCTTextField.h + Pods-ReactKit-prefix.pch sourceTree <group> - F731109AFE06344ABBC4BBE6 + F70F1BFEF9D1587A38666EEB - includeInIndex - 1 + children + + 12507443D597BE1AFA5013A7 + B753A0617AB77E1E91027A34 + 82A7154EBF9864584C0B6647 + E352220A2836A697446EE5ED + isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc + PBXGroup name - RCTStaticImageManager.m + Support Files path - Views/RCTStaticImageManager.m + ../../Examples/TicTacToe/Pods/Target Support Files/Pods-RCTText sourceTree <group> - F7531B3CBFEDA85A72BF6805 - - fileRef - 054AB43B546728B2ACD9DE38 - isa - PBXBuildFile - - F9ECFBDEC272AF69A54935F9 - - fileRef - 3FDDE45F64AE789BEAED2125 - isa - PBXBuildFile - - FADF4B43BFFF2AEF6F4A43B8 - - fileRef - 9C1FE5B0BAC9A97A8309591C - isa - PBXBuildFile - - FAE203974E438996878047C2 - - fileRef - 8399DB76B770CB32FA2CD5FF - isa - PBXBuildFile - - FB19B6A03634D6CC16E8D731 + F8A30B6BAB9EB9CAE3F5EE83 fileRef - E9A7A3D5EC8AAF878D6A2CBE + 6B92A10C94541BEEFE730577 isa PBXBuildFile - FBE4E83A8EF948FF337B2436 + F8F9FC945C529FDD56EE046E fileRef - 5D5E4CDC94FE8212303F96ED + 79237C45AFA01938E517AD06 isa PBXBuildFile - FCAC9AFE3E61C78E93EA7E8C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RCTTextField.m - path - Views/RCTTextField.m - sourceTree - <group> - - FDBD9515B1715137A4E1AD37 + F9EB9D707F5B2AD7C1E442EF includeInIndex 1 @@ -3858,27 +3903,21 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + RCTViewNodeProtocol.h path - Pods-ReactKit-prefix.pch + Base/RCTViewNodeProtocol.h sourceTree <group> - FE1E926B5C3C10CA3797023E + FA29A9F03B11C2074DC5216D - children - - AB98ECCECFE588B641E804DD - 9C8A29CEE6A594FF4F429DB3 - E00F5EA71F725792D7FE1C0F - + fileRef + DCD06DFADE2DF0CA7278AB88 isa - PBXGroup - name - Development Pods - sourceTree - <group> + PBXBuildFile - FF03E617D571F159152581FC + FBC74FE67BCC52FD85C1BAD0 includeInIndex 1 @@ -3886,13 +3925,22 @@ PBXFileReference lastKnownFileType sourcecode.c.h + name + RCTRootView.h path - RCTShadowText.h + Base/RCTRootView.h sourceTree <group> + FC94E17D52247017A950BB80 + + fileRef + 688A6AE7AC080B377719B148 + isa + PBXBuildFile + rootObject - E88354D347CCC1EAC2E787C1 + A30671B7FF41C9CC88DDC48D diff --git a/Examples/UIExplorer/GeoLocationExample.js b/Examples/UIExplorer/GeoLocationExample.js new file mode 100644 index 00000000000000..1ab5f290c1f1ae --- /dev/null +++ b/Examples/UIExplorer/GeoLocationExample.js @@ -0,0 +1,72 @@ +/** + * Copyright 2004-present Facebook. All Rights Reserved. + * + * @providesModule GeoLocationExample + */ +/* eslint no-console: 0 */ +'use strict'; + + +var React = require('react-native'); +var { + StyleSheet, + Text, + View, +} = React; + +exports.framework = 'React'; +exports.title = 'GeoLocation'; +exports.description = 'Examples of using the GeoLocation API.'; + +exports.examples = [ + { + title: 'navigator.geolocation', + render: function() { + return ; + }, + } +]; + +var GeoLocationExample = React.createClass({ + getInitialState: function() { + return { + initialPosition: 'unknown', + lastPosition: 'unknown', + }; + }, + + componentDidMount: function() { + navigator.geolocation.getCurrentPosition( + (initialPosition) => this.setState({initialPosition}), + (error) => console.error(error) + ); + this.watchID = navigator.geolocation.watchPosition((lastPosition) => { + this.setState({lastPosition}); + }); + }, + + componentWillUnmount: function() { + navigator.geolocation.clearWatch(this.watchID); + }, + + render: function() { + return ( + + + Initial position: + {JSON.stringify(this.state.initialPosition)} + + + Current position: + {JSON.stringify(this.state.lastPosition)} + + + ); + } +}); + +var styles = StyleSheet.create({ + title: { + fontWeight: 'bold', + }, +}); diff --git a/Examples/UIExplorer/Info.plist b/Examples/UIExplorer/Info.plist index 9a7ca7e3cc93ad..245054621e525e 100644 --- a/Examples/UIExplorer/Info.plist +++ b/Examples/UIExplorer/Info.plist @@ -34,6 +34,8 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + NSLocationWhenInUseUsageDescription + You need to add NSLocationWhenInUseUsageDescription key in Info.plist to enable geolocation, otherwise it is going to *fail silently*! UIViewControllerBasedStatusBarAppearance diff --git a/Examples/UIExplorer/UIExplorer.xcodeproj/project.pbxproj b/Examples/UIExplorer/UIExplorer.xcodeproj/project.pbxproj index 798c95a21360c2..493310f0cb7cdf 100644 --- a/Examples/UIExplorer/UIExplorer.xcodeproj/project.pbxproj +++ b/Examples/UIExplorer/UIExplorer.xcodeproj/project.pbxproj @@ -7,46 +7,46 @@ objects = { /* Begin PBXBuildFile section */ + 1316A21A1AA397CA00C0188E /* libRCTNetworkImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1316A2101AA3871A00C0188E /* libRCTNetworkImage.a */; }; + 1316A21B1AA397CA00C0188E /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1316A2081AA386C700C0188E /* libRCTText.a */; }; + 1316A21C1AA397CA00C0188E /* libReactKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1316A2171AA3875D00C0188E /* libReactKit.a */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 587651361A9EB175008B8F17 /* libRCTNetworkImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 587651281A9EB168008B8F17 /* libRCTNetworkImage.a */; }; - 587651371A9EB175008B8F17 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 587651301A9EB168008B8F17 /* libRCTText.a */; }; - 587651381A9EB175008B8F17 /* libReactKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 587651351A9EB168008B8F17 /* libReactKit.a */; }; 587651571A9F862F008B8F17 /* libRCTDataManager.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5876514F1A9F8619008B8F17 /* libRCTDataManager.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 587651271A9EB168008B8F17 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5876511C1A9EB168008B8F17 /* RCTNetworkImage.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 58B5115D1A9E6B3D00147676; - remoteInfo = RCTNetworkImage; - }; - 587651291A9EB168008B8F17 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5876511C1A9EB168008B8F17 /* RCTNetworkImage.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 58B511681A9E6B3D00147676; - remoteInfo = RCTNetworkImageTests; - }; - 5876512F1A9EB168008B8F17 /* PBXContainerItemProxy */ = { + 1316A2071AA386C700C0188E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 5876511F1A9EB168008B8F17 /* RCTText.xcodeproj */; proxyType = 2; remoteGlobalIDString = 58B5119B1A9E6C1200147676; remoteInfo = RCTText; }; - 587651311A9EB168008B8F17 /* PBXContainerItemProxy */ = { + 1316A2091AA386C700C0188E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 5876511F1A9EB168008B8F17 /* RCTText.xcodeproj */; proxyType = 2; remoteGlobalIDString = 58B511A61A9E6C1300147676; remoteInfo = RCTTextTests; }; - 587651341A9EB168008B8F17 /* PBXContainerItemProxy */ = { + 1316A20F1AA3871A00C0188E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5876511C1A9EB168008B8F17 /* RCTNetworkImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B5115D1A9E6B3D00147676; + remoteInfo = RCTNetworkImage; + }; + 1316A2111AA3871A00C0188E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5876511C1A9EB168008B8F17 /* RCTNetworkImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B511681A9E6B3D00147676; + remoteInfo = RCTNetworkImageTests; + }; + 1316A2161AA3875D00C0188E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 587651221A9EB168008B8F17 /* ReactKit.xcodeproj */; proxyType = 2; @@ -77,9 +77,9 @@ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 5876511C1A9EB168008B8F17 /* RCTNetworkImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetworkImage.xcodeproj; path = "/Users/sahrens/src/fbobjc-hg/Libraries/FBReactKit/js/react-native-github/Libraries/RCTStandardLibrary/../Image/RCTNetworkImage.xcodeproj"; sourceTree = ""; }; - 5876511F1A9EB168008B8F17 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "/Users/sahrens/src/fbobjc-hg/Libraries/FBReactKit/js/react-native-github/Libraries/RCTStandardLibrary/../Text/RCTText.xcodeproj"; sourceTree = ""; }; - 587651221A9EB168008B8F17 /* ReactKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ReactKit.xcodeproj; path = "/Users/sahrens/src/fbobjc-hg/Libraries/FBReactKit/js/react-native-github/Libraries/RCTStandardLibrary/../../ReactKit/ReactKit.xcodeproj"; sourceTree = ""; }; + 5876511C1A9EB168008B8F17 /* RCTNetworkImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetworkImage.xcodeproj; path = ../../Libraries/Image/RCTNetworkImage.xcodeproj; sourceTree = SOURCE_ROOT; }; + 5876511F1A9EB168008B8F17 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = ../../Libraries/Text/RCTText.xcodeproj; sourceTree = SOURCE_ROOT; }; + 587651221A9EB168008B8F17 /* ReactKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ReactKit.xcodeproj; path = ../../ReactKit/ReactKit.xcodeproj; sourceTree = SOURCE_ROOT; }; 587651491A9F8619008B8F17 /* RCTDataManager.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTDataManager.xcodeproj; path = ../../Libraries/Network/RCTDataManager.xcodeproj; sourceTree = ""; }; /* End PBXFileReference section */ @@ -88,53 +88,64 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 1316A21A1AA397CA00C0188E /* libRCTNetworkImage.a in Frameworks */, + 1316A21B1AA397CA00C0188E /* libRCTText.a in Frameworks */, + 1316A21C1AA397CA00C0188E /* libReactKit.a in Frameworks */, 587651571A9F862F008B8F17 /* libRCTDataManager.a in Frameworks */, - 587651361A9EB175008B8F17 /* libRCTNetworkImage.a in Frameworks */, - 587651371A9EB175008B8F17 /* libRCTText.a in Frameworks */, - 587651381A9EB175008B8F17 /* libReactKit.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 13B07FAE1A68108700A75B9A /* UIExplorer */ = { + 1316A2031AA386C700C0188E /* Products */ = { isa = PBXGroup; children = ( - 13B07FAF1A68108700A75B9A /* AppDelegate.h */, - 13B07FB01A68108700A75B9A /* AppDelegate.m */, - 13B07FB51A68108700A75B9A /* Images.xcassets */, - 13B07FB61A68108700A75B9A /* Info.plist */, - 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, - 13B07FB71A68108700A75B9A /* main.m */, + 1316A2081AA386C700C0188E /* libRCTText.a */, + 1316A20A1AA386C700C0188E /* RCTTextTests.xctest */, ); - name = UIExplorer; + name = Products; sourceTree = ""; }; - 5876511D1A9EB168008B8F17 /* Products */ = { + 1316A20B1AA3871A00C0188E /* Products */ = { isa = PBXGroup; children = ( - 587651281A9EB168008B8F17 /* libRCTNetworkImage.a */, - 5876512A1A9EB168008B8F17 /* RCTNetworkImageTests.xctest */, + 1316A2101AA3871A00C0188E /* libRCTNetworkImage.a */, + 1316A2121AA3871A00C0188E /* RCTNetworkImageTests.xctest */, ); name = Products; sourceTree = ""; }; - 587651201A9EB168008B8F17 /* Products */ = { + 1316A2131AA3875D00C0188E /* Products */ = { isa = PBXGroup; children = ( - 587651301A9EB168008B8F17 /* libRCTText.a */, - 587651321A9EB168008B8F17 /* RCTTextTests.xctest */, + 1316A2171AA3875D00C0188E /* libReactKit.a */, ); name = Products; sourceTree = ""; }; - 587651231A9EB168008B8F17 /* Products */ = { + 1316A21D1AA397F400C0188E /* Libraries */ = { isa = PBXGroup; children = ( - 587651351A9EB168008B8F17 /* libReactKit.a */, + 587651221A9EB168008B8F17 /* ReactKit.xcodeproj */, + 587651491A9F8619008B8F17 /* RCTDataManager.xcodeproj */, + 5876511C1A9EB168008B8F17 /* RCTNetworkImage.xcodeproj */, + 5876511F1A9EB168008B8F17 /* RCTText.xcodeproj */, ); - name = Products; + name = Libraries; + sourceTree = ""; + }; + 13B07FAE1A68108700A75B9A /* UIExplorer */ = { + isa = PBXGroup; + children = ( + 13B07FAF1A68108700A75B9A /* AppDelegate.h */, + 13B07FB01A68108700A75B9A /* AppDelegate.m */, + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, + 13B07FB71A68108700A75B9A /* main.m */, + ); + name = UIExplorer; sourceTree = ""; }; 5876514A1A9F8619008B8F17 /* Products */ = { @@ -150,10 +161,7 @@ isa = PBXGroup; children = ( 13B07FAE1A68108700A75B9A /* UIExplorer */, - 587651491A9F8619008B8F17 /* RCTDataManager.xcodeproj */, - 5876511C1A9EB168008B8F17 /* RCTNetworkImage.xcodeproj */, - 5876511F1A9EB168008B8F17 /* RCTText.xcodeproj */, - 587651221A9EB168008B8F17 /* ReactKit.xcodeproj */, + 1316A21D1AA397F400C0188E /* Libraries */, 83CBBA001A601CBA00E9B192 /* Products */, ); sourceTree = ""; @@ -212,15 +220,15 @@ ProjectRef = 587651491A9F8619008B8F17 /* RCTDataManager.xcodeproj */; }, { - ProductGroup = 5876511D1A9EB168008B8F17 /* Products */; + ProductGroup = 1316A20B1AA3871A00C0188E /* Products */; ProjectRef = 5876511C1A9EB168008B8F17 /* RCTNetworkImage.xcodeproj */; }, { - ProductGroup = 587651201A9EB168008B8F17 /* Products */; + ProductGroup = 1316A2031AA386C700C0188E /* Products */; ProjectRef = 5876511F1A9EB168008B8F17 /* RCTText.xcodeproj */; }, { - ProductGroup = 587651231A9EB168008B8F17 /* Products */; + ProductGroup = 1316A2131AA3875D00C0188E /* Products */; ProjectRef = 587651221A9EB168008B8F17 /* ReactKit.xcodeproj */; }, ); @@ -232,39 +240,39 @@ /* End PBXProject section */ /* Begin PBXReferenceProxy section */ - 587651281A9EB168008B8F17 /* libRCTNetworkImage.a */ = { + 1316A2081AA386C700C0188E /* libRCTText.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; - path = libRCTNetworkImage.a; - remoteRef = 587651271A9EB168008B8F17 /* PBXContainerItemProxy */; + path = libRCTText.a; + remoteRef = 1316A2071AA386C700C0188E /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 5876512A1A9EB168008B8F17 /* RCTNetworkImageTests.xctest */ = { + 1316A20A1AA386C700C0188E /* RCTTextTests.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = RCTNetworkImageTests.xctest; - remoteRef = 587651291A9EB168008B8F17 /* PBXContainerItemProxy */; + path = RCTTextTests.xctest; + remoteRef = 1316A2091AA386C700C0188E /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 587651301A9EB168008B8F17 /* libRCTText.a */ = { + 1316A2101AA3871A00C0188E /* libRCTNetworkImage.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; - path = libRCTText.a; - remoteRef = 5876512F1A9EB168008B8F17 /* PBXContainerItemProxy */; + path = libRCTNetworkImage.a; + remoteRef = 1316A20F1AA3871A00C0188E /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 587651321A9EB168008B8F17 /* RCTTextTests.xctest */ = { + 1316A2121AA3871A00C0188E /* RCTNetworkImageTests.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; - path = RCTTextTests.xctest; - remoteRef = 587651311A9EB168008B8F17 /* PBXContainerItemProxy */; + path = RCTNetworkImageTests.xctest; + remoteRef = 1316A2111AA3871A00C0188E /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 587651351A9EB168008B8F17 /* libReactKit.a */ = { + 1316A2171AA3875D00C0188E /* libReactKit.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; path = libReactKit.a; - remoteRef = 587651341A9EB168008B8F17 /* PBXContainerItemProxy */; + remoteRef = 1316A2161AA3875D00C0188E /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; 5876514F1A9F8619008B8F17 /* libRCTDataManager.a */ = { diff --git a/Examples/UIExplorer/UIExplorerList.js b/Examples/UIExplorer/UIExplorerList.js index 56734c70fa7666..f6d55db36726e8 100644 --- a/Examples/UIExplorer/UIExplorerList.js +++ b/Examples/UIExplorer/UIExplorerList.js @@ -31,6 +31,7 @@ var EXAMPLES = [ require('./TouchableExample'), require('./ActivityIndicatorExample'), require('./ScrollViewExample'), + require('./GeoLocationExample'), ]; var UIExplorerList = React.createClass({ diff --git a/Libraries/Components/Navigation/NavigatorIOS.ios.js b/Libraries/Components/Navigation/NavigatorIOS.ios.js index efd983203cf431..527b10bd2c24b3 100644 --- a/Libraries/Components/Navigation/NavigatorIOS.ios.js +++ b/Libraries/Components/Navigation/NavigatorIOS.ios.js @@ -8,7 +8,7 @@ var EventEmitter = require('EventEmitter'); var React = require('React'); var ReactIOSViewAttributes = require('ReactIOSViewAttributes'); -var { RKUIManager } = require('NativeModules'); +var { RKNavigatorManager } = require('NativeModules'); var StyleSheet = require('StyleSheet'); var StaticContainer = require('StaticContainer.react'); var View = require('View'); @@ -127,7 +127,7 @@ var RKNavigatorItem = createReactIOSNativeComponentClass({ var NavigatorTransitionerIOS = React.createClass({ requestSchedulingNavigation: function(cb) { - RKUIManager.requestSchedulingJavaScriptNavigation( + RKNavigatorManager.requestSchedulingJavaScriptNavigation( this.getNodeHandle(), logError, cb diff --git a/Libraries/Components/TextInput/TextInput.ios.js b/Libraries/Components/TextInput/TextInput.ios.js index fef9c16f01b80a..e5980de391f54d 100644 --- a/Libraries/Components/TextInput/TextInput.ios.js +++ b/Libraries/Components/TextInput/TextInput.ios.js @@ -5,7 +5,6 @@ */ 'use strict'; -var DocumentSelectionState = require('DocumentSelectionState'); var EventEmitter = require('EventEmitter'); var NativeMethodsMixin = require('NativeMethodsMixin'); var NativeModulesDeprecated = require('NativeModulesDeprecated'); @@ -181,7 +180,7 @@ var TextInput = React.createClass({ * See DocumentSelectionState.js, some state that is responsible for * maintaining selection information for a document */ - selectionState: PropTypes.instanceOf(DocumentSelectionState), +// selectionState: PropTypes.instanceOf(DocumentSelectionState), /** * The default value for the text input */ diff --git a/Libraries/Components/Touchable/TouchableWithoutFeedback.js b/Libraries/Components/Touchable/TouchableWithoutFeedback.js index 74fbf43a1e1e24..ebabdd9cc92a2d 100644 --- a/Libraries/Components/Touchable/TouchableWithoutFeedback.js +++ b/Libraries/Components/Touchable/TouchableWithoutFeedback.js @@ -9,7 +9,6 @@ var React = require('React'); var Touchable = require('Touchable'); var TouchableFeedbackPropType = require('TouchableFeedbackPropType'); -var copyProperties = require('copyProperties'); var onlyChild = require('onlyChild'); /** @@ -66,7 +65,7 @@ var TouchableWithoutFeedback = React.createClass({ render: function() { // Note(vjeux): use cloneWithProps once React has been upgraded var child = onlyChild(this.props.children); - copyProperties(child.props, { + Object.assign(child.props, { accessible: true, testID: this.props.testID, onStartShouldSetResponder: this.touchableHandleStartShouldSetResponder, diff --git a/Libraries/GeoLocation/GeoLocation.js b/Libraries/GeoLocation/GeoLocation.js new file mode 100644 index 00000000000000..9a7f792c462fa2 --- /dev/null +++ b/Libraries/GeoLocation/GeoLocation.js @@ -0,0 +1,98 @@ +/** + * Copyright 2004-present Facebook. All Rights Reserved. + * + * @providesModule GeoLocation + */ +'use strict'; + +var RCTDeviceEventEmitter = require('RCTDeviceEventEmitter'); +var RCTLocationObserver = require('NativeModules').RKLocationObserver; + +var invariant = require('invariant'); +var logError = require('logError'); +var warning = require('warning'); + +var subscriptions = []; + +var updatesEnabled = false; + +var ensureObserving = function() { + if (!updatesEnabled) { + RCTLocationObserver.startObserving(); + updatesEnabled = true; + } +}; + +/** + * /!\ ATTENTION /!\ + * You need to add NSLocationWhenInUseUsageDescription key + * in Info.plist to enable geolocation, otherwise it's going + * to *fail silently*! + * \!/ \!/ + * + * GeoLocation follows the MDN specification: + * https://developer.mozilla.org/en-US/docs/Web/API/Geolocation + */ +class GeoLocation { + static getCurrentPosition(geo_success, geo_error, geo_options) { + invariant( + typeof geo_success === 'function', + 'Must provide a valid geo_success callback.' + ); + if (geo_options) { + warning('geo_options are not yet supported.'); + } + ensureObserving(); + RCTLocationObserver.getCurrentPosition( + geo_success, + geo_error || logError + ); + } + static watchPosition(callback) { + ensureObserving(); + var watchID = subscriptions.length; + subscriptions.push( + RCTDeviceEventEmitter.addListener( + 'geoLocationDidChange', + callback + ) + ); + return watchID; + } + static clearWatch(watchID) { + var sub = subscriptions[watchID]; + if (!sub) { + // Silently exit when the watchID is invalid or already cleared + // This is consistent with timers + return; + } + sub.remove(); + subscriptions[watchID] = undefined; + var noWatchers = true; + for (var ii = 0; ii < subscriptions.length; ii++) { + if (subscriptions[ii]) { + noWatchers = false; // still valid subscriptions + } + } + if (noWatchers) { + GeoLocation.stopObserving(); + } + } + static stopObserving() { + if (updatesEnabled) { + RCTLocationObserver.stopObserving(); + updatesEnabled = false; + for (var ii = 0; ii < subscriptions.length; ii++) { + if (subscriptions[ii]) { + warning('Called stopObserving with existing subscriptions.'); + subscriptions[ii].remove(); + } + } + subscriptions = []; + } else { + warning('Tried to stop observing when not observing.'); + } + } +} + +module.exports = GeoLocation; diff --git a/Libraries/Image/RCTNetworkImageView.h b/Libraries/Image/RCTNetworkImageView.h index c99ed0689aed78..920bf705c5f50d 100644 --- a/Libraries/Image/RCTNetworkImageView.h +++ b/Libraries/Image/RCTNetworkImageView.h @@ -6,7 +6,8 @@ @interface RCTNetworkImageView : UIView -- (instancetype)initWithFrame:(CGRect)frame imageDownloader:(RCTImageDownloader *)imageDownloader; +- (instancetype)initWithFrame:(CGRect)frame + imageDownloader:(RCTImageDownloader *)imageDownloader NS_DESIGNATED_INITIALIZER; /** * An image that will appear while the view is loading the image from the network, diff --git a/Libraries/Image/RCTNetworkImageView.m b/Libraries/Image/RCTNetworkImageView.m index c0c6443cb26d18..027fbf5005f63b 100644 --- a/Libraries/Image/RCTNetworkImageView.m +++ b/Libraries/Image/RCTNetworkImageView.m @@ -27,11 +27,6 @@ - (instancetype)initWithFrame:(CGRect)frame imageDownloader:(RCTImageDownloader return self; } -- (instancetype)initWithFrame:(CGRect)frame -{ - RCT_NOT_DESIGNATED_INITIALIZER(); -} - - (NSURL *)imageURL { // We clear our backing layer's imageURL when we are not in a window for a while, diff --git a/Libraries/JavaScriptAppEngine/Initialization/InitializeJavaScriptAppEngine.js b/Libraries/JavaScriptAppEngine/Initialization/InitializeJavaScriptAppEngine.js index b529460ee81b09..883a85e03b8c2a 100644 --- a/Libraries/JavaScriptAppEngine/Initialization/InitializeJavaScriptAppEngine.js +++ b/Libraries/JavaScriptAppEngine/Initialization/InitializeJavaScriptAppEngine.js @@ -139,9 +139,15 @@ function setupXHR() { GLOBAL.fetch = require('fetch'); } +function setupGeolocation() { + GLOBAL.navigator = GLOBAL.navigator || {}; + GLOBAL.navigator.geolocation = require('GeoLocation'); +} + setupRedBoxErrorHandler(); setupDocumentShim(); setupTimers(); setupAlert(); setupPromise(); setupXHR(); +setupGeolocation(); diff --git a/Libraries/Network/RCTDataManager.m b/Libraries/Network/RCTDataManager.m index 22872fa910b1f4..4ffe5f975a7e20 100644 --- a/Libraries/Network/RCTDataManager.m +++ b/Libraries/Network/RCTDataManager.m @@ -65,8 +65,7 @@ - (void)executeQuery:(NSString *)queryType } else { - RCTLogMustFix(@"unsupported query type %@", queryType); - return; + RCTLogError(@"unsupported query type %@", queryType); } } diff --git a/Libraries/Network/RCTDataManager.xcodeproj/project.pbxproj b/Libraries/Network/RCTDataManager.xcodeproj/project.pbxproj index b7cfed2a20edf6..328a3d60c0d32c 100644 --- a/Libraries/Network/RCTDataManager.xcodeproj/project.pbxproj +++ b/Libraries/Network/RCTDataManager.xcodeproj/project.pbxproj @@ -269,6 +269,10 @@ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, "$(SRCROOT)/../../ReactKit/**", ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "/Users/nicklockwood/fbobjc-hg/Libraries/FBReactKit/js/react-native-github/ReactKit/build/Debug-iphoneos", + ); OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -283,6 +287,10 @@ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, "$(SRCROOT)/../../ReactKit/**", ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "/Users/nicklockwood/fbobjc-hg/Libraries/FBReactKit/js/react-native-github/ReactKit/build/Debug-iphoneos", + ); OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; diff --git a/Libraries/Text/RCTTextManager.m b/Libraries/Text/RCTTextManager.m index fe1ca6820283d4..ffe0d8b1e30240 100644 --- a/Libraries/Text/RCTTextManager.m +++ b/Libraries/Text/RCTTextManager.m @@ -24,17 +24,7 @@ - (RCTShadowView *)shadowView } RCT_REMAP_VIEW_PROPERTY(containerBackgroundColor, backgroundColor) - -- (void)set_textAlign:(id)json - forShadowView:(RCTShadowText *)shadowView - withDefaultView:(RCTShadowText *)defaultView -{ - shadowView.textAlign = json ? [RCTConvert NSTextAlignment:json] : defaultView.textAlign; -} - -- (void)set_numberOfLines:(id)json - forView:(RCTText *)view - withDefaultView:(RCTText *)defaultView +RCT_CUSTOM_VIEW_PROPERTY(numberOfLines, RCTText *) { NSLineBreakMode truncationMode = NSLineBreakByClipping; view.numberOfLines = json ? [RCTConvert NSInteger:json] : defaultView.numberOfLines; @@ -44,31 +34,33 @@ - (void)set_numberOfLines:(id)json view.lineBreakMode = truncationMode; } -- (void)set_numberOfLines:(id)json - forShadowView:(RCTShadowText *)shadowView - withDefaultView:(RCTShadowText *)defaultView +RCT_CUSTOM_SHADOW_PROPERTY(backgroundColor, RCTShadowText *) +{ + view.textBackgroundColor = json ? [RCTConvert UIColor:json] : defaultView.textBackgroundColor; +} +RCT_CUSTOM_SHADOW_PROPERTY(containerBackgroundColor, RCTShadowText *) +{ + view.backgroundColor = json ? [RCTConvert UIColor:json] : defaultView.backgroundColor; + view.isBGColorExplicitlySet = json ? YES : defaultView.isBGColorExplicitlySet; +} +RCT_CUSTOM_SHADOW_PROPERTY(numberOfLines, RCTShadowText *) { NSLineBreakMode truncationMode = NSLineBreakByClipping; - shadowView.maxNumberOfLines = json ? [RCTConvert NSInteger:json] : defaultView.maxNumberOfLines; - if (shadowView.maxNumberOfLines > 0) { + view.maxNumberOfLines = json ? [RCTConvert NSInteger:json] : defaultView.maxNumberOfLines; + if (view.maxNumberOfLines > 0) { truncationMode = NSLineBreakByTruncatingTail; } - shadowView.truncationMode = truncationMode; + view.truncationMode = truncationMode; } - -- (void)set_backgroundColor:(id)json - forShadowView:(RCTShadowText *)shadowView - withDefaultView:(RCTShadowText *)defaultView +RCT_CUSTOM_SHADOW_PROPERTY(textAlign, RCTShadowText *) { - shadowView.textBackgroundColor = json ? [RCTConvert UIColor:json] : defaultView.textBackgroundColor; + view.textAlign = json ? [RCTConvert NSTextAlignment:json] : defaultView.textAlign; } -- (void)set_containerBackgroundColor:(id)json - forShadowView:(RCTShadowText *)shadowView - withDefaultView:(RCTShadowText *)defaultView +- (RCTViewManagerUIBlock)uiBlockToAmendWithShadowView:(RCTShadowText *)shadowView { - shadowView.backgroundColor = json ? [RCTConvert UIColor:json] : defaultView.backgroundColor; - shadowView.isBGColorExplicitlySet = json ? YES : defaultView.isBGColorExplicitlySet; + //TODO: This could be a cleaner replacement for uiBlockToAmendWithShadowViewRegistry + return nil; } // TODO: the purpose of this block is effectively just to copy properties from the shadow views diff --git a/Libraries/Utilities/Dimensions.js b/Libraries/Utilities/Dimensions.js index 81621fd61ffa34..97e8d2d017dfd2 100644 --- a/Libraries/Utilities/Dimensions.js +++ b/Libraries/Utilities/Dimensions.js @@ -8,7 +8,6 @@ var NativeModules = require('NativeModules'); var invariant = require('invariant'); -var mergeInto = require('mergeInto'); var dimensions = NativeModules.RKUIManager.Dimensions; @@ -19,7 +18,7 @@ class Dimensions { * @param {object} dims Simple string-keyed object of dimensions to set */ static set(dims) { - mergeInto(dimensions, dims); + Object.assign(dimensions, dims); return true; } diff --git a/Libraries/vendor/core/merge.js b/Libraries/vendor/core/merge.js new file mode 100644 index 00000000000000..800c08c1be263a --- /dev/null +++ b/Libraries/vendor/core/merge.js @@ -0,0 +1,50 @@ +/** + * @generated SignedSource<<0e3063b19e14ed191102b1dffe45551f>> + * + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * !! This file is a check-in of a static_upstream project! !! + * !! !! + * !! You should not modify this file directly. Instead: !! + * !! 1) Use `fjs use-upstream` to temporarily replace this with !! + * !! the latest version from upstream. !! + * !! 2) Make your changes, test them, etc. !! + * !! 3) Use `fjs push-upstream` to copy your changes back to !! + * !! static_upstream. !! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * + * Copyright 2013-2014 Facebook, Inc. + * + * Licensed 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. + * + * @providesModule merge + */ + +"use strict"; + +var mergeInto = require('mergeInto'); + +/** + * Shallow merges two structures into a return value, without mutating either. + * + * @param {?object} one Optional object with properties to merge from. + * @param {?object} two Optional object with properties to merge from. + * @return {object} The shallow extension of one by two. + */ +var merge = function(one, two) { + var result = {}; + mergeInto(result, one); + mergeInto(result, two); + return result; +}; + +module.exports = merge; diff --git a/Libraries/vendor/core/mergeInto.js b/Libraries/vendor/core/mergeInto.js new file mode 100644 index 00000000000000..0da86a50cdb419 --- /dev/null +++ b/Libraries/vendor/core/mergeInto.js @@ -0,0 +1,59 @@ +/** + * @generated SignedSource<> + * + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * !! This file is a check-in of a static_upstream project! !! + * !! !! + * !! You should not modify this file directly. Instead: !! + * !! 1) Use `fjs use-upstream` to temporarily replace this with !! + * !! the latest version from upstream. !! + * !! 2) Make your changes, test them, etc. !! + * !! 3) Use `fjs push-upstream` to copy your changes back to !! + * !! static_upstream. !! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * + * Copyright 2013-2014 Facebook, Inc. + * + * Licensed 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. + * + * @providesModule mergeInto + * @typechecks static-only + */ + +"use strict"; + +var mergeHelpers = require('mergeHelpers'); + +var checkMergeObjectArg = mergeHelpers.checkMergeObjectArg; +var checkMergeIntoObjectArg = mergeHelpers.checkMergeIntoObjectArg; + +/** + * Shallow merges two structures by mutating the first parameter. + * + * @param {object|function} one Object to be merged into. + * @param {?object} two Optional object with properties to merge from. + */ +function mergeInto(one, two) { + checkMergeIntoObjectArg(one); + if (two != null) { + checkMergeObjectArg(two); + for (var key in two) { + if (!two.hasOwnProperty(key)) { + continue; + } + one[key] = two[key]; + } + } +} + +module.exports = mergeInto; diff --git a/ReactKit/Base/RCTBridge.h b/ReactKit/Base/RCTBridge.h index 9a890a07acf50c..4dcaee8e2381c3 100644 --- a/ReactKit/Base/RCTBridge.h +++ b/ReactKit/Base/RCTBridge.h @@ -6,32 +6,16 @@ @class RCTBridge; @class RCTEventDispatcher; -@class RCTRootView; - -/** - * Utilities for constructing common response objects. When sending a - * systemError back to JS, it's important to describe whether or not it was a - * system error, or API usage error. System errors should never happen and are - * therefore logged using `RCTLogError()`. API usage errors are expected if the - * API is misused and will therefore not be logged using `RCTLogError()`. The JS - * application code is expected to handle them. Regardless of type, each error - * should be logged at most once. - */ -static inline NSDictionary *RCTSystemErrorObject(NSString *msg) -{ - return @{@"systemError": msg ?: @""}; -} - -static inline NSDictionary *RCTAPIErrorObject(NSString *msg) -{ - return @{@"apiError": msg ?: @""}; -} /** * This block can be used to instantiate modules that require additional * init parameters, or additional configuration prior to being used. + * The bridge will call this block to instatiate the modules, and will + * be responsible for invalidating/releasing them when the bridge is destroyed. + * For this reason, the block should always return new module instances, and + * module instances should not be shared between bridges. */ -typedef NSArray *(^RCTBridgeModuleProviderBlock)(RCTBridge *bridge); +typedef NSArray *(^RCTBridgeModuleProviderBlock)(void); /** * Async batched bridge used to communicate with the JavaScript application. @@ -42,12 +26,12 @@ typedef NSArray *(^RCTBridgeModuleProviderBlock)(RCTBridge *bridge); * The designated initializer. This creates a new bridge on top of the specified * executor. The bridge should then be used for all subsequent communication * with the JavaScript code running in the executor. Modules will be automatically - * instantiated using the default contructor, but you can optionally pass in a - * module provider block to manually instantiate modules that require additional - * init parameters or configuration. + * instantiated using the default contructor, but you can optionally pass in an + * array of pre-initialized module instances if they require additional init + * parameters or configuration. */ -- (instancetype)initWithJavaScriptExecutor:(id)javaScriptExecutor - moduleProvider:(RCTBridgeModuleProviderBlock)block NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithExecutor:(id)executor + moduleProvider:(RCTBridgeModuleProviderBlock)block NS_DESIGNATED_INITIALIZER; /** * This method is used to call functions in the JavaScript application context. @@ -81,16 +65,6 @@ typedef NSArray *(^RCTBridgeModuleProviderBlock)(RCTBridge *bridge); */ @property (nonatomic, readonly) dispatch_queue_t shadowQueue; -// For use in implementing delegates, which may need to queue responses. -- (RCTResponseSenderBlock)createResponseSenderBlock:(NSInteger)callbackID; - -/** - * Register a root view with the bridge. Theorectically, a single bridge can - * support multiple root views, however this feature is not currently exposed - * and may eventually be removed. - */ -- (void)registerRootView:(RCTRootView *)rootView; - /** * Global logging function that will print to both xcode and JS debugger consoles. * diff --git a/ReactKit/Base/RCTBridge.m b/ReactKit/Base/RCTBridge.m index 97a5dc12e145f9..5173bc5d23d2e1 100644 --- a/ReactKit/Base/RCTBridge.m +++ b/ReactKit/Base/RCTBridge.m @@ -3,11 +3,12 @@ #import "RCTBridge.h" #import -#import -#import #import #import +#import +#import + #import "RCTConvert.h" #import "RCTEventDispatcher.h" #import "RCTLog.h" @@ -26,60 +27,6 @@ typedef NS_ENUM(NSUInteger, RCTBridgeFields) { RCTBridgeFieldFlushDateMillis }; -/** - * This private class is used as a container for exported method info - */ -@interface RCTModuleMethod : NSObject - -@property (readonly, nonatomic, assign) SEL selector; -@property (readonly, nonatomic, copy) NSString *JSMethodName; -@property (readonly, nonatomic, assign) NSUInteger arity; -@property (readonly, nonatomic, copy) NSIndexSet *blockArgumentIndexes; - -@end - -@implementation RCTModuleMethod - -- (instancetype)initWithSelector:(SEL)selector - JSMethodName:(NSString *)JSMethodName - arity:(NSUInteger)arity - blockArgumentIndexes:(NSIndexSet *)blockArgumentIndexes -{ - if ((self = [super init])) { - _selector = selector; - _JSMethodName = [JSMethodName copy]; - _arity = arity; - _blockArgumentIndexes = [blockArgumentIndexes copy]; - } - return self; -} - -- (NSString *)description -{ - NSString *blocks = @"no block args"; - if (self.blockArgumentIndexes.count > 0) { - NSMutableString *indexString = [NSMutableString string]; - [self.blockArgumentIndexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { - [indexString appendFormat:@", %tu", idx]; - }]; - blocks = [NSString stringWithFormat:@"block args at %@", [indexString substringFromIndex:2]]; - } - - return [NSString stringWithFormat:@"<%@: %p; exports -%@ as %@; %@>", NSStringFromClass(self.class), self, NSStringFromSelector(self.selector), self.JSMethodName, blocks]; -} - -@end - -#ifdef __LP64__ -typedef uint64_t RCTExportValue; -typedef struct section_64 RCTExportSection; -#define RCTGetSectByNameFromHeader getsectbynamefromheader_64 -#else -typedef uint32_t RCTExportValue; -typedef struct section RCTExportSection; -#define RCTGetSectByNameFromHeader getsectbynamefromheader -#endif - /** * This function returns the module name for a given class. */ @@ -88,18 +35,6 @@ - (NSString *)description return [cls respondsToSelector:@selector(moduleName)] ? [cls moduleName] : NSStringFromClass(cls); } -/** - * This function instantiates a new module instance. - */ -static id RCTCreateModuleInstance(Class cls, RCTBridge *bridge) -{ - if ([cls instancesRespondToSelector:@selector(initWithBridge:)]) { - return [[cls alloc] initWithBridge:bridge]; - } else { - return [[cls alloc] init]; - } -} - /** * This function scans all classes available at runtime and returns an array * of all JSMethods registered. @@ -111,22 +46,11 @@ - (NSString *)description dispatch_once(&onceToken, ^{ NSMutableSet *uniqueMethods = [NSMutableSet set]; - unsigned int classCount; - Class *classes = objc_copyClassList(&classCount); - for (unsigned int i = 0; i < classCount; i++) { - - Class cls = classes[i]; - - if (!class_getSuperclass(cls)) { - // Class has no superclass - it's probably something weird - continue; - } - + RCTEnumerateClasses(^(__unsafe_unretained Class cls) { if (RCTClassOverridesClassMethod(cls, @selector(JSMethods))) { [uniqueMethods addObjectsFromArray:[cls JSMethods]]; } - } - free(classes); + }); JSMethods = [uniqueMethods allObjects]; }); @@ -147,38 +71,216 @@ - (NSString *)description modules = [NSMutableArray array]; RCTModuleNamesByID = [NSMutableArray array]; - unsigned int classCount; - Class *classes = objc_copyClassList(&classCount); - for (unsigned int i = 0; i < classCount; i++) { - - Class cls = classes[i]; + RCTEnumerateClasses(^(__unsafe_unretained Class cls) { + if ([cls conformsToProtocol:@protocol(RCTBridgeModule)]) { - if (!class_getSuperclass(cls)) { - // Class has no superclass - it's probably something weird - continue; - } + // Add module + [(NSMutableArray *)modules addObject:cls]; - if (![cls conformsToProtocol:@protocol(RCTBridgeModule)]) { - // Not an RCTBridgeModule - continue; + // Add module name + NSString *moduleName = RCTModuleNameForClass(cls); + [(NSMutableArray *)RCTModuleNamesByID addObject:moduleName]; } - - // Add module - [(NSMutableArray *)modules addObject:cls]; - - // Add module name - NSString *moduleName = RCTModuleNameForClass(cls); - [(NSMutableArray *)RCTModuleNamesByID addObject:moduleName]; - } - free(classes); + }); modules = [modules copy]; RCTModuleNamesByID = [RCTModuleNamesByID copy]; }); - + return modules; } +@interface RCTBridge () + +- (void)_invokeAndProcessModule:(NSString *)module + method:(NSString *)method + arguments:(NSArray *)args; + +@end + +/** + * This private class is used as a container for exported method info + */ +@interface RCTModuleMethod : NSObject + +@property (nonatomic, copy, readonly) NSString *moduleClassName; +@property (nonatomic, copy, readonly) NSString *JSMethodName; + +@end + +@implementation RCTModuleMethod +{ + BOOL _isClassMethod; + Class _moduleClass; + SEL _selector; + NSMethodSignature *_methodSignature; + NSArray *_argumentBlocks; + NSString *_methodName; +} + +- (instancetype)initWithMethodName:(NSString *)methodName + JSMethodName:(NSString *)JSMethodName +{ + if ((self = [super init])) { + + _methodName = methodName; + NSArray *parts = [[methodName substringWithRange:NSMakeRange(2, methodName.length - 3)] componentsSeparatedByString:@" "]; + + // Parse class and method + _moduleClassName = parts[0]; + NSRange categoryRange = [_moduleClassName rangeOfString:@"("]; + if (categoryRange.length) + { + _moduleClassName = [_moduleClassName substringToIndex:categoryRange.location]; + } + + // Extract class and method details + _isClassMethod = [methodName characterAtIndex:0] == '+'; + _moduleClass = NSClassFromString(_moduleClassName); + _selector = NSSelectorFromString(parts[1]); + _JSMethodName = JSMethodName ?: [NSStringFromSelector(_selector) componentsSeparatedByString:@":"][0]; + +#if DEBUG + + // Sanity check + RCTAssert([_moduleClass conformsToProtocol:@protocol(RCTBridgeModule)], + @"You are attempting to export the method %@, but %@ does not \ + conform to the RCTBridgeModule Protocol", methodName, _moduleClassName); +#endif + + // Get method signature + _methodSignature = _isClassMethod ? + [_moduleClass methodSignatureForSelector:_selector] : + [_moduleClass instanceMethodSignatureForSelector:_selector]; + + // Process arguments + NSUInteger numberOfArguments = _methodSignature.numberOfArguments; + NSMutableArray *argumentBlocks = [[NSMutableArray alloc] initWithCapacity:numberOfArguments - 2]; + for (NSUInteger i = 2; i < numberOfArguments; i++) { + const char *argumentType = [_methodSignature getArgumentTypeAtIndex:i]; + switch (argumentType[0]) { + +#define RCT_ARG_BLOCK(_logic) \ + [argumentBlocks addObject:^(RCTBridge *bridge, NSInvocation *invocation, NSUInteger index, id json) { \ + _logic \ + [invocation setArgument:&value atIndex:index]; \ + }]; \ + +#define RCT_CASE(_value, _class, _logic) \ + case _value: { \ + RCT_ARG_BLOCK( \ + if (json && ![json isKindOfClass:[_class class]]) { \ + RCTLogError(@"Argument %tu (%@) of %@.%@ should be of type %@", index, \ + json, RCTModuleNameForClass(_moduleClass), _JSMethodName, [_class class]); \ + return; \ + } \ + _logic \ + ) \ + break; \ + } + + RCT_CASE(':', NSString, SEL value = NSSelectorFromString(json); ); + RCT_CASE('*', NSString, const char *value = [json UTF8String]; ); + +#define RCT_SIMPLE_CASE(_value, _type, _selector) \ + case _value: { \ + RCT_ARG_BLOCK( \ + if (json && ![json respondsToSelector:@selector(_selector)]) { \ + RCTLogError(@"Argument %tu (%@) of %@.%@ does not respond to selector: %@", \ + index, json, RCTModuleNameForClass(_moduleClass), _JSMethodName, @#_selector); \ + return; \ + } \ + _type value = [json _selector]; \ + ) \ + break; \ + } + + RCT_SIMPLE_CASE('c', char, charValue) + RCT_SIMPLE_CASE('C', unsigned char, unsignedCharValue) + RCT_SIMPLE_CASE('s', short, shortValue) + RCT_SIMPLE_CASE('S', unsigned short, unsignedShortValue) + RCT_SIMPLE_CASE('i', int, intValue) + RCT_SIMPLE_CASE('I', unsigned int, unsignedIntValue) + RCT_SIMPLE_CASE('l', long, longValue) + RCT_SIMPLE_CASE('L', unsigned long, unsignedLongValue) + RCT_SIMPLE_CASE('q', long long, longLongValue) + RCT_SIMPLE_CASE('Q', unsigned long long, unsignedLongLongValue) + RCT_SIMPLE_CASE('f', float, floatValue) + RCT_SIMPLE_CASE('d', double, doubleValue) + RCT_SIMPLE_CASE('B', BOOL, boolValue) + + default: { + static const char *blockType = @encode(typeof(^{})); + if (!strcmp(argumentType, blockType)) { + RCT_ARG_BLOCK( + if (json && ![json isKindOfClass:[NSNumber class]]) { + RCTLogError(@"Argument %tu (%@) of %@.%@ should be a number", index, + json, RCTModuleNameForClass(_moduleClass), _JSMethodName); + return; + } + // Marked as autoreleasing, because NSInvocation doesn't retain arguments + __autoreleasing id value = (json ? ^(NSArray *args) { + [bridge _invokeAndProcessModule:@"BatchedBridge" + method:@"invokeCallbackAndReturnFlushedQueue" + arguments:@[json, args]]; + } : ^(NSArray *unused) {}); + ) + } else { + RCT_ARG_BLOCK( id value = json; ) + } + break; + } + } + } + _argumentBlocks = [argumentBlocks copy]; + } + return self; +} + +- (void)invokeWithBridge:(RCTBridge *)bridge + module:(id)module + arguments:(NSArray *)arguments +{ + +#if DEBUG + + // Sanity check + RCTAssert([module class] == _moduleClass, @"Attempted to invoke method \ + %@ on a module of class %@", _methodName, [module class]); +#endif + + // Safety check + if (arguments.count != _argumentBlocks.count) { + RCTLogError(@"%@.%@ was called with %zd arguments, but expects %zd", + RCTModuleNameForClass(_moduleClass), _JSMethodName, + arguments.count, _argumentBlocks.count); + return; + } + + // Create invocation (we can't re-use this as it wouldn't be thread-safe) + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:_methodSignature]; + [invocation setArgument:&_selector atIndex:1]; + + // Set arguments + NSUInteger index = 0; + for (id json in arguments) { + id arg = (json == [NSNull null]) ? nil : json; + void (^block)(RCTBridge *, NSInvocation *, NSUInteger, id) = _argumentBlocks[index]; + block(bridge, invocation, index + 2, arg); + index ++; + } + + // Invoke method + [invocation invokeWithTarget:_isClassMethod ? [module class] : module]; +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"<%@: %p; exports %@ as %@;>", NSStringFromClass(self.class), self, _methodName, _JSMethodName]; +} + +@end + /** * This function parses the exported methods inside RCTBridgeModules and * generates an array of arrays of RCTModuleMethod objects, keyed @@ -193,6 +295,16 @@ - (NSString *)description Dl_info info; dladdr(&RCTExportedMethodsByModuleID, &info); +#ifdef __LP64__ + typedef uint64_t RCTExportValue; + typedef struct section_64 RCTExportSection; +#define RCTGetSectByNameFromHeader getsectbynamefromheader_64 +#else + typedef uint32_t RCTExportValue; + typedef struct section RCTExportSection; +#define RCTGetSectByNameFromHeader getsectbynamefromheader +#endif + const RCTExportValue mach_header = (RCTExportValue)info.dli_fbase; const RCTExportSection *section = RCTGetSectByNameFromHeader((void *)mach_header, "__DATA", "RCTExport"); @@ -202,53 +314,23 @@ - (NSString *)description NSArray *classes = RCTBridgeModuleClassesByModuleID(); NSMutableDictionary *methodsByModuleClassName = [NSMutableDictionary dictionaryWithCapacity:[classes count]]; - NSCharacterSet *plusMinusCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"+-"]; for (RCTExportValue addr = section->offset; addr < section->offset + section->size; - addr += sizeof(id) * 2) { - - const char **entry = (const char **)(mach_header + addr); - NSScanner *scanner = [NSScanner scannerWithString:@(entry[0])]; - - NSString *plusMinus; - if (![scanner scanCharactersFromSet:plusMinusCharacterSet intoString:&plusMinus]) continue; - if (![scanner scanString:@"[" intoString:NULL]) continue; - - NSString *className; - if (![scanner scanUpToString:@" " intoString:&className]) continue; - [scanner scanString:@" " intoString:NULL]; - - NSString *selectorName; - if (![scanner scanUpToString:@"]" intoString:&selectorName]) continue; + addr += sizeof(const char **) * 2) { - Class moduleClass = NSClassFromString(className); - if (moduleClass == Nil) continue; + // Get data entry + const char **entries = (const char **)(mach_header + addr); - SEL selector = NSSelectorFromString(selectorName); - Method method = ([plusMinus characterAtIndex:0] == '+' ? class_getClassMethod : class_getInstanceMethod)(moduleClass, selector); - if (method == nil) continue; - - unsigned int argumentCount = method_getNumberOfArguments(method); - NSMutableIndexSet *blockArgumentIndexes = [NSMutableIndexSet indexSet]; - static const char *blockType = @encode(typeof(^{})); - for (unsigned int i = 2; i < argumentCount; i++) { - char *type = method_copyArgumentType(method, i); - if (!strcmp(type, blockType)) { - [blockArgumentIndexes addIndex:i - 2]; - } - free(type); - } - - NSString *JSMethodName = strlen(entry[1]) ? @(entry[1]) : [NSStringFromSelector(selector) componentsSeparatedByString:@":"][0]; + // Create method RCTModuleMethod *moduleMethod = - [[RCTModuleMethod alloc] initWithSelector:selector - JSMethodName:JSMethodName - arity:method_getNumberOfArguments(method) - 2 - blockArgumentIndexes:blockArgumentIndexes]; + [[RCTModuleMethod alloc] initWithMethodName:@(entries[0]) + JSMethodName:strlen(entries[1]) ? @(entries[1]) : nil]; - NSArray *methods = methodsByModuleClassName[className]; - methodsByModuleClassName[className] = methods ? [methods arrayByAddingObject:moduleMethod] : @[moduleMethod]; + // Cache method + NSArray *methods = methodsByModuleClassName[moduleMethod.moduleClassName]; + methodsByModuleClassName[moduleMethod.moduleClassName] = + methods ? [methods arrayByAddingObject:moduleMethod] : @[moduleMethod]; } methodsByModuleID = [[RCTSparseArray alloc] initWithCapacity:[classes count]]; @@ -256,7 +338,7 @@ - (NSString *)description methodsByModuleID[moduleID] = methodsByModuleClassName[NSStringFromClass(moduleClass)]; }]; }); - + return methodsByModuleID; } @@ -303,19 +385,12 @@ - (NSString *)description @"type": @"remote", }; }]; - + NSDictionary *module = @{ @"moduleID": @(moduleID), @"methods": methodsByName }; - // Add static constants - if (RCTClassOverridesClassMethod(moduleClass, @selector(constantsToExport))) { - NSMutableDictionary *mutableModule = [module mutableCopy]; - mutableModule[@"constants"] = [moduleClass constantsToExport] ?: @{}; - module = [mutableModule copy]; - } - remoteModuleConfigByClassName[NSStringFromClass(moduleClass)] = module; }]; }); @@ -324,14 +399,15 @@ - (NSString *)description NSMutableDictionary *moduleConfig = [[NSMutableDictionary alloc] init]; [modulesByName enumerateKeysAndObjectsUsingBlock:^(NSString *moduleName, id module, BOOL *stop) { - // Add "psuedo-constants" + // Add constants NSMutableDictionary *config = remoteModuleConfigByClassName[NSStringFromClass([module class])]; - if (RCTClassOverridesInstanceMethod([module class], @selector(constantsToExport))) { - NSMutableDictionary *mutableConfig = [NSMutableDictionary dictionaryWithDictionary:config]; - NSMutableDictionary *mutableConstants = [NSMutableDictionary dictionaryWithDictionary:config[@"constants"]]; - [mutableConstants addEntriesFromDictionary:[module constantsToExport]]; - mutableConfig[@"constants"] = mutableConstants; // There's no real need to copy this - config = mutableConfig; // Nor this - receiver is unlikely to mutate it + if ([module respondsToSelector:@selector(constantsToExport)]) { + NSDictionary *constants = [module constantsToExport]; + if (constants) { + NSMutableDictionary *mutableConfig = [NSMutableDictionary dictionaryWithDictionary:config]; + mutableConfig[@"constants"] = constants; // There's no real need to copy this + config = mutableConfig; // Nor this - receiver is unlikely to mutate it + } } moduleConfig[moduleName] = config; @@ -340,6 +416,7 @@ - (NSString *)description return moduleConfig; } + /** * As above, but for local modules/methods, which represent JS classes * and methods that will be called by the native code via the bridge. @@ -417,21 +494,19 @@ @implementation RCTBridge static id _latestJSExecutor; -- (instancetype)initWithJavaScriptExecutor:(id)javaScriptExecutor - moduleProvider:(RCTBridgeModuleProviderBlock)block +- (instancetype)initWithExecutor:(id)executor + moduleProvider:(RCTBridgeModuleProviderBlock)block { if ((self = [super init])) { - _javaScriptExecutor = javaScriptExecutor; + _javaScriptExecutor = executor; _latestJSExecutor = _javaScriptExecutor; _eventDispatcher = [[RCTEventDispatcher alloc] initWithBridge:self]; _shadowQueue = dispatch_queue_create("com.facebook.ReactKit.ShadowQueue", DISPATCH_QUEUE_SERIAL); // Register passed-in module instances NSMutableDictionary *preregisteredModules = [[NSMutableDictionary alloc] init]; - if (block) { - for (id module in block(self)) { - preregisteredModules[RCTModuleNameForClass([module class])] = module; - } + for (id module in block ? block() : nil) { + preregisteredModules[RCTModuleNameForClass([module class])] = module; } // Instantiate modules @@ -444,14 +519,14 @@ - (instancetype)initWithJavaScriptExecutor:(id)javaScript // Preregistered instances takes precedence, no questions asked if (!preregisteredModules[moduleName]) { // It's OK to have a name collision as long as the second instance is nil - RCTAssert(RCTCreateModuleInstance(moduleClass, self) == nil, + RCTAssert([[moduleClass alloc] init] == nil, @"Attempted to register RCTBridgeModule class %@ for the name '%@', \ but name was already registered by class %@", moduleClass, moduleName, [modulesByName[moduleName] class]); } } else { // Module name hasn't been used before, so go ahead and instantiate - id module = RCTCreateModuleInstance(moduleClass, self); + id module = [[moduleClass alloc] init]; if (module) { _modulesByID[moduleID] = modulesByName[moduleName] = module; } @@ -461,6 +536,13 @@ - (instancetype)initWithJavaScriptExecutor:(id)javaScript // Store modules _modulesByName = [modulesByName copy]; + // Set bridge + for (id module in _modulesByName.allValues) { + if ([module respondsToSelector:@selector(setBridge:)]) { + module.bridge = self; + } + } + // Inject module data into JS context NSString *configJSON = RCTJSONStringify(@{ @"remoteModuleConfig": RCTRemoteModulesConfig(_modulesByName), @@ -470,12 +552,12 @@ - (instancetype)initWithJavaScriptExecutor:(id)javaScript [_javaScriptExecutor injectJSONText:configJSON asGlobalObjectNamed:@"__fbBatchedBridgeConfig" callback:^(id err) { dispatch_semaphore_signal(semaphore); }]; - + if (dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC)) != 0) { RCTLogMustFix(@"JavaScriptExecutor took too long to inject JSON object"); } } - + return self; } @@ -501,23 +583,29 @@ - (BOOL)isValid - (void)invalidate { + // Release executor if (_latestJSExecutor == _javaScriptExecutor) { _latestJSExecutor = nil; } [_javaScriptExecutor invalidate]; _javaScriptExecutor = nil; - - dispatch_sync(_shadowQueue, ^{ + + // Wait for queued methods to finish + dispatch_sync(self.shadowQueue, ^{ // Make sure all dispatchers have been executed before continuing // TODO: is this still needed? }); - + + // Invalidate modules for (id target in _modulesByID.allObjects) { if ([target respondsToSelector:@selector(invalidate)]) { [(id)target invalidate]; } } - [_modulesByID removeAllObjects]; + + // Release modules (breaks retain cycle if module has strong bridge reference) + _modulesByID = nil; + _modulesByName = nil; } /** @@ -537,10 +625,10 @@ - (void)enqueueJSCall:(NSString *)moduleDotMethod args:(NSArray *)args NSNumber *moduleID = RCTLocalModuleIDs[moduleDotMethod]; RCTAssert(moduleID != nil, @"Module '%@' not registered.", [[moduleDotMethod componentsSeparatedByString:@"."] firstObject]); - + NSNumber *methodID = RCTLocalMethodIDs[moduleDotMethod]; RCTAssert(methodID != nil, @"Method '%@' not registered.", moduleDotMethod); - + [self _invokeAndProcessModule:@"BatchedBridge" method:@"callFunctionReturnFlushedQueue" arguments:@[moduleID, methodID, args ?: @[]]]; @@ -554,12 +642,12 @@ - (void)enqueueApplicationScript:(NSString *)script url:(NSURL *)url onComplete: onComplete(scriptLoadError); return; } - + [_javaScriptExecutor executeJSCall:@"BatchedBridge" method:@"flushedQueue" arguments:@[] - callback:^(id objcValue, NSError *error) { - [self _handleBuffer:objcValue]; + callback:^(id json, NSError *error) { + [self _handleBuffer:json]; onComplete(error); }]; }]; @@ -570,35 +658,28 @@ - (void)enqueueApplicationScript:(NSString *)script url:(NSURL *)url onComplete: - (void)_invokeAndProcessModule:(NSString *)module method:(NSString *)method arguments:(NSArray *)args { NSTimeInterval startJS = RCTTGetAbsoluteTime(); - - RCTJavaScriptCallback processResponse = ^(id objcValue, NSError *error) { + + RCTJavaScriptCallback processResponse = ^(id json, NSError *error) { NSTimeInterval startNative = RCTTGetAbsoluteTime(); - [self _handleBuffer:objcValue]; - + [self _handleBuffer:json]; + NSTimeInterval end = RCTTGetAbsoluteTime(); NSTimeInterval timeJS = startNative - startJS; NSTimeInterval timeNative = end - startNative; - + // TODO: surface this performance information somewhere - [[NSNotificationCenter defaultCenter] postNotificationName:@"PERF" object:nil userInfo:@{@"JS": @(timeJS * 1000000), @"Native": @(timeNative * 1000000)}]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"PERF" object:nil userInfo:@{ + @"JS": @(timeJS * 1000000), + @"Native": @(timeNative * 1000000) + }]; }; - + [_javaScriptExecutor executeJSCall:module method:method arguments:args callback:processResponse]; } -/** - * TODO (#5906496): Have responses piggy backed on a round trip with ObjC->JS requests. - */ -- (void)_sendResponseToJavaScriptCallbackID:(NSInteger)cbID args:(NSArray *)args -{ - [self _invokeAndProcessModule:@"BatchedBridge" - method:@"invokeCallbackAndReturnFlushedQueue" - arguments:@[@(cbID), args]]; -} - #pragma mark - Payload Processing - (void)_handleBuffer:(id)buffer @@ -606,12 +687,12 @@ - (void)_handleBuffer:(id)buffer if (buffer == nil || buffer == (id)kCFNull) { return; } - + if (![buffer isKindOfClass:[NSArray class]]) { RCTLogError(@"Buffer must be an instance of NSArray, got %@", NSStringFromClass([buffer class])); return; } - + NSArray *requestsArray = (NSArray *)buffer; NSUInteger bufferRowCount = [requestsArray count]; NSUInteger expectedFieldsCount = RCTBridgeFieldResponseReturnValues + 1; @@ -619,7 +700,7 @@ - (void)_handleBuffer:(id)buffer RCTLogError(@"Must pass all fields to buffer - expected %zd, saw %zd", expectedFieldsCount, bufferRowCount); return; } - + for (NSUInteger fieldIndex = RCTBridgeFieldRequestModuleIDs; fieldIndex <= RCTBridgeFieldParamss; fieldIndex++) { id field = [requestsArray objectAtIndex:fieldIndex]; if (![field isKindOfClass:[NSArray class]]) { @@ -627,18 +708,18 @@ - (void)_handleBuffer:(id)buffer return; } } - + NSArray *moduleIDs = requestsArray[RCTBridgeFieldRequestModuleIDs]; NSArray *methodIDs = requestsArray[RCTBridgeFieldMethodIDs]; NSArray *paramsArrays = requestsArray[RCTBridgeFieldParamss]; - + NSUInteger numRequests = [moduleIDs count]; BOOL allSame = numRequests == [methodIDs count] && numRequests == [paramsArrays count]; if (!allSame) { RCTLogError(@"Invalid data message - all must be length: %zd", numRequests); return; } - + for (NSUInteger i = 0; i < numRequests; i++) { @autoreleasepool { [self _handleRequestNumber:i @@ -647,9 +728,9 @@ - (void)_handleBuffer:(id)buffer params:paramsArrays[i]]; } } - + // TODO: only used by RCTUIManager - can we eliminate this special case? - dispatch_async(_shadowQueue, ^{ + dispatch_async(self.shadowQueue, ^{ for (id module in _modulesByID.allObjects) { if ([module respondsToSelector:@selector(batchDidComplete)]) { [module batchDidComplete]; @@ -668,168 +749,40 @@ - (BOOL)_handleRequestNumber:(NSUInteger)i return NO; } + // Look up method NSArray *methods = RCTExportedMethodsByModuleID()[moduleID]; if (methodID >= methods.count) { RCTLogError(@"Unknown methodID: %zd for module: %zd (%@)", methodID, moduleID, RCTModuleNamesByID[moduleID]); return NO; } - RCTModuleMethod *method = methods[methodID]; - NSUInteger methodArity = method.arity; - if (params.count != methodArity) { - RCTLogError(@"Expected %tu arguments but got %tu invoking %@.%@", - methodArity, - params.count, - RCTModuleNamesByID[moduleID], - method.JSMethodName); - return NO; - } - + __weak RCTBridge *weakSelf = self; - dispatch_async(_shadowQueue, ^{ + dispatch_async(self.shadowQueue, ^{ __strong RCTBridge *strongSelf = weakSelf; - + if (!strongSelf.isValid) { // strongSelf has been invalidated since the dispatch_async call and this // invocation should not continue. return; } - - // TODO: we should just store module instances by index, since that's how we look them up anyway - id target = strongSelf->_modulesByID[moduleID]; - RCTAssert(target != nil, @"No module found for name '%@'", RCTModuleNamesByID[moduleID]); - - SEL selector = method.selector; - NSMethodSignature *methodSignature = [target methodSignatureForSelector:selector]; - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature]; - [invocation setArgument:&target atIndex:0]; - [invocation setArgument:&selector atIndex:1]; - - // Retain used blocks until after invocation completes. - NS_VALID_UNTIL_END_OF_SCOPE NSMutableArray *blocks = [NSMutableArray array]; - - [params enumerateObjectsUsingBlock:^(id param, NSUInteger idx, BOOL *stop) { - if ([param isEqual:[NSNull null]]) { - param = nil; - } else if ([method.blockArgumentIndexes containsIndex:idx]) { - id block = [strongSelf createResponseSenderBlock:[param integerValue]]; - [blocks addObject:block]; - param = block; - } - - NSUInteger argIdx = idx + 2; - - // TODO: can we do this lookup in advance and cache the logic instead of - // recalculating it every time for every parameter? - BOOL shouldSet = YES; - const char *argumentType = [methodSignature getArgumentTypeAtIndex:argIdx]; - switch (argumentType[0]) { - case ':': - if ([param isKindOfClass:[NSString class]]) { - SEL sel = NSSelectorFromString(param); - [invocation setArgument:&sel atIndex:argIdx]; - shouldSet = NO; - } - break; - - case '*': - if ([param isKindOfClass:[NSString class]]) { - const char *string = [param UTF8String]; - [invocation setArgument:&string atIndex:argIdx]; - shouldSet = NO; - } - break; - - // TODO: it seems like an error if the param doesn't respond - // so we should probably surface that error rather than failing silently -#define CASE(_value, _type, _selector) \ - case _value: \ - if ([param respondsToSelector:@selector(_selector)]) { \ - _type value = [param _selector]; \ - [invocation setArgument:&value atIndex:argIdx]; \ - shouldSet = NO; \ - } \ - break; - - CASE('c', char, charValue) - CASE('C', unsigned char, unsignedCharValue) - CASE('s', short, shortValue) - CASE('S', unsigned short, unsignedShortValue) - CASE('i', int, intValue) - CASE('I', unsigned int, unsignedIntValue) - CASE('l', long, longValue) - CASE('L', unsigned long, unsignedLongValue) - CASE('q', long long, longLongValue) - CASE('Q', unsigned long long, unsignedLongLongValue) - CASE('f', float, floatValue) - CASE('d', double, doubleValue) - CASE('B', BOOL, boolValue) - - default: - break; - } - - if (shouldSet) { - [invocation setArgument:¶m atIndex:argIdx]; - } - }]; - + + // Look up module + id module = strongSelf->_modulesByID[moduleID]; + if (!module) { + RCTLogError(@"No module found for name '%@'", RCTModuleNamesByID[moduleID]); + return; + } + @try { - [invocation invoke]; + [method invokeWithBridge:strongSelf module:module arguments:params]; } @catch (NSException *exception) { - RCTLogError(@"Exception thrown while invoking %@ on target %@ with params %@: %@", method.JSMethodName, target, params, exception); + RCTLogError(@"Exception thrown while invoking %@ on target %@ with params %@: %@", method.JSMethodName, module, params, exception); } }); - - return YES; -} -/** - * Returns a callback that reports values back to the JS thread. - * TODO (#5906496): These responses should go into their own queue `MessageQueue.m` that - * mirrors the JS queue and protocol. For now, we speak the "language" of the JS - * queue by packing it into an array that matches the wire protocol. - */ -- (RCTResponseSenderBlock)createResponseSenderBlock:(NSInteger)cbID -{ - if (!cbID) { - return nil; - } - - return ^(NSArray *args) { - [self _sendResponseToJavaScriptCallbackID:cbID args:args]; - }; -} - -+ (NSInvocation *)invocationForAdditionalArguments:(NSUInteger)argCount -{ - static NSMutableDictionary *invocations; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - invocations = [NSMutableDictionary dictionary]; - }); - - id key = @(argCount); - NSInvocation *invocation = invocations[key]; - if (invocation == nil) { - NSString *objCTypes = [@"v@:" stringByPaddingToLength:3 + argCount withString:@"@" startingAtIndex:0]; - NSMethodSignature *methodSignature = [NSMethodSignature signatureWithObjCTypes:objCTypes.UTF8String]; - invocation = [NSInvocation invocationWithMethodSignature:methodSignature]; - invocations[key] = invocation; - } - - return invocation; -} - -- (void)registerRootView:(RCTRootView *)rootView -{ - // TODO: only used by RCTUIManager - can we eliminate this special case? - for (id module in _modulesByID.allObjects) { - if ([module respondsToSelector:@selector(registerRootView:)]) { - [module registerRootView:rootView]; - } - } + return YES; } + (BOOL)hasValidJSExecutor @@ -844,7 +797,7 @@ + (void)log:(NSArray *)objects level:(NSString *)level return; } NSMutableArray *args = [NSMutableArray arrayWithObject:level]; - + // TODO (#5906496): Find out and document why we skip the first object for (id ob in [objects subarrayWithRange:(NSRange){1, [objects count] - 1}]) { if ([NSJSONSerialization isValidJSONObject:@[ob]]) { @@ -853,11 +806,12 @@ + (void)log:(NSArray *)objects level:(NSString *)level [args addObject:[ob description]]; } } - // Note the js executor could get invalidated while we're trying to call this...need to watch out for that. + + // Note: the js executor could get invalidated while we're trying to call this...need to watch out for that. [_latestJSExecutor executeJSCall:@"RCTLog" method:@"logIfNoNativeHook" arguments:args - callback:^(id objcValue, NSError *error) {}]; + callback:^(id json, NSError *error) {}]; } @end diff --git a/ReactKit/Base/RCTBridgeModule.h b/ReactKit/Base/RCTBridgeModule.h index d9df70a228abfe..2627a0b9fa03a8 100644 --- a/ReactKit/Base/RCTBridgeModule.h +++ b/ReactKit/Base/RCTBridgeModule.h @@ -19,10 +19,12 @@ typedef void (^RCTResponseSenderBlock)(NSArray *response); @optional /** - * Optional initializer for modules that require access - * to bridge features, such as sending events or making JS calls + * A reference to the RCTBridge. Useful for modules that require access + * to bridge features, such as sending events or making JS calls. This + * will be set automatically by the bridge when it initializes the module. +* To implement this in your module, just add @synthesize bridge = _bridge; */ -- (instancetype)initWithBridge:(RCTBridge *)bridge; +@property (nonatomic, strong) RCTBridge *bridge; /** * The module name exposed to JS. If omitted, this will be inferred @@ -42,17 +44,11 @@ typedef void (^RCTResponseSenderBlock)(NSArray *response); /** * Injects constants into JS. These constants are made accessible via - * NativeModules.moduleName.X. Note that this method is not inherited when you - * subclass a module, and you should not call [super constantsToExport] when - * implementing it. - */ -+ (NSDictionary *)constantsToExport; - -/** - * Some "constants" are not really constant, and need to be re-generated - * each time the bridge module is created. Support for this feature is - * deprecated and may be going away or changing, but for now you can use - * the -constantsToExport instance method to register these "pseudo-constants". + * NativeModules.ModuleName.X. This method is called when the module is + * registered by the bridge. It is only called once for the lifetime of the + * bridge, so it is not suitable for returning dynamic values, but may be + * used for long-lived values such as session keys, that are regenerated only + * as part of a reload of the entire React application. */ - (NSDictionary *)constantsToExport; diff --git a/ReactKit/Base/RCTJavaScriptExecutor.h b/ReactKit/Base/RCTJavaScriptExecutor.h index 7062570a4e0c66..4d32f1c2f6b93a 100644 --- a/ReactKit/Base/RCTJavaScriptExecutor.h +++ b/ReactKit/Base/RCTJavaScriptExecutor.h @@ -5,7 +5,7 @@ #import "RCTInvalidating.h" typedef void (^RCTJavaScriptCompleteBlock)(NSError *error); -typedef void (^RCTJavaScriptCallback)(id objcValue, NSError *error); +typedef void (^RCTJavaScriptCallback)(id json, NSError *error); /** * Abstracts away a JavaScript execution context - we may be running code in a diff --git a/ReactKit/Base/RCTLog.h b/ReactKit/Base/RCTLog.h index a97d134584ea6b..ba72bc8ff3993e 100644 --- a/ReactKit/Base/RCTLog.h +++ b/ReactKit/Base/RCTLog.h @@ -20,28 +20,22 @@ // If defined, only log messages that match this regex will fatal #define RCTLOG_FATAL_REGEX nil -#define _RCTLog(__RCTLog__level, ...) do { \ - NSString *__RCTLog__levelStr; \ - switch(__RCTLog__level) { \ - case RCTLOG_INFO: __RCTLog__levelStr = @"info"; break; \ - case RCTLOG_WARN: __RCTLog__levelStr = @"warn"; break; \ - case RCTLOG_ERROR: __RCTLog__levelStr = @"error"; break; \ - case RCTLOG_MUSTFIX: __RCTLog__levelStr = @"mustfix"; break; \ - } \ - NSString *__RCTLog__msg = _RCTLogObjects(RCTLogFormat(__VA_ARGS__), __RCTLog__levelStr); \ - if (__RCTLog__level >= RCTLOG_FATAL_LEVEL) { \ - BOOL __RCTLog__fail = YES; \ - if (RCTLOG_FATAL_REGEX) { \ - NSError *__RCTLog__e; \ - NSRegularExpression *__RCTLog__regex = [NSRegularExpression regularExpressionWithPattern:RCTLOG_FATAL_REGEX options:0 error:&__RCTLog__e]; \ - __RCTLog__fail = [__RCTLog__regex numberOfMatchesInString:__RCTLog__msg options:0 range:NSMakeRange(0, [__RCTLog__msg length])] > 0; \ - } \ - RCTCAssert(!__RCTLog__fail, @"RCTLOG_FATAL_LEVEL %@: %@", __RCTLog__levelStr, __RCTLog__msg); \ - } \ - if (__RCTLog__level >= RCTLOG_REDBOX_LEVEL) { \ - RCTRedBox *__RCTLog__redBox = [RCTRedBox sharedInstance]; \ - [__RCTLog__redBox showErrorMessage:__RCTLog__msg]; \ - } \ +extern __unsafe_unretained NSString *RCTLogLevels[]; + +#define _RCTLog(_level, ...) do { \ + NSString *__RCTLog__levelStr = RCTLogLevels[_level - 1]; \ + NSString *__RCTLog__msg = RCTLogObjects(RCTLogFormat(__FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__), __RCTLog__levelStr); \ + if (_level >= RCTLOG_FATAL_LEVEL) { \ + BOOL __RCTLog__fail = YES; \ + if (RCTLOG_FATAL_REGEX) { \ + NSRegularExpression *__RCTLog__regex = [NSRegularExpression regularExpressionWithPattern:RCTLOG_FATAL_REGEX options:0 error:NULL]; \ + __RCTLog__fail = [__RCTLog__regex numberOfMatchesInString:__RCTLog__msg options:0 range:NSMakeRange(0, [__RCTLog__msg length])] > 0; \ + } \ + RCTCAssert(!__RCTLog__fail, @"RCTLOG_FATAL_LEVEL %@: %@", __RCTLog__levelStr, __RCTLog__msg); \ + } \ + if (_level >= RCTLOG_REDBOX_LEVEL) { \ + [[RCTRedBox sharedInstance] showErrorMessage:__RCTLog__msg]; \ + } \ } while (0) #define RCTLog(...) _RCTLog(RCTLOG_INFO, __VA_ARGS__) @@ -50,20 +44,15 @@ #define RCTLogError(...) _RCTLog(RCTLOG_ERROR, __VA_ARGS__) #define RCTLogMustFix(...) _RCTLog(RCTLOG_MUSTFIX, __VA_ARGS__) -#define RCTLogFormat(...) _RCTLogFormat(__FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__) -#define RCTLogFormatString(...) _RCTLogFormatString(__FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__) - #ifdef __cplusplus extern "C" { #endif -NSString *_RCTLogObjects(NSArray *objects, NSString *level); -NSArray *_RCTLogFormat(const char *file, int lineNumber, const char *funcName, NSString *format, ...) NS_FORMAT_FUNCTION(4,5); -NSString *_RCTLogFormatString(const char *file, int lineNumber, const char *funcName, NSString *format, ...) NS_FORMAT_FUNCTION(4,5); +NSString *RCTLogObjects(NSArray *objects, NSString *level); +NSArray *RCTLogFormat(const char *file, int lineNumber, const char *funcName, NSString *format, ...) NS_FORMAT_FUNCTION(4,5); + +void RCTInjectLogFunction(void (^logFunction)(NSString *msg)); #ifdef __cplusplus } #endif - -typedef void (^RCTLogFunction)(NSString *format, NSString *str); -void RCTInjectLogFunction(RCTLogFunction func); diff --git a/ReactKit/Base/RCTLog.m b/ReactKit/Base/RCTLog.m index dcf60084e9dcc7..862eb5a26f4457 100644 --- a/ReactKit/Base/RCTLog.m +++ b/ReactKit/Base/RCTLog.m @@ -4,10 +4,17 @@ #import "RCTBridge.h" -static RCTLogFunction injectedLogFunction; +__unsafe_unretained NSString *RCTLogLevels[] = { + @"info", + @"warn", + @"error", + @"mustfix" +}; -void RCTInjectLogFunction(RCTLogFunction func) { - injectedLogFunction = func; +static void (^RCTInjectedLogFunction)(NSString *msg); + +void RCTInjectLogFunction(void (^logFunction)(NSString *msg)) { + RCTInjectedLogFunction = logFunction; } static inline NSString *_RCTLogPreamble(const char *file, int lineNumber, const char *funcName) @@ -21,7 +28,7 @@ void RCTInjectLogFunction(RCTLogFunction func) { } // TODO (#5906496): // kinda ugly that this is tied to RCTBridge -NSString *_RCTLogObjects(NSArray *objects, NSString *level) +NSString *RCTLogObjects(NSArray *objects, NSString *level) { NSString *str = objects[0]; #if TARGET_IPHONE_SIMULATOR @@ -33,8 +40,8 @@ void RCTInjectLogFunction(RCTLogFunction func) { { // Print normal errors with timestamps when not in simulator. // Non errors are already compiled out above, so log as error here. - if (injectedLogFunction) { - injectedLogFunction(@">\n %@", str); + if (RCTInjectedLogFunction) { + RCTInjectedLogFunction(str); } else { NSLog(@">\n %@", str); } @@ -42,14 +49,14 @@ void RCTInjectLogFunction(RCTLogFunction func) { return str; } -// Returns array of objects. First arg is a simple string to print, remaining args are objects to pass through to the debugger so they are -// inspectable in the console. -NSArray *_RCTLogFormat(const char *file, int lineNumber, const char *funcName, NSString *format, ...) +// Returns array of objects. First arg is a simple string to print, remaining args +// are objects to pass through to the debugger so they are inspectable in the console. +NSArray *RCTLogFormat(const char *file, int lineNumber, const char *funcName, NSString *format, ...) { va_list args; va_start(args, format); NSString *preamble = _RCTLogPreamble(file, lineNumber, funcName); - + // Pull out NSObjects so we can pass them through as inspectable objects to the js debugger NSArray *formatParts = [format componentsSeparatedByString:@"%"]; NSMutableArray *objects = [NSMutableArray arrayWithObject:preamble]; @@ -77,12 +84,3 @@ void RCTInjectLogFunction(RCTLogFunction func) { [objectsOut addObjectsFromArray:objects]; return objectsOut; } - -NSString *_RCTLogFormatString(const char *file, int lineNumber, const char *funcName, NSString *format, ...) -{ - va_list args; - va_start (args, format); - NSString *body = [[NSString alloc] initWithFormat:format arguments:args]; - va_end (args); - return [NSString stringWithFormat:@"%@ %@", _RCTLogPreamble(file, lineNumber, funcName), body]; -} diff --git a/ReactKit/Base/RCTRedBox.m b/ReactKit/Base/RCTRedBox.m index 917331f2b65f36..c192598ca9ebb3 100644 --- a/ReactKit/Base/RCTRedBox.m +++ b/ReactKit/Base/RCTRedBox.m @@ -2,7 +2,6 @@ #import "RCTRedBox.h" -#import "RCTRootView.h" #import "RCTUtils.h" @interface RCTRedBoxWindow : UIWindow @@ -13,31 +12,31 @@ @implementation RCTRedBoxWindow { UIView *_rootView; UITableView *_stackTraceTableView; - + NSString *_lastErrorMessage; NSArray *_lastStackTrace; - + UITableViewCell *_cachedMessageCell; } - (id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { - + self.windowLevel = UIWindowLevelStatusBar + 5; self.backgroundColor = [UIColor colorWithRed:0.8 green:0 blue:0 alpha:1]; self.hidden = YES; - + UIViewController *rootController = [[UIViewController alloc] init]; self.rootViewController = rootController; _rootView = rootController.view; _rootView.backgroundColor = [UIColor clearColor]; - + const CGFloat buttonHeight = 60; CGRect detailsFrame = _rootView.bounds; detailsFrame.size.height -= buttonHeight; - + _stackTraceTableView = [[UITableView alloc] initWithFrame:detailsFrame style:UITableViewStylePlain]; _stackTraceTableView.delegate = self; _stackTraceTableView.dataSource = self; @@ -45,21 +44,21 @@ - (id)initWithFrame:(CGRect)frame _stackTraceTableView.separatorColor = [[UIColor whiteColor] colorWithAlphaComponent:0.3]; _stackTraceTableView.separatorStyle = UITableViewCellSeparatorStyleNone; [_rootView addSubview:_stackTraceTableView]; - + UIButton *dismissButton = [UIButton buttonWithType:UIButtonTypeCustom]; dismissButton.titleLabel.font = [UIFont systemFontOfSize:14]; [dismissButton setTitle:@"Dismiss (ESC)" forState:UIControlStateNormal]; [dismissButton setTitleColor:[[UIColor whiteColor] colorWithAlphaComponent:0.5] forState:UIControlStateNormal]; [dismissButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted]; [dismissButton addTarget:self action:@selector(dismiss) forControlEvents:UIControlEventTouchUpInside]; - + UIButton *reloadButton = [UIButton buttonWithType:UIButtonTypeCustom]; reloadButton.titleLabel.font = [UIFont systemFontOfSize:14]; [reloadButton setTitle:@"Reload JS (\u2318R)" forState:UIControlStateNormal]; [reloadButton setTitleColor:[[UIColor whiteColor] colorWithAlphaComponent:0.5] forState:UIControlStateNormal]; [reloadButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted]; [reloadButton addTarget:self action:@selector(reload) forControlEvents:UIControlEventTouchUpInside]; - + CGFloat buttonWidth = self.bounds.size.width / 2; dismissButton.frame = CGRectMake(0, self.bounds.size.height - buttonHeight, buttonWidth, buttonHeight); reloadButton.frame = CGRectMake(buttonWidth, self.bounds.size.height - buttonHeight, buttonWidth, buttonHeight); @@ -87,7 +86,7 @@ - (void)showErrorMessage:(NSString *)message withStack:(NSArray *)stack showIfHi { _lastStackTrace = stack; _lastErrorMessage = message; - + if (self.hidden && shouldShow) { _cachedMessageCell = [self reuseCell:nil forErrorMessage:message]; @@ -109,7 +108,7 @@ - (void)dismiss - (void)reload { - [RCTRootView reloadAll]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"RCTReloadNotification" object:nil userInfo:nil]; [self dismiss]; } @@ -149,9 +148,9 @@ - (UITableViewCell *)reuseCell:(UITableViewCell *)cell forErrorMessage:(NSString cell.backgroundColor = [UIColor clearColor]; cell.selectionStyle = UITableViewCellSelectionStyleNone; } - + cell.textLabel.text = message; - + return cell; } @@ -168,7 +167,7 @@ - (UITableViewCell *)reuseCell:(UITableViewCell *)cell forStackFrame:(NSDictiona cell.selectedBackgroundView = [[UIView alloc] init]; cell.selectedBackgroundView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.2]; } - + cell.textLabel.text = stackFrame[@"methodName"]; cell.detailTextLabel.text = cell.detailTextLabel.text = [NSString stringWithFormat:@"%@:%@", [stackFrame[@"file"] lastPathComponent], stackFrame[@"lineNumber"]]; return cell; @@ -179,7 +178,7 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPa if ([indexPath section] == 0) { NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; - + NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:16], NSParagraphStyleAttributeName: paragraphStyle}; CGRect boundingRect = [_lastErrorMessage boundingRectWithSize:CGSizeMake(tableView.frame.size.width - 30, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil]; @@ -206,14 +205,14 @@ - (NSArray *)keyCommands // NOTE: We could use RCTKeyCommands for this, but since // we control this window, we can use the standard, non-hacky // mechanism instead - + return @[ - + // Dismiss red box [UIKeyCommand keyCommandWithInput:UIKeyInputEscape modifierFlags:0 action:@selector(dismiss)], - + // Reload [UIKeyCommand keyCommandWithInput:@"r" modifierFlags:UIKeyModifierCommand @@ -269,12 +268,12 @@ - (void)updateErrorMessage:(NSString *)message withStack:(NSArray *)stack - (void)showErrorMessage:(NSString *)message withStack:(NSArray *)stack showIfHidden:(BOOL)shouldShow { - + #if DEBUG - + dispatch_block_t block = ^{ if (!_window) { - _window = [[RCTRedBoxWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + _window = [[RCTRedBoxWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; } [_window showErrorMessage:message withStack:stack showIfHidden:shouldShow]; }; @@ -283,9 +282,9 @@ - (void)showErrorMessage:(NSString *)message withStack:(NSArray *)stack showIfHi } else { dispatch_async(dispatch_get_main_queue(), block); } - + #endif - + } - (void)dismiss diff --git a/ReactKit/Base/RCTRootView.m b/ReactKit/Base/RCTRootView.m index 703f86daff7db4..b21e53e254b62d 100644 --- a/ReactKit/Base/RCTRootView.m +++ b/ReactKit/Base/RCTRootView.m @@ -14,13 +14,13 @@ #import "RCTWebViewExecutor.h" #import "UIView+ReactKit.h" -NSString *const RCTRootViewReloadNotification = @"RCTRootViewReloadNotification"; +NSString *const RCTReloadNotification = @"RCTReloadNotification"; @implementation RCTRootView { RCTBridge *_bridge; RCTTouchHandler *_touchHandler; - id _executor; + id _executor; } static Class _globalExecutorClass; @@ -77,7 +77,7 @@ - (void)setUp // Add reload observer [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reload) - name:RCTRootViewReloadNotification + name:RCTReloadNotification object:nil]; } @@ -95,6 +95,10 @@ - (void)dealloc [_bridge enqueueJSCall:@"ReactIOS.unmountComponentAtNodeAndRemoveContainer" args:@[self.reactTag]]; + + // TODO: eventually we'll want to be able to share the bridge between + // multiple rootviews, in which case we'll need to move this elsewhere + [_bridge invalidate]; } - (void)bundleFinishedLoading:(NSError *)error @@ -108,7 +112,7 @@ - (void)bundleFinishedLoading:(NSError *)error } } else { - [_bridge registerRootView:self]; + [_bridge.uiManager registerRootView:self]; NSString *moduleName = _moduleName ?: @""; NSDictionary *appParameters = @{ @@ -137,7 +141,7 @@ - (void)loadBundle // Choose local executor if specified, followed by global, followed by default _executor = [[_executorClass ?: _globalExecutorClass ?: [RCTContextExecutor class] alloc] init]; - _bridge = [[RCTBridge alloc] initWithJavaScriptExecutor:_executor moduleProvider:nil]; + _bridge = [[RCTBridge alloc] initWithExecutor:_executor moduleProvider:nil]; _touchHandler = [[RCTTouchHandler alloc] initWithBridge:_bridge]; [self addGestureRecognizer:_touchHandler]; @@ -229,7 +233,7 @@ - (void)reload + (void)reloadAll { - [[NSNotificationCenter defaultCenter] postNotificationName:RCTRootViewReloadNotification object:nil]; + [[NSNotificationCenter defaultCenter] postNotificationName:RCTReloadNotification object:nil]; } - (void)startOrResetInteractionTiming diff --git a/ReactKit/Base/RCTTouchHandler.h b/ReactKit/Base/RCTTouchHandler.h index 53379a78a3b119..46c81b9ef5ea53 100644 --- a/ReactKit/Base/RCTTouchHandler.h +++ b/ReactKit/Base/RCTTouchHandler.h @@ -8,7 +8,7 @@ @interface RCTTouchHandler : UIGestureRecognizer -- (instancetype)initWithBridge:(RCTBridge *)bridge; +- (instancetype)initWithBridge:(RCTBridge *)bridge NS_DESIGNATED_INITIALIZER; - (void)startOrResetInteractionTiming; - (NSDictionary *)endAndResetInteractionTiming; diff --git a/ReactKit/Base/RCTTouchHandler.m b/ReactKit/Base/RCTTouchHandler.m index 36ab411fe0fdaa..90e1e64c796fe1 100644 --- a/ReactKit/Base/RCTTouchHandler.m +++ b/ReactKit/Base/RCTTouchHandler.m @@ -67,11 +67,6 @@ @implementation RCTTouchHandler NSMutableArray *_bridgeInteractionTiming; } -- (instancetype)initWithTarget:(id)target action:(SEL)action -{ - RCT_NOT_DESIGNATED_INITIALIZER(); -} - - (instancetype)initWithBridge:(RCTBridge *)bridge { if ((self = [super initWithTarget:nil action:NULL])) { diff --git a/ReactKit/Base/RCTUtils.h b/ReactKit/Base/RCTUtils.h index 3612b1f274b774..de203e4aeeba47 100644 --- a/ReactKit/Base/RCTUtils.h +++ b/ReactKit/Base/RCTUtils.h @@ -1,17 +1,15 @@ // Copyright 2004-present Facebook. All Rights Reserved. +#import + #import #import -#import #import "RCTAssert.h" -// Macro to indicate when inherited initializer is not to be used -#define RCT_NOT_DESIGNATED_INITIALIZER() \ -do { \ - RCTAssert(NO, @"%@ is not the designated initializer for instances of %@.", NSStringFromSelector(_cmd), [self class]); \ - return nil; \ -} while (0) +#ifdef __cplusplus +extern "C" { +#endif // Utility functions for JSON object <-> string serialization/deserialization NSString *RCTJSONStringify(id jsonObject, NSError **error); @@ -39,3 +37,10 @@ void RCTSwapInstanceMethods(Class cls, SEL original, SEL replacement); // Module subclass support BOOL RCTClassOverridesClassMethod(Class cls, SEL selector); BOOL RCTClassOverridesInstanceMethod(Class cls, SEL selector); + +// Enumerate all classes that conform to NSObject protocol +void RCTEnumerateClasses(void (^block)(Class cls)); + +#ifdef __cplusplus +} +#endif diff --git a/ReactKit/Base/RCTUtils.m b/ReactKit/Base/RCTUtils.m index 615c5235e4e1e2..1b686008f945f2 100644 --- a/ReactKit/Base/RCTUtils.m +++ b/ReactKit/Base/RCTUtils.m @@ -155,6 +155,31 @@ BOOL RCTClassOverridesInstanceMethod(Class cls, SEL selector) return YES; } } + free(methods); return NO; } +void RCTEnumerateClasses(void (^block)(Class cls)) +{ + static Class *classes; + static unsigned int classCount; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + classes = objc_copyClassList(&classCount); + }); + + for (unsigned int i = 0; i < classCount; i++) + { + Class cls = classes[i]; + Class superclass = cls; + while (superclass) + { + if (class_conformsToProtocol(superclass, @protocol(NSObject))) + { + block(cls); + break; + } + superclass = class_getSuperclass(superclass); + } + } +} diff --git a/ReactKit/Base/RCTViewNodeProtocol.h b/ReactKit/Base/RCTViewNodeProtocol.h index 1fa3e252b3c1b7..b6f59ea103567e 100644 --- a/ReactKit/Base/RCTViewNodeProtocol.h +++ b/ReactKit/Base/RCTViewNodeProtocol.h @@ -8,7 +8,7 @@ */ @protocol RCTViewNodeProtocol -@property (nonatomic, strong) NSNumber *reactTag; +@property (nonatomic, copy) NSNumber *reactTag; - (void)insertReactSubview:(id)subview atIndex:(NSInteger)atIndex; - (void)removeReactSubview:(id)subview; @@ -21,6 +21,8 @@ @optional // TODO: Deprecate this +// This method is called after layout has been performed for all views known +// to the RCTViewManager. It is only called on UIViews, not shadow views. - (void)reactBridgeDidFinishTransaction; @end diff --git a/ReactKit/Executors/RCTContextExecutor.m b/ReactKit/Executors/RCTContextExecutor.m index e3eabc16f0913c..ac27a9065d24e4 100644 --- a/ReactKit/Executors/RCTContextExecutor.m +++ b/ReactKit/Executors/RCTContextExecutor.m @@ -45,7 +45,7 @@ static JSValueRef RCTNativeLoggingHook(JSContextRef context, JSObjectRef object, fprintf(stderr, "%s\n", [modifiedString UTF8String]); // don't print timestamps and other junk #else // Print normal errors with timestamps to files when not in simulator. - _RCTLogObjects(@[modifiedString], @"log"); + RCTLogObjects(@[modifiedString], @"log"); #endif JSStringRelease(string); } diff --git a/ReactKit/Modules/RCTAlertManager.m b/ReactKit/Modules/RCTAlertManager.m index ce5cabea6331ec..97ca88f8604837 100644 --- a/ReactKit/Modules/RCTAlertManager.m +++ b/ReactKit/Modules/RCTAlertManager.m @@ -48,10 +48,10 @@ - (void)alertWithArgs:(NSDictionary *)args callback:(RCTResponseSenderBlock)call NSArray *buttons = args[@"buttons"]; if (!title && !message) { - RCTLogMustFix(@"Must specify either an alert title, or message, or both"); + RCTLogError(@"Must specify either an alert title, or message, or both"); return; } else if (buttons.count == 0) { - RCTLogMustFix(@"Must have at least one button."); + RCTLogError(@"Must have at least one button."); return; } @@ -68,7 +68,7 @@ - (void)alertWithArgs:(NSDictionary *)args callback:(RCTResponseSenderBlock)call NSInteger index = 0; for (NSDictionary *button in buttons) { if (button.count != 1) { - RCTLogMustFix(@"Button definitions should have exactly one key."); + RCTLogError(@"Button definitions should have exactly one key."); } NSString *buttonKey = [button.allKeys firstObject]; NSString *buttonTitle = [button[buttonKey] description]; diff --git a/ReactKit/Modules/RCTLocationObserver.h b/ReactKit/Modules/RCTLocationObserver.h new file mode 100644 index 00000000000000..ad3ba2ce29bd27 --- /dev/null +++ b/ReactKit/Modules/RCTLocationObserver.h @@ -0,0 +1,7 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#import "RCTBridgeModule.h" + +@interface RCTLocationObserver : NSObject + +@end diff --git a/ReactKit/Modules/RCTLocationObserver.m b/ReactKit/Modules/RCTLocationObserver.m new file mode 100644 index 00000000000000..6290e1850c08ca --- /dev/null +++ b/ReactKit/Modules/RCTLocationObserver.m @@ -0,0 +1,185 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#import "RCTLocationObserver.h" + +#import +#import + +#import +#import + +#import "RCTAssert.h" +#import "RCTBridge.h" +#import "RCTEventDispatcher.h" +#import "RCTLog.h" + +// TODO (#5906496): Shouldn't these be configurable? +const CLLocationAccuracy RCTLocationAccuracy = 500.0; // meters + +@interface RCTPendingLocationRequest : NSObject + +@property (nonatomic, copy) RCTResponseSenderBlock successBlock; +@property (nonatomic, copy) RCTResponseSenderBlock errorBlock; + +@end + +@implementation RCTPendingLocationRequest @end + +@interface RCTLocationObserver () + +@end + +@implementation RCTLocationObserver +{ + CLLocationManager *_locationManager; + NSDictionary *_lastLocationEvent; + NSMutableDictionary *_pendingRequests; +} + +@synthesize bridge = _bridge; + +#pragma mark - Lifecycle + +- (instancetype)init +{ + if ((self = [super init])) { + _pendingRequests = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (void)dealloc +{ + [_locationManager stopUpdatingLocation]; +} + +#pragma mark - Public API + +- (void)startObserving +{ + RCT_EXPORT(); + + dispatch_async(dispatch_get_main_queue(), ^{ + + // Create the location manager if this object does not + // already have one, and it must be created and accessed + // on the main thread + if (nil == _locationManager) { + _locationManager = [[CLLocationManager alloc] init]; + } + + _locationManager.delegate = self; + _locationManager.desiredAccuracy = RCTLocationAccuracy; + + // Set a movement threshold for new events. + _locationManager.distanceFilter = RCTLocationAccuracy; // meters + + if([_locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { + [_locationManager requestWhenInUseAuthorization]; + } + + [_locationManager startUpdatingLocation]; + + }); +} + +- (void)stopObserving +{ + RCT_EXPORT(); + + dispatch_async(dispatch_get_main_queue(), ^{ + [_locationManager stopUpdatingLocation]; + _lastLocationEvent = nil; + }); +} + +#pragma mark - CLLocationManagerDelegate + +- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations +{ + CLLocation *loc = [locations lastObject]; + NSDictionary *event = @{ + @"coords": @{ + @"latitude": @(loc.coordinate.latitude), + @"longitude": @(loc.coordinate.longitude), + @"altitude": @(loc.altitude), + @"accuracy": @(RCTLocationAccuracy), + @"altitudeAccuracy": @(RCTLocationAccuracy), + @"heading": @(loc.course), + @"speed": @(loc.speed), + }, + @"timestamp": @(CACurrentMediaTime()) + }; + [_bridge.eventDispatcher sendDeviceEventWithName:@"geoLocationDidChange" body:event]; + NSArray *pendingRequestsCopy; + + // TODO (#5906496): is this locking neccessary? If so, use something better than @synchronize + @synchronized(self) { + + pendingRequestsCopy = [_pendingRequests allValues]; + [_pendingRequests removeAllObjects]; + + _lastLocationEvent = event; + } + + for (RCTPendingLocationRequest *request in pendingRequestsCopy) { + if (request.successBlock) { + request.successBlock(@[event]); + } + } +} + +- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error +{ + NSArray *pendingRequestsCopy; + + // TODO (#5906496): is this locking neccessary? If so, use something better than @synchronize + @synchronized(self) { + pendingRequestsCopy = [_pendingRequests allValues]; + [_pendingRequests removeAllObjects]; + } + + NSString *errorMsg = @"User denied location service or location service not available."; + for (RCTPendingLocationRequest *request in pendingRequestsCopy) { + if (request.errorBlock) { + request.errorBlock(@[errorMsg]); + } + } +} + +- (void)getCurrentPosition:(RCTResponseSenderBlock)geoSuccess withErrorCallback:(RCTResponseSenderBlock)geoError +{ + RCT_EXPORT(); + + NSDictionary *lastLocationCopy; + // TODO (#5906496): is this locking neccessary? If so, use something better than @synchronize + @synchronized(self) { + if (![CLLocationManager locationServicesEnabled] || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) { + if (geoError) { + NSString *errorMsg = @"User denied location service or location service not available."; + geoError(@[errorMsg]); + return; + } + } + + // If a request for the current position comes in before the OS has informed us, we wait for the first + // OS event and then call our callbacks. This obviates the need for handling of the otherwise + // common failure case of requesting the geolocation until it succeeds, assuming we would have + // instead returned an error if it wasn't yet available. + if (!_lastLocationEvent) { + NSInteger requestID = [_pendingRequests count]; + RCTPendingLocationRequest *request = [[RCTPendingLocationRequest alloc] init]; + request.successBlock = geoSuccess; + request.errorBlock = geoError; + _pendingRequests[@(requestID)] = request; + return; + } else { + lastLocationCopy = [_lastLocationEvent copy]; + } + } + if (geoSuccess) { + geoSuccess(@[lastLocationCopy]); + } +} + +@end diff --git a/ReactKit/Modules/RCTStatusBarManager.m b/ReactKit/Modules/RCTStatusBarManager.m index 9a49cdd62f907c..b391dc6bdc35ce 100644 --- a/ReactKit/Modules/RCTStatusBarManager.m +++ b/ReactKit/Modules/RCTStatusBarManager.m @@ -49,7 +49,7 @@ - (void)setHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation }); } -+ (NSDictionary *)constantsToExport +- (NSDictionary *)constantsToExport { return @{ @"Style": @{ diff --git a/ReactKit/Modules/RCTTiming.m b/ReactKit/Modules/RCTTiming.m index e833f3d5f733b6..d008178b234152 100644 --- a/ReactKit/Modules/RCTTiming.m +++ b/ReactKit/Modules/RCTTiming.m @@ -51,35 +51,35 @@ - (BOOL)updateFoundNeedsJSUpdate @implementation RCTTiming { RCTSparseArray *_timers; - RCTBridge *_bridge; id _updateTimer; } +@synthesize bridge = _bridge; + + (NSArray *)JSMethods { return @[@"RCTJSTimers.callTimers"]; } -- (instancetype)initWithBridge:(RCTBridge *)bridge +- (instancetype)init { if ((self = [super init])) { - _bridge = bridge; + _timers = [[RCTSparseArray alloc] init]; - [self startTimers]; - + for (NSString *name in @[UIApplicationWillResignActiveNotification, UIApplicationDidEnterBackgroundNotification, UIApplicationWillTerminateNotification]) { - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(stopTimers) name:name object:nil]; } - + for (NSString *name in @[UIApplicationDidBecomeActiveNotification, UIApplicationWillEnterForegroundNotification]) { - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startTimers) name:name @@ -114,14 +114,14 @@ - (void)stopTimers - (void)startTimers { RCTAssertMainThread(); - - if (![self isValid] || _updateTimer != nil) { + + if (![self isValid] || _updateTimer != nil || _timers.count == 0) { return; } _updateTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)]; if (_updateTimer) { - [_updateTimer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; + [_updateTimer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; } else { RCTLogWarn(@"Failed to create a display link (probably on buildbot) - using an NSTimer for AppEngine instead."); _updateTimer = [NSTimer scheduledTimerWithTimeInterval:(1.0 / 60) @@ -135,7 +135,7 @@ - (void)startTimers - (void)update { RCTAssertMainThread(); - + NSMutableArray *timersToCall = [[NSMutableArray alloc] init]; for (RCTTimer *timer in _timers.allObjects) { if ([timer updateFoundNeedsJSUpdate]) { @@ -145,7 +145,7 @@ - (void)update _timers[timer.callbackID] = nil; } } - + // call timers that need to be called if ([timersToCall count] > 0) { [_bridge enqueueJSCall:@"RCTJSTimers.callTimers" args:@[timersToCall]]; @@ -185,6 +185,7 @@ - (void)createTimer:(NSNumber *)callbackID repeats:repeats]; dispatch_async(dispatch_get_main_queue(), ^{ _timers[callbackID] = timer; + [self startTimers]; }); } @@ -195,6 +196,9 @@ - (void)deleteTimer:(NSNumber *)timerID if (timerID) { dispatch_async(dispatch_get_main_queue(), ^{ _timers[timerID] = nil; + if (_timers.count == 0) { + [self stopTimers]; + } }); } else { RCTLogWarn(@"Called deleteTimer: with a nil timerID"); diff --git a/ReactKit/Modules/RCTUIManager.h b/ReactKit/Modules/RCTUIManager.h index 87e91118aeaff0..701c37f930aacc 100644 --- a/ReactKit/Modules/RCTUIManager.h +++ b/ReactKit/Modules/RCTUIManager.h @@ -2,13 +2,18 @@ #import +#import "RCTBridge.h" #import "RCTBridgeModule.h" #import "RCTInvalidating.h" +#import "RCTViewManager.h" @class RCTRootView; @protocol RCTScrollableProtocol; +/** + * The RCTUIManager is the module responsible for updating the view hierarchy. + */ @interface RCTUIManager : NSObject @property (nonatomic, weak) id mainScrollView; @@ -19,8 +24,33 @@ */ @property (nonatomic, readwrite, weak) id nativeMainScrollDelegate; +/** + * Register a root view with the RCTUIManager. Theoretically, a single manager + * can support multiple root views, however this feature is not currently exposed + * and may eventually be removed. + */ - (void)registerRootView:(RCTRootView *)rootView; +/** + * Schedule a block to be executed on the UI thread. Useful if you need to execute + * view logic after all currently queued view updates have completed. + */ +- (void)addUIBlock:(RCTViewManagerUIBlock)block; + +/** + * The view that is currently first responder, according to the JS context. + */ + (UIView *)JSResponder; @end + +/** + * This category makes the current RCTUIManager instance available via the + * RCTBridge, which is useful for RCTBridgeModules or RCTViewManagers that + * need to access the RCTUIManager. + */ +@interface RCTBridge (RCTUIManager) + +@property (nonatomic, readonly) RCTUIManager *uiManager; + +@end diff --git a/ReactKit/Modules/RCTUIManager.m b/ReactKit/Modules/RCTUIManager.m index 0b34a820b63607..95101396964963 100644 --- a/ReactKit/Modules/RCTUIManager.m +++ b/ReactKit/Modules/RCTUIManager.m @@ -32,47 +32,6 @@ static void RCTTraverseViewNodes(id view, react_view_node_b } } -static NSDictionary *RCTViewModuleClasses(void) -{ - static NSMutableDictionary *modules; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - modules = [NSMutableDictionary dictionary]; - - unsigned int classCount; - Class *classes = objc_copyClassList(&classCount); - for (unsigned int i = 0; i < classCount; i++) { - - Class cls = classes[i]; - - if (!class_getSuperclass(cls)) { - // Class has no superclass - it's probably something weird - continue; - } - - if (![cls isSubclassOfClass:[RCTViewManager class]]) { - // Not a view module - continue; - } - - // Get module name - NSString *moduleName = [cls moduleName]; - - // Check module name is unique - id existingClass = modules[moduleName]; - RCTCAssert(existingClass == Nil, @"Attempted to register view module class %@ " - "for the name '%@', but name was already registered by class %@", cls, moduleName, existingClass); - - // Add to module list - modules[moduleName] = cls; - } - - free(classes); - }); - - return modules; -} - @interface RCTAnimation : NSObject @property (nonatomic, readonly) NSTimeInterval duration; @@ -190,48 +149,70 @@ - (instancetype)initWithDictionary:(NSDictionary *)config callback:(RCTResponseS @implementation RCTUIManager { + dispatch_queue_t _shadowQueue; + // Root views are only mutated on the shadow queue NSMutableSet *_rootViewTags; NSMutableArray *_pendingUIBlocks; NSLock *_pendingUIBlocksLock; - + // Animation RCTLayoutAnimation *_nextLayoutAnimation; // RCT thread only RCTLayoutAnimation *_layoutAnimation; // Main thread only - // Keyed by moduleName + // Keyed by viewName NSMutableDictionary *_defaultShadowViews; // RCT thread only NSMutableDictionary *_defaultViews; // Main thread only NSDictionary *_viewManagers; - + // Keyed by React tag RCTSparseArray *_viewManagerRegistry; // RCT thread only RCTSparseArray *_shadowViewRegistry; // RCT thread only RCTSparseArray *_viewRegistry; // Main thread only - - __weak RCTBridge *_bridge; } -- (instancetype)initWithBridge:(RCTBridge *)bridge +@synthesize bridge =_bridge; + +/** + * This function derives the view name automatically + * from the module name. + */ +static NSString *RCTViewNameForModuleName(NSString *moduleName) +{ + NSString *name = moduleName; + if ([name hasSuffix:@"Manager"]) { + name = [name substringToIndex:name.length - @"Manager".length]; + } + return name; +} + +/** + * This private constructor should only be called when creating + * isolated UIImanager instances for testing. Normal initialization + * is via -init:, which is called automatically by the bridge. + */ +- (instancetype)initWithShadowQueue:(dispatch_queue_t)shadowQueue +{ + if ((self = [self init])) { + _shadowQueue = shadowQueue; + _viewManagers = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (instancetype)init { if ((self = [super init])) { - - _bridge = bridge; + _pendingUIBlocksLock = [[NSLock alloc] init]; - - // Instantiate view managers - NSMutableDictionary *viewManagers = [[NSMutableDictionary alloc] init]; - [RCTViewModuleClasses() enumerateKeysAndObjectsUsingBlock:^(NSString *moduleName, Class moduleClass, BOOL *stop) { - viewManagers[moduleName] = [[moduleClass alloc] initWithEventDispatcher:_bridge.eventDispatcher]; - }]; - _viewManagers = viewManagers; + _defaultShadowViews = [[NSMutableDictionary alloc] init]; _defaultViews = [[NSMutableDictionary alloc] init]; - + _viewManagerRegistry = [[RCTSparseArray alloc] init]; _shadowViewRegistry = [[RCTSparseArray alloc] init]; _viewRegistry = [[RCTSparseArray alloc] init]; - + // Internal resources _pendingUIBlocks = [[NSMutableArray alloc] init]; _rootViewTags = [[NSMutableSet alloc] init]; @@ -239,14 +220,33 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge return self; } -- (instancetype)init +- (void)dealloc { - RCT_NOT_DESIGNATED_INITIALIZER(); + RCTAssert(!self.valid, @"must call -invalidate before -dealloc"); } -- (void)dealloc +- (void)setBridge:(RCTBridge *)bridge { - RCTAssert(!self.valid, @"must call -invalidate before -dealloc"); + if (_bridge) { + + // Clear previous bridge data + [self invalidate]; + } + if (bridge) { + + _bridge = bridge; + _shadowQueue = _bridge.shadowQueue; + + // Get view managers from bridge + NSMutableDictionary *viewManagers = [[NSMutableDictionary alloc] init]; + [_bridge.modules enumerateKeysAndObjectsUsingBlock:^(NSString *moduleName, RCTViewManager *manager, BOOL *stop) { + if ([manager isKindOfClass:[RCTViewManager class]]) { + viewManagers[RCTViewNameForModuleName(moduleName)] = manager; + } + }]; + + _viewManagers = [viewManagers copy]; + } } - (BOOL)isValid @@ -260,6 +260,7 @@ - (void)invalidate _viewRegistry = nil; _shadowViewRegistry = nil; + _bridge = nil; [_pendingUIBlocksLock lock]; _pendingUIBlocks = nil; @@ -269,22 +270,22 @@ - (void)invalidate - (void)registerRootView:(RCTRootView *)rootView; { RCTAssertMainThread(); - + NSNumber *reactTag = rootView.reactTag; UIView *existingView = _viewRegistry[reactTag]; RCTCAssert(existingView == nil || existingView == rootView, @"Expect all root views to have unique tag. Added %@ twice", reactTag); - + // Register view _viewRegistry[reactTag] = rootView; CGRect frame = rootView.frame; - + // Register manager (TODO: should we do this, or leave it nil?) - _viewManagerRegistry[reactTag] = _viewManagers[[RCTViewManager moduleName]]; - + _viewManagerRegistry[reactTag] = _viewManagers[@"View"]; + // Register shadow view - dispatch_async(_bridge.shadowQueue, ^{ - + dispatch_async(_shadowQueue, ^{ + RCTShadowView *shadowView = [[RCTShadowView alloc] init]; shadowView.reactTag = reactTag; shadowView.frame = frame; @@ -315,7 +316,7 @@ - (void)_purgeChildren:(NSArray *)children fromRegistry:(RCTSparseArray *)regist - (void)addUIBlock:(RCTViewManagerUIBlock)block { RCTAssert(![NSThread isMainThread], @"This method should only be called on the shadow thread"); - + __weak RCTUIManager *weakViewManager = self; __weak RCTSparseArray *weakViewRegistry = _viewRegistry; dispatch_block_t outerBlock = ^{ @@ -333,6 +334,8 @@ - (void)addUIBlock:(RCTViewManagerUIBlock)block - (RCTViewManagerUIBlock)uiBlockWithLayoutUpdateForRootView:(RCTShadowView *)rootShadowView { + RCTAssert(![NSThread isMainThread], @"This should never be executed on main thread."); + NSMutableSet *viewsWithNewFrames = [NSMutableSet setWithCapacity:1]; // This is nuanced. In the JS thread, we create a new update buffer @@ -340,7 +343,8 @@ - (RCTViewManagerUIBlock)uiBlockWithLayoutUpdateForRootView:(RCTShadowView *)roo // these structures in the UI-thread block. `NSMutableArray` is not thread // safe so we rely on the fact that we never mutate it after it's passed to // the main thread. - [rootShadowView collectRootUpdatedFrames:viewsWithNewFrames parentConstraint:(CGSize){CSS_UNDEFINED, CSS_UNDEFINED}]; + [rootShadowView collectRootUpdatedFrames:viewsWithNewFrames + parentConstraint:(CGSize){CSS_UNDEFINED, CSS_UNDEFINED}]; // Parallel arrays NSMutableArray *frameReactTags = [NSMutableArray arrayWithCapacity:viewsWithNewFrames.count]; @@ -354,12 +358,19 @@ - (RCTViewManagerUIBlock)uiBlockWithLayoutUpdateForRootView:(RCTShadowView *)roo [areNew addObject:@(shadowView.isNewView)]; [parentsAreNew addObject:@(shadowView.superview.isNewView)]; } - + for (RCTShadowView *shadowView in viewsWithNewFrames) { // We have to do this after we build the parentsAreNew array. shadowView.newView = NO; } + NSMutableArray *updateBlocks = [[NSMutableArray alloc] init]; + for (RCTShadowView *shadowView in viewsWithNewFrames) { + RCTViewManager *manager = _viewManagerRegistry[shadowView.reactTag]; + RCTViewManagerUIBlock block = [manager uiBlockToAmendWithShadowView:shadowView]; + if (block) [updateBlocks addObject:block]; + } + // Perform layout (possibly animated) NSNumber *rootViewTag = rootShadowView.reactTag; return ^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) { @@ -373,15 +384,16 @@ - (RCTViewManagerUIBlock)uiBlockWithLayoutUpdateForRootView:(RCTShadowView *)roo // Convert the frame so it works with anchorPoint = center. CGPoint position = {CGRectGetMidX(frame), CGRectGetMidY(frame)}; CGRect bounds = {0, 0, frame.size}; - + // Avoid crashes due to nan coords if (isnan(position.x) || isnan(position.y) || isnan(bounds.origin.x) || isnan(bounds.origin.y) || isnan(bounds.size.width) || isnan(bounds.size.height)) { - RCTLogError(@"Invalid layout for (%zd)%@. position: %@. bounds: %@", [view reactTag], self, NSStringFromCGPoint(position), NSStringFromCGRect(bounds)); + RCTLogError(@"Invalid layout for (%@)%@. position: %@. bounds: %@", + [view reactTag], self, NSStringFromCGPoint(position), NSStringFromCGRect(bounds)); continue; } - + void (^completion)(BOOL finished) = ^(BOOL finished) { if (self->_layoutAnimation.callback) { self->_layoutAnimation.callback(@[@(finished)]); @@ -395,14 +407,20 @@ - (RCTViewManagerUIBlock)uiBlockWithLayoutUpdateForRootView:(RCTShadowView *)roo [updateAnimation performAnimations:^{ view.layer.position = position; view.layer.bounds = bounds; + for (RCTViewManagerUIBlock block in updateBlocks) { + block(self, _viewRegistry); + } } withCompletionBlock:completion]; } else { view.layer.position = position; view.layer.bounds = bounds; + for (RCTViewManagerUIBlock block in updateBlocks) { + block(self, _viewRegistry); + } completion(YES); } - - // Animate view creations + + // Animate view creation BOOL shouldAnimateCreation = isNew && ![parentsAreNew[ii] boolValue]; RCTAnimation *createAnimation = _layoutAnimation.createAnimation; if (shouldAnimateCreation && createAnimation) { @@ -417,12 +435,22 @@ - (RCTViewManagerUIBlock)uiBlockWithLayoutUpdateForRootView:(RCTShadowView *)roo } else if ([createAnimation.property isEqual:@"opacity"]) { view.layer.opacity = 1.0; } else { - RCTLogError(@"Unsupported layout animation createConfig property %@", createAnimation.property); + RCTLogError(@"Unsupported layout animation createConfig property %@", + createAnimation.property); + } + for (RCTViewManagerUIBlock block in updateBlocks) { + block(self, _viewRegistry); } } withCompletionBlock:nil]; } } + /** + * Enumerate all active (attached to a parent) views and call + * reactBridgeDidFinishTransaction on them if they implement it. + * TODO: this is quite inefficient. If this was handled via the + * ViewManager instead, it could be done more efficiently. + */ RCTRootView *rootView = _viewRegistry[rootViewTag]; RCTTraverseViewNodes(rootView, ^(id view) { if ([view respondsToSelector:@selector(reactBridgeDidFinishTransaction)]) { @@ -436,7 +464,7 @@ - (void)_amendPendingUIBlocksWithStylePropagationUpdateForRootView:(RCTShadowVie { NSMutableSet *applierBlocks = [NSMutableSet setWithCapacity:1]; [topView collectUpdatedProperties:applierBlocks parentProperties:@{}]; - + [self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) { for (RCTApplierBlock block in applierBlocks) { block(viewRegistry); @@ -454,7 +482,7 @@ - (void)removeSubviewsFromContainerWithID:(NSNumber *)containerID id container = _viewRegistry[containerID]; RCTAssert(container != nil, @"container view (for ID %@) not found", containerID); - + NSUInteger subviewsCount = [[container reactSubviews] count]; NSMutableArray *indices = [[NSMutableArray alloc] initWithCapacity:subviewsCount]; for (NSInteger childIndex = 0; childIndex < subviewsCount; childIndex++) { @@ -616,11 +644,11 @@ static BOOL RCTCallPropertySetter(SEL setter, id value, id view, id defaultView, { // TODO: cache respondsToSelector tests if ([manager respondsToSelector:setter]) { - + if (value == [NSNull null]) { value = nil; } - + ((void (*)(id, SEL, id, id, id))objc_msgSend)(manager, setter, value, view, defaultView); return YES; } @@ -631,9 +659,9 @@ static void RCTSetViewProps(NSDictionary *props, UIView *view, UIView *defaultView, RCTViewManager *manager) { [props enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { - + SEL setter = NSSelectorFromString([NSString stringWithFormat:@"set_%@:forView:withDefaultView:", key]); - + // For regular views we don't attempt to set properties // unless the view property has been explicitly exported. RCTCallPropertySetter(setter, obj, view, defaultView, manager); @@ -644,13 +672,13 @@ static void RCTSetShadowViewProps(NSDictionary *props, RCTShadowView *shadowView RCTShadowView *defaultView, RCTViewManager *manager) { [props enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { - + SEL setter = NSSelectorFromString([NSString stringWithFormat:@"set_%@:forShadowView:withDefaultView:", key]); - + // For shadow views we call any custom setter methods by default, // but if none is specified, we attempt to set property anyway. if (!RCTCallPropertySetter(setter, obj, shadowView, defaultView, manager)) { - + if (obj == [NSNull null]) { // Copy property from default view to current // Note: not just doing `[defaultView valueForKey:key]`, the @@ -661,20 +689,20 @@ static void RCTSetShadowViewProps(NSDictionary *props, RCTShadowView *shadowView } } }]; - + // Update layout [shadowView updateShadowViewLayout]; } - (void)createAndRegisterViewWithReactTag:(NSNumber *)reactTag - moduleName:(NSString *)moduleName + viewName:(NSString *)viewName props:(NSDictionary *)props { RCT_EXPORT(createView); - RCTViewManager *manager = _viewManagers[moduleName]; + RCTViewManager *manager = _viewManagers[viewName]; if (manager == nil) { - RCTLogWarn(@"No manager class found for view with module name \"%@\"", moduleName); + RCTLogWarn(@"No manager class found for view with module name \"%@\"", viewName); manager = [[RCTViewManager alloc] init]; } @@ -682,57 +710,57 @@ - (void)createAndRegisterViewWithReactTag:(NSNumber *)reactTag _viewManagerRegistry[reactTag] = manager; // Generate default view, used for resetting default props - if (!_defaultShadowViews[moduleName]) { - _defaultShadowViews[moduleName] = [manager shadowView]; + if (!_defaultShadowViews[viewName]) { + _defaultShadowViews[viewName] = [manager shadowView]; } - + RCTShadowView *shadowView = [manager shadowView]; - shadowView.moduleName = moduleName; + shadowView.moduleName = viewName; shadowView.reactTag = reactTag; - RCTSetShadowViewProps(props, shadowView, _defaultShadowViews[moduleName], manager); + RCTSetShadowViewProps(props, shadowView, _defaultShadowViews[viewName], manager); _shadowViewRegistry[shadowView.reactTag] = shadowView; - + [self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry){ RCTCAssertMainThread(); // Generate default view, used for resetting default props - if (!uiManager->_defaultViews[moduleName]) { + if (!uiManager->_defaultViews[viewName]) { // Note the default is setup after the props are read for the first time ever // for this className - this is ok because we only use the default for restoring // defaults, which never happens on first creation. - uiManager->_defaultViews[moduleName] = [manager view]; + uiManager->_defaultViews[viewName] = [manager view]; } - + UIView *view = [manager view]; if (view) { - + // Set required properties view.reactTag = reactTag; view.multipleTouchEnabled = YES; view.userInteractionEnabled = YES; // required for touch handling view.layer.allowsGroupOpacity = YES; // required for touch handling - + // Set custom properties - RCTSetViewProps(props, view, uiManager->_defaultViews[moduleName], manager); + RCTSetViewProps(props, view, uiManager->_defaultViews[viewName], manager); } viewRegistry[view.reactTag] = view; }]; } -// TODO: remove moduleName param as it isn't needed -- (void)updateView:(NSNumber *)reactTag moduleName:(__unused NSString *)_ props:(NSDictionary *)props +// TODO: remove viewName param as it isn't needed +- (void)updateView:(NSNumber *)reactTag viewName:(__unused NSString *)_ props:(NSDictionary *)props { RCT_EXPORT(); RCTViewManager *viewManager = _viewManagerRegistry[reactTag]; - NSString *moduleName = [[viewManager class] moduleName]; - + NSString *viewName = RCTViewNameForModuleName([[viewManager class] moduleName]); + RCTShadowView *shadowView = _shadowViewRegistry[reactTag]; - RCTSetShadowViewProps(props, shadowView, _defaultShadowViews[moduleName], viewManager); - + RCTSetShadowViewProps(props, shadowView, _defaultShadowViews[viewName], viewManager); + [self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) { UIView *view = uiManager->_viewRegistry[reactTag]; - RCTSetViewProps(props, view, uiManager->_defaultViews[moduleName], viewManager); + RCTSetViewProps(props, view, uiManager->_defaultViews[viewName], viewManager); }]; } @@ -760,16 +788,15 @@ - (void)resignResponder:(NSNumber *)reactTag - (void)batchDidComplete { - // First copy the previous blocks into a temporary variable, then reset the - // pending blocks to a new array. This guards against mutation while - // processing the pending blocks in another thread. + // Gather blocks to be executed now that all view hierarchy manipulations have + // been completed (note that these may still take place before layout has finished) for (RCTViewManager *manager in _viewManagers.allValues) { RCTViewManagerUIBlock uiBlock = [manager uiBlockToAmendWithShadowViewRegistry:_shadowViewRegistry]; if (uiBlock) { [self addUIBlock:uiBlock]; } } - + // Set up next layout animation if (_nextLayoutAnimation) { RCTLayoutAnimation *layoutAnimation = _nextLayoutAnimation; @@ -777,14 +804,14 @@ - (void)batchDidComplete uiManager->_layoutAnimation = layoutAnimation; }]; } - + // Perform layout for (NSNumber *reactTag in _rootViewTags) { RCTShadowView *rootView = _shadowViewRegistry[reactTag]; [self addUIBlock:[self uiBlockWithLayoutUpdateForRootView:rootView]]; [self _amendPendingUIBlocksWithStylePropagationUpdateForRootView:rootView]; } - + // Clear layout animations if (_nextLayoutAnimation) { [self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) { @@ -792,12 +819,16 @@ - (void)batchDidComplete }]; _nextLayoutAnimation = nil; } - + + // First copy the previous blocks into a temporary variable, then reset the + // pending blocks to a new array. This guards against mutation while + // processing the pending blocks in another thread. [_pendingUIBlocksLock lock]; NSArray *previousPendingUIBlocks = _pendingUIBlocks; _pendingUIBlocks = [[NSMutableArray alloc] init]; [_pendingUIBlocksLock unlock]; - + + // Execute the previously queued UI blocks dispatch_async(dispatch_get_main_queue(), ^{ for (dispatch_block_t block in previousPendingUIBlocks) { block(); @@ -828,7 +859,7 @@ - (void)measure:(NSNumber *)reactTag callback:(RCTResponseSenderBlock)callback } RCTCAssert([rootView isReactRootView], @"React view not inside RCTRootView"); - + // By convention, all coordinates, whether they be touch coordinates, or // measurement coordinates are with respect to the root view. CGPoint pagePoint = [view.superview convertPoint:frame.origin toView:rootView]; @@ -844,37 +875,6 @@ - (void)measure:(NSNumber *)reactTag callback:(RCTResponseSenderBlock)callback }]; } -- (void)requestSchedulingJavaScriptNavigation:(NSNumber *)reactTag - errorCallback:(RCTResponseSenderBlock)errorCallback - callback:(RCTResponseSenderBlock)callback -{ - RCT_EXPORT(); - - if (!callback || !errorCallback) { - RCTLogError(@"Callback not provided for navigation scheduling."); - return; - } - [self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry){ - if (reactTag) { - //TODO: This is nasty - why is RCTNavigator hard-coded? - id rkObject = viewRegistry[reactTag]; - if ([rkObject isKindOfClass:[RCTNavigator class]]) { - RCTNavigator *navigator = (RCTNavigator *)rkObject; - BOOL wasAcquired = [navigator requestSchedulingJavaScriptNavigation]; - callback(@[@(wasAcquired)]); - } else { - NSString *msg = - [NSString stringWithFormat: @"Cannot set lock: Tag %@ is not an RCTNavigator", reactTag]; - errorCallback(@[RCTAPIErrorObject(msg)]); - } - } else { - NSString *msg = [NSString stringWithFormat: @"Tag not specified for requestSchedulingJavaScriptNavigation"]; - errorCallback(@[RCTAPIErrorObject(msg)]); - } - }]; -} - - /** * TODO: This could be modified to accept any `RCTViewNodeProtocol`, if * appropriate changes were made to that protocol to support `superview` @@ -884,22 +884,20 @@ - (void)requestSchedulingJavaScriptNavigation:(NSNumber *)reactTag + (void)measureLayoutOnNodes:(RCTShadowView *)view ancestor:(RCTShadowView *)ancestor errorCallback:(RCTResponseSenderBlock)errorCallback - callback:(RCTResponseSenderBlock)callback + callback:(__unused RCTResponseSenderBlock)callback { if (!view) { - NSString *msg = [NSString stringWithFormat: @"Attempting to measure view that does not exist %@", view]; - errorCallback(@[RCTAPIErrorObject(msg)]); + RCTLogError(@"Attempting to measure view that does not exist"); return; } if (!ancestor) { - NSString *msg = [NSString stringWithFormat: @"Attempting to measure relative to ancestor that does not exist %@", ancestor]; - errorCallback(@[RCTAPIErrorObject(msg)]); + RCTLogError(@"Attempting to measure relative to ancestor that does not exist"); return; } CGRect result = [RCTShadowView measureLayout:view relativeTo:ancestor]; if (CGRectIsNull(result)) { - NSString *msg = [NSString stringWithFormat: @"view %@ is not an decendant of %@", view, ancestor]; - errorCallback(@[RCTAPIErrorObject(msg)]); + RCTLogError(@"view %@ (tag #%@) is not a decendant of %@ (tag #%@)", + view, view.reactTag, ancestor, ancestor.reactTag); return; } CGFloat leftOffset = result.origin.x; @@ -907,7 +905,7 @@ + (void)measureLayoutOnNodes:(RCTShadowView *)view CGFloat width = result.size.width; CGFloat height = result.size.height; if (isnan(leftOffset) || isnan(topOffset) || isnan(width) || isnan(height)) { - errorCallback(@[RCTAPIErrorObject(@"Attempted to measure layout but offset or dimensions were NaN")]); + RCTLogError(@"Attempted to measure layout but offset or dimensions were NaN"); return; } callback(@[@(topOffset), @(leftOffset), @(width), @(height)]); @@ -965,8 +963,7 @@ - (void)measureViewsInRect:(NSDictionary *)rect RCTShadowView *shadowView = _shadowViewRegistry[reactTag]; if (!shadowView) { - NSString *msg = [NSString stringWithFormat: @"Attempting to measure view that does not exist %@", shadowView]; - errorCallback(@[RCTAPIErrorObject(msg)]); + RCTLogError(@"Attempting to measure view that does not exist (tag #%@)", reactTag); return; } NSArray *childShadowViews = [shadowView reactSubviews]; @@ -977,8 +974,8 @@ - (void)measureViewsInRect:(NSDictionary *)rect RCTShadowView *childShadowView = [childShadowViews objectAtIndex:ii]; CGRect childLayout = [RCTShadowView measureLayout:childShadowView relativeTo:shadowView]; if (CGRectIsNull(childLayout)) { - NSString *msg = [NSString stringWithFormat: @"view %@ is not a decendant of %@", childShadowView, shadowView]; - errorCallback(@[RCTAPIErrorObject(msg)]); + RCTLogError(@"View %@ (tag #%@) is not a decendant of %@ (tag #%@)", + childShadowView, childShadowView.reactTag, shadowView, shadowView.reactTag); return; } @@ -1088,7 +1085,7 @@ - (void)setJSResponder:(NSNumber *)reactTag [self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) { _jsResponder = viewRegistry[reactTag]; if (!_jsResponder) { - RCTLogMustFix(@"Invalid view set to be the JS responder - tag %zd", reactTag); + RCTLogError(@"Invalid view set to be the JS responder - tag %zd", reactTag); } }]; } @@ -1102,7 +1099,11 @@ - (void)clearJSResponder }]; } -+ (NSDictionary *)allBubblingEventTypesConfigs +// TODO: these event types should be distributed among the modules +// that declare them. Also, events should be registerable by any class +// that can call event handlers, not just UIViewManagers. This code +// also seems highly redundant - every event has the same properties. +- (NSDictionary *)customBubblingEventTypes { NSMutableDictionary *customBubblingEventTypesConfigs = [@{ // Bubble dispatched events @@ -1192,11 +1193,12 @@ + (NSDictionary *)allBubblingEventTypesConfigs }, } mutableCopy]; - [RCTViewModuleClasses() enumerateKeysAndObjectsUsingBlock:^(NSString *name, Class cls, BOOL *stop) { + [_viewManagers enumerateKeysAndObjectsUsingBlock:^(NSString *name, Class cls, BOOL *stop) { if (RCTClassOverridesClassMethod(cls, @selector(customBubblingEventTypes))) { NSDictionary *eventTypes = [cls customBubblingEventTypes]; for (NSString *eventName in eventTypes) { - RCTCAssert(!customBubblingEventTypesConfigs[eventName], @"Event '%@' registered multiple times.", eventName); + RCTCAssert(!customBubblingEventTypesConfigs[eventName], + @"Event '%@' registered multiple times.", eventName); } [customBubblingEventTypesConfigs addEntriesFromDictionary:eventTypes]; } @@ -1205,7 +1207,7 @@ + (NSDictionary *)allBubblingEventTypesConfigs return customBubblingEventTypesConfigs; } -+ (NSDictionary *)allDirectEventTypesConfigs +- (NSDictionary *)customDirectEventTypes { NSMutableDictionary *customDirectEventTypes = [@{ @"topScrollBeginDrag": @{ @@ -1243,7 +1245,7 @@ + (NSDictionary *)allDirectEventTypesConfigs }, } mutableCopy]; - [RCTViewModuleClasses() enumerateKeysAndObjectsUsingBlock:^(NSString *name, Class cls, BOOL *stop) { + [_viewManagers enumerateKeysAndObjectsUsingBlock:^(NSString *name, Class cls, BOOL *stop) { if (RCTClassOverridesClassMethod(cls, @selector(customDirectEventTypes))) { NSDictionary *eventTypes = [cls customDirectEventTypes]; for (NSString *eventName in eventTypes) { @@ -1256,11 +1258,11 @@ + (NSDictionary *)allDirectEventTypesConfigs return customDirectEventTypes; } -+ (NSDictionary *)constantsToExport +- (NSDictionary *)constantsToExport { NSMutableDictionary *allJSConstants = [@{ - @"customBubblingEventTypes": [self allBubblingEventTypesConfigs], - @"customDirectEventTypes": [self allDirectEventTypesConfigs], + @"customBubblingEventTypes": [self customBubblingEventTypes], + @"customDirectEventTypes": [self customDirectEventTypes], @"NSTextAlignment": @{ @"Left": @(NSTextAlignmentLeft), @"Center": @(NSTextAlignmentCenter), @@ -1320,15 +1322,15 @@ + (NSDictionary *)constantsToExport }, } mutableCopy]; - [RCTViewModuleClasses() enumerateKeysAndObjectsUsingBlock:^(NSString *name, Class cls, BOOL *stop) { + [_viewManagers enumerateKeysAndObjectsUsingBlock:^(NSString *name, Class cls, BOOL *stop) { // TODO: should these be inherited? NSDictionary *constants = RCTClassOverridesClassMethod(cls, @selector(constantsToExport)) ? [cls constantsToExport] : nil; if ([constants count]) { - NSMutableDictionary *namespace = [NSMutableDictionary dictionaryWithDictionary:allJSConstants[name]]; - RCTAssert(namespace[@"Constants"] == nil , @"Cannot redefine Constants in namespace: %@", name); + NSMutableDictionary *constantsNamespace = [NSMutableDictionary dictionaryWithDictionary:allJSConstants[name]]; + RCTAssert(constantsNamespace[@"Constants"] == nil , @"Cannot redefine Constants in namespace: %@", name); // add an additional 'Constants' namespace for each class - namespace[@"Constants"] = constants; - allJSConstants[name] = [namespace copy]; + constantsNamespace[@"Constants"] = constants; + allJSConstants[name] = [constantsNamespace copy]; } }]; @@ -1342,10 +1344,11 @@ - (void)configureNextLayoutAnimation:(NSDictionary *)config RCT_EXPORT(); if (_nextLayoutAnimation) { - RCTLogWarn(@"Warning: Overriding previous layout animation with new one before the first began:\n%@ -> %@.", _nextLayoutAnimation, config); + RCTLogWarn(@"Warning: Overriding previous layout animation with new one before the first began:\n%@ -> %@.", + _nextLayoutAnimation, config); } if (config[@"delete"] != nil) { - RCTLogError(@"LayoutAnimation only supports create and update right now. Config: %@", config); + RCTLogError(@"LayoutAnimation only supports create and update right now. Config: %@", config); } _nextLayoutAnimation = [[RCTLayoutAnimation alloc] initWithDictionary:config callback:callback]; } @@ -1389,3 +1392,12 @@ + (UIView *)JSResponder } @end + +@implementation RCTBridge (RCTUIManager) + +- (RCTUIManager *)uiManager +{ + return self.modules[NSStringFromClass([RCTUIManager class])]; +} + +@end diff --git a/ReactKit/ReactKit.xcodeproj/project.pbxproj b/ReactKit/ReactKit.xcodeproj/project.pbxproj index 3067cd8e4bf18e..7215563067c43d 100644 --- a/ReactKit/ReactKit.xcodeproj/project.pbxproj +++ b/ReactKit/ReactKit.xcodeproj/project.pbxproj @@ -32,6 +32,7 @@ 13E067561A70F44B002CDEE1 /* RCTViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 13E0674E1A70F44B002CDEE1 /* RCTViewManager.m */; }; 13E067571A70F44B002CDEE1 /* RCTView.m in Sources */ = {isa = PBXBuildFile; fileRef = 13E067501A70F44B002CDEE1 /* RCTView.m */; }; 13E067591A70F44B002CDEE1 /* UIView+ReactKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 13E067541A70F44B002CDEE1 /* UIView+ReactKit.m */; }; + 5F5F0D991A9E456B001279FA /* RCTLocationObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5F0D981A9E456B001279FA /* RCTLocationObserver.m */; }; 830A229E1A66C68A008503DA /* RCTRootView.m in Sources */ = {isa = PBXBuildFile; fileRef = 830A229D1A66C68A008503DA /* RCTRootView.m */; }; 830BA4551A8E3BDA00D53203 /* RCTCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 830BA4541A8E3BDA00D53203 /* RCTCache.m */; }; 832348161A77A5AA00B55238 /* Layout.c in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FC71A68125100A75B9A /* Layout.c */; }; @@ -113,6 +114,8 @@ 13E067541A70F44B002CDEE1 /* UIView+ReactKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+ReactKit.m"; sourceTree = ""; }; 13ED13891A80C9D40050A8F9 /* RCTPointerEvents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTPointerEvents.h; sourceTree = ""; }; 13EFFCCF1A98E6FE002607DC /* RCTJSMethodRegistrar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTJSMethodRegistrar.h; sourceTree = ""; }; + 5F5F0D971A9E456B001279FA /* RCTLocationObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTLocationObserver.h; sourceTree = ""; }; + 5F5F0D981A9E456B001279FA /* RCTLocationObserver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTLocationObserver.m; sourceTree = ""; }; 830213F31A654E0800B993E6 /* RCTBridgeModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTBridgeModule.h; sourceTree = ""; }; 830A229C1A66C68A008503DA /* RCTRootView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTRootView.h; sourceTree = ""; }; 830A229D1A66C68A008503DA /* RCTRootView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTRootView.m; sourceTree = ""; }; @@ -177,6 +180,8 @@ 13B07FE01A69315300A75B9A /* Modules */ = { isa = PBXGroup; children = ( + 5F5F0D971A9E456B001279FA /* RCTLocationObserver.h */, + 5F5F0D981A9E456B001279FA /* RCTLocationObserver.m */, 13B07FE71A69327A00A75B9A /* RCTAlertManager.h */, 13B07FE81A69327A00A75B9A /* RCTAlertManager.m */, 13B07FE91A69327A00A75B9A /* RCTExceptionsManager.h */, @@ -376,6 +381,7 @@ 13B0801E1A69489C00A75B9A /* RCTTextField.m in Sources */, 13B07FEF1A69327A00A75B9A /* RCTAlertManager.m in Sources */, 83CBBACC1A6023D300E9B192 /* RCTConvert.m in Sources */, + 5F5F0D991A9E456B001279FA /* RCTLocationObserver.m in Sources */, 830A229E1A66C68A008503DA /* RCTRootView.m in Sources */, 1302F0FD1A78550100EBEF02 /* RCTStaticImage.m in Sources */, 13B07FF01A69327A00A75B9A /* RCTExceptionsManager.m in Sources */, diff --git a/ReactKit/Views/RCTNavigator.h b/ReactKit/Views/RCTNavigator.h index 5d928efa7bddbe..c9051c75387da4 100644 --- a/ReactKit/Views/RCTNavigator.h +++ b/ReactKit/Views/RCTNavigator.h @@ -11,7 +11,7 @@ @property (nonatomic, strong) UIView *reactNavSuperviewLink; @property (nonatomic, assign) NSInteger requestedTopOfStack; -- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher; +- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; /** * Schedules a JavaScript navigation and prevents `UIKit` from navigating until diff --git a/ReactKit/Views/RCTNavigator.m b/ReactKit/Views/RCTNavigator.m index 74e1621c25b1fd..be78fccd63b7ff 100644 --- a/ReactKit/Views/RCTNavigator.m +++ b/ReactKit/Views/RCTNavigator.m @@ -126,21 +126,6 @@ @interface RCTNavigationController : UINavigationController +- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; + /** * If the `contentSize` is not provided, then the `contentSize` will * automatically be determined by the size of the `RKScrollView` subview. @@ -32,6 +34,4 @@ @property (nonatomic, assign) BOOL centerContent; @property (nonatomic, copy) NSArray *stickyHeaderIndices; -- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher; - @end diff --git a/ReactKit/Views/RCTScrollView.m b/ReactKit/Views/RCTScrollView.m index d017c7edcf12c8..bd03d45de9fa15 100644 --- a/ReactKit/Views/RCTScrollView.m +++ b/ReactKit/Views/RCTScrollView.m @@ -31,8 +31,7 @@ @implementation RCTCustomScrollView - (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { + if ((self = [super initWithFrame:frame])) { [self.panGestureRecognizer addTarget:self action:@selector(handleCustomPan:)]; } return self; @@ -257,11 +256,6 @@ @implementation RCTScrollView @synthesize nativeMainScrollDelegate = _nativeMainScrollDelegate; -- (instancetype)initWithFrame:(CGRect)frame -{ - RCT_NOT_DESIGNATED_INITIALIZER(); -} - - (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher { if ((self = [super initWithFrame:CGRectZero])) { diff --git a/ReactKit/Views/RCTScrollViewManager.m b/ReactKit/Views/RCTScrollViewManager.m index 5100d11866ca14..afcf6436a0f244 100644 --- a/ReactKit/Views/RCTScrollViewManager.m +++ b/ReactKit/Views/RCTScrollViewManager.m @@ -31,23 +31,22 @@ - (UIView *)view RCT_EXPORT_VIEW_PROPERTY(showsVerticalScrollIndicator) RCT_EXPORT_VIEW_PROPERTY(stickyHeaderIndices); RCT_EXPORT_VIEW_PROPERTY(throttleScrollCallbackMS); -RCT_EXPORT_VIEW_PROPERTY(zoomScale); +RCT_EXPORT_VIEW_PROPERTY(zoomScale); // TODO: this needs to be set first because it resets other props like contentOffset RCT_EXPORT_VIEW_PROPERTY(contentInset); RCT_EXPORT_VIEW_PROPERTY(scrollIndicatorInsets); RCT_EXPORT_VIEW_PROPERTY(contentOffset); -+ (NSDictionary *)constantsToExport +- (NSDictionary *)constantsToExport { - return - @{ + return @{ @"DecelerationRate": @{ - @"Normal": @(UIScrollViewDecelerationRateNormal), - @"Fast": @(UIScrollViewDecelerationRateFast), + @"Normal": @(UIScrollViewDecelerationRateNormal), + @"Fast": @(UIScrollViewDecelerationRateFast), }, @"KeyboardDismissMode": @{ - @"None": @(UIScrollViewKeyboardDismissModeNone), - @"Interactive": @(UIScrollViewKeyboardDismissModeInteractive), - @"OnDrag": @(UIScrollViewKeyboardDismissModeOnDrag), + @"None": @(UIScrollViewKeyboardDismissModeNone), + @"Interactive": @(UIScrollViewKeyboardDismissModeInteractive), + @"OnDrag": @(UIScrollViewKeyboardDismissModeOnDrag), }, }; } diff --git a/ReactKit/Views/RCTShadowView.h b/ReactKit/Views/RCTShadowView.h index ec2b8c3537e4fa..9a09bad4fe48f2 100644 --- a/ReactKit/Views/RCTShadowView.h +++ b/ReactKit/Views/RCTShadowView.h @@ -3,29 +3,15 @@ #import #import "Layout.h" +#import "RCTUIManager.h" #import "RCTViewNodeProtocol.h" @class RCTSparseArray; -// TODO: amalgamate these enums? -typedef NS_ENUM(NSUInteger, RCTLayoutLifecycle) { - RCTLayoutLifecycleUninitialized = 0, - RCTLayoutLifecycleComputed, - RCTLayoutLifecycleDirtied, -}; - -// TODO: is this still needed? -typedef NS_ENUM(NSUInteger, RCTPropagationLifecycle) { - RCTPropagationLifecycleUninitialized = 0, - RCTPropagationLifecycleComputed, - RCTPropagationLifecycleDirtied, -}; - -// TODO: move this to text node? -typedef NS_ENUM(NSUInteger, RCTTextLifecycle) { - RCTTextLifecycleUninitialized = 0, - RCTTextLifecycleComputed, - RCTTextLifecycleDirtied, +typedef NS_ENUM(NSUInteger, RCTUpdateLifecycle) { + RCTUpdateLifecycleUninitialized = 0, + RCTUpdateLifecycleComputed, + RCTUpdateLifecycleDirtied, }; // TODO: is this redundact now? @@ -48,7 +34,7 @@ typedef void (^RCTApplierBlock)(RCTSparseArray *); @property (nonatomic, copy) NSString *moduleName; @property (nonatomic, assign) BOOL isBGColorExplicitlySet; // Used to propogate to children @property (nonatomic, strong) UIColor *backgroundColor; // Used to propogate to children -@property (nonatomic, assign) RCTLayoutLifecycle layoutLifecycle; +@property (nonatomic, assign) RCTUpdateLifecycle layoutLifecycle; /** * isNewView - Used to track the first time the view is introduced into the hierarchy. It is initialized YES, then is @@ -122,11 +108,23 @@ typedef void (^RCTApplierBlock)(RCTSparseArray *); @property (nonatomic, assign) css_wrap_type_t flexWrap; @property (nonatomic, assign) CGFloat flex; -- (void)collectUpdatedProperties:(NSMutableSet *)viewsWithNewProperties parentProperties:(NSDictionary *)parentProperties; +/** + * Calculate property changes that need to be propagated to the view. + * The applierBlocks set contains RCTApplierBlock functions that must be applied + * on the main thread in order to update the view. + */ +- (void)collectUpdatedProperties:(NSMutableSet *)applierBlocks parentProperties:(NSDictionary *)parentProperties; + +/** + * Calculate all views whose frame needs updating after layout has been calculated. + * The viewsWithNewFrame set contains the reactTags of the views that need updating. + */ - (void)collectRootUpdatedFrames:(NSMutableSet *)viewsWithNewFrame parentConstraint:(CGSize)parentConstraint; -- (void)fillCSSNode:(css_node_t *)node; -// The following are implementation details exposed to subclasses. Do not call them directly +/** + * The following are implementation details exposed to subclasses. Do not call them directly + */ +- (void)fillCSSNode:(css_node_t *)node; - (void)dirtyLayout; - (BOOL)isLayoutDirty; diff --git a/ReactKit/Views/RCTShadowView.m b/ReactKit/Views/RCTShadowView.m index 4877b0d6762d8b..f8c32763f3818f 100644 --- a/ReactKit/Views/RCTShadowView.m +++ b/ReactKit/Views/RCTShadowView.m @@ -10,46 +10,6 @@ typedef void (^RCTActionBlock)(RCTShadowView *shadowViewSelf, id value); typedef void (^RCTResetActionBlock)(RCTShadowView *shadowViewSelf); -@interface RCTLayoutAction : NSObject - -@property (nonatomic, readwrite, copy) RCTActionBlock block; -@property (nonatomic, readwrite, copy) RCTResetActionBlock resetBlock; -@property (nonatomic, readwrite, assign) NSInteger precedence; - -@end - -@implementation RCTLayoutAction @end - -#define ACTION_FOR_KEY_DEFAULT(name, default, blockIn) \ -do { \ - RCTLayoutAction *action = [[RCTLayoutAction alloc] init]; \ - action.block = blockIn; \ - action.resetBlock = ^(id idSelf1) { \ - blockIn(idSelf1, default); \ - }; \ - actions[@"" #name ""] = action; \ -} while(0) - -#define ACTION_FOR_KEY(name, blockIn) \ -ACTION_FOR_KEY_DEFAULT(name, @([defaultShadowView name]), (blockIn)) - -#define ACTION_FOR_FLOAT_KEY_DEFAULT(name, default, blockIn) \ -ACTION_FOR_KEY_DEFAULT(name, @(default), ^(id idSelf2, NSNumber *n) { \ - if (isnan([n floatValue])) { \ - RCTLogWarn(@"Got NaN for `"#name"` prop, ignoring"); \ - return; \ - } \ - blockIn(idSelf2, RCTNumberToFloat(n)); \ -}); - -#define ACTION_FOR_FLOAT_KEY(name, blockIn) \ -ACTION_FOR_FLOAT_KEY_DEFAULT(name, [defaultShadowView name], (blockIn)) - -#define ACTION_FOR_DEFAULT_UNDEFINED_KEY(name, blockIn) \ -ACTION_FOR_KEY_DEFAULT(name, nil, ^(id idSelf2, NSNumber *n) { \ - blockIn(idSelf2, n == nil ? CSS_UNDEFINED : [n floatValue]); \ -}); - #define MAX_TREE_DEPTH 30 const NSString *const RCTBackgroundColorProp = @"backgroundColor"; @@ -65,22 +25,16 @@ @implementation RCTLayoutAction @end META_PROP_COUNT, } meta_prop_t; -@interface RCTShadowView() -{ - float _paddingMetaProps[META_PROP_COUNT]; - float _marginMetaProps[META_PROP_COUNT]; -} - -@end - @implementation RCTShadowView { - RCTPropagationLifecycle _propagationLifecycle; - RCTTextLifecycle _textLifecycle; + RCTUpdateLifecycle _propagationLifecycle; + RCTUpdateLifecycle _textLifecycle; NSDictionary *_lastParentProperties; NSMutableArray *_reactSubviews; BOOL _recomputePadding; BOOL _recomputeMargin; + float _paddingMetaProps[META_PROP_COUNT]; + float _marginMetaProps[META_PROP_COUNT]; } @synthesize reactTag = _reactTag; @@ -131,11 +85,6 @@ - (void)fillCSSNode:(css_node_t *)node node->children_count = (int)_reactSubviews.count; } -- (void)applyLayoutNode:(css_node_t *)node viewsWithNewFrame:(NSMutableSet *)viewsWithNewFrame -{ - [self _applyLayoutNode:node viewsWithNewFrame:viewsWithNewFrame absolutePosition:CGPointZero]; -} - // The absolute stuff is so that we can take into account our absolute position when rounding in order to // snap to the pixel grid. For example, say you have the following structure: // @@ -165,24 +114,24 @@ - (void)applyLayoutNode:(css_node_t *)node viewsWithNewFrame:(NSMutableSet *)vie // width = 213.5 - 106.5 = 107 // You'll notice that this is the same width we calculated for the parent view because we've taken its position into account. -- (void)_applyLayoutNode:(css_node_t *)node viewsWithNewFrame:(NSMutableSet *)viewsWithNewFrame absolutePosition:(CGPoint)absolutePosition +- (void)applyLayoutNode:(css_node_t *)node viewsWithNewFrame:(NSMutableSet *)viewsWithNewFrame absolutePosition:(CGPoint)absolutePosition { if (!node->layout.should_update) { return; } node->layout.should_update = false; - _layoutLifecycle = RCTLayoutLifecycleComputed; + _layoutLifecycle = RCTUpdateLifecycleComputed; CGPoint absoluteTopLeft = { RCTRoundPixelValue(absolutePosition.x + node->layout.position[CSS_LEFT]), RCTRoundPixelValue(absolutePosition.y + node->layout.position[CSS_TOP]) }; - + CGPoint absoluteBottomRight = { RCTRoundPixelValue(absolutePosition.x + node->layout.position[CSS_LEFT] + node->layout.dimensions[CSS_WIDTH]), RCTRoundPixelValue(absolutePosition.y + node->layout.position[CSS_TOP] + node->layout.dimensions[CSS_HEIGHT]) }; - + CGRect frame = { RCTRoundPixelValue(node->layout.position[CSS_LEFT]), RCTRoundPixelValue(node->layout.position[CSS_TOP]), @@ -205,7 +154,7 @@ - (void)_applyLayoutNode:(css_node_t *)node viewsWithNewFrame:(NSMutableSet *)vi for (int i = 0; i < node->children_count; ++i) { RCTShadowView *child = (RCTShadowView *)_reactSubviews[i]; - [child _applyLayoutNode:node->get_child(node->context, i) viewsWithNewFrame:viewsWithNewFrame absolutePosition:absolutePosition]; + [child applyLayoutNode:node->get_child(node->context, i) viewsWithNewFrame:viewsWithNewFrame absolutePosition:absolutePosition]; } } @@ -238,10 +187,10 @@ - (NSDictionary *)processBackgroundColor:(NSMutableSet *)applierBlocks parentPro - (void)collectUpdatedProperties:(NSMutableSet *)applierBlocks parentProperties:(NSDictionary *)parentProperties { - if (_propagationLifecycle == RCTPropagationLifecycleComputed && [parentProperties isEqualToDictionary:_lastParentProperties]) { + if (_propagationLifecycle == RCTUpdateLifecycleComputed && [parentProperties isEqualToDictionary:_lastParentProperties]) { return; } - _propagationLifecycle = RCTPropagationLifecycleComputed; + _propagationLifecycle = RCTUpdateLifecycleComputed; _lastParentProperties = parentProperties; NSDictionary *nextProps = [self processBackgroundColor:applierBlocks parentProperties:parentProperties]; for (RCTShadowView *child in _reactSubviews) { @@ -253,7 +202,7 @@ - (void)collectRootUpdatedFrames:(NSMutableSet *)viewsWithNewFrame parentConstra { [self fillCSSNode:_cssNode]; layoutNode(_cssNode, CSS_UNDEFINED); - [self applyLayoutNode:_cssNode viewsWithNewFrame:viewsWithNewFrame]; + [self applyLayoutNode:_cssNode viewsWithNewFrame:viewsWithNewFrame absolutePosition:CGPointZero]; } + (CGRect)measureLayout:(RCTShadowView *)shadowView relativeTo:(RCTShadowView *)ancestor @@ -277,7 +226,7 @@ + (CGRect)measureLayout:(RCTShadowView *)shadowView relativeTo:(RCTShadowView *) - (instancetype)init { if ((self = [super init])) { - + _frame = CGRectMake(0, 0, CSS_UNDEFINED, CSS_UNDEFINED); for (int ii = 0; ii < META_PROP_COUNT; ii++) { @@ -286,9 +235,9 @@ - (instancetype)init } _newView = YES; - _layoutLifecycle = RCTLayoutLifecycleUninitialized; - _propagationLifecycle = RCTPropagationLifecycleUninitialized; - _textLifecycle = RCTTextLifecycleUninitialized; + _layoutLifecycle = RCTUpdateLifecycleUninitialized; + _propagationLifecycle = RCTUpdateLifecycleUninitialized; + _textLifecycle = RCTUpdateLifecycleUninitialized; _reactSubviews = [NSMutableArray array]; @@ -309,46 +258,46 @@ - (void)dealloc - (void)dirtyLayout { - if (_layoutLifecycle != RCTLayoutLifecycleDirtied) { - _layoutLifecycle = RCTLayoutLifecycleDirtied; + if (_layoutLifecycle != RCTUpdateLifecycleDirtied) { + _layoutLifecycle = RCTUpdateLifecycleDirtied; [_superview dirtyLayout]; } } - (BOOL)isLayoutDirty { - return _layoutLifecycle != RCTLayoutLifecycleComputed; + return _layoutLifecycle != RCTUpdateLifecycleComputed; } - (void)dirtyPropagation { - if (_propagationLifecycle != RCTPropagationLifecycleDirtied) { - _propagationLifecycle = RCTPropagationLifecycleDirtied; + if (_propagationLifecycle != RCTUpdateLifecycleDirtied) { + _propagationLifecycle = RCTUpdateLifecycleDirtied; [_superview dirtyPropagation]; } } - (BOOL)isPropagationDirty { - return _propagationLifecycle != RCTLayoutLifecycleComputed; + return _propagationLifecycle != RCTUpdateLifecycleComputed; } - (void)dirtyText { - if (_textLifecycle != RCTTextLifecycleDirtied) { - _textLifecycle = RCTTextLifecycleDirtied; + if (_textLifecycle != RCTUpdateLifecycleDirtied) { + _textLifecycle = RCTUpdateLifecycleDirtied; [_superview dirtyText]; } } - (BOOL)isTextDirty { - return _textLifecycle != RCTTextLifecycleComputed; + return _textLifecycle != RCTUpdateLifecycleComputed; } - (void)setTextComputed { - _textLifecycle = RCTTextLifecycleComputed; + _textLifecycle = RCTUpdateLifecycleComputed; } - (void)insertReactSubview:(RCTShadowView *)subview atIndex:(NSInteger)atIndex @@ -387,7 +336,6 @@ - (NSNumber *)reactTagAtPoint:(CGPoint)point return [shadowView reactTagAtPoint:relativePoint]; } } - return self.reactTag; } diff --git a/ReactKit/Views/RCTStaticImageManager.m b/ReactKit/Views/RCTStaticImageManager.m index 2cd08e1e274a10..84b782b1d6defb 100644 --- a/ReactKit/Views/RCTStaticImageManager.m +++ b/ReactKit/Views/RCTStaticImageManager.m @@ -16,8 +16,7 @@ - (UIView *)view RCT_EXPORT_VIEW_PROPERTY(capInsets) RCT_REMAP_VIEW_PROPERTY(resizeMode, contentMode) - -- (void)set_src:(id)json forView:(RCTStaticImage *)view withDefaultView:(RCTStaticImage *)defaultView +RCT_CUSTOM_VIEW_PROPERTY(src, RCTStaticImage *) { if (json) { if ([[[json description] pathExtension] caseInsensitiveCompare:@"gif"] == NSOrderedSame) { @@ -29,8 +28,7 @@ - (void)set_src:(id)json forView:(RCTStaticImage *)view withDefaultView:(RCTStat view.image = defaultView.image; } } - -- (void)set_tintColor:(id)json forView:(RCTStaticImage *)view withDefaultView:(RCTStaticImage *)defaultView +RCT_CUSTOM_VIEW_PROPERTY(tintColor, RCTStaticImage *) { if (json) { view.renderingMode = UIImageRenderingModeAlwaysTemplate; diff --git a/ReactKit/Views/RCTTextField.h b/ReactKit/Views/RCTTextField.h index 2a0225f27682d4..1688f8fdc0c138 100644 --- a/ReactKit/Views/RCTTextField.h +++ b/ReactKit/Views/RCTTextField.h @@ -10,6 +10,6 @@ @property (nonatomic, assign) BOOL autoCorrect; @property (nonatomic, assign) UIEdgeInsets paddingEdgeInsets; // TODO: contentInset -- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher; +- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; @end diff --git a/ReactKit/Views/RCTTextField.m b/ReactKit/Views/RCTTextField.m index 4a70e046001e78..b684517b358c4a 100644 --- a/ReactKit/Views/RCTTextField.m +++ b/ReactKit/Views/RCTTextField.m @@ -14,11 +14,6 @@ @implementation RCTTextField BOOL _jsRequestingFirstResponder; } -- (instancetype)initWithFrame:(CGRect)frame -{ - RCT_NOT_DESIGNATED_INITIALIZER(); -} - - (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher { if ((self = [super initWithFrame:CGRectZero])) { @@ -44,7 +39,7 @@ - (NSArray *)reactSubviews - (void)removeReactSubview:(UIView *)subview { - // TODO: this is a bit broken - if the TextView inserts any of + // TODO: this is a bit broken - if the TextField inserts any of // it's own views below or between React's, the indices won't match [_reactSubviews removeObject:subview]; [subview removeFromSuperview]; @@ -52,7 +47,7 @@ - (void)removeReactSubview:(UIView *)subview - (void)insertReactSubview:(UIView *)view atIndex:(NSInteger)atIndex { - // TODO: this is a bit broken - if the TextView inserts any of + // TODO: this is a bit broken - if the TextField inserts any of // it's own views below or between React's, the indices won't match [_reactSubviews insertObject:view atIndex:atIndex]; [super insertSubview:view atIndex:atIndex]; diff --git a/ReactKit/Views/RCTTextFieldManager.m b/ReactKit/Views/RCTTextFieldManager.m index 368bf1d7d12c79..5cdfd43a53074f 100644 --- a/ReactKit/Views/RCTTextFieldManager.m +++ b/ReactKit/Views/RCTTextFieldManager.m @@ -4,6 +4,7 @@ #import "RCTConvert.h" #import "RCTShadowView.h" +#import "RCTSparseArray.h" #import "RCTTextField.h" @implementation RCTTextFieldManager @@ -15,38 +16,34 @@ - (UIView *)view RCT_EXPORT_VIEW_PROPERTY(caretHidden) RCT_EXPORT_VIEW_PROPERTY(autoCorrect) +RCT_REMAP_VIEW_PROPERTY(autoCapitalize, autocapitalizationType) RCT_EXPORT_VIEW_PROPERTY(enabled) RCT_EXPORT_VIEW_PROPERTY(placeholder) RCT_EXPORT_VIEW_PROPERTY(text) RCT_EXPORT_VIEW_PROPERTY(font) RCT_EXPORT_VIEW_PROPERTY(clearButtonMode) -RCT_REMAP_VIEW_PROPERTY(autoCapitalize, autocapitalizationType) RCT_EXPORT_VIEW_PROPERTY(keyboardType) RCT_REMAP_VIEW_PROPERTY(color, textColor) - -- (void)set_fontSize:(id)json - forView:(RCTTextField *)view - withDefaultView:(RCTTextField *)defaultView +RCT_CUSTOM_VIEW_PROPERTY(fontSize, RCTTextField *) { view.font = [RCTConvert UIFont:view.font withSize:json ?: @(defaultView.font.pointSize)]; } - -- (void)set_FontWeight:(id)json - forView:(RCTTextField *)view - withDefaultView:(RCTTextField *)defaultView +RCT_CUSTOM_VIEW_PROPERTY(fontWeight, RCTTextField *) { view.font = [RCTConvert UIFont:view.font withWeight:json]; // TODO } - -- (void)set_fontFamily:(id)json - forView:(RCTTextField *)view - withDefaultView:(RCTTextField *)defaultView +RCT_CUSTOM_VIEW_PROPERTY(fontFamily, RCTTextField *) { view.font = [RCTConvert UIFont:view.font withFamily:json ?: defaultView.font.familyName]; } -// TODO: original code set view.paddingEdgeInsets from shadowView.paddingAsInsets -// could it be that this property is calculated asynchrously on shadow thread? +- (RCTViewManagerUIBlock)uiBlockToAmendWithShadowView:(RCTShadowView *)shadowView +{ + NSNumber *reactTag = shadowView.reactTag; + UIEdgeInsets padding = shadowView.paddingAsInsets; + return ^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) { + ((RCTTextField *)viewRegistry[reactTag]).paddingEdgeInsets = padding; + }; +} @end - diff --git a/ReactKit/Views/RCTUIActivityIndicatorViewManager.m b/ReactKit/Views/RCTUIActivityIndicatorViewManager.m index b7e0971e73953f..e56f01106824b2 100644 --- a/ReactKit/Views/RCTUIActivityIndicatorViewManager.m +++ b/ReactKit/Views/RCTUIActivityIndicatorViewManager.m @@ -13,12 +13,9 @@ - (UIView *)view RCT_EXPORT_VIEW_PROPERTY(activityIndicatorViewStyle) RCT_EXPORT_VIEW_PROPERTY(color) - -- (void)set_animating:(NSNumber *)value - forView:(UIActivityIndicatorView *)view - withDefaultView:(UIActivityIndicatorView *)defaultView +RCT_CUSTOM_VIEW_PROPERTY(animating, UIActivityIndicatorView *) { - BOOL animating = value ? [value boolValue] : [defaultView isAnimating]; + BOOL animating = json ? [json boolValue] : [defaultView isAnimating]; if (animating != [view isAnimating]) { if (animating) { [view startAnimating]; @@ -28,7 +25,7 @@ - (void)set_animating:(NSNumber *)value } } -+ (NSDictionary *)constantsToExport +- (NSDictionary *)constantsToExport { return @{ diff --git a/ReactKit/Views/RCTView.h b/ReactKit/Views/RCTView.h index 77dee1df8cab89..8023366331505d 100644 --- a/ReactKit/Views/RCTView.h +++ b/ReactKit/Views/RCTView.h @@ -11,7 +11,6 @@ @interface RCTView : UIView @property (nonatomic, assign) RCTPointerEvents pointerEvents; -@property (nonatomic, copy) NSString *overrideAccessibilityLabel; + (void)autoAdjustInsetsForView:(UIView *)parentView withScrollView:(UIScrollView *)scrollView diff --git a/ReactKit/Views/RCTView.m b/ReactKit/Views/RCTView.m index abe6f00d976fb8..dd014400934231 100644 --- a/ReactKit/Views/RCTView.m +++ b/ReactKit/Views/RCTView.m @@ -34,8 +34,8 @@ - (id)initWithFrame:(CGRect)frame - (NSString *)accessibilityLabel { - if (self.overrideAccessibilityLabel) { - return self.overrideAccessibilityLabel; + if (super.accessibilityLabel) { + return super.accessibilityLabel; } return RCTRecursiveAccessibilityLabel(self); } @@ -84,7 +84,7 @@ + (void)autoAdjustInsetsForView:(UIView *)parentView UIEdgeInsets baseInset = parentView.contentInset; CGFloat previousInsetTop = scrollView.contentInset.top; CGPoint contentOffset = scrollView.contentOffset; - + if (parentView.automaticallyAdjustContentInsets) { UIEdgeInsets autoInset = [self contentInsetsForView:parentView]; baseInset.top += autoInset.top; @@ -94,7 +94,7 @@ + (void)autoAdjustInsetsForView:(UIView *)parentView } [scrollView setContentInset:baseInset]; [scrollView setScrollIndicatorInsets:baseInset]; - + if (updateOffset) { // If we're adjusting the top inset, then let's also adjust the contentOffset so that the view // elements above the top guide do not cover the content. diff --git a/ReactKit/Views/RCTViewManager.h b/ReactKit/Views/RCTViewManager.h index e77be09c12baf4..d3b7c8a017aefe 100644 --- a/ReactKit/Views/RCTViewManager.h +++ b/ReactKit/Views/RCTViewManager.h @@ -2,9 +2,11 @@ #import +#import "RCTBridgeModule.h" #import "RCTConvert.h" #import "RCTLog.h" +@class RCTBridge; @class RCTEventDispatcher; @class RCTShadowView; @class RCTSparseArray; @@ -12,19 +14,22 @@ typedef void (^RCTViewManagerUIBlock)(RCTUIManager *uiManager, RCTSparseArray *viewRegistry); -@interface RCTViewManager : NSObject +@interface RCTViewManager : NSObject /** - * Designated initializer for view modules. Override this when subclassing. + * The bridge can be used to access both the RCTUIIManager and the RCTEventDispatcher, + * allowing the manager (or the views that it manages) to manipulate the view + * hierarchy and send events back to the JS context. */ -- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; +@property (nonatomic, strong) RCTBridge *bridge; /** * The event dispatcher is used to send events back to the JavaScript application. * It can either be used directly by the module, or passed on to instantiated * view subclasses so that they can handle their own events. */ -@property (nonatomic, readonly, weak) RCTEventDispatcher *eventDispatcher; +// TODO: remove this, as it can be accessed directly from bridge +@property (nonatomic, readonly) RCTEventDispatcher *eventDispatcher; /** * The module name exposed to React JS. If omitted, this will be inferred @@ -88,34 +93,19 @@ typedef void (^RCTViewManagerUIBlock)(RCTUIManager *uiManager, RCTSparseArray *v + (NSDictionary *)customDirectEventTypes; /** - * Injects constants into JS. These constants are made accessible via - * NativeModules.moduleName.X. Note that this method is not inherited when you - * subclass a view module, and you should not call [super constantsToExport] - * when overriding it. + * Called to notify manager that layout has finished, in case any calculated + * properties need to be copied over from shadow view to view. */ -+ (NSDictionary *)constantsToExport; +- (RCTViewManagerUIBlock)uiBlockToAmendWithShadowView:(RCTShadowView *)shadowView; /** - * To deprecate, hopefully + * Called after view hierarchy manipulation has finished, and all shadow props + * have been set, but before layout has been performed. Useful for performing + * custo layout logic or tasks that involve walking the view hierarchy. + * To be deprecated, hopefully. */ - (RCTViewManagerUIBlock)uiBlockToAmendWithShadowViewRegistry:(RCTSparseArray *)shadowViewRegistry; -/** - * Informal protocol for setting view and shadowView properties. - * Implement methods matching these patterns to set any properties that - * require special treatment (e.g. where the type or name cannot be inferred). - * - * - (void)set_:(id)property - * forView:(UIView *)view - * withDefaultView:(UIView *)defaultView; - * - * - (void)set_:(id)property - * forShadowView:(RCTShadowView *)view - * withDefaultView:(RCTShadowView *)defaultView; - * - * For simple cases, use the macros below: - */ - /** * This handles the simple case, where JS and native property names match * And the type can be automatically inferred. @@ -131,10 +121,21 @@ RCT_REMAP_VIEW_PROPERTY(name, name) - (void)set_##name:(id)json forView:(id)view withDefaultView:(id)defaultView { \ if ((json && !RCTSetProperty(view, @#keypath, json)) || \ (!json && !RCTCopyProperty(view, defaultView, @#keypath))) { \ - RCTLogMustFix(@"%@ does not have setter for `%s` property", [view class], #name); \ + RCTLogError(@"%@ does not have setter for `%s` property", [view class], #name); \ } \ } +/** + * These macros can be used when you need to provide custom logic for setting + * view properties. The macro should be followed by a method body, which can + * refer to "json", "view" and "defaultView" to implement the required logic. + */ +#define RCT_CUSTOM_VIEW_PROPERTY(name, viewType) \ +- (void)set_##name:(id)json forView:(viewType)view withDefaultView:(viewType)defaultView + +#define RCT_CUSTOM_SHADOW_PROPERTY(name, viewType) \ +- (void)set_##name:(id)json forShadowView:(viewType)view withDefaultView:(viewType)defaultView + /** * These are useful in cases where the module's superclass handles a * property, but you wish to "unhandle" it, so it will be ignored. diff --git a/ReactKit/Views/RCTViewManager.m b/ReactKit/Views/RCTViewManager.m index 05ecc2198fed84..d534e0e8b97a62 100644 --- a/ReactKit/Views/RCTViewManager.m +++ b/ReactKit/Views/RCTViewManager.m @@ -2,32 +2,33 @@ #import "RCTViewManager.h" +#import "RCTBridge.h" #import "RCTConvert.h" #import "RCTEventDispatcher.h" #import "RCTLog.h" #import "RCTShadowView.h" +#import "RCTUtils.h" #import "RCTView.h" @implementation RCTViewManager -- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher +@synthesize bridge = _bridge; + +- (RCTEventDispatcher *)eventDispatcher { - if ((self = [super init])) { - _eventDispatcher = eventDispatcher; - } - return self; + return _bridge.eventDispatcher; } + (NSString *)moduleName { // Default implementation, works in most cases NSString *name = NSStringFromClass(self); + if ([name hasPrefix:@"RK"]) { + name = [name stringByReplacingCharactersInRange:(NSRange){0,@"RK".length} withString:@"RCT"]; + } if ([name hasPrefix:@"RCTUI"]) { name = [name substringFromIndex:@"RCT".length]; } - if ([name hasSuffix:@"Manager"]) { - name = [name substringToIndex:name.length - @"Manager".length]; - } return name; } @@ -51,7 +52,12 @@ + (NSDictionary *)customDirectEventTypes return nil; } -+ (NSDictionary *)constantsToExport +- (NSDictionary *)constantsToExport +{ + return nil; +} + +- (RCTViewManagerUIBlock)uiBlockToAmendWithShadowView:(RCTShadowView *)shadowView { return nil; } @@ -77,28 +83,22 @@ - (RCTViewManagerUIBlock)uiBlockToAmendWithShadowViewRegistry:(RCTSparseArray *) RCT_REMAP_VIEW_PROPERTY(borderRadius, layer.cornerRadius) RCT_REMAP_VIEW_PROPERTY(borderWidth, layer.borderWidth) RCT_REMAP_VIEW_PROPERTY(transformMatrix, layer.transform) - -- (void)set_overflow:(id)json - forView:(UIView *)view - withDefaultView:(UIView *)defaultView +RCT_CUSTOM_VIEW_PROPERTY(overflow, UIView *) { view.clipsToBounds = json ? ![RCTConvert css_overflow:json] : defaultView.clipsToBounds; } - -- (void)set_pointerEvents:(id)json - forView:(RCTView *)view - withDefaultView:(RCTView *)defaultView +RCT_CUSTOM_VIEW_PROPERTY(pointerEvents, RCTView *) { if ([view respondsToSelector:@selector(setPointerEvents:)]) { view.pointerEvents = json ? [RCTConvert RCTPointerEvents:json] : defaultView.pointerEvents; return; } - + if (!json) { view.userInteractionEnabled = defaultView.userInteractionEnabled; return; } - + switch ([RCTConvert NSInteger:json]) { case RCTPointerEventsUnspecified: // Pointer events "unspecified" acts as if a stylesheet had not specified, @@ -117,54 +117,34 @@ - (void)set_pointerEvents:(id)json // ShadowView properties -- (void)set_backgroundColor:(id)json - forShadowView:(RCTShadowView *)shadowView - withDefaultView:(RCTShadowView *)defaultView +RCT_CUSTOM_SHADOW_PROPERTY(backgroundColor, RCTShadowView *) { - shadowView.backgroundColor = json ? [RCTConvert UIColor:json] : defaultView.backgroundColor; - shadowView.isBGColorExplicitlySet = json ? YES : defaultView.isBGColorExplicitlySet; + view.backgroundColor = json ? [RCTConvert UIColor:json] : defaultView.backgroundColor; + view.isBGColorExplicitlySet = json ? YES : defaultView.isBGColorExplicitlySet; } - -- (void)set_flexDirection:(id)json - forShadowView:(RCTShadowView *)shadowView - withDefaultView:(RCTShadowView *)defaultView +RCT_CUSTOM_SHADOW_PROPERTY(flexDirection, RCTShadowView *) { - shadowView.flexDirection = json? [RCTConvert css_flex_direction_t:json] : defaultView.flexDirection; + view.flexDirection = json? [RCTConvert css_flex_direction_t:json] : defaultView.flexDirection; } - -- (void)set_flexWrap:(id)json - forShadowView:(RCTShadowView *)shadowView - withDefaultView:(RCTShadowView *)defaultView +RCT_CUSTOM_SHADOW_PROPERTY(flexWrap, RCTShadowView *) { - shadowView.flexWrap = json ? [RCTConvert css_wrap_type_t:json] : defaultView.flexWrap; + view.flexWrap = json ? [RCTConvert css_wrap_type_t:json] : defaultView.flexWrap; } - -- (void)set_justifyContent:(id)json - forShadowView:(RCTShadowView *)shadowView - withDefaultView:(RCTShadowView *)defaultView +RCT_CUSTOM_SHADOW_PROPERTY(justifyContent, RCTShadowView *) { - shadowView.justifyContent = json ? [RCTConvert css_justify_t:json] : defaultView.justifyContent; + view.justifyContent = json ? [RCTConvert css_justify_t:json] : defaultView.justifyContent; } - -- (void)set_alignItems:(id)json - forShadowView:(RCTShadowView *)shadowView - withDefaultView:(RCTShadowView *)defaultView +RCT_CUSTOM_SHADOW_PROPERTY(alignItems, RCTShadowView *) { - shadowView.alignItems = json ? [RCTConvert css_align_t:json] : defaultView.alignItems; + view.alignItems = json ? [RCTConvert css_align_t:json] : defaultView.alignItems; } - -- (void)set_alignSelf:(id)json - forShadowView:(RCTShadowView *)shadowView - withDefaultView:(RCTShadowView *)defaultView +RCT_CUSTOM_SHADOW_PROPERTY(alignSelf, RCTShadowView *) { - shadowView.alignSelf = json ? [RCTConvert css_align_t:json] : defaultView.alignSelf; + view.alignSelf = json ? [RCTConvert css_align_t:json] : defaultView.alignSelf; } - -- (void)set_position:(id)json - forShadowView:(RCTShadowView *)shadowView - withDefaultView:(RCTShadowView *)defaultView +RCT_CUSTOM_SHADOW_PROPERTY(position, RCTShadowView *) { - shadowView.positionType = json ? [RCTConvert css_position_type_t:json] : defaultView.positionType; + view.positionType = json ? [RCTConvert css_position_type_t:json] : defaultView.positionType; } @end diff --git a/ReactKit/Views/RCTWrapperViewController.h b/ReactKit/Views/RCTWrapperViewController.h index d8f22270a23c63..69075c6a4dcb92 100644 --- a/ReactKit/Views/RCTWrapperViewController.h +++ b/ReactKit/Views/RCTWrapperViewController.h @@ -15,8 +15,11 @@ didMoveToNavigationController:(UINavigationController *)navigationController; @interface RCTWrapperViewController : UIViewController -- (instancetype)initWithContentView:(UIView *)contentView eventDispatcher:(RCTEventDispatcher *)eventDispatcher; -- (instancetype)initWithNavItem:(RCTNavItem *)navItem eventDispatcher:(RCTEventDispatcher *)eventDispatcher; +- (instancetype)initWithContentView:(UIView *)contentView + eventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER; + +- (instancetype)initWithNavItem:(RCTNavItem *)navItem + eventDispatcher:(RCTEventDispatcher *)eventDispatcher; @property (nonatomic, readwrite, weak) id navigationListener; @property (nonatomic, strong, readwrite) RCTNavItem *navItem; diff --git a/ReactKit/Views/RCTWrapperViewController.m b/ReactKit/Views/RCTWrapperViewController.m index d027dc2f29439e..6b58d6631433c7 100644 --- a/ReactKit/Views/RCTWrapperViewController.m +++ b/ReactKit/Views/RCTWrapperViewController.m @@ -15,11 +15,6 @@ @implementation RCTWrapperViewController CGFloat _previousBottomLayout; } -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - RCT_NOT_DESIGNATED_INITIALIZER(); -} - - (instancetype)initWithContentView:(UIView *)contentView eventDispatcher:(RCTEventDispatcher *)eventDispatcher { if ((self = [super initWithNibName:nil bundle:nil])) { diff --git a/jestSupport/scriptPreprocess.js b/jestSupport/scriptPreprocess.js index 02d3f63414603c..2764b35bd68b89 100644 --- a/jestSupport/scriptPreprocess.js +++ b/jestSupport/scriptPreprocess.js @@ -2,8 +2,8 @@ var transformer = require('../packager/transformer.js'); -function transformSource(src) { - return transformer.transform(null, src).code; +function transformSource(src, filename) { + return transformer.transform(src, filename).code; } module.exports = { @@ -15,7 +15,7 @@ module.exports = { } try { - return transformSource(src); + return transformSource(src, fileName); } catch(e) { throw new Error('\nError transforming file:\n js/' + (fileName.split('/js/')[1] || fileName) + ':' + e.lineNumber + ': \'' + diff --git a/packager/react-packager/src/Activity/__tests__/Activity-test.js b/packager/react-packager/src/Activity/__tests__/Activity-test.js index bd0265f96410e4..7fe31614820512 100644 --- a/packager/react-packager/src/Activity/__tests__/Activity-test.js +++ b/packager/react-packager/src/Activity/__tests__/Activity-test.js @@ -10,6 +10,7 @@ describe('Activity', function() { beforeEach(function() { console.log = jest.genMockFn(); Activity = require('../'); + jest.runOnlyPendingTimers(); }); afterEach(function() { @@ -60,12 +61,15 @@ describe('Activity', function() { expect(function() { Activity.endEvent(eid); - }).toThrow('event(1) has already ended!'); + }).toThrow('event(3) has already ended!'); + + jest.runOnlyPendingTimers(); }); }); describe('signal', function() { it('writes a SIGNAL event out to the console', function() { + var EVENT_NAME = 'EVENT_NAME'; var DATA = {someData: 42}; diff --git a/packager/react-packager/src/DependencyResolver/haste/DependencyGraph/__tests__/DependencyGraph-test.js b/packager/react-packager/src/DependencyResolver/haste/DependencyGraph/__tests__/DependencyGraph-test.js index 1c268c6b0f0837..eb839296c6724b 100644 --- a/packager/react-packager/src/DependencyResolver/haste/DependencyGraph/__tests__/DependencyGraph-test.js +++ b/packager/react-packager/src/DependencyResolver/haste/DependencyGraph/__tests__/DependencyGraph-test.js @@ -5,7 +5,6 @@ jest .dontMock('q') .dontMock('path') .dontMock('absolute-path') - .dontMock('../../../../fb-path-utils') .dontMock('../docblock') .setMock('../../../ModuleDescriptor', function(data) {return data;}); diff --git a/packager/react-packager/src/FileWatcher/__mocks__/sane.js b/packager/react-packager/src/FileWatcher/__mocks__/sane.js new file mode 100644 index 00000000000000..20dda2a2bf8e20 --- /dev/null +++ b/packager/react-packager/src/FileWatcher/__mocks__/sane.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + WatchmanWatcher: jest.genMockFromModule('sane/src/watchman_watcher') +}; diff --git a/packager/react-packager/src/JSTransformer/__mocks__/q.js b/packager/react-packager/src/JSTransformer/__mocks__/q.js new file mode 100644 index 00000000000000..3d4d21f15a5002 --- /dev/null +++ b/packager/react-packager/src/JSTransformer/__mocks__/q.js @@ -0,0 +1,6 @@ +'use strict'; + +// Bug with Jest because we're going to the node_modules that is a sibling +// of what jest thinks our root (the dir with the package.json) should be. + +module.exports = require.requireActual('q'); diff --git a/packager/react-packager/src/JSTransformer/__mocks__/underscore.js b/packager/react-packager/src/JSTransformer/__mocks__/underscore.js new file mode 100644 index 00000000000000..a985ab2069aca2 --- /dev/null +++ b/packager/react-packager/src/JSTransformer/__mocks__/underscore.js @@ -0,0 +1,5 @@ +'use strict'; + +// Bug with Jest because we're going to the node_modules that is a sibling +// of what jest thinks our root (the dir with the package.json) should be. +module.exports = require.requireActual('underscore'); diff --git a/packager/react-packager/src/JSTransformer/__tests__/Cache-test.js b/packager/react-packager/src/JSTransformer/__tests__/Cache-test.js index 232d6ff4468d1f..97a500973ade7c 100644 --- a/packager/react-packager/src/JSTransformer/__tests__/Cache-test.js +++ b/packager/react-packager/src/JSTransformer/__tests__/Cache-test.js @@ -3,7 +3,6 @@ jest .dontMock('underscore') .dontMock('path') - .dontMock('q') .dontMock('absolute-path') .dontMock('../Cache'); @@ -194,7 +193,7 @@ describe('JSTransformer Cache', function() { return q('baz value'); }); - jest.runAllTimers(); + jest.runAllTicks(); expect(fs.writeFile).toBeCalled(); }); }); diff --git a/packager/react-packager/src/JSTransformer/__tests__/Transformer-test.js b/packager/react-packager/src/JSTransformer/__tests__/Transformer-test.js index 6c9c66446f2558..36d81d8fa2df39 100644 --- a/packager/react-packager/src/JSTransformer/__tests__/Transformer-test.js +++ b/packager/react-packager/src/JSTransformer/__tests__/Transformer-test.js @@ -2,7 +2,6 @@ jest .dontMock('worker-farm') - .dontMock('q') .dontMock('os') .dontMock('../index'); @@ -36,7 +35,7 @@ describe('Transformer', function() { callback(null, 'content'); }); - return new Transformer(OPTIONS).loadFileAndTransform([], 'file', {}) + return new Transformer(OPTIONS).loadFileAndTransform('file') .then(function(data) { expect(data).toEqual({ code: 'transformed', @@ -59,7 +58,7 @@ describe('Transformer', function() { callback(null, {error: esprimaError}); }); - return new Transformer(OPTIONS).loadFileAndTransform([], 'foo-file.js', {}) + return new Transformer(OPTIONS).loadFileAndTransform('foo-file.js') .catch(function(error) { expect(error.type).toEqual('TransformError'); expect(error.snippet).toEqual([ diff --git a/packager/react-packager/src/JSTransformer/index.js b/packager/react-packager/src/JSTransformer/index.js index e3e713eefae787..87cb6e1a373720 100644 --- a/packager/react-packager/src/JSTransformer/index.js +++ b/packager/react-packager/src/JSTransformer/index.js @@ -78,11 +78,7 @@ Transformer.prototype.invalidateFile = function(filePath) { this._cache.invalidate(filePath); }; -Transformer.prototype.loadFileAndTransform = function( - transformSets, - filePath, - options -) { +Transformer.prototype.loadFileAndTransform = function(filePath) { if (this._failedToStart) { return this._failedToStart; } @@ -92,15 +88,14 @@ Transformer.prototype.loadFileAndTransform = function( return readFile(filePath) .then(function(buffer) { var sourceCode = buffer.toString(); - var opts = _.extend({}, options, {filename: filePath}); + return q.nfbind(workers)({ - transformSets: transformSets, sourceCode: sourceCode, - options: opts, + filename: filePath, }).then( function(res) { if (res.error) { - throw formatEsprimaError(res.error, filePath, sourceCode); + throw formatError(res.error, filePath, sourceCode); } return { @@ -117,11 +112,26 @@ Transformer.prototype.loadFileAndTransform = function( function TransformError() {} util.inherits(TransformError, SyntaxError); -function formatEsprimaError(err, filename, source) { - if (!(err.lineNumber && err.column)) { - return err; +function formatError(err, filename, source) { + if (err.lineNumber && err.column) { + return formatEsprimaError(err, filename, source); + } else { + return formatGenericError(err, filename, source); } +} + +function formatGenericError(err, filename) { + var msg = 'TransformError: ' + filename + ': ' + err.message; + var error = new TransformError(); + var stack = err.stack.split('\n').slice(0, -1); + stack.push(msg); + error.stack = stack.join('\n'); + error.message = msg; + error.type = 'TransformError'; + return error; +} +function formatEsprimaError(err, filename, source) { var stack = err.stack.split('\n'); stack.shift(); diff --git a/packager/react-packager/src/Packager/__tests__/Package-test.js b/packager/react-packager/src/Packager/__tests__/Package-test.js index d269eb57798cad..74a2f43792dcc3 100644 --- a/packager/react-packager/src/Packager/__tests__/Package-test.js +++ b/packager/react-packager/src/Packager/__tests__/Package-test.js @@ -1,10 +1,6 @@ 'use strict'; -jest - .dontMock('underscore') - .dontMock('../base64-vlq') - .dontMock('source-map') - .dontMock('../Package'); +jest.autoMockOff(); var SourceMapGenerator = require('source-map').SourceMapGenerator; diff --git a/packager/react-packager/src/Packager/__tests__/Packager-test.js b/packager/react-packager/src/Packager/__tests__/Packager-test.js index 21af12ca82b83f..2e43e91a9e5051 100644 --- a/packager/react-packager/src/Packager/__tests__/Packager-test.js +++ b/packager/react-packager/src/Packager/__tests__/Packager-test.js @@ -49,7 +49,7 @@ describe('Packager', function() { }); require('../../JSTransformer').prototype.loadFileAndTransform - .mockImpl(function(tsets, path) { + .mockImpl(function(path) { return q({ code: 'transformed ' + path, sourceCode: 'source ' + path, diff --git a/packager/react-packager/src/Packager/index.js b/packager/react-packager/src/Packager/index.js index 42295acc829251..123a391339147d 100644 --- a/packager/react-packager/src/Packager/index.js +++ b/packager/react-packager/src/Packager/index.js @@ -126,9 +126,7 @@ Packager.prototype.getDependencies = function(main) { Packager.prototype._transformModule = function(module) { var resolver = this._resolver; return this._transformer.loadFileAndTransform( - ['es6'], - path.resolve(module.path), - this._opts.transformer || {} + path.resolve(module.path) ).then(function(transformed) { return _.extend( {}, diff --git a/packager/react-packager/src/Server/__tests__/Server-test.js b/packager/react-packager/src/Server/__tests__/Server-test.js index a9951f60186563..e6020c79bcdd97 100644 --- a/packager/react-packager/src/Server/__tests__/Server-test.js +++ b/packager/react-packager/src/Server/__tests__/Server-test.js @@ -3,9 +3,13 @@ jest.setMock('worker-farm', function() { return function() {}; }) .dontMock('q') .dontMock('os') - .dontMock('errno/custom') .dontMock('path') .dontMock('url') + .setMock('timers', { + setImmediate: function(fn) { + return setTimeout(fn, 0); + } + }) .dontMock('../'); var q = require('q'); @@ -75,16 +79,16 @@ describe('processRequest', function() { }); pit('returns sourcemap on request of *.map', function() { - makeRequest( + return makeRequest( requestHandler, 'mybundle.includeRequire.runModule.bundle.map' ).then(function(response) { - expect(response).toEqual('this is the source map'); + expect(response).toEqual('"this is the source map"'); }); }); pit('watches all files in projectRoot', function() { - makeRequest( + return makeRequest( requestHandler, 'mybundle.includeRequire.runModule.bundle' ).then(function(response) { @@ -107,7 +111,7 @@ describe('processRequest', function() { }); pit('invalides files in package when file is updated', function() { - makeRequest( + return makeRequest( requestHandler, 'mybundle.includeRequire.runModule.bundle' ).then(function(response) { diff --git a/packager/react-packager/src/Server/index.js b/packager/react-packager/src/Server/index.js index 14b18c96572976..accce205a2f2cc 100644 --- a/packager/react-packager/src/Server/index.js +++ b/packager/react-packager/src/Server/index.js @@ -6,6 +6,7 @@ var declareOpts = require('../lib/declareOpts'); var FileWatcher = require('../FileWatcher'); var Packager = require('../Packager'); var Activity = require('../Activity'); +var setImmediate = require('timers').setImmediate; var q = require('q'); module.exports = Server; diff --git a/packager/transformer.js b/packager/transformer.js index ffcb80e2dc894f..acb586d7f0ff50 100644 --- a/packager/transformer.js +++ b/packager/transformer.js @@ -16,10 +16,11 @@ var staticTypeSyntax = var visitorList = reactVisitors; -function transform(transformSets, srcTxt) { +function transform(srcTxt, filename) { var options = { es3: true, - sourceType: 'nonStrictModule' + sourceType: 'nonStrictModule', + filename: filename, }; // These tranforms mostly just erase type annotations and static typing @@ -42,8 +43,8 @@ module.exports = function(data, callback) { var result; try { result = transform( - data.transformSets, - data.sourceCode + data.sourceCode, + data.filename ); } catch (e) { return callback(null, {