From b149bd53b3e6f47636eddfb276fbefb75da74045 Mon Sep 17 00:00:00 2001
From: James Ide <ide@jameside.com>
Date: Tue, 17 Feb 2015 00:34:01 -0800
Subject: [PATCH] [Headers] Add an umbrella header for the library

The umbrella header allows projects that link React Native using CocoaPods to import it in standard fashion: `#import <React/React.h>`. Only some headers are included based on what I've found to be useful.

Generated with `scripts/generate-umbrella-header.sh`, which is a script that scans the Base and Executors directories for all headers and also includes some handpicked Views headers as well.
---
 React/React.h                         | 56 +++++++++++++++++++++++++++
 React/React.xcodeproj/project.pbxproj |  3 ++
 scripts/generate-umbrella-header.sh   | 49 +++++++++++++++++++++++
 3 files changed, 108 insertions(+)
 create mode 100644 React/React.h
 create mode 100755 scripts/generate-umbrella-header.sh

diff --git a/React/React.h b/React/React.h
new file mode 100644
index 00000000000000..c12640033ab45d
--- /dev/null
+++ b/React/React.h
@@ -0,0 +1,56 @@
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+#import "RCTAssert.h"
+#import "RCTBridge.h"
+#import "RCTBridgeModule.h"
+#import "RCTCache.h"
+#import "RCTConvert.h"
+#import "RCTDefines.h"
+#import "RCTDevMenu.h"
+#import "RCTEventDispatcher.h"
+#import "RCTFPSGraph.h"
+#import "RCTFrameUpdate.h"
+#import "RCTInvalidating.h"
+#import "RCTJavaScriptExecutor.h"
+#import "RCTJavaScriptLoader.h"
+#import "RCTJSMethodRegistrar.h"
+#import "RCTKeyCommands.h"
+#import "RCTLog.h"
+#import "RCTModuleData.h"
+#import "RCTModuleMethod.h"
+#import "RCTPerformanceLogger.h"
+#import "RCTPerfStats.h"
+#import "RCTProfile.h"
+#import "RCTRedBox.h"
+#import "RCTRootView.h"
+#import "RCTSparseArray.h"
+#import "RCTTouchHandler.h"
+#import "RCTURLRequestDelegate.h"
+#import "RCTURLRequestHandler.h"
+#import "RCTUtils.h"
+
+#import "RCTContextExecutor.h"
+#import "RCTWebViewExecutor.h"
+
+#import "RCTExceptionsManager.h"
+#import "RCTUIManager.h"
+
+#import "RCTAnimationType.h"
+#import "RCTAutoInsetsProtocol.h"
+#import "RCTConvert+CoreLocation.h"
+#import "RCTConvert+MapKit.h"
+#import "RCTPointerEvents.h"
+#import "RCTScrollableProtocol.h"
+#import "RCTShadowView.h"
+#import "RCTView.h"
+#import "RCTViewControllerProtocol.h"
+#import "RCTViewManager.h"
+#import "RCTViewNodeProtocol.h"
+#import "UIView+React.h"
diff --git a/React/React.xcodeproj/project.pbxproj b/React/React.xcodeproj/project.pbxproj
index 1e193d9b2c9b07..0b425a58d82367 100644
--- a/React/React.xcodeproj/project.pbxproj
+++ b/React/React.xcodeproj/project.pbxproj
@@ -212,6 +212,8 @@
 		58C571C01AA56C1900CDF9C8 /* RCTDatePickerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTDatePickerManager.h; sourceTree = "<group>"; };
 		63F014BE1B02080B003B75D2 /* RCTPointAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTPointAnnotation.h; sourceTree = "<group>"; };
 		63F014BF1B02080B003B75D2 /* RCTPointAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTPointAnnotation.m; sourceTree = "<group>"; };
+		783ABB341B38A9D3003FFD95 /* RCTJavaScriptExecutor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTJavaScriptExecutor.m; sourceTree = "<group>"; };
+		78BEE2481ABABC2E00F44561 /* React.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = React.h; sourceTree = "<group>"; };
 		830213F31A654E0800B993E6 /* RCTBridgeModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTBridgeModule.h; sourceTree = "<group>"; };
 		830A229C1A66C68A008503DA /* RCTRootView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTRootView.h; sourceTree = "<group>"; };
 		830A229D1A66C68A008503DA /* RCTRootView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTRootView.m; sourceTree = "<group>"; };
@@ -396,6 +398,7 @@
 		83CBBA2F1A601D0F00E9B192 /* React */ = {
 			isa = PBXGroup;
 			children = (
+				78BEE2481ABABC2E00F44561 /* React.h */,
 				83CBBA491A601E3B00E9B192 /* Base */,
 				134FCB381A6E7F0800051CC8 /* Executors */,
 				13B07FC41A68125100A75B9A /* Layout */,
diff --git a/scripts/generate-umbrella-header.sh b/scripts/generate-umbrella-header.sh
new file mode 100755
index 00000000000000..c7a56ea2d5ae64
--- /dev/null
+++ b/scripts/generate-umbrella-header.sh
@@ -0,0 +1,49 @@
+#!/usr/bin/env bash
+
+set -e
+
+SCRIPTS=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
+ROOT=$(dirname $SCRIPTS)
+
+LIBRARY_NAME="React"
+UMBRELLA_HEADER_PATH="${ROOT}/React/${LIBRARY_NAME}.h"
+
+cd $ROOT
+
+LIBRARY_HEADERS="\
+$(find React/Base -name "*.h" -exec basename {} \;)
+
+$(find React/Executors -name "*.h" -exec basename {} \;)
+
+RCTExceptionsManager.h
+RCTUIManager.h
+
+RCTAnimationType.h
+RCTAutoInsetsProtocol.h
+RCTConvert+CoreLocation.h
+RCTConvert+MapKit.h
+RCTPointerEvents.h
+RCTScrollableProtocol.h
+RCTShadowView.h
+RCTView.h
+RCTViewControllerProtocol.h
+RCTViewManager.h
+RCTViewNodeProtocol.h
+UIView+React.h\
+"
+
+echo \
+"/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+$(
+  echo "${LIBRARY_HEADERS}" |
+  awk -v lib="${LIBRARY_NAME}" '{if (NF) print "#import \""$0"\""; else print;}'
+ )\
+" > "${UMBRELLA_HEADER_PATH}"