mirror of
https://github.com/status-im/react-native.git
synced 2025-01-10 09:35:48 +00:00
2f9bd1f62f
Summary: This adds workarounds for the code that was preventing React from compiling when linked against an iOS App Extension target. Some iOS APIs are unavailable to App Extensions, and Xcode's static analysis will catch attempts to use methods that have been flagged as unavailable. React currently uses two APIs that are off limits to extensions: `[UIApplication sharedApplication]` and `[UIAlertView initWith ...]`. This commit adds a helper function to `RCTUtils.[hm]` called `RCTRunningInAppExtension()`, which returns `YES` if, at runtime, it can be determined that we're running in an app extension (by checking whether the path to `[NSBundle mainBundle]` has the `"appex"` path extension). It also adds a `RCTSharedApplication()` function, which will return `nil` if running in an App Extension. If running in an App, `RCTSharedApplication()` calls `sharedApplication` by calling `performSelector:` on the `UIApplication` class. This passes the static analysis check, and, in my opinion, obeys the "spirit of th Closes https://github.com/facebook/react-native/pull/1895 Reviewed By: @svcscm Differential Revision: D2224128 Pulled By: @nicklockwood
80 lines
3.0 KiB
Objective-C
80 lines
3.0 KiB
Objective-C
/**
|
|
* 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 <tgmath.h>
|
|
|
|
#import <CoreGraphics/CoreGraphics.h>
|
|
#import <Foundation/Foundation.h>
|
|
#import <UIKit/UIKit.h>
|
|
|
|
#import "RCTAssert.h"
|
|
#import "RCTDefines.h"
|
|
|
|
// JSON serialization/deserialization
|
|
RCT_EXTERN NSString *RCTJSONStringify(id jsonObject, NSError **error);
|
|
RCT_EXTERN id RCTJSONParse(NSString *jsonString, NSError **error);
|
|
RCT_EXTERN id RCTJSONParseMutable(NSString *jsonString, NSError **error);
|
|
|
|
// Strip non JSON-safe values from an object graph
|
|
RCT_EXTERN id RCTJSONClean(id object);
|
|
|
|
// Get MD5 hash of a string
|
|
RCT_EXTERN NSString *RCTMD5Hash(NSString *string);
|
|
|
|
// Get screen metrics in a thread-safe way
|
|
RCT_EXTERN CGFloat RCTScreenScale(void);
|
|
RCT_EXTERN CGSize RCTScreenSize(void);
|
|
|
|
// Round float coordinates to nearest whole screen pixel (not point)
|
|
RCT_EXTERN CGFloat RCTRoundPixelValue(CGFloat value);
|
|
RCT_EXTERN CGFloat RCTCeilPixelValue(CGFloat value);
|
|
RCT_EXTERN CGFloat RCTFloorPixelValue(CGFloat value);
|
|
|
|
// Method swizzling
|
|
RCT_EXTERN void RCTSwapClassMethods(Class cls, SEL original, SEL replacement);
|
|
RCT_EXTERN void RCTSwapInstanceMethods(Class cls, SEL original, SEL replacement);
|
|
|
|
// Module subclass support
|
|
RCT_EXTERN BOOL RCTClassOverridesClassMethod(Class cls, SEL selector);
|
|
RCT_EXTERN BOOL RCTClassOverridesInstanceMethod(Class cls, SEL selector);
|
|
|
|
// Creates a standardized error object
|
|
RCT_EXTERN NSDictionary *RCTMakeError(NSString *message, id toStringify, NSDictionary *extraData);
|
|
RCT_EXTERN NSDictionary *RCTMakeAndLogError(NSString *message, id toStringify, NSDictionary *extraData);
|
|
RCT_EXTERN NSDictionary *RCTJSErrorFromNSError(NSError *error);
|
|
|
|
// Returns YES if React is running in a test environment
|
|
RCT_EXTERN BOOL RCTRunningInTestEnvironment(void);
|
|
|
|
// Returns YES if React is running in an iOS App Extension
|
|
RCT_EXTERN BOOL RCTRunningInAppExtension(void);
|
|
|
|
// Returns the shared UIApplication instance, or nil if running in an App Extension
|
|
RCT_EXTERN UIApplication *RCTSharedApplication(void);
|
|
|
|
// Return a UIAlertView initialized with the given values
|
|
// or nil if running in an app extension
|
|
RCT_EXTERN UIAlertView *RCTAlertView(NSString *title, NSString *message, id delegate, NSString *cancelButtonTitle, NSArray *otherButtonTitles);
|
|
|
|
// Return YES if image has an alpha component
|
|
RCT_EXTERN BOOL RCTImageHasAlpha(CGImageRef image);
|
|
|
|
// Create an NSError in the RCTErrorDomain
|
|
RCT_EXTERN NSError *RCTErrorWithMessage(NSString *message);
|
|
|
|
// Convert nil values to NSNull, and vice-versa
|
|
RCT_EXTERN id RCTNilIfNull(id value);
|
|
RCT_EXTERN id RCTNullIfNil(id value);
|
|
|
|
// Convert data to a Base64-encoded data URL
|
|
RCT_EXTERN NSURL *RCTDataURL(NSString *mimeType, NSData *data);
|
|
|
|
// Gzip functionality - compression level in range 0 - 1 (-1 for default)
|
|
RCT_EXTERN NSData *RCTGzipData(NSData *data, float level);
|