Increased warning levels to -Wall -Wextra, and fixed Xcode 7 beta issues
Summary: @public I've increased the warning levels in the OSS frameworks, which caught a bunch of minor issues. I also fixed some new errors in Xcode 7 relating to designated initializers and TLS security. Test Plan: * Test the sample apps and make sure they still work. * Run tests.
This commit is contained in:
Родитель
d270dca210
Коммит
650fc9de4c
|
@ -159,7 +159,7 @@
|
||||||
83CBB9F71A601CBA00E9B192 /* Project object */ = {
|
83CBB9F71A601CBA00E9B192 /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 0610;
|
LastUpgradeCheck = 0700;
|
||||||
ORGANIZATIONNAME = Facebook;
|
ORGANIZATIONNAME = Facebook;
|
||||||
};
|
};
|
||||||
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "2048" */;
|
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "2048" */;
|
||||||
|
@ -271,6 +271,7 @@
|
||||||
"/Users/sahrens/src/fbobjc-hg/Libraries/FBReactKit/js/react-native-github/Libraries/Animation/build/Debug-iphoneos",
|
"/Users/sahrens/src/fbobjc-hg/Libraries/FBReactKit/js/react-native-github/Libraries/Animation/build/Debug-iphoneos",
|
||||||
);
|
);
|
||||||
OTHER_LDFLAGS = "-ObjC";
|
OTHER_LDFLAGS = "-ObjC";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.$(PRODUCT_NAME:rfc1034identifier)";
|
||||||
PRODUCT_NAME = 2048;
|
PRODUCT_NAME = 2048;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
@ -291,6 +292,7 @@
|
||||||
"/Users/sahrens/src/fbobjc-hg/Libraries/FBReactKit/js/react-native-github/Libraries/Animation/build/Debug-iphoneos",
|
"/Users/sahrens/src/fbobjc-hg/Libraries/FBReactKit/js/react-native-github/Libraries/Animation/build/Debug-iphoneos",
|
||||||
);
|
);
|
||||||
OTHER_LDFLAGS = "-ObjC";
|
OTHER_LDFLAGS = "-ObjC";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.$(PRODUCT_NAME:rfc1034identifier)";
|
||||||
PRODUCT_NAME = 2048;
|
PRODUCT_NAME = 2048;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
@ -315,6 +317,7 @@
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_TESTABILITY = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>com.facebook.$(PRODUCT_NAME:rfc1034identifier)</string>
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
|
@ -22,6 +22,11 @@
|
||||||
<string>1</string>
|
<string>1</string>
|
||||||
<key>LSRequiresIPhoneOS</key>
|
<key>LSRequiresIPhoneOS</key>
|
||||||
<true/>
|
<true/>
|
||||||
|
<key>NSAppTransportSecurity</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSAllowsArbitraryLoads</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
<key>UILaunchStoryboardName</key>
|
<key>UILaunchStoryboardName</key>
|
||||||
<string>LaunchScreen</string>
|
<string>LaunchScreen</string>
|
||||||
<key>UIRequiredDeviceCapabilities</key>
|
<key>UIRequiredDeviceCapabilities</key>
|
||||||
|
|
|
@ -47,5 +47,11 @@
|
||||||
</array>
|
</array>
|
||||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||||
<false/>
|
<false/>
|
||||||
|
<key>NSAppTransportSecurity</key>
|
||||||
|
<dict>
|
||||||
|
<!--See http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/-->
|
||||||
|
<key>NSAllowsArbitraryLoads</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -38,5 +38,11 @@
|
||||||
<false/>
|
<false/>
|
||||||
<key>NSLocationWhenInUseUsageDescription</key>
|
<key>NSLocationWhenInUseUsageDescription</key>
|
||||||
<string></string>
|
<string></string>
|
||||||
|
<key>NSAppTransportSecurity</key>
|
||||||
|
<dict>
|
||||||
|
<!--See http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/-->
|
||||||
|
<key>NSAllowsArbitraryLoads</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -159,7 +159,7 @@
|
||||||
83CBB9F71A601CBA00E9B192 /* Project object */ = {
|
83CBB9F71A601CBA00E9B192 /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 0610;
|
LastUpgradeCheck = 0700;
|
||||||
ORGANIZATIONNAME = Facebook;
|
ORGANIZATIONNAME = Facebook;
|
||||||
};
|
};
|
||||||
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "TicTacToe" */;
|
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "TicTacToe" */;
|
||||||
|
@ -268,6 +268,7 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||||
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||||
OTHER_LDFLAGS = "-ObjC";
|
OTHER_LDFLAGS = "-ObjC";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.$(PRODUCT_NAME:rfc1034identifier)";
|
||||||
PRODUCT_NAME = TicTacToe;
|
PRODUCT_NAME = TicTacToe;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
@ -285,6 +286,7 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||||
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||||
OTHER_LDFLAGS = "-ObjC";
|
OTHER_LDFLAGS = "-ObjC";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.$(PRODUCT_NAME:rfc1034identifier)";
|
||||||
PRODUCT_NAME = TicTacToe;
|
PRODUCT_NAME = TicTacToe;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
@ -309,6 +311,7 @@
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_TESTABILITY = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0610"
|
LastUpgradeVersion = "0700"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
@ -38,6 +38,8 @@
|
||||||
ReferencedContainer = "container:TicTacToe.xcodeproj">
|
ReferencedContainer = "container:TicTacToe.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</MacroExpansion>
|
</MacroExpansion>
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
@ -47,8 +49,10 @@
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
debugDocumentVersioning = "YES"
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
allowLocationSimulation = "YES">
|
allowLocationSimulation = "YES">
|
||||||
<BuildableProductRunnable>
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||||
|
@ -66,7 +70,8 @@
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
buildConfiguration = "Release"
|
buildConfiguration = "Release"
|
||||||
debugDocumentVersioning = "YES">
|
debugDocumentVersioning = "YES">
|
||||||
<BuildableProductRunnable>
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>com.facebook.$(PRODUCT_NAME:rfc1034identifier)</string>
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
|
@ -36,5 +36,11 @@
|
||||||
</array>
|
</array>
|
||||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||||
<false/>
|
<false/>
|
||||||
|
<key>NSAppTransportSecurity</key>
|
||||||
|
<dict>
|
||||||
|
<!--See http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/-->
|
||||||
|
<key>NSAllowsArbitraryLoads</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -17,6 +17,6 @@
|
||||||
|
|
||||||
int main(int argc, char * argv[]) {
|
int main(int argc, char * argv[]) {
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
|
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -560,7 +560,7 @@
|
||||||
83CBB9F71A601CBA00E9B192 /* Project object */ = {
|
83CBB9F71A601CBA00E9B192 /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 0610;
|
LastUpgradeCheck = 0700;
|
||||||
ORGANIZATIONNAME = Facebook;
|
ORGANIZATIONNAME = Facebook;
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
004D289D1AAF61C70097A701 = {
|
004D289D1AAF61C70097A701 = {
|
||||||
|
@ -850,6 +850,7 @@
|
||||||
XCTest,
|
XCTest,
|
||||||
"-ObjC",
|
"-ObjC",
|
||||||
);
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.$(PRODUCT_NAME:rfc1034identifier)";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
@ -879,6 +880,7 @@
|
||||||
XCTest,
|
XCTest,
|
||||||
"-ObjC",
|
"-ObjC",
|
||||||
);
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.$(PRODUCT_NAME:rfc1034identifier)";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
@ -898,6 +900,7 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited)";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited)";
|
||||||
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||||
OTHER_LDFLAGS = "-ObjC";
|
OTHER_LDFLAGS = "-ObjC";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.facebook.internal.uiexplorer.local;
|
||||||
PRODUCT_NAME = UIExplorer;
|
PRODUCT_NAME = UIExplorer;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
@ -916,6 +919,7 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited)";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited)";
|
||||||
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||||
OTHER_LDFLAGS = "-ObjC";
|
OTHER_LDFLAGS = "-ObjC";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.facebook.internal.uiexplorer.local;
|
||||||
PRODUCT_NAME = UIExplorer;
|
PRODUCT_NAME = UIExplorer;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
@ -943,6 +947,7 @@
|
||||||
XCTest,
|
XCTest,
|
||||||
"-ObjC",
|
"-ObjC",
|
||||||
);
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.React.$(PRODUCT_NAME:rfc1034identifier)";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/UIExplorer.app/UIExplorer";
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/UIExplorer.app/UIExplorer";
|
||||||
};
|
};
|
||||||
|
@ -968,6 +973,7 @@
|
||||||
XCTest,
|
XCTest,
|
||||||
"-ObjC",
|
"-ObjC",
|
||||||
);
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.React.$(PRODUCT_NAME:rfc1034identifier)";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/UIExplorer.app/UIExplorer";
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/UIExplorer.app/UIExplorer";
|
||||||
};
|
};
|
||||||
|
@ -981,18 +987,23 @@
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_ASSIGN_ENUM = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_TESTABILITY = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
@ -1002,10 +1013,16 @@
|
||||||
);
|
);
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
|
GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = YES;
|
||||||
|
GCC_WARN_STRICT_SELECTOR_MATCH = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNKNOWN_PRAGMAS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_LABEL = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
|
@ -1016,6 +1033,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Wextra",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -1027,12 +1048,16 @@
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_ASSIGN_ENUM = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
@ -1042,10 +1067,16 @@
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
|
GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = YES;
|
||||||
|
GCC_WARN_STRICT_SELECTOR_MATCH = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNKNOWN_PRAGMAS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_LABEL = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
|
@ -1056,6 +1087,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Wextra",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0630"
|
LastUpgradeVersion = "0700"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
@ -86,6 +86,8 @@
|
||||||
ReferencedContainer = "container:UIExplorer.xcodeproj">
|
ReferencedContainer = "container:UIExplorer.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</MacroExpansion>
|
</MacroExpansion>
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
@ -95,6 +97,7 @@
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
debugDocumentVersioning = "YES"
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
allowLocationSimulation = "YES">
|
allowLocationSimulation = "YES">
|
||||||
<BuildableProductRunnable
|
<BuildableProductRunnable
|
||||||
runnableDebuggingMode = "0">
|
runnableDebuggingMode = "0">
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
@implementation AppDelegate
|
@implementation AppDelegate
|
||||||
|
|
||||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
- (BOOL)application:(__unused UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
||||||
{
|
{
|
||||||
NSURL *jsCodeLocation;
|
NSURL *jsCodeLocation;
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>com.facebook.internal.uiexplorer.local</string>
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
|
@ -38,5 +38,11 @@
|
||||||
</array>
|
</array>
|
||||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||||
<false/>
|
<false/>
|
||||||
|
<key>NSAppTransportSecurity</key>
|
||||||
|
<dict>
|
||||||
|
<!--See http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/-->
|
||||||
|
<key>NSAllowsArbitraryLoads</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -17,6 +17,6 @@
|
||||||
|
|
||||||
int main(int argc, char * argv[]) {
|
int main(int argc, char * argv[]) {
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
|
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>com.facebook.React.$(PRODUCT_NAME:rfc1034identifier)</string>
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>com.facebook.$(PRODUCT_NAME:rfc1034identifier)</string>
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
|
|
|
@ -158,7 +158,9 @@ RCT_EXPORT_MODULE();
|
||||||
|
|
||||||
- (void)testContentViewIsInvalidated
|
- (void)testContentViewIsInvalidated
|
||||||
{
|
{
|
||||||
RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:nil moduleProvider:nil launchOptions:nil];
|
RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:nil
|
||||||
|
moduleProvider:nil
|
||||||
|
launchOptions:nil];
|
||||||
__weak id rootContentView;
|
__weak id rootContentView;
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@""];
|
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@""];
|
||||||
|
|
|
@ -42,17 +42,17 @@ RCT_EXPORT_MODULE()
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)executeJSCall:(NSString *)name
|
- (void)executeJSCall:(__unused NSString *)name
|
||||||
method:(NSString *)method
|
method:(__unused NSString *)method
|
||||||
arguments:(NSArray *)arguments
|
arguments:(__unused NSArray *)arguments
|
||||||
context:(NSNumber *)executorID
|
context:(__unused NSNumber *)executorID
|
||||||
callback:(RCTJavaScriptCallback)onComplete
|
callback:(RCTJavaScriptCallback)onComplete
|
||||||
{
|
{
|
||||||
onComplete(nil, nil);
|
onComplete(nil, nil);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)executeApplicationScript:(NSString *)script
|
- (void)executeApplicationScript:(__unused NSString *)script
|
||||||
sourceURL:(NSURL *)url
|
sourceURL:(__unused NSURL *)url
|
||||||
onComplete:(RCTJavaScriptCompleteBlock)onComplete
|
onComplete:(RCTJavaScriptCompleteBlock)onComplete
|
||||||
{
|
{
|
||||||
onComplete(nil);
|
onComplete(nil);
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
dispatch_semaphore_t doneSem = dispatch_semaphore_create(0);
|
dispatch_semaphore_t doneSem = dispatch_semaphore_create(0);
|
||||||
[_executor executeApplicationScript:@"var x = {toString: function() { throw 1; }}; nativeLoggingHook(x);"
|
[_executor executeApplicationScript:@"var x = {toString: function() { throw 1; }}; nativeLoggingHook(x);"
|
||||||
sourceURL:[NSURL URLWithString:@"file://"]
|
sourceURL:[NSURL URLWithString:@"file://"]
|
||||||
onComplete:^(id error){
|
onComplete:^(__unused id error){
|
||||||
dispatch_semaphore_signal(doneSem);
|
dispatch_semaphore_signal(doneSem);
|
||||||
}];
|
}];
|
||||||
dispatch_semaphore_wait(doneSem, DISPATCH_TIME_FOREVER);
|
dispatch_semaphore_wait(doneSem, DISPATCH_TIME_FOREVER);
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
|
|
||||||
static uint64_t _get_time_nanoseconds(void)
|
static uint64_t _get_time_nanoseconds(void)
|
||||||
{
|
{
|
||||||
static struct mach_timebase_info tb_info = {0};
|
static struct mach_timebase_info tb_info = {0, 0};
|
||||||
static dispatch_once_t onceToken;
|
static dispatch_once_t onceToken;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
int ret = mach_timebase_info(&tb_info);
|
int ret = mach_timebase_info(&tb_info);
|
||||||
|
@ -114,7 +114,7 @@ static uint64_t _get_time_nanoseconds(void)
|
||||||
} \
|
} \
|
||||||
";
|
";
|
||||||
|
|
||||||
[_executor executeApplicationScript:script sourceURL:[NSURL URLWithString:@"http://localhost:8081/"] onComplete:^(NSError *error) {
|
[_executor executeApplicationScript:script sourceURL:[NSURL URLWithString:@"http://localhost:8081/"] onComplete:^(__unused NSError *error) {
|
||||||
NSMutableArray *params = [[NSMutableArray alloc] init];
|
NSMutableArray *params = [[NSMutableArray alloc] init];
|
||||||
id data = @1;
|
id data = @1;
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
|
@ -128,8 +128,8 @@ static uint64_t _get_time_nanoseconds(void)
|
||||||
method:@"method"
|
method:@"method"
|
||||||
arguments:params
|
arguments:params
|
||||||
context:RCTGetExecutorID(_executor)
|
context:RCTGetExecutorID(_executor)
|
||||||
callback:^(id json, NSError *__error) {
|
callback:^(id json, __unused NSError *unused) {
|
||||||
RCTAssert([json isEqual:@YES], @"Invalid return");
|
XCTAssert([json isEqual:@YES], @"Invalid return");
|
||||||
}];
|
}];
|
||||||
double run = _get_time_nanoseconds() - start;
|
double run = _get_time_nanoseconds() - start;
|
||||||
if ((j % frequency) == frequency - 1) { // Warmup
|
if ((j % frequency) == frequency - 1) { // Warmup
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#define TEST_URL(name, _input, _expectedURL) \
|
#define TEST_URL(name, _input, _expectedURL) \
|
||||||
- (void)test_##name { \
|
- (void)test_##name { \
|
||||||
NSURL *result = [RCTConvert NSURL:_input]; \
|
NSURL *result = [RCTConvert NSURL:_input]; \
|
||||||
NSURL *expected = [NSURL URLWithString:_expectedURL]; \
|
NSURL *expected = (_expectedURL) ? [NSURL URLWithString:_expectedURL ?: @""] : nil; \
|
||||||
XCTAssertEqualObjects(result.absoluteURL, expected); \
|
XCTAssertEqualObjects(result.absoluteURL, expected); \
|
||||||
} \
|
} \
|
||||||
|
|
||||||
|
|
|
@ -136,7 +136,7 @@
|
||||||
|
|
||||||
// We need to keep these in array to keep them around
|
// We need to keep these in array to keep them around
|
||||||
NSMutableArray *viewsToRemove = [NSMutableArray array];
|
NSMutableArray *viewsToRemove = [NSMutableArray array];
|
||||||
for (NSInteger i = 0; i < removeAtIndices.count; i++) {
|
for (NSUInteger i = 0; i < removeAtIndices.count; i++) {
|
||||||
NSNumber *reactTagToRemove = @([removeAtIndices[i] integerValue] + 1);
|
NSNumber *reactTagToRemove = @([removeAtIndices[i] integerValue] + 1);
|
||||||
UIView *viewToRemove = _uiManager.viewRegistry[reactTagToRemove];
|
UIView *viewToRemove = _uiManager.viewRegistry[reactTagToRemove];
|
||||||
[viewsToRemove addObject:viewToRemove];
|
[viewsToRemove addObject:viewToRemove];
|
||||||
|
@ -160,7 +160,7 @@
|
||||||
instead have the following subviews %@", [containerView reactSubviews]);
|
instead have the following subviews %@", [containerView reactSubviews]);
|
||||||
|
|
||||||
NSArray *expectedReactTags = @[@11, @5, @1, @2, @7, @8, @12, @10];
|
NSArray *expectedReactTags = @[@11, @5, @1, @2, @7, @8, @12, @10];
|
||||||
for (NSInteger i = 0; i < [[containerView subviews] count]; i++) {
|
for (NSUInteger i = 0; i < containerView.subviews.count; i++) {
|
||||||
XCTAssertEqualObjects([[containerView reactSubviews][i] reactTag], expectedReactTags[i],
|
XCTAssertEqualObjects([[containerView reactSubviews][i] reactTag], expectedReactTags[i],
|
||||||
@"Expected subview at index %ld to have react tag #%@ but has tag #%@",
|
@"Expected subview at index %ld to have react tag #%@ but has tag #%@",
|
||||||
(long)i, expectedReactTags[i], [[containerView reactSubviews][i] reactTag]);
|
(long)i, expectedReactTags[i], [[containerView reactSubviews][i] reactTag]);
|
||||||
|
|
|
@ -150,6 +150,7 @@
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -158,6 +159,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Wextra",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -184,6 +189,7 @@
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -192,6 +198,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Wextra",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
|
@ -37,7 +37,7 @@ RCT_EXPORT_MODULE()
|
||||||
}
|
}
|
||||||
|
|
||||||
RCT_EXPORT_METHOD(showActionSheetWithOptions:(NSDictionary *)options
|
RCT_EXPORT_METHOD(showActionSheetWithOptions:(NSDictionary *)options
|
||||||
failureCallback:(RCTResponseSenderBlock)failureCallback
|
failureCallback:(__unused RCTResponseSenderBlock)failureCallback
|
||||||
successCallback:(RCTResponseSenderBlock)successCallback)
|
successCallback:(RCTResponseSenderBlock)successCallback)
|
||||||
{
|
{
|
||||||
UIActionSheet *actionSheet = [[UIActionSheet alloc] init];
|
UIActionSheet *actionSheet = [[UIActionSheet alloc] init];
|
||||||
|
@ -86,34 +86,29 @@ RCT_EXPORT_METHOD(showShareActionSheetWithOptions:(NSDictionary *)options
|
||||||
}
|
}
|
||||||
UIActivityViewController *share = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
|
UIActivityViewController *share = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
|
||||||
UIViewController *ctrl = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
|
UIViewController *ctrl = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
|
||||||
if ([share respondsToSelector:@selector(setCompletionWithItemsHandler:)]) {
|
|
||||||
share.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
|
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0
|
||||||
|
|
||||||
|
if (![UIActivityViewController instancesRespondToSelector:@selector(setCompletionWithItemsHandler:)]) {
|
||||||
|
// Legacy iOS 7 implementation
|
||||||
|
share.completionHandler = ^(NSString *activityType, BOOL completed) {
|
||||||
|
successCallback(@[@(completed), RCTNullIfNil(activityType)]);
|
||||||
|
};
|
||||||
|
} else
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{
|
||||||
|
// iOS 8 version
|
||||||
|
share.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, __unused NSArray *returnedItems, NSError *activityError) {
|
||||||
if (activityError) {
|
if (activityError) {
|
||||||
failureCallback(@[[activityError localizedDescription]]);
|
failureCallback(@[RCTNullIfNil(activityError.localizedDescription)]);
|
||||||
} else {
|
} else {
|
||||||
successCallback(@[@(completed), RCTNullIfNil(activityType)]);
|
successCallback(@[@(completed), RCTNullIfNil(activityType)]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} else {
|
|
||||||
|
|
||||||
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0
|
|
||||||
|
|
||||||
if (![UIActivityViewController instancesRespondToSelector:@selector(completionWithItemsHandler)]) {
|
|
||||||
// Legacy iOS 7 implementation
|
|
||||||
share.completionHandler = ^(NSString *activityType, BOOL completed) {
|
|
||||||
successCallback(@[@(completed), RCTNullIfNil(activityType)]);
|
|
||||||
};
|
|
||||||
} else
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
{
|
|
||||||
// iOS 8 version
|
|
||||||
share.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
|
|
||||||
successCallback(@[@(completed), RCTNullIfNil(activityType)]);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[ctrl presentViewController:share animated:YES completion:nil];
|
[ctrl presentViewController:share animated:YES completion:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -150,6 +150,7 @@
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -163,6 +164,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -189,6 +194,7 @@
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -202,6 +208,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
|
@ -150,6 +150,7 @@
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -158,6 +159,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -184,6 +189,7 @@
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -192,6 +198,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
|
@ -198,6 +198,7 @@
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -206,6 +207,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -232,6 +237,7 @@
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -240,6 +246,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,8 +13,7 @@
|
||||||
|
|
||||||
@interface RCTNetworkImageView : UIView
|
@interface RCTNetworkImageView : UIView
|
||||||
|
|
||||||
- (instancetype)initWithFrame:(CGRect)frame
|
- (instancetype)initWithImageDownloader:(RCTImageDownloader *)imageDownloader NS_DESIGNATED_INITIALIZER;
|
||||||
imageDownloader:(RCTImageDownloader *)imageDownloader NS_DESIGNATED_INITIALIZER;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An image that will appear while the view is loading the image from the network,
|
* An image that will appear while the view is loading the image from the network,
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#import "RCTNetworkImageView.h"
|
#import "RCTNetworkImageView.h"
|
||||||
|
|
||||||
|
#import "RCTAssert.h"
|
||||||
#import "RCTConvert.h"
|
#import "RCTConvert.h"
|
||||||
#import "RCTGIFImage.h"
|
#import "RCTGIFImage.h"
|
||||||
#import "RCTImageDownloader.h"
|
#import "RCTImageDownloader.h"
|
||||||
|
@ -25,16 +26,22 @@
|
||||||
id _downloadToken;
|
id _downloadToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithFrame:(CGRect)frame imageDownloader:(RCTImageDownloader *)imageDownloader
|
- (instancetype)initWithImageDownloader:(RCTImageDownloader *)imageDownloader
|
||||||
{
|
{
|
||||||
if ((self = [super initWithFrame:frame])) {
|
RCTAssertParam(imageDownloader);
|
||||||
|
|
||||||
|
if ((self = [super initWithFrame:CGRectZero])) {
|
||||||
_deferSentinel = 0;
|
_deferSentinel = 0;
|
||||||
_imageDownloader = imageDownloader;
|
_imageDownloader = imageDownloader;
|
||||||
self.userInteractionEnabled = NO;
|
self.userInteractionEnabled = NO;
|
||||||
|
self.contentMode = UIViewContentModeScaleAspectFill;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithFrame:(CGRect)frame)
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithCoder:(NSCoder *)aDecoder)
|
||||||
|
|
||||||
- (NSURL *)imageURL
|
- (NSURL *)imageURL
|
||||||
{
|
{
|
||||||
// We clear our imageURL when we are not in a window for a while,
|
// We clear our imageURL when we are not in a window for a while,
|
||||||
|
|
|
@ -22,9 +22,7 @@ RCT_EXPORT_MODULE()
|
||||||
|
|
||||||
- (UIView *)view
|
- (UIView *)view
|
||||||
{
|
{
|
||||||
RCTNetworkImageView *view = [[RCTNetworkImageView alloc] initWithFrame:CGRectZero imageDownloader:[RCTImageDownloader sharedInstance]];
|
return [[RCTNetworkImageView alloc] initWithImageDownloader:[RCTImageDownloader sharedInstance]];
|
||||||
view.contentMode = UIViewContentModeScaleAspectFill;
|
|
||||||
return view;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RCT_REMAP_VIEW_PROPERTY(defaultImageSrc, defaultImage, UIImage)
|
RCT_REMAP_VIEW_PROPERTY(defaultImageSrc, defaultImage, UIImage)
|
||||||
|
|
|
@ -164,6 +164,10 @@ typedef void (^RCTDataLoaderCallback)(NSData *data, NSString *MIMEType, NSError
|
||||||
handler:(id<RCTURLRequestHandler>)handler
|
handler:(id<RCTURLRequestHandler>)handler
|
||||||
callback:(RCTDataLoaderCallback)callback
|
callback:(RCTDataLoaderCallback)callback
|
||||||
{
|
{
|
||||||
|
RCTAssertParam(request);
|
||||||
|
RCTAssertParam(handler);
|
||||||
|
RCTAssertParam(callback);
|
||||||
|
|
||||||
if ((self = [super init])) {
|
if ((self = [super init])) {
|
||||||
_callback = callback;
|
_callback = callback;
|
||||||
_request = [[RCTActiveURLRequest alloc] init];
|
_request = [[RCTActiveURLRequest alloc] init];
|
||||||
|
@ -175,6 +179,11 @@ typedef void (^RCTDataLoaderCallback)(NSData *data, NSString *MIMEType, NSError
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (instancetype)init
|
||||||
|
{
|
||||||
|
return [self initWithRequest:nil handler:nil callback:nil];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)URLRequest:(id)requestToken didReceiveResponse:(NSURLResponse *)response
|
- (void)URLRequest:(id)requestToken didReceiveResponse:(NSURLResponse *)response
|
||||||
{
|
{
|
||||||
RCTAssert([requestToken isEqual:_requestToken], @"Shouldn't ever happen");
|
RCTAssert([requestToken isEqual:_requestToken], @"Shouldn't ever happen");
|
||||||
|
|
|
@ -162,6 +162,7 @@
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -170,6 +171,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -196,6 +201,7 @@
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -204,6 +210,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#import "RCTReachability.h"
|
#import "RCTReachability.h"
|
||||||
|
|
||||||
|
#import "RCTAssert.h"
|
||||||
#import "RCTBridge.h"
|
#import "RCTBridge.h"
|
||||||
#import "RCTEventDispatcher.h"
|
#import "RCTEventDispatcher.h"
|
||||||
|
|
||||||
|
@ -59,9 +60,12 @@ static void RCTReachabilityCallback(__unused SCNetworkReachabilityRef target, SC
|
||||||
|
|
||||||
- (instancetype)initWithHost:(NSString *)host
|
- (instancetype)initWithHost:(NSString *)host
|
||||||
{
|
{
|
||||||
|
RCTAssertParam(host);
|
||||||
|
RCTAssert(![host hasPrefix:@"http"], @"Host value should just contain the domain, not the URL scheme.");
|
||||||
|
|
||||||
if ((self = [super init])) {
|
if ((self = [super init])) {
|
||||||
_status = RCTReachabilityStateUnknown;
|
_status = RCTReachabilityStateUnknown;
|
||||||
_reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [host UTF8String]);
|
_reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, host.UTF8String);
|
||||||
SCNetworkReachabilityContext context = { 0, ( __bridge void *)self, NULL, NULL, NULL };
|
SCNetworkReachabilityContext context = { 0, ( __bridge void *)self, NULL, NULL, NULL };
|
||||||
SCNetworkReachabilitySetCallback(_reachability, RCTReachabilityCallback, &context);
|
SCNetworkReachabilitySetCallback(_reachability, RCTReachabilityCallback, &context);
|
||||||
SCNetworkReachabilityScheduleWithRunLoop(_reachability, CFRunLoopGetMain(), kCFRunLoopCommonModes);
|
SCNetworkReachabilityScheduleWithRunLoop(_reachability, CFRunLoopGetMain(), kCFRunLoopCommonModes);
|
||||||
|
|
|
@ -147,6 +147,7 @@
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -155,6 +156,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Wextra",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -182,6 +187,7 @@
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = "";
|
GCC_PREPROCESSOR_DEFINITIONS = "";
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -190,6 +196,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Wextra",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
|
@ -61,18 +61,19 @@ RCT_EXPORT_MODULE()
|
||||||
_initialNotification = [bridge.launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] copy];
|
_initialNotification = [bridge.launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] copy];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
|
+ (void)application:(__unused UIApplication *)application didRegisterUserNotificationSettings:(__unused UIUserNotificationSettings *)notificationSettings
|
||||||
{
|
{
|
||||||
if ([application respondsToSelector:@selector(registerForRemoteNotifications)]) {
|
if ([application respondsToSelector:@selector(registerForRemoteNotifications)]) {
|
||||||
[application registerForRemoteNotifications];
|
[application registerForRemoteNotifications];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
|
+ (void)application:(__unused UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
|
||||||
{
|
{
|
||||||
NSMutableString *hexString = [NSMutableString string];
|
NSMutableString *hexString = [NSMutableString string];
|
||||||
const unsigned char *bytes = [deviceToken bytes];
|
NSUInteger deviceTokenLength = deviceToken.length;
|
||||||
for (int i = 0; i < [deviceToken length]; i++) {
|
const unsigned char *bytes = deviceToken.bytes;
|
||||||
|
for (NSUInteger i = 0; i < deviceTokenLength; i++) {
|
||||||
[hexString appendFormat:@"%02x", bytes[i]];
|
[hexString appendFormat:@"%02x", bytes[i]];
|
||||||
}
|
}
|
||||||
NSDictionary *userInfo = @{
|
NSDictionary *userInfo = @{
|
||||||
|
@ -83,7 +84,7 @@ RCT_EXPORT_MODULE()
|
||||||
userInfo:userInfo];
|
userInfo:userInfo];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification
|
+ (void)application:(__unused UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification
|
||||||
{
|
{
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:RCTRemoteNotificationReceived
|
[[NSNotificationCenter defaultCenter] postNotificationName:RCTRemoteNotificationReceived
|
||||||
object:self
|
object:self
|
||||||
|
|
|
@ -188,6 +188,7 @@
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -201,6 +202,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -227,6 +232,7 @@
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -240,6 +246,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
|
@ -28,10 +28,10 @@
|
||||||
* macro instead of calling this directly.
|
* macro instead of calling this directly.
|
||||||
*
|
*
|
||||||
* @param app The path to the app bundle without suffixes, e.g. IntegrationTests/IntegrationTestsApp
|
* @param app The path to the app bundle without suffixes, e.g. IntegrationTests/IntegrationTestsApp
|
||||||
* @param referencesDir The path for snapshot references images. The RCTInitRunnerForApp macro uses
|
* @param referenceDir The path for snapshot references images. The RCTInitRunnerForApp macro uses
|
||||||
* FB_REFERENCE_IMAGE_DIR for this automatically.
|
* FB_REFERENCE_IMAGE_DIR for this automatically.
|
||||||
*/
|
*/
|
||||||
- (instancetype)initWithApp:(NSString *)app referenceDir:(NSString *)referenceDir;
|
- (instancetype)initWithApp:(NSString *)app referenceDir:(NSString *)referenceDir NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simplest runTest function simply mounts the specified JS module with no
|
* Simplest runTest function simply mounts the specified JS module with no
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#import "RCTTestRunner.h"
|
#import "RCTTestRunner.h"
|
||||||
|
|
||||||
#import "FBSnapshotTestController.h"
|
#import "FBSnapshotTestController.h"
|
||||||
|
#import "RCTAssert.h"
|
||||||
#import "RCTRedBox.h"
|
#import "RCTRedBox.h"
|
||||||
#import "RCTRootView.h"
|
#import "RCTRootView.h"
|
||||||
#import "RCTTestModule.h"
|
#import "RCTTestModule.h"
|
||||||
|
@ -30,6 +31,9 @@
|
||||||
|
|
||||||
- (instancetype)initWithApp:(NSString *)app referenceDir:(NSString *)referenceDir
|
- (instancetype)initWithApp:(NSString *)app referenceDir:(NSString *)referenceDir
|
||||||
{
|
{
|
||||||
|
RCTAssertParam(app);
|
||||||
|
RCTAssertParam(referenceDir);
|
||||||
|
|
||||||
if ((self = [super init])) {
|
if ((self = [super init])) {
|
||||||
NSString *sanitizedAppName = [app stringByReplacingOccurrencesOfString:@"/" withString:@"-"];
|
NSString *sanitizedAppName = [app stringByReplacingOccurrencesOfString:@"/" withString:@"-"];
|
||||||
sanitizedAppName = [sanitizedAppName stringByReplacingOccurrencesOfString:@"\\" withString:@"-"];
|
sanitizedAppName = [sanitizedAppName stringByReplacingOccurrencesOfString:@"\\" withString:@"-"];
|
||||||
|
@ -44,6 +48,8 @@
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-init)
|
||||||
|
|
||||||
- (void)setRecordMode:(BOOL)recordMode
|
- (void)setRecordMode:(BOOL)recordMode
|
||||||
{
|
{
|
||||||
_testController.recordMode = recordMode;
|
_testController.recordMode = recordMode;
|
||||||
|
|
|
@ -148,6 +148,7 @@
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -156,6 +157,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -182,6 +187,7 @@
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -190,6 +196,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
|
@ -186,6 +186,7 @@
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -194,6 +195,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -220,6 +225,7 @@
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -228,6 +234,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
|
|
||||||
- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
||||||
{
|
{
|
||||||
|
RCTAssertParam(eventDispatcher);
|
||||||
|
|
||||||
if ((self = [super initWithFrame:CGRectZero])) {
|
if ((self = [super initWithFrame:CGRectZero])) {
|
||||||
_contentInset = UIEdgeInsetsZero;
|
_contentInset = UIEdgeInsetsZero;
|
||||||
_eventDispatcher = eventDispatcher;
|
_eventDispatcher = eventDispatcher;
|
||||||
|
@ -35,10 +37,12 @@
|
||||||
_textView.delegate = self;
|
_textView.delegate = self;
|
||||||
[self addSubview:_textView];
|
[self addSubview:_textView];
|
||||||
}
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithFrame:(CGRect)frame)
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithCoder:(NSCoder *)aDecoder)
|
||||||
|
|
||||||
- (void)updateFrames
|
- (void)updateFrames
|
||||||
{
|
{
|
||||||
// Adjust the insets so that they are as close as possible to single-line
|
// Adjust the insets so that they are as close as possible to single-line
|
||||||
|
|
|
@ -150,6 +150,7 @@
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -163,6 +164,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -189,6 +194,7 @@
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -202,6 +208,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
|
@ -246,8 +246,9 @@ static __strong NSData *CRLFCRLF;
|
||||||
|
|
||||||
- (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray *)protocols;
|
- (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray *)protocols;
|
||||||
{
|
{
|
||||||
|
RCTAssertParam(request);
|
||||||
|
|
||||||
if ((self = [super init])) {
|
if ((self = [super init])) {
|
||||||
assert(request.URL);
|
|
||||||
_url = request.URL;
|
_url = request.URL;
|
||||||
_urlRequest = request;
|
_urlRequest = request;
|
||||||
|
|
||||||
|
@ -255,23 +256,24 @@ static __strong NSData *CRLFCRLF;
|
||||||
|
|
||||||
[self _RCTSR_commonInit];
|
[self _RCTSR_commonInit];
|
||||||
}
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-init)
|
||||||
|
|
||||||
- (instancetype)initWithURLRequest:(NSURLRequest *)request;
|
- (instancetype)initWithURLRequest:(NSURLRequest *)request;
|
||||||
{
|
{
|
||||||
return [self initWithURLRequest:request protocols:nil];
|
return [self initWithURLRequest:request protocols:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithURL:(NSURL *)url;
|
- (instancetype)initWithURL:(NSURL *)URL;
|
||||||
{
|
{
|
||||||
return [self initWithURL:url protocols:nil];
|
return [self initWithURL:URL protocols:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithURL:(NSURL *)url protocols:(NSArray *)protocols;
|
- (instancetype)initWithURL:(NSURL *)URL protocols:(NSArray *)protocols;
|
||||||
{
|
{
|
||||||
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
|
NSURLRequest *request = URL ? [NSURLRequest requestWithURL:URL] : nil;
|
||||||
return [self initWithURLRequest:request protocols:protocols];
|
return [self initWithURLRequest:request protocols:protocols];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1610,7 +1612,7 @@ static NSRunLoop *networkRunLoop = nil;
|
||||||
_runLoop = [NSRunLoop currentRunLoop];
|
_runLoop = [NSRunLoop currentRunLoop];
|
||||||
dispatch_group_leave(_waitGroup);
|
dispatch_group_leave(_waitGroup);
|
||||||
|
|
||||||
NSTimer *timer = [[NSTimer alloc] initWithFireDate:[NSDate distantFuture] interval:0.0 target:nil selector:nil userInfo:nil repeats:NO];
|
NSTimer *timer = [[NSTimer alloc] initWithFireDate:[NSDate distantFuture] interval:0.0 target:self selector:@selector(step) userInfo:nil repeats:NO];
|
||||||
[_runLoop addTimer:timer forMode:NSDefaultRunLoopMode];
|
[_runLoop addTimer:timer forMode:NSDefaultRunLoopMode];
|
||||||
|
|
||||||
while ([_runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) { }
|
while ([_runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) { }
|
||||||
|
@ -1618,6 +1620,11 @@ static NSRunLoop *networkRunLoop = nil;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)step
|
||||||
|
{
|
||||||
|
// Does nothing
|
||||||
|
}
|
||||||
|
|
||||||
- (NSRunLoop *)runLoop;
|
- (NSRunLoop *)runLoop;
|
||||||
{
|
{
|
||||||
dispatch_group_wait(_waitGroup, DISPATCH_TIME_FOREVER);
|
dispatch_group_wait(_waitGroup, DISPATCH_TIME_FOREVER);
|
||||||
|
|
|
@ -151,6 +151,7 @@
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -159,6 +160,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -187,6 +192,7 @@
|
||||||
GCC_NO_COMMON_BLOCKS = YES;
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -195,6 +201,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Werror",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
@ -202,6 +212,7 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
EXECUTABLE_PREFIX = lib;
|
EXECUTABLE_PREFIX = lib;
|
||||||
|
GCC_TREAT_WARNINGS_AS_ERRORS = NO;
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
||||||
|
@ -218,6 +229,7 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
EXECUTABLE_PREFIX = lib;
|
EXECUTABLE_PREFIX = lib;
|
||||||
|
GCC_TREAT_WARNINGS_AS_ERRORS = NO;
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
||||||
|
|
|
@ -43,7 +43,9 @@ RCT_EXPORT_MODULE()
|
||||||
|
|
||||||
- (instancetype)initWithURL:(NSURL *)URL
|
- (instancetype)initWithURL:(NSURL *)URL
|
||||||
{
|
{
|
||||||
if (self = [super init]) {
|
RCTAssertParam(URL);
|
||||||
|
|
||||||
|
if ((self = [super init])) {
|
||||||
_url = URL;
|
_url = URL;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
|
|
|
@ -27,12 +27,6 @@ typedef void (^RCTAssertFunction)(
|
||||||
NSString *message
|
NSString *message
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
|
||||||
* Private logging function - ignore this.
|
|
||||||
*/
|
|
||||||
RCT_EXTERN void _RCTAssertFormat(
|
|
||||||
BOOL, const char *, int, const char *, NSString *, ...) NS_FORMAT_FUNCTION(5,6);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the main assert macro that you should use.
|
* This is the main assert macro that you should use.
|
||||||
*/
|
*/
|
||||||
|
@ -41,12 +35,19 @@ if (RCT_NSASSERT && !pass) { [[NSAssertionHandler currentHandler] handleFailureI
|
||||||
file:@(__FILE__) lineNumber:__LINE__ description:__VA_ARGS__]; } \
|
file:@(__FILE__) lineNumber:__LINE__ description:__VA_ARGS__]; } \
|
||||||
_RCTAssertFormat(pass, __FILE__, __LINE__, __func__, __VA_ARGS__); \
|
_RCTAssertFormat(pass, __FILE__, __LINE__, __func__, __VA_ARGS__); \
|
||||||
} while (false)
|
} while (false)
|
||||||
|
RCT_EXTERN void _RCTAssertFormat(BOOL, const char *, int, const char *, NSString *, ...) NS_FORMAT_FUNCTION(5,6);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convenience macro for asserting that a parameter is non-nil/non-zero.
|
||||||
|
*/
|
||||||
|
#define RCTAssertParam(name) RCTAssert(name, \
|
||||||
|
@"'%s' is a required parameter", #name)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convenience macro for asserting that we're running on main thread.
|
* Convenience macro for asserting that we're running on main thread.
|
||||||
*/
|
*/
|
||||||
#define RCTAssertMainThread() RCTAssert([NSThread isMainThread], \
|
#define RCTAssertMainThread() RCTAssert([NSThread isMainThread], \
|
||||||
@"This function must be called on the main thread");
|
@"This function must be called on the main thread")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* These methods get and set the current assert function called by the RCTAssert
|
* These methods get and set the current assert function called by the RCTAssert
|
||||||
|
|
|
@ -13,6 +13,15 @@ NSString *const RCTErrorDomain = @"RCTErrorDomain";
|
||||||
|
|
||||||
RCTAssertFunction RCTCurrentAssertFunction = nil;
|
RCTAssertFunction RCTCurrentAssertFunction = nil;
|
||||||
|
|
||||||
|
NSException *_RCTNotImplementedException(SEL, Class);
|
||||||
|
NSException *_RCTNotImplementedException(SEL cmd, Class cls)
|
||||||
|
{
|
||||||
|
NSString *msg = [NSString stringWithFormat:@"%s is not implemented "
|
||||||
|
"for the class %@", sel_getName(cmd), cls];
|
||||||
|
return [NSException exceptionWithName:@"RCTNotDesignatedInitializerException"
|
||||||
|
reason:msg userInfo:nil];
|
||||||
|
}
|
||||||
|
|
||||||
void _RCTAssertFormat(
|
void _RCTAssertFormat(
|
||||||
BOOL condition,
|
BOOL condition,
|
||||||
const char *fileName,
|
const char *fileName,
|
||||||
|
|
|
@ -16,8 +16,10 @@
|
||||||
#import <mach-o/dyld.h>
|
#import <mach-o/dyld.h>
|
||||||
#import <mach-o/getsect.h>
|
#import <mach-o/getsect.h>
|
||||||
|
|
||||||
|
#import "RCTAssert.h"
|
||||||
#import "RCTContextExecutor.h"
|
#import "RCTContextExecutor.h"
|
||||||
#import "RCTConvert.h"
|
#import "RCTConvert.h"
|
||||||
|
#import "RCTEventDispatcher.h"
|
||||||
#import "RCTJavaScriptLoader.h"
|
#import "RCTJavaScriptLoader.h"
|
||||||
#import "RCTKeyCommands.h"
|
#import "RCTKeyCommands.h"
|
||||||
#import "RCTLog.h"
|
#import "RCTLog.h"
|
||||||
|
@ -185,7 +187,7 @@ static NSDictionary *RCTJSErrorFromNSError(NSError *error)
|
||||||
|
|
||||||
@property (nonatomic, weak) RCTBridge *parentBridge;
|
@property (nonatomic, weak) RCTBridge *parentBridge;
|
||||||
|
|
||||||
- (instancetype)initWithParentBridge:(RCTBridge *)bridge;
|
- (instancetype)initWithParentBridge:(RCTBridge *)bridge NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
- (void)_actuallyInvokeAndProcessModule:(NSString *)module
|
- (void)_actuallyInvokeAndProcessModule:(NSString *)module
|
||||||
method:(NSString *)method
|
method:(NSString *)method
|
||||||
|
@ -233,7 +235,7 @@ static NSDictionary *RCTJSErrorFromNSError(NSError *error)
|
||||||
}
|
}
|
||||||
|
|
||||||
NSMutableArray *argumentNames = [NSMutableArray array];
|
NSMutableArray *argumentNames = [NSMutableArray array];
|
||||||
[typeRegex enumerateMatchesInString:objCMethodName options:0 range:NSMakeRange(0, objCMethodName.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
|
[typeRegex enumerateMatchesInString:objCMethodName options:0 range:NSMakeRange(0, objCMethodName.length) usingBlock:^(NSTextCheckingResult *result, __unused NSMatchingFlags flags, __unused BOOL *stop) {
|
||||||
NSString *argumentName = [objCMethodName substringWithRange:[result rangeAtIndex:1]];
|
NSString *argumentName = [objCMethodName substringWithRange:[result rangeAtIndex:1]];
|
||||||
[argumentNames addObject:argumentName];
|
[argumentNames addObject:argumentName];
|
||||||
}];
|
}];
|
||||||
|
@ -267,7 +269,7 @@ static NSDictionary *RCTJSErrorFromNSError(NSError *error)
|
||||||
NSMutableArray *argumentBlocks = [[NSMutableArray alloc] initWithCapacity:numberOfArguments - 2];
|
NSMutableArray *argumentBlocks = [[NSMutableArray alloc] initWithCapacity:numberOfArguments - 2];
|
||||||
|
|
||||||
#define RCT_ARG_BLOCK(_logic) \
|
#define RCT_ARG_BLOCK(_logic) \
|
||||||
[argumentBlocks addObject:^(RCTBridge *bridge, NSNumber *context, NSInvocation *invocation, NSUInteger index, id json) { \
|
[argumentBlocks addObject:^(__unused RCTBridge *bridge, __unused NSNumber *context, NSInvocation *invocation, NSUInteger index, id json) { \
|
||||||
_logic \
|
_logic \
|
||||||
[invocation setArgument:&value atIndex:index]; \
|
[invocation setArgument:&value atIndex:index]; \
|
||||||
}]; \
|
}]; \
|
||||||
|
@ -287,7 +289,7 @@ static NSDictionary *RCTJSErrorFromNSError(NSError *error)
|
||||||
method:@"invokeCallbackAndReturnFlushedQueue"
|
method:@"invokeCallbackAndReturnFlushedQueue"
|
||||||
arguments:@[json, args]
|
arguments:@[json, args]
|
||||||
context:context];
|
context:context];
|
||||||
} : ^(NSArray *unused) {});
|
} : ^(__unused NSArray *unused) {});
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -334,7 +336,7 @@ case _value: { \
|
||||||
RCT_CONVERT_CASE('^', void *)
|
RCT_CONVERT_CASE('^', void *)
|
||||||
|
|
||||||
case '{': {
|
case '{': {
|
||||||
[argumentBlocks addObject:^(RCTBridge *bridge, NSNumber *context, NSInvocation *invocation, NSUInteger index, id json) {
|
[argumentBlocks addObject:^(__unused RCTBridge *bridge, __unused NSNumber *context, NSInvocation *invocation, NSUInteger index, id json) {
|
||||||
NSMethodSignature *methodSignature = [RCTConvert methodSignatureForSelector:selector];
|
NSMethodSignature *methodSignature = [RCTConvert methodSignatureForSelector:selector];
|
||||||
void *returnValue = malloc(methodSignature.methodReturnLength);
|
void *returnValue = malloc(methodSignature.methodReturnLength);
|
||||||
NSInvocation *_invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
|
NSInvocation *_invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
|
||||||
|
@ -485,7 +487,8 @@ static RCTSparseArray *RCTExportedMethodsByModuleID(void)
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
methodsByModuleID = [[RCTSparseArray alloc] initWithCapacity:[RCTModuleClassesByID count]];
|
methodsByModuleID = [[RCTSparseArray alloc] initWithCapacity:[RCTModuleClassesByID count]];
|
||||||
|
|
||||||
[RCTModuleClassesByID enumerateObjectsUsingBlock:^(Class moduleClass, NSUInteger moduleID, BOOL *stop) {
|
[RCTModuleClassesByID enumerateObjectsUsingBlock:
|
||||||
|
^(Class moduleClass, NSUInteger moduleID, __unused BOOL *stop) {
|
||||||
|
|
||||||
methodsByModuleID[moduleID] = [[NSMutableArray alloc] init];
|
methodsByModuleID[moduleID] = [[NSMutableArray alloc] init];
|
||||||
|
|
||||||
|
@ -549,11 +552,13 @@ static NSDictionary *RCTRemoteModulesConfig(NSDictionary *modulesByName)
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
|
|
||||||
remoteModuleConfigByClassName = [[NSMutableDictionary alloc] init];
|
remoteModuleConfigByClassName = [[NSMutableDictionary alloc] init];
|
||||||
[RCTModuleClassesByID enumerateObjectsUsingBlock:^(Class moduleClass, NSUInteger moduleID, BOOL *stop) {
|
[RCTModuleClassesByID enumerateObjectsUsingBlock:
|
||||||
|
^(Class moduleClass, NSUInteger moduleID, __unused BOOL *stop) {
|
||||||
|
|
||||||
NSArray *methods = RCTExportedMethodsByModuleID()[moduleID];
|
NSArray *methods = RCTExportedMethodsByModuleID()[moduleID];
|
||||||
NSMutableDictionary *methodsByName = [NSMutableDictionary dictionaryWithCapacity:methods.count];
|
NSMutableDictionary *methodsByName = [NSMutableDictionary dictionaryWithCapacity:methods.count];
|
||||||
[methods enumerateObjectsUsingBlock:^(RCTModuleMethod *method, NSUInteger methodID, BOOL *_stop) {
|
[methods enumerateObjectsUsingBlock:
|
||||||
|
^(RCTModuleMethod *method, NSUInteger methodID, __unused BOOL *_stop) {
|
||||||
methodsByName[method.JSMethodName] = @{
|
methodsByName[method.JSMethodName] = @{
|
||||||
@"methodID": @(methodID),
|
@"methodID": @(methodID),
|
||||||
@"type": method.functionKind == RCTJavaScriptFunctionKindAsync ? @"remoteAsync" : @"remote",
|
@"type": method.functionKind == RCTJavaScriptFunctionKindAsync ? @"remoteAsync" : @"remote",
|
||||||
|
@ -571,7 +576,8 @@ static NSDictionary *RCTRemoteModulesConfig(NSDictionary *modulesByName)
|
||||||
|
|
||||||
// Create config
|
// Create config
|
||||||
NSMutableDictionary *moduleConfig = [[NSMutableDictionary alloc] init];
|
NSMutableDictionary *moduleConfig = [[NSMutableDictionary alloc] init];
|
||||||
[modulesByName enumerateKeysAndObjectsUsingBlock:^(NSString *moduleName, id<RCTBridgeModule> module, BOOL *stop) {
|
[modulesByName enumerateKeysAndObjectsUsingBlock:
|
||||||
|
^(NSString *moduleName, id<RCTBridgeModule> module, __unused BOOL *stop) {
|
||||||
|
|
||||||
// Add constants
|
// Add constants
|
||||||
NSMutableDictionary *config = remoteModuleConfigByClassName[NSStringFromClass([module class])];
|
NSMutableDictionary *config = remoteModuleConfigByClassName[NSStringFromClass([module class])];
|
||||||
|
@ -688,6 +694,7 @@ static NSDictionary *RCTLocalModulesConfig()
|
||||||
static id<RCTJavaScriptExecutor> _latestJSExecutor;
|
static id<RCTJavaScriptExecutor> _latestJSExecutor;
|
||||||
|
|
||||||
#if RCT_DEBUG
|
#if RCT_DEBUG
|
||||||
|
|
||||||
+ (void)initialize
|
+ (void)initialize
|
||||||
{
|
{
|
||||||
static dispatch_once_t onceToken;
|
static dispatch_once_t onceToken;
|
||||||
|
@ -717,6 +724,7 @@ static id<RCTJavaScriptExecutor> _latestJSExecutor;
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
- (instancetype)initWithBundleURL:(NSURL *)bundleURL
|
- (instancetype)initWithBundleURL:(NSURL *)bundleURL
|
||||||
|
@ -726,6 +734,7 @@ static id<RCTJavaScriptExecutor> _latestJSExecutor;
|
||||||
RCTAssertMainThread();
|
RCTAssertMainThread();
|
||||||
|
|
||||||
if ((self = [super init])) {
|
if ((self = [super init])) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pre register modules
|
* Pre register modules
|
||||||
*/
|
*/
|
||||||
|
@ -740,6 +749,8 @@ static id<RCTJavaScriptExecutor> _latestJSExecutor;
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-init)
|
||||||
|
|
||||||
- (void)dealloc
|
- (void)dealloc
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -767,7 +778,7 @@ static id<RCTJavaScriptExecutor> _latestJSExecutor;
|
||||||
// reload in current mode
|
// reload in current mode
|
||||||
[commands registerKeyCommandWithInput:@"r"
|
[commands registerKeyCommandWithInput:@"r"
|
||||||
modifierFlags:UIKeyModifierCommand
|
modifierFlags:UIKeyModifierCommand
|
||||||
action:^(UIKeyCommand *command) {
|
action:^(__unused UIKeyCommand *command) {
|
||||||
[weakSelf reload];
|
[weakSelf reload];
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
@ -775,6 +786,11 @@ static id<RCTJavaScriptExecutor> _latestJSExecutor;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (RCTEventDispatcher *)eventDispatcher
|
||||||
|
{
|
||||||
|
return self.modules[RCTBridgeModuleNameForClass([RCTEventDispatcher class])];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)reload
|
- (void)reload
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -822,7 +838,7 @@ static id<RCTJavaScriptExecutor> _latestJSExecutor;
|
||||||
method:@"logIfNoNativeHook"
|
method:@"logIfNoNativeHook"
|
||||||
arguments:@[level, message]
|
arguments:@[level, message]
|
||||||
context:RCTGetExecutorID(_latestJSExecutor)
|
context:RCTGetExecutorID(_latestJSExecutor)
|
||||||
callback:^(id json, NSError *error) {}];
|
callback:^(__unused id json, __unused NSError *error) {}];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -843,7 +859,10 @@ static id<RCTJavaScriptExecutor> _latestJSExecutor;
|
||||||
[self.batchedBridge enqueueJSCall:moduleDotMethod args:args];
|
[self.batchedBridge enqueueJSCall:moduleDotMethod args:args];
|
||||||
}
|
}
|
||||||
|
|
||||||
RCT_INNER_BRIDGE_ONLY(_invokeAndProcessModule:(NSString *)module method:(NSString *)method arguments:(NSArray *)args context:(NSNumber *)context)
|
RCT_INNER_BRIDGE_ONLY(_invokeAndProcessModule:(__unused NSString *)module
|
||||||
|
method:(__unused NSString *)method
|
||||||
|
arguments:(__unused NSArray *)args
|
||||||
|
context:(__unused NSNumber *)context)
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -866,8 +885,12 @@ RCT_INNER_BRIDGE_ONLY(_invokeAndProcessModule:(NSString *)module method:(NSStrin
|
||||||
|
|
||||||
- (instancetype)initWithParentBridge:(RCTBridge *)bridge
|
- (instancetype)initWithParentBridge:(RCTBridge *)bridge
|
||||||
{
|
{
|
||||||
if (self = [super init]) {
|
RCTAssertMainThread();
|
||||||
RCTAssertMainThread();
|
RCTAssertParam(bridge);
|
||||||
|
|
||||||
|
if ((self = [super initWithBundleURL:bridge.bundleURL
|
||||||
|
moduleProvider:bridge.moduleProvider
|
||||||
|
launchOptions:bridge.launchOptions])) {
|
||||||
|
|
||||||
_parentBridge = bridge;
|
_parentBridge = bridge;
|
||||||
|
|
||||||
|
@ -902,14 +925,11 @@ RCT_INNER_BRIDGE_ONLY(_invokeAndProcessModule:(NSString *)module method:(NSStrin
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSURL *)bundleURL
|
- (instancetype)initWithBundleURL:(__unused NSURL *)bundleURL
|
||||||
|
moduleProvider:(__unused RCTBridgeModuleProviderBlock)block
|
||||||
|
launchOptions:(__unused NSDictionary *)launchOptions
|
||||||
{
|
{
|
||||||
return _parentBridge.bundleURL;
|
return [self initWithParentBridge:nil];
|
||||||
}
|
|
||||||
|
|
||||||
- (NSDictionary *)launchOptions
|
|
||||||
{
|
|
||||||
return _parentBridge.launchOptions;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -950,14 +970,15 @@ RCT_INNER_BRIDGE_ONLY(_invokeAndProcessModule:(NSString *)module method:(NSStrin
|
||||||
|
|
||||||
// Register passed-in module instances
|
// Register passed-in module instances
|
||||||
NSMutableDictionary *preregisteredModules = [[NSMutableDictionary alloc] init];
|
NSMutableDictionary *preregisteredModules = [[NSMutableDictionary alloc] init];
|
||||||
for (id<RCTBridgeModule> module in _parentBridge.moduleProvider ? _parentBridge.moduleProvider() : nil) {
|
for (id<RCTBridgeModule> module in self.moduleProvider ? self.moduleProvider() : nil) {
|
||||||
preregisteredModules[RCTBridgeModuleNameForClass([module class])] = module;
|
preregisteredModules[RCTBridgeModuleNameForClass([module class])] = module;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Instantiate modules
|
// Instantiate modules
|
||||||
_modulesByID = [[RCTSparseArray alloc] init];
|
_modulesByID = [[RCTSparseArray alloc] init];
|
||||||
NSMutableDictionary *modulesByName = [preregisteredModules mutableCopy];
|
NSMutableDictionary *modulesByName = [preregisteredModules mutableCopy];
|
||||||
[RCTModuleClassesByID enumerateObjectsUsingBlock:^(Class moduleClass, NSUInteger moduleID, BOOL *stop) {
|
[RCTModuleClassesByID enumerateObjectsUsingBlock:
|
||||||
|
^(Class moduleClass, NSUInteger moduleID, __unused BOOL *stop) {
|
||||||
NSString *moduleName = RCTModuleNamesByID[moduleID];
|
NSString *moduleName = RCTModuleNamesByID[moduleID];
|
||||||
// Check if module instance has already been registered for this name
|
// Check if module instance has already been registered for this name
|
||||||
id<RCTBridgeModule> module = modulesByName[moduleName];
|
id<RCTBridgeModule> module = modulesByName[moduleName];
|
||||||
|
@ -1007,7 +1028,8 @@ RCT_INNER_BRIDGE_ONLY(_invokeAndProcessModule:(NSString *)module method:(NSStrin
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get method queues
|
// Get method queues
|
||||||
[_modulesByID enumerateObjectsUsingBlock:^(id<RCTBridgeModule> module, NSNumber *moduleID, BOOL *stop) {
|
[_modulesByID enumerateObjectsUsingBlock:
|
||||||
|
^(id<RCTBridgeModule> module, NSNumber *moduleID, __unused BOOL *stop) {
|
||||||
if ([module respondsToSelector:@selector(methodQueue)]) {
|
if ([module respondsToSelector:@selector(methodQueue)]) {
|
||||||
dispatch_queue_t queue = [module methodQueue];
|
dispatch_queue_t queue = [module methodQueue];
|
||||||
if (queue) {
|
if (queue) {
|
||||||
|
@ -1034,9 +1056,10 @@ RCT_INNER_BRIDGE_ONLY(_invokeAndProcessModule:(NSString *)module method:(NSStrin
|
||||||
}, NULL);
|
}, NULL);
|
||||||
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
|
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
|
||||||
[_javaScriptExecutor injectJSONText:configJSON
|
[_javaScriptExecutor injectJSONText:configJSON
|
||||||
asGlobalObjectNamed:@"__fbBatchedBridgeConfig" callback:^(id err) {
|
asGlobalObjectNamed:@"__fbBatchedBridgeConfig" callback:
|
||||||
dispatch_semaphore_signal(semaphore);
|
^(__unused id err) {
|
||||||
}];
|
dispatch_semaphore_signal(semaphore);
|
||||||
|
}];
|
||||||
|
|
||||||
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW);
|
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW);
|
||||||
|
|
||||||
|
@ -1350,7 +1373,7 @@ RCT_INNER_BRIDGE_ONLY(_invokeAndProcessModule:(NSString *)module method:(NSStrin
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:RCTEnqueueNotification object:nil userInfo:nil];
|
[[NSNotificationCenter defaultCenter] postNotificationName:RCTEnqueueNotification object:nil userInfo:nil];
|
||||||
|
|
||||||
RCTJavaScriptCallback processResponse = ^(id json, NSError *error) {
|
RCTJavaScriptCallback processResponse = ^(id json, __unused NSError *error) {
|
||||||
if (!self.isValid) {
|
if (!self.isValid) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1453,7 +1476,8 @@ RCT_INNER_BRIDGE_ONLY(_invokeAndProcessModule:(NSString *)module method:(NSStrin
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: batchDidComplete is only used by RCTUIManager - can we eliminate this special case?
|
// TODO: batchDidComplete is only used by RCTUIManager - can we eliminate this special case?
|
||||||
[_modulesByID enumerateObjectsUsingBlock:^(id<RCTBridgeModule> module, NSNumber *moduleID, BOOL *stop) {
|
[_modulesByID enumerateObjectsUsingBlock:
|
||||||
|
^(id<RCTBridgeModule> module, NSNumber *moduleID, __unused BOOL *stop) {
|
||||||
if ([module respondsToSelector:@selector(batchDidComplete)]) {
|
if ([module respondsToSelector:@selector(batchDidComplete)]) {
|
||||||
[self dispatchBlock:^{
|
[self dispatchBlock:^{
|
||||||
[module batchDidComplete];
|
[module batchDidComplete];
|
||||||
|
@ -1537,7 +1561,9 @@ RCT_INNER_BRIDGE_ONLY(_invokeAndProcessModule:(NSString *)module method:(NSStrin
|
||||||
|
|
||||||
NSArray *calls = [_scheduledCallbacks.allObjects arrayByAddingObjectsFromArray:_scheduledCalls];
|
NSArray *calls = [_scheduledCallbacks.allObjects arrayByAddingObjectsFromArray:_scheduledCalls];
|
||||||
NSNumber *currentExecutorID = RCTGetExecutorID(_javaScriptExecutor);
|
NSNumber *currentExecutorID = RCTGetExecutorID(_javaScriptExecutor);
|
||||||
calls = [calls filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSDictionary *call, NSDictionary *bindings) {
|
calls = [calls filteredArrayUsingPredicate:
|
||||||
|
[NSPredicate predicateWithBlock:
|
||||||
|
^BOOL(NSDictionary *call, __unused NSDictionary *bindings) {
|
||||||
return [call[@"context"] isEqualToNumber:currentExecutorID];
|
return [call[@"context"] isEqualToNumber:currentExecutorID];
|
||||||
}]];
|
}]];
|
||||||
|
|
||||||
|
@ -1600,13 +1626,16 @@ RCT_INNER_BRIDGE_ONLY(_invokeAndProcessModule:(NSString *)module method:(NSStrin
|
||||||
NSMutableURLRequest *URLRequest = [NSMutableURLRequest requestWithURL:URL];
|
NSMutableURLRequest *URLRequest = [NSMutableURLRequest requestWithURL:URL];
|
||||||
URLRequest.HTTPMethod = @"POST";
|
URLRequest.HTTPMethod = @"POST";
|
||||||
[URLRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
|
[URLRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
|
||||||
NSURLSessionTask *task = [[NSURLSession sharedSession] uploadTaskWithRequest:URLRequest
|
NSURLSessionTask *task =
|
||||||
fromData:[log dataUsingEncoding:NSUTF8StringEncoding]
|
[[NSURLSession sharedSession] uploadTaskWithRequest:URLRequest
|
||||||
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
|
fromData:[log dataUsingEncoding:NSUTF8StringEncoding]
|
||||||
if (error) {
|
completionHandler:
|
||||||
RCTLogError(@"%@", error.localizedDescription);
|
^(__unused NSData *data, __unused NSURLResponse *response, NSError *error) {
|
||||||
}
|
if (error) {
|
||||||
}];
|
RCTLogError(@"%@", error.localizedDescription);
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
|
||||||
[task resume];
|
[task resume];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
#import <sys/xattr.h>
|
#import <sys/xattr.h>
|
||||||
|
|
||||||
|
#import "RCTAssert.h"
|
||||||
|
|
||||||
static NSString *const RCTCacheSubdirectoryName = @"React";
|
static NSString *const RCTCacheSubdirectoryName = @"React";
|
||||||
static NSString *const RCTKeyExtendedAttributeName = @"com.facebook.React.RCTCacheManager.Key";
|
static NSString *const RCTKeyExtendedAttributeName = @"com.facebook.React.RCTCacheManager.Key";
|
||||||
static NSMapTable *RCTLivingCachesByName;
|
static NSMapTable *RCTLivingCachesByName;
|
||||||
|
@ -122,7 +124,8 @@ static BOOL RCTSetExtendedAttribute(NSURL *fileURL, NSString *key, NSString *val
|
||||||
|
|
||||||
- (instancetype)initWithName:(NSString *)name
|
- (instancetype)initWithName:(NSString *)name
|
||||||
{
|
{
|
||||||
NSParameterAssert(name.length < NAME_MAX);
|
RCTAssertParam(name);
|
||||||
|
RCTAssert(name.length < NAME_MAX, @"Name must be fewer than %i characters in length.", NAME_MAX);
|
||||||
RCTCache *cachedCache = [RCTLivingCachesByName objectForKey:name];
|
RCTCache *cachedCache = [RCTLivingCachesByName objectForKey:name];
|
||||||
if (cachedCache) {
|
if (cachedCache) {
|
||||||
self = cachedCache;
|
self = cachedCache;
|
||||||
|
@ -212,12 +215,12 @@ static BOOL RCTSetExtendedAttribute(NSURL *fileURL, NSString *key, NSString *val
|
||||||
UIBackgroundTaskIdentifier identifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
|
UIBackgroundTaskIdentifier identifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
|
||||||
dispatch_group_t group = dispatch_group_create();
|
dispatch_group_t group = dispatch_group_create();
|
||||||
|
|
||||||
[_storage enumerateKeysAndObjectsUsingBlock:^(NSString *key, RCTCacheRecord *record, BOOL *stop) {
|
for (RCTCacheRecord *record in _storage.allValues) {
|
||||||
NSURL *fileURL = [_cacheDirectoryURL URLByAppendingPathComponent:record.UUID.UUIDString];
|
NSURL *fileURL = [_cacheDirectoryURL URLByAppendingPathComponent:record.UUID.UUIDString];
|
||||||
dispatch_group_async(group, record.queue, ^{
|
dispatch_group_async(group, record.queue, ^{
|
||||||
[_fileManager removeItemAtURL:fileURL error:NULL];
|
[_fileManager removeItemAtURL:fileURL error:NULL];
|
||||||
});
|
});
|
||||||
}];
|
}
|
||||||
|
|
||||||
if (identifier != UIBackgroundTaskInvalid) {
|
if (identifier != UIBackgroundTaskInvalid) {
|
||||||
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
|
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
|
||||||
|
|
|
@ -536,32 +536,32 @@ RCT_CGSTRUCT_CONVERTER(CGAffineTransform, (@[
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse color
|
// Parse color
|
||||||
NSUInteger red = -1;
|
uint32_t red = 0, green = 0, blue = 0;
|
||||||
NSUInteger green = -1;
|
|
||||||
NSUInteger blue = -1;
|
|
||||||
CGFloat alpha = 1.0;
|
CGFloat alpha = 1.0;
|
||||||
if ([colorString hasPrefix:@"#"]) {
|
if ([colorString hasPrefix:@"#"]) {
|
||||||
if (colorString.length == 4) { // 3 digit hex
|
if (colorString.length == 4) { // 3 digit hex
|
||||||
sscanf([colorString UTF8String], "#%01tX%01tX%01tX", &red, &green, &blue);
|
sscanf([colorString UTF8String], "#%01x%01x%01x", &red, &green, &blue);
|
||||||
// expand to 6 digit hex
|
// expand to 6 digit hex
|
||||||
red = red | (red << 4);
|
red = red | (red << 4);
|
||||||
green = green | (green << 4);
|
green = green | (green << 4);
|
||||||
blue = blue | (blue << 4);
|
blue = blue | (blue << 4);
|
||||||
} else if (colorString.length == 7) { // normal 6 digit hex
|
} else if (colorString.length == 7) { // 6 digit hex
|
||||||
sscanf([colorString UTF8String], "#%02tX%02tX%02tX", &red, &green, &blue);
|
sscanf(colorString.UTF8String, "#%02x%02x%02x", &red, &green, &blue);
|
||||||
} else {
|
} else {
|
||||||
RCTLogError(@"Invalid hex color %@. Hex colors should be 3 or 6 digits long", colorString);
|
RCTLogError(@"Invalid hex color %@. Hex colors should be 3 or 6 digits long.", colorString);
|
||||||
|
alpha = -1;
|
||||||
}
|
}
|
||||||
} else if ([colorString hasPrefix:@"rgba("]) {
|
} else if ([colorString hasPrefix:@"rgba("]) {
|
||||||
double tmpAlpha;
|
double tmpAlpha;
|
||||||
sscanf([colorString UTF8String], "rgba(%zd,%zd,%zd,%lf)", &red, &green, &blue, &tmpAlpha);
|
sscanf(colorString.UTF8String, "rgba(%u,%u,%u,%lf)", &red, &green, &blue, &tmpAlpha);
|
||||||
alpha = tmpAlpha > 0.99 ? 1.0 : tmpAlpha;
|
alpha = tmpAlpha;
|
||||||
} else if ([colorString hasPrefix:@"rgb("]) {
|
} else if ([colorString hasPrefix:@"rgb("]) {
|
||||||
sscanf([colorString UTF8String], "rgb(%zd,%zd,%zd)", &red, &green, &blue);
|
sscanf(colorString.UTF8String, "rgb(%u,%u,%u)", &red, &green, &blue);
|
||||||
} else {
|
} else {
|
||||||
RCTLogError(@"Unrecognized color format '%@', must be one of #hex|rgba|rgb", colorString);
|
RCTLogError(@"Unrecognized color format '%@', must be one of #hex|rgba|rgb or a valid CSS color name.", colorString);
|
||||||
|
alpha = -1;
|
||||||
}
|
}
|
||||||
if (red == -1 || green == -1 || blue == -1 || alpha > 1.0 || alpha < 0.0) {
|
if (alpha < 0) {
|
||||||
RCTLogError(@"Invalid color string '%@'", colorString);
|
RCTLogError(@"Invalid color string '%@'", colorString);
|
||||||
} else {
|
} else {
|
||||||
color = [UIColor colorWithRed:red / 255.0 green:green / 255.0 blue:blue / 255.0 alpha:alpha];
|
color = [UIColor colorWithRed:red / 255.0 green:green / 255.0 blue:blue / 255.0 alpha:alpha];
|
||||||
|
@ -574,19 +574,19 @@ RCT_CGSTRUCT_CONVERTER(CGAffineTransform, (@[
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// Color array
|
// Color array
|
||||||
color = [UIColor colorWithRed:[self double:json[0]]
|
color = [UIColor colorWithRed:[self CGFloat:json[0]]
|
||||||
green:[self double:json[1]]
|
green:[self CGFloat:json[1]]
|
||||||
blue:[self double:json[2]]
|
blue:[self CGFloat:json[2]]
|
||||||
alpha:[json count] > 3 ? [self double:json[3]] : 1];
|
alpha:[json count] > 3 ? [self CGFloat:json[3]] : 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if ([json isKindOfClass:[NSDictionary class]]) {
|
} else if ([json isKindOfClass:[NSDictionary class]]) {
|
||||||
|
|
||||||
// Color dictionary
|
// Color dictionary
|
||||||
color = [UIColor colorWithRed:[self double:json[@"r"]]
|
color = [UIColor colorWithRed:[self CGFloat:json[@"r"]]
|
||||||
green:[self double:json[@"g"]]
|
green:[self CGFloat:json[@"g"]]
|
||||||
blue:[self double:json[@"b"]]
|
blue:[self CGFloat:json[@"b"]]
|
||||||
alpha:[self double:json[@"a"] ?: @1]];
|
alpha:[self CGFloat:json[@"a"] ?: @1]];
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (RCT_DEBUG && json && json != (id)kCFNull) {
|
else if (RCT_DEBUG && json && json != (id)kCFNull) {
|
||||||
|
@ -830,7 +830,7 @@ NSArray *RCTConvertArrayValue(SEL type, id json)
|
||||||
{
|
{
|
||||||
__block BOOL copy = NO;
|
__block BOOL copy = NO;
|
||||||
__block NSArray *values = json = [RCTConvert NSArray:json];
|
__block NSArray *values = json = [RCTConvert NSArray:json];
|
||||||
[json enumerateObjectsUsingBlock:^(id jsonValue, NSUInteger idx, BOOL *stop) {
|
[json enumerateObjectsUsingBlock:^(id jsonValue, NSUInteger idx, __unused BOOL *stop) {
|
||||||
id value = ((id(*)(Class, SEL, id))objc_msgSend)([RCTConvert class], type, jsonValue);
|
id value = ((id(*)(Class, SEL, id))objc_msgSend)([RCTConvert class], type, jsonValue);
|
||||||
if (copy) {
|
if (copy) {
|
||||||
if (value) {
|
if (value) {
|
||||||
|
@ -839,7 +839,7 @@ NSArray *RCTConvertArrayValue(SEL type, id json)
|
||||||
} else if (value != jsonValue) {
|
} else if (value != jsonValue) {
|
||||||
// Converted value is different, so we'll need to copy the array
|
// Converted value is different, so we'll need to copy the array
|
||||||
values = [[NSMutableArray alloc] initWithCapacity:values.count];
|
values = [[NSMutableArray alloc] initWithCapacity:values.count];
|
||||||
for (NSInteger i = 0; i < idx; i++) {
|
for (NSUInteger i = 0; i < idx; i++) {
|
||||||
[(NSMutableArray *)values addObject:json[i]];
|
[(NSMutableArray *)values addObject:json[i]];
|
||||||
}
|
}
|
||||||
if (value) {
|
if (value) {
|
||||||
|
@ -876,7 +876,7 @@ static id RCTConvertPropertyListValue(id json)
|
||||||
if ([json isKindOfClass:[NSDictionary class]]) {
|
if ([json isKindOfClass:[NSDictionary class]]) {
|
||||||
__block BOOL copy = NO;
|
__block BOOL copy = NO;
|
||||||
NSMutableDictionary *values = [[NSMutableDictionary alloc] initWithCapacity:[json count]];
|
NSMutableDictionary *values = [[NSMutableDictionary alloc] initWithCapacity:[json count]];
|
||||||
[json enumerateKeysAndObjectsUsingBlock:^(NSString *key, id jsonValue, BOOL *stop) {
|
[json enumerateKeysAndObjectsUsingBlock:^(NSString *key, id jsonValue, __unused BOOL *stop) {
|
||||||
id value = RCTConvertPropertyListValue(jsonValue);
|
id value = RCTConvertPropertyListValue(jsonValue);
|
||||||
if (value) {
|
if (value) {
|
||||||
values[key] = value;
|
values[key] = value;
|
||||||
|
@ -889,7 +889,7 @@ static id RCTConvertPropertyListValue(id json)
|
||||||
if ([json isKindOfClass:[NSArray class]]) {
|
if ([json isKindOfClass:[NSArray class]]) {
|
||||||
__block BOOL copy = NO;
|
__block BOOL copy = NO;
|
||||||
__block NSArray *values = json;
|
__block NSArray *values = json;
|
||||||
[json enumerateObjectsUsingBlock:^(id jsonValue, NSUInteger idx, BOOL *stop) {
|
[json enumerateObjectsUsingBlock:^(id jsonValue, NSUInteger idx, __unused BOOL *stop) {
|
||||||
id value = RCTConvertPropertyListValue(jsonValue);
|
id value = RCTConvertPropertyListValue(jsonValue);
|
||||||
if (copy) {
|
if (copy) {
|
||||||
if (value) {
|
if (value) {
|
||||||
|
@ -898,7 +898,7 @@ static id RCTConvertPropertyListValue(id json)
|
||||||
} else if (value != jsonValue) {
|
} else if (value != jsonValue) {
|
||||||
// Converted value is different, so we'll need to copy the array
|
// Converted value is different, so we'll need to copy the array
|
||||||
values = [[NSMutableArray alloc] initWithCapacity:values.count];
|
values = [[NSMutableArray alloc] initWithCapacity:values.count];
|
||||||
for (NSInteger i = 0; i < idx; i++) {
|
for (NSUInteger i = 0; i < idx; i++) {
|
||||||
[(NSMutableArray *)values addObject:json[i]];
|
[(NSMutableArray *)values addObject:json[i]];
|
||||||
}
|
}
|
||||||
if (value) {
|
if (value) {
|
||||||
|
|
|
@ -61,9 +61,19 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Concat two literals. Supports macro expansions
|
* Concat two literals. Supports macro expansions,
|
||||||
*
|
* e.g. RCT_CONCAT(foo, __FILE__).
|
||||||
* i.e. RCT_CONCAT(foo, __FILE__)
|
|
||||||
*/
|
*/
|
||||||
#define RCT_CONCAT2(A, B) A ## B
|
#define RCT_CONCAT2(A, B) A ## B
|
||||||
#define RCT_CONCAT(A, B) RCT_CONCAT2(A, B)
|
#define RCT_CONCAT(A, B) RCT_CONCAT2(A, B)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Throw an assertion for unimplemented methods.
|
||||||
|
*/
|
||||||
|
#define RCT_NOT_IMPLEMENTED(method) \
|
||||||
|
_Pragma("clang diagnostic push") \
|
||||||
|
_Pragma("clang diagnostic ignored \"-Wmissing-method-return-type\"") \
|
||||||
|
_Pragma("clang diagnostic ignored \"-Wunused-parameter\"") \
|
||||||
|
RCT_EXTERN NSException *_RCTNotImplementedException(SEL, Class); \
|
||||||
|
method NS_UNAVAILABLE { @throw _RCTNotImplementedException(_cmd, [self class]); } \
|
||||||
|
_Pragma("clang diagnostic pop")
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#import "RCTDevMenu.h"
|
#import "RCTDevMenu.h"
|
||||||
|
|
||||||
|
#import "RCTAssert.h"
|
||||||
#import "RCTBridge.h"
|
#import "RCTBridge.h"
|
||||||
#import "RCTDefines.h"
|
#import "RCTDefines.h"
|
||||||
#import "RCTEventDispatcher.h"
|
#import "RCTEventDispatcher.h"
|
||||||
|
@ -34,7 +35,7 @@ static NSString *const RCTDevMenuSettingsKey = @"RCTDevMenu";
|
||||||
|
|
||||||
@implementation UIWindow (RCTDevMenu)
|
@implementation UIWindow (RCTDevMenu)
|
||||||
|
|
||||||
- (void)RCT_motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
|
- (void)RCT_motionEnded:(__unused UIEventSubtype)motion withEvent:(UIEvent *)event
|
||||||
{
|
{
|
||||||
if (event.subtype == UIEventSubtypeMotionShake) {
|
if (event.subtype == UIEventSubtypeMotionShake) {
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:RCTShowDevMenuNotification object:nil];
|
[[NSNotificationCenter defaultCenter] postNotificationName:RCTShowDevMenuNotification object:nil];
|
||||||
|
@ -48,7 +49,7 @@ static NSString *const RCTDevMenuSettingsKey = @"RCTDevMenu";
|
||||||
@property (nonatomic, copy) NSString *title;
|
@property (nonatomic, copy) NSString *title;
|
||||||
@property (nonatomic, copy) dispatch_block_t handler;
|
@property (nonatomic, copy) dispatch_block_t handler;
|
||||||
|
|
||||||
- (instancetype)initWithTitle:(NSString *)title handler:(dispatch_block_t)handler;
|
- (instancetype)initWithTitle:(NSString *)title handler:(dispatch_block_t)handler NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -56,13 +57,15 @@ static NSString *const RCTDevMenuSettingsKey = @"RCTDevMenu";
|
||||||
|
|
||||||
- (instancetype)initWithTitle:(NSString *)title handler:(dispatch_block_t)handler
|
- (instancetype)initWithTitle:(NSString *)title handler:(dispatch_block_t)handler
|
||||||
{
|
{
|
||||||
if (self = [super init]) {
|
if ((self = [super init])) {
|
||||||
self.title = title;
|
_title = [title copy];
|
||||||
self.handler = handler;
|
_handler = [handler copy];
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-init)
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface RCTDevMenu () <RCTBridgeModule, UIActionSheetDelegate>
|
@interface RCTDevMenu () <RCTBridgeModule, UIActionSheetDelegate>
|
||||||
|
@ -131,21 +134,23 @@ RCT_EXPORT_MODULE()
|
||||||
// Toggle debug menu
|
// Toggle debug menu
|
||||||
[commands registerKeyCommandWithInput:@"d"
|
[commands registerKeyCommandWithInput:@"d"
|
||||||
modifierFlags:UIKeyModifierCommand
|
modifierFlags:UIKeyModifierCommand
|
||||||
action:^(UIKeyCommand *command) {
|
action:^(__unused UIKeyCommand *command) {
|
||||||
[weakSelf toggle];
|
[weakSelf toggle];
|
||||||
}];
|
}];
|
||||||
|
|
||||||
// Toggle element inspector
|
// Toggle element inspector
|
||||||
[commands registerKeyCommandWithInput:@"i"
|
[commands registerKeyCommandWithInput:@"i"
|
||||||
modifierFlags:UIKeyModifierCommand
|
modifierFlags:UIKeyModifierCommand
|
||||||
action:^(UIKeyCommand *command) {
|
action:^(__unused UIKeyCommand *command) {
|
||||||
[_bridge.eventDispatcher sendDeviceEventWithName:@"toggleElementInspector" body:nil];
|
[_bridge.eventDispatcher
|
||||||
|
sendDeviceEventWithName:@"toggleElementInspector"
|
||||||
|
body:nil];
|
||||||
}];
|
}];
|
||||||
|
|
||||||
// Reload in normal mode
|
// Reload in normal mode
|
||||||
[commands registerKeyCommandWithInput:@"n"
|
[commands registerKeyCommandWithInput:@"n"
|
||||||
modifierFlags:UIKeyModifierCommand
|
modifierFlags:UIKeyModifierCommand
|
||||||
action:^(UIKeyCommand *command) {
|
action:^(__unused UIKeyCommand *command) {
|
||||||
weakSelf.executorClass = Nil;
|
weakSelf.executorClass = Nil;
|
||||||
}];
|
}];
|
||||||
#endif
|
#endif
|
||||||
|
@ -454,7 +459,8 @@ RCT_EXPORT_METHOD(reload)
|
||||||
}
|
}
|
||||||
|
|
||||||
__weak RCTDevMenu *weakSelf = self;
|
__weak RCTDevMenu *weakSelf = self;
|
||||||
_updateTask = [[NSURLSession sharedSession] dataTaskWithURL:_liveReloadURL completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
|
_updateTask = [[NSURLSession sharedSession] dataTaskWithURL:_liveReloadURL completionHandler:
|
||||||
|
^(__unused NSData *data, NSURLResponse *response, NSError *error) {
|
||||||
|
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
__strong RCTDevMenu *strongSelf = weakSelf;
|
__strong RCTDevMenu *strongSelf = weakSelf;
|
||||||
|
|
|
@ -31,6 +31,8 @@ static NSNumber *RCTGetEventID(id<RCTEvent> event)
|
||||||
eventName:(NSString *)eventName
|
eventName:(NSString *)eventName
|
||||||
body:(NSDictionary *)body
|
body:(NSDictionary *)body
|
||||||
{
|
{
|
||||||
|
RCTAssertParam(eventName);
|
||||||
|
|
||||||
if ((self = [super init])) {
|
if ((self = [super init])) {
|
||||||
_viewTag = viewTag;
|
_viewTag = viewTag;
|
||||||
_eventName = eventName;
|
_eventName = eventName;
|
||||||
|
@ -39,6 +41,8 @@ static NSNumber *RCTGetEventID(id<RCTEvent> event)
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-init)
|
||||||
|
|
||||||
- (uint16_t)coalescingKey
|
- (uint16_t)coalescingKey
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -175,12 +179,10 @@ RCT_IMPORT_METHOD(RCTEventEmitter, receiveEvent);
|
||||||
return RCTJSThread;
|
return RCTJSThread;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)didUpdateFrame:(RCTFrameUpdate *)update
|
- (void)didUpdateFrame:(__unused RCTFrameUpdate *)update
|
||||||
{
|
{
|
||||||
NSDictionary *eventQueue;
|
|
||||||
|
|
||||||
[_eventQueueLock lock];
|
[_eventQueueLock lock];
|
||||||
eventQueue = _eventQueue;
|
NSDictionary *eventQueue = _eventQueue;
|
||||||
_eventQueue = [[NSMutableDictionary alloc] init];
|
_eventQueue = [[NSMutableDictionary alloc] init];
|
||||||
_paused = YES;
|
_paused = YES;
|
||||||
[_eventQueueLock unlock];
|
[_eventQueueLock unlock];
|
||||||
|
@ -191,12 +193,3 @@ RCT_IMPORT_METHOD(RCTEventEmitter, receiveEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation RCTBridge (RCTEventDispatcher)
|
|
||||||
|
|
||||||
- (RCTEventDispatcher *)eventDispatcher
|
|
||||||
{
|
|
||||||
return self.modules[RCTBridgeModuleNameForClass([RCTEventDispatcher class])];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#import "RCTFPSGraph.h"
|
#import "RCTFPSGraph.h"
|
||||||
|
|
||||||
|
#import "RCTAssert.h"
|
||||||
#import "RCTDefines.h"
|
#import "RCTDefines.h"
|
||||||
|
|
||||||
#if RCT_DEV
|
#if RCT_DEV
|
||||||
|
@ -32,7 +33,7 @@
|
||||||
|
|
||||||
- (instancetype)initWithFrame:(CGRect)frame graphPosition:(RCTFPSGraphPosition)position name:(NSString *)name color:(UIColor *)color
|
- (instancetype)initWithFrame:(CGRect)frame graphPosition:(RCTFPSGraphPosition)position name:(NSString *)name color:(UIColor *)color
|
||||||
{
|
{
|
||||||
if (self = [super initWithFrame:frame]) {
|
if ((self = [super initWithFrame:frame])) {
|
||||||
_margin = 2;
|
_margin = 2;
|
||||||
_prevTime = -1;
|
_prevTime = -1;
|
||||||
_maxFPS = 0;
|
_maxFPS = 0;
|
||||||
|
@ -42,8 +43,10 @@
|
||||||
_frames = malloc(sizeof(float) * _length);
|
_frames = malloc(sizeof(float) * _length);
|
||||||
memset(_frames, 0, sizeof(float) * _length);
|
memset(_frames, 0, sizeof(float) * _length);
|
||||||
|
|
||||||
_name = name;
|
_name = name ?: @"FPS";
|
||||||
_position = position;
|
_position = position ?: RCTFPSGraphPositionLeft;
|
||||||
|
|
||||||
|
color = color ?: [UIColor greenColor];
|
||||||
_graph = [self createGraph:color];
|
_graph = [self createGraph:color];
|
||||||
_label = [self createLabel:color];
|
_label = [self createLabel:color];
|
||||||
|
|
||||||
|
@ -53,6 +56,9 @@
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithFrame:(CGRect)frame)
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithCoder:(NSCoder *)aDecoder)
|
||||||
|
|
||||||
- (void)dealloc
|
- (void)dealloc
|
||||||
{
|
{
|
||||||
free(_frames);
|
free(_frames);
|
||||||
|
|
|
@ -43,7 +43,7 @@ typedef void (^RCTJavaScriptCallback)(id json, NSError *error);
|
||||||
* Runs an application script, and notifies of the script load being complete via `onComplete`.
|
* Runs an application script, and notifies of the script load being complete via `onComplete`.
|
||||||
*/
|
*/
|
||||||
- (void)executeApplicationScript:(NSString *)script
|
- (void)executeApplicationScript:(NSString *)script
|
||||||
sourceURL:(NSURL *)url
|
sourceURL:(NSURL *)sourceURL
|
||||||
onComplete:(RCTJavaScriptCompleteBlock)onComplete;
|
onComplete:(RCTJavaScriptCompleteBlock)onComplete;
|
||||||
|
|
||||||
- (void)injectJSONText:(NSString *)script
|
- (void)injectJSONText:(NSString *)script
|
||||||
|
|
|
@ -21,12 +21,16 @@
|
||||||
|
|
||||||
- (instancetype)initWithBridge:(RCTBridge *)bridge
|
- (instancetype)initWithBridge:(RCTBridge *)bridge
|
||||||
{
|
{
|
||||||
|
RCTAssert(bridge, @"birdge parameter is required");
|
||||||
|
|
||||||
if ((self = [super init])) {
|
if ((self = [super init])) {
|
||||||
_bridge = bridge;
|
_bridge = bridge;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-init)
|
||||||
|
|
||||||
- (void)loadBundleAtURL:(NSURL *)scriptURL onComplete:(void (^)(NSError *, NSString *))onComplete
|
- (void)loadBundleAtURL:(NSURL *)scriptURL onComplete:(void (^)(NSError *, NSString *))onComplete
|
||||||
{
|
{
|
||||||
// Sanitize the script URL
|
// Sanitize the script URL
|
||||||
|
|
|
@ -77,7 +77,7 @@ static RCTKeyCommands *RKKeyCommandsSharedInstance = nil;
|
||||||
// To fix this, we use a linear search, since there won't be many keys anyway
|
// To fix this, we use a linear search, since there won't be many keys anyway
|
||||||
|
|
||||||
[_commandBindings enumerateKeysAndObjectsUsingBlock:
|
[_commandBindings enumerateKeysAndObjectsUsingBlock:
|
||||||
^(UIKeyCommand *k, void (^block)(UIKeyCommand *), BOOL *stop) {
|
^(UIKeyCommand *k, void (^block)(UIKeyCommand *), __unused BOOL *stop) {
|
||||||
if ([key.input isEqualToString:k.input] && key.modifierFlags == k.modifierFlags) {
|
if ([key.input isEqualToString:k.input] && key.modifierFlags == k.modifierFlags) {
|
||||||
block(key);
|
block(key);
|
||||||
}
|
}
|
||||||
|
@ -105,7 +105,7 @@ static RCTKeyCommands *RKKeyCommandsSharedInstance = nil;
|
||||||
modifierFlags:flags
|
modifierFlags:flags
|
||||||
action:@selector(RCT_handleKeyCommand:)];
|
action:@selector(RCT_handleKeyCommand:)];
|
||||||
|
|
||||||
_commandBindings[command] = block ?: ^(UIKeyCommand *cmd) {};
|
_commandBindings[command] = block ?: ^(__unused UIKeyCommand *cmd) {};
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)unregisterKeyCommandWithInput:(NSString *)input
|
- (void)unregisterKeyCommandWithInput:(NSString *)input
|
||||||
|
|
|
@ -90,13 +90,12 @@ RCT_EXTERN void RCTAddLogFunction(RCTLogFunction logFunction);
|
||||||
RCT_EXTERN void RCTPerformBlockWithLogPrefix(void (^block)(void), NSString *prefix);
|
RCT_EXTERN void RCTPerformBlockWithLogPrefix(void (^block)(void), NSString *prefix);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Private logging functions - ignore these.
|
* Private logging function - ignore this.
|
||||||
*/
|
*/
|
||||||
RCT_EXTERN void _RCTLogFormat(RCTLogLevel, const char *, int, NSString *, ...) NS_FORMAT_FUNCTION(4,5);
|
|
||||||
#define _RCTLog(lvl, ...) do { \
|
#define _RCTLog(lvl, ...) do { \
|
||||||
if (lvl >= RCTLOG_FATAL_LEVEL) { RCTAssert(NO, __VA_ARGS__); } \
|
if (lvl >= RCTLOG_FATAL_LEVEL) { RCTAssert(NO, __VA_ARGS__); } \
|
||||||
_RCTLogFormat(lvl, __FILE__, __LINE__, __VA_ARGS__); \
|
_RCTLogFormat(lvl, __FILE__, __LINE__, __VA_ARGS__); } while (0)
|
||||||
} while (0)
|
RCT_EXTERN void _RCTLogFormat(RCTLogLevel, const char *, int, NSString *, ...) NS_FORMAT_FUNCTION(4,5);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logging macros. Use these to log information, warnings and errors in your
|
* Logging macros. Use these to log information, warnings and errors in your
|
||||||
|
|
|
@ -169,28 +169,28 @@ void _RCTLogFormat(
|
||||||
|
|
||||||
#if RCT_DEBUG // Red box is only available in debug mode
|
#if RCT_DEBUG // Red box is only available in debug mode
|
||||||
|
|
||||||
// Log to red box
|
// Log to red box
|
||||||
if (level >= RCTLOG_REDBOX_LEVEL) {
|
if (level >= RCTLOG_REDBOX_LEVEL) {
|
||||||
NSArray *stackSymbols = [NSThread callStackSymbols];
|
NSArray *stackSymbols = [NSThread callStackSymbols];
|
||||||
NSMutableArray *stack = [NSMutableArray arrayWithCapacity:(stackSymbols.count - 1)];
|
NSMutableArray *stack = [NSMutableArray arrayWithCapacity:(stackSymbols.count - 1)];
|
||||||
[stackSymbols enumerateObjectsUsingBlock:^(NSString *frameSymbols, NSUInteger idx, BOOL *stop) {
|
[stackSymbols enumerateObjectsUsingBlock:^(NSString *frameSymbols, NSUInteger idx, __unused BOOL *stop) {
|
||||||
if (idx != 0) { // don't include the current frame
|
if (idx > 0) { // don't include the current frame
|
||||||
NSString *address = [[frameSymbols componentsSeparatedByString:@"0x"][1] componentsSeparatedByString:@" "][0];
|
NSString *address = [[frameSymbols componentsSeparatedByString:@"0x"][1] componentsSeparatedByString:@" "][0];
|
||||||
NSRange addressRange = [frameSymbols rangeOfString:address];
|
NSRange addressRange = [frameSymbols rangeOfString:address];
|
||||||
NSString *methodName = [frameSymbols substringFromIndex:(addressRange.location + addressRange.length + 1)];
|
NSString *methodName = [frameSymbols substringFromIndex:(addressRange.location + addressRange.length + 1)];
|
||||||
if (idx == 1) {
|
if (idx == 1) {
|
||||||
NSString *file = [[@(fileName) componentsSeparatedByString:@"/"] lastObject];
|
NSString *file = [[@(fileName) componentsSeparatedByString:@"/"] lastObject];
|
||||||
stack[0] = @{@"methodName": methodName, @"file": file, @"lineNumber": @(lineNumber)};
|
[stack addObject:@{@"methodName": methodName, @"file": file, @"lineNumber": @(lineNumber)}];
|
||||||
} else {
|
} else {
|
||||||
stack[idx - 1] = @{@"methodName": methodName};
|
[stack addObject:@{@"methodName": methodName}];
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}];
|
}
|
||||||
[[RCTRedBox sharedInstance] showErrorMessage:message withStack:stack];
|
}];
|
||||||
}
|
[[RCTRedBox sharedInstance] showErrorMessage:message withStack:stack];
|
||||||
|
}
|
||||||
|
|
||||||
// Log to JS executor
|
// Log to JS executor
|
||||||
[RCTBridge logMessage:message level:level ? @(RCTLogLevels[level - 1]) : @"info"];
|
[RCTBridge logMessage:message level:level ? @(RCTLogLevels[level - 1]) : @"info"];
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -118,7 +118,7 @@ static SEL RCTProfileProxySelector(SEL selector)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RCTProfileForwardInvocation(NSObject *, SEL, NSInvocation *);
|
static void RCTProfileForwardInvocation(NSObject *, SEL, NSInvocation *);
|
||||||
static void RCTProfileForwardInvocation(NSObject *self, SEL cmd, NSInvocation *invocation)
|
static void RCTProfileForwardInvocation(NSObject *self, __unused SEL cmd, NSInvocation *invocation)
|
||||||
{
|
{
|
||||||
NSString *name = [NSString stringWithFormat:@"-[%@ %@]", NSStringFromClass([self class]), NSStringFromSelector(invocation.selector)];
|
NSString *name = [NSString stringWithFormat:@"-[%@ %@]", NSStringFromClass([self class]), NSStringFromSelector(invocation.selector)];
|
||||||
SEL newSel = RCTProfileProxySelector(invocation.selector);
|
SEL newSel = RCTProfileProxySelector(invocation.selector);
|
||||||
|
@ -150,7 +150,7 @@ static IMP RCTProfileMsgForward(NSObject *self, SEL selector)
|
||||||
static void RCTProfileHookModules(RCTBridge *);
|
static void RCTProfileHookModules(RCTBridge *);
|
||||||
static void RCTProfileHookModules(RCTBridge *bridge)
|
static void RCTProfileHookModules(RCTBridge *bridge)
|
||||||
{
|
{
|
||||||
[bridge.modules enumerateKeysAndObjectsUsingBlock:^(NSString *className, id<RCTBridgeModule> module, BOOL *stop) {
|
for (id<RCTBridgeModule> module in bridge.modules.allValues) {
|
||||||
[bridge dispatchBlock:^{
|
[bridge dispatchBlock:^{
|
||||||
Class moduleClass = object_getClass(module);
|
Class moduleClass = object_getClass(module);
|
||||||
Class proxyClass = objc_allocateClassPair(moduleClass, RCTProfileProxyClassName(moduleClass), 0);
|
Class proxyClass = objc_allocateClassPair(moduleClass, RCTProfileProxyClassName(moduleClass), 0);
|
||||||
|
@ -183,13 +183,13 @@ static void RCTProfileHookModules(RCTBridge *bridge)
|
||||||
objc_registerClassPair(proxyClass);
|
objc_registerClassPair(proxyClass);
|
||||||
object_setClass(module, proxyClass);
|
object_setClass(module, proxyClass);
|
||||||
} forModule:module];
|
} forModule:module];
|
||||||
}];
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RCTProfileUnhookModules(RCTBridge *);
|
void RCTProfileUnhookModules(RCTBridge *);
|
||||||
void RCTProfileUnhookModules(RCTBridge *bridge)
|
void RCTProfileUnhookModules(RCTBridge *bridge)
|
||||||
{
|
{
|
||||||
[bridge.modules enumerateKeysAndObjectsUsingBlock:^(NSString *className, id<RCTBridgeModule> module, BOOL *stop) {
|
for (id<RCTBridgeModule> module in bridge.modules.allValues) {
|
||||||
[bridge dispatchBlock:^{
|
[bridge dispatchBlock:^{
|
||||||
Class proxyClass = object_getClass(module);
|
Class proxyClass = object_getClass(module);
|
||||||
if (module.class != proxyClass) {
|
if (module.class != proxyClass) {
|
||||||
|
@ -197,7 +197,7 @@ void RCTProfileUnhookModules(RCTBridge *bridge)
|
||||||
objc_disposeClassPair(proxyClass);
|
objc_disposeClassPair(proxyClass);
|
||||||
}
|
}
|
||||||
} forModule:module];
|
} forModule:module];
|
||||||
}];
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -90,6 +90,8 @@
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithCoder:(NSCoder *)aDecoder)
|
||||||
|
|
||||||
- (void)dealloc
|
- (void)dealloc
|
||||||
{
|
{
|
||||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||||
|
@ -145,12 +147,12 @@
|
||||||
|
|
||||||
#pragma mark - TableView
|
#pragma mark - TableView
|
||||||
|
|
||||||
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
|
- (NSInteger)numberOfSectionsInTableView:(__unused UITableView *)tableView
|
||||||
{
|
{
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
- (NSInteger)tableView:(__unused UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
||||||
{
|
{
|
||||||
return section == 0 ? 1 : [_lastStackTrace count];
|
return section == 0 ? 1 : [_lastStackTrace count];
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ NSString *const RCTContentDidAppearNotification = @"RCTContentDidAppearNotificat
|
||||||
RCTAssert(bridge, @"A bridge instance is required to create an RCTRootView");
|
RCTAssert(bridge, @"A bridge instance is required to create an RCTRootView");
|
||||||
RCTAssert(moduleName, @"A moduleName is required to create an RCTRootView");
|
RCTAssert(moduleName, @"A moduleName is required to create an RCTRootView");
|
||||||
|
|
||||||
if ((self = [super init])) {
|
if ((self = [super initWithFrame:CGRectZero])) {
|
||||||
|
|
||||||
self.backgroundColor = [UIColor whiteColor];
|
self.backgroundColor = [UIColor whiteColor];
|
||||||
|
|
||||||
|
@ -100,6 +100,9 @@ NSString *const RCTContentDidAppearNotification = @"RCTContentDidAppearNotificat
|
||||||
return [self initWithBridge:bridge moduleName:moduleName];
|
return [self initWithBridge:bridge moduleName:moduleName];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithFrame:(CGRect)frame)
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithCoder:(NSCoder *)aDecoder)
|
||||||
|
|
||||||
- (void)setBackgroundColor:(UIColor *)backgroundColor
|
- (void)setBackgroundColor:(UIColor *)backgroundColor
|
||||||
{
|
{
|
||||||
super.backgroundColor = backgroundColor;
|
super.backgroundColor = backgroundColor;
|
||||||
|
@ -147,7 +150,7 @@ RCT_IMPORT_METHOD(ReactNative, unmountComponentAtNodeAndRemoveContainer)
|
||||||
options:UIViewAnimationOptionTransitionCrossDissolve
|
options:UIViewAnimationOptionTransitionCrossDissolve
|
||||||
animations:^{
|
animations:^{
|
||||||
_loadingView.hidden = YES;
|
_loadingView.hidden = YES;
|
||||||
} completion:^(BOOL finished) {
|
} completion:^(__unused BOOL finished) {
|
||||||
[_loadingView removeFromSuperview];
|
[_loadingView removeFromSuperview];
|
||||||
}];
|
}];
|
||||||
});
|
});
|
||||||
|
|
|
@ -40,12 +40,11 @@
|
||||||
|
|
||||||
- (instancetype)initWithBridge:(RCTBridge *)bridge
|
- (instancetype)initWithBridge:(RCTBridge *)bridge
|
||||||
{
|
{
|
||||||
|
RCTAssertParam(bridge);
|
||||||
|
|
||||||
if ((self = [super initWithTarget:nil action:NULL])) {
|
if ((self = [super initWithTarget:nil action:NULL])) {
|
||||||
|
|
||||||
RCTAssert(bridge != nil, @"Expect an event dispatcher");
|
|
||||||
|
|
||||||
_bridge = bridge;
|
_bridge = bridge;
|
||||||
|
|
||||||
_nativeTouches = [[NSMutableOrderedSet alloc] init];
|
_nativeTouches = [[NSMutableOrderedSet alloc] init];
|
||||||
_reactTouches = [[NSMutableArray alloc] init];
|
_reactTouches = [[NSMutableArray alloc] init];
|
||||||
_touchViews = [[NSMutableArray alloc] init];
|
_touchViews = [[NSMutableArray alloc] init];
|
||||||
|
@ -58,6 +57,8 @@
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithTarget:(id)target action:(SEL)action)
|
||||||
|
|
||||||
typedef NS_ENUM(NSInteger, RCTTouchEventType) {
|
typedef NS_ENUM(NSInteger, RCTTouchEventType) {
|
||||||
RCTTouchEventTypeStart,
|
RCTTouchEventTypeStart,
|
||||||
RCTTouchEventTypeMove,
|
RCTTouchEventTypeMove,
|
||||||
|
@ -163,7 +164,7 @@ RCT_IMPORT_METHOD(RCTEventEmitter, receiveTouches);
|
||||||
*/
|
*/
|
||||||
- (void)_updateAndDispatchTouches:(NSSet *)touches
|
- (void)_updateAndDispatchTouches:(NSSet *)touches
|
||||||
eventName:(NSString *)eventName
|
eventName:(NSString *)eventName
|
||||||
originatingTime:(CFTimeInterval)originatingTime
|
originatingTime:(__unused CFTimeInterval)originatingTime
|
||||||
{
|
{
|
||||||
// Update touches
|
// Update touches
|
||||||
NSMutableArray *changedIndexes = [[NSMutableArray alloc] init];
|
NSMutableArray *changedIndexes = [[NSMutableArray alloc] init];
|
||||||
|
@ -269,12 +270,12 @@ static BOOL RCTAnyTouchesChanged(NSSet *touches)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)canPreventGestureRecognizer:(UIGestureRecognizer *)preventedGestureRecognizer
|
- (BOOL)canPreventGestureRecognizer:(__unused UIGestureRecognizer *)preventedGestureRecognizer
|
||||||
{
|
{
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)preventingGestureRecognizer
|
- (BOOL)canBePreventedByGestureRecognizer:(__unused UIGestureRecognizer *)preventingGestureRecognizer
|
||||||
{
|
{
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,9 +36,6 @@ RCT_EXTERN CGFloat RCTRoundPixelValue(CGFloat value);
|
||||||
RCT_EXTERN CGFloat RCTCeilPixelValue(CGFloat value);
|
RCT_EXTERN CGFloat RCTCeilPixelValue(CGFloat value);
|
||||||
RCT_EXTERN CGFloat RCTFloorPixelValue(CGFloat value);
|
RCT_EXTERN CGFloat RCTFloorPixelValue(CGFloat value);
|
||||||
|
|
||||||
// Get current time, for precise performance metrics
|
|
||||||
RCT_EXTERN NSTimeInterval RCTTGetAbsoluteTime(void);
|
|
||||||
|
|
||||||
// Method swizzling
|
// Method swizzling
|
||||||
RCT_EXTERN void RCTSwapClassMethods(Class cls, SEL original, SEL replacement);
|
RCT_EXTERN void RCTSwapClassMethods(Class cls, SEL original, SEL replacement);
|
||||||
RCT_EXTERN void RCTSwapInstanceMethods(Class cls, SEL original, SEL replacement);
|
RCT_EXTERN void RCTSwapInstanceMethods(Class cls, SEL original, SEL replacement);
|
||||||
|
|
|
@ -70,7 +70,7 @@ id RCTJSONClean(id object)
|
||||||
if ([object isKindOfClass:[NSDictionary class]]) {
|
if ([object isKindOfClass:[NSDictionary class]]) {
|
||||||
__block BOOL copy = NO;
|
__block BOOL copy = NO;
|
||||||
NSMutableDictionary *values = [[NSMutableDictionary alloc] initWithCapacity:[object count]];
|
NSMutableDictionary *values = [[NSMutableDictionary alloc] initWithCapacity:[object count]];
|
||||||
[object enumerateKeysAndObjectsUsingBlock:^(NSString *key, id item, BOOL *stop) {
|
[object enumerateKeysAndObjectsUsingBlock:^(NSString *key, id item, __unused BOOL *stop) {
|
||||||
id value = RCTJSONClean(item);
|
id value = RCTJSONClean(item);
|
||||||
values[key] = value;
|
values[key] = value;
|
||||||
copy |= value != item;
|
copy |= value != item;
|
||||||
|
@ -81,14 +81,14 @@ id RCTJSONClean(id object)
|
||||||
if ([object isKindOfClass:[NSArray class]]) {
|
if ([object isKindOfClass:[NSArray class]]) {
|
||||||
__block BOOL copy = NO;
|
__block BOOL copy = NO;
|
||||||
__block NSArray *values = object;
|
__block NSArray *values = object;
|
||||||
[object enumerateObjectsUsingBlock:^(id item, NSUInteger idx, BOOL *stop) {
|
[object enumerateObjectsUsingBlock:^(id item, NSUInteger idx, __unused BOOL *stop) {
|
||||||
id value = RCTJSONClean(item);
|
id value = RCTJSONClean(item);
|
||||||
if (copy) {
|
if (copy) {
|
||||||
[(NSMutableArray *)values addObject:value];
|
[(NSMutableArray *)values addObject:value];
|
||||||
} else if (value != item) {
|
} else if (value != item) {
|
||||||
// Converted value is different, so we'll need to copy the array
|
// Converted value is different, so we'll need to copy the array
|
||||||
values = [[NSMutableArray alloc] initWithCapacity:values.count];
|
values = [[NSMutableArray alloc] initWithCapacity:values.count];
|
||||||
for (NSInteger i = 0; i < idx; i++) {
|
for (NSUInteger i = 0; i < idx; i++) {
|
||||||
[(NSMutableArray *)values addObject:object[i]];
|
[(NSMutableArray *)values addObject:object[i]];
|
||||||
}
|
}
|
||||||
[(NSMutableArray *)values addObject:value];
|
[(NSMutableArray *)values addObject:value];
|
||||||
|
@ -167,19 +167,6 @@ CGFloat RCTFloorPixelValue(CGFloat value)
|
||||||
return floor(value * scale) / scale;
|
return floor(value * scale) / scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSTimeInterval RCTTGetAbsoluteTime(void)
|
|
||||||
{
|
|
||||||
static struct mach_timebase_info tb_info = {0};
|
|
||||||
static dispatch_once_t onceToken;
|
|
||||||
dispatch_once(&onceToken, ^{
|
|
||||||
int ret = mach_timebase_info(&tb_info);
|
|
||||||
assert(0 == ret);
|
|
||||||
});
|
|
||||||
|
|
||||||
uint64_t timeInNanoseconds = (mach_absolute_time() * tb_info.numer) / tb_info.denom;
|
|
||||||
return ((NSTimeInterval)timeInNanoseconds) / 1000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
void RCTSwapClassMethods(Class cls, SEL original, SEL replacement)
|
void RCTSwapClassMethods(Class cls, SEL original, SEL replacement)
|
||||||
{
|
{
|
||||||
Method originalMethod = class_getClassMethod(cls, original);
|
Method originalMethod = class_getClassMethod(cls, original);
|
||||||
|
|
|
@ -80,7 +80,7 @@ RCT_EXPORT_MODULE()
|
||||||
* crashes.
|
* crashes.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static JSValueRef RCTNativeLoggingHook(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef *exception)
|
static JSValueRef RCTNativeLoggingHook(JSContextRef context, __unused JSObjectRef object, __unused JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef *exception)
|
||||||
{
|
{
|
||||||
if (argumentCount > 0) {
|
if (argumentCount > 0) {
|
||||||
JSStringRef messageRef = JSValueToStringCopy(context, arguments[0], exception);
|
JSStringRef messageRef = JSValueToStringCopy(context, arguments[0], exception);
|
||||||
|
@ -109,7 +109,7 @@ static JSValueRef RCTNativeLoggingHook(JSContextRef context, JSObjectRef object,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do-very-little native hook for testing.
|
// Do-very-little native hook for testing.
|
||||||
static JSValueRef RCTNoop(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef *exception)
|
static JSValueRef RCTNoop(JSContextRef context, __unused JSObjectRef object, __unused JSObjectRef thisObject, __unused size_t argumentCount, __unused const JSValueRef arguments[], __unused JSValueRef *exception)
|
||||||
{
|
{
|
||||||
static int counter = 0;
|
static int counter = 0;
|
||||||
counter++;
|
counter++;
|
||||||
|
@ -120,7 +120,7 @@ static JSValueRef RCTNoop(JSContextRef context, JSObjectRef object, JSObjectRef
|
||||||
|
|
||||||
static NSMutableArray *profiles;
|
static NSMutableArray *profiles;
|
||||||
|
|
||||||
static JSValueRef RCTConsoleProfile(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef *exception)
|
static JSValueRef RCTConsoleProfile(JSContextRef context, __unused JSObjectRef object, __unused JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], __unused JSValueRef *exception)
|
||||||
{
|
{
|
||||||
static dispatch_once_t onceToken;
|
static dispatch_once_t onceToken;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
|
@ -147,7 +147,7 @@ static JSValueRef RCTConsoleProfile(JSContextRef context, JSObjectRef object, JS
|
||||||
return JSValueMakeUndefined(context);
|
return JSValueMakeUndefined(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
static JSValueRef RCTConsoleProfileEnd(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef *exception)
|
static JSValueRef RCTConsoleProfileEnd(JSContextRef context, __unused JSObjectRef object, __unused JSObjectRef thisObject, __unused size_t argumentCount, __unused const JSValueRef arguments[], __unused JSValueRef *exception)
|
||||||
{
|
{
|
||||||
NSString *profileInfo = [profiles lastObject];
|
NSString *profileInfo = [profiles lastObject];
|
||||||
[profiles removeLastObject];
|
[profiles removeLastObject];
|
||||||
|
@ -311,7 +311,10 @@ static NSError *RCTNSErrorFromJSError(JSContextRef context, JSValueRef jsError)
|
||||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
[_context performSelector:@selector(invalidate) onThread:_javaScriptThread withObject:nil waitUntilDone:NO];
|
[_context performSelector:@selector(invalidate)
|
||||||
|
onThread:_javaScriptThread
|
||||||
|
withObject:nil
|
||||||
|
waitUntilDone:NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)dealloc
|
- (void)dealloc
|
||||||
|
|
|
@ -153,7 +153,8 @@ RCT_EXPORT_MODULE()
|
||||||
|
|
||||||
if (_objectsToInject.count > 0) {
|
if (_objectsToInject.count > 0) {
|
||||||
NSMutableString *scriptWithInjections = [[NSMutableString alloc] initWithString:@"/* BEGIN NATIVELY INJECTED OBJECTS */\n"];
|
NSMutableString *scriptWithInjections = [[NSMutableString alloc] initWithString:@"/* BEGIN NATIVELY INJECTED OBJECTS */\n"];
|
||||||
[_objectsToInject enumerateKeysAndObjectsUsingBlock:^(NSString *objectName, NSString *blockScript, BOOL *stop) {
|
[_objectsToInject enumerateKeysAndObjectsUsingBlock:
|
||||||
|
^(NSString *objectName, NSString *blockScript, __unused BOOL *stop) {
|
||||||
[scriptWithInjections appendString:objectName];
|
[scriptWithInjections appendString:objectName];
|
||||||
[scriptWithInjections appendString:@" = ("];
|
[scriptWithInjections appendString:@" = ("];
|
||||||
[scriptWithInjections appendString:blockScript];
|
[scriptWithInjections appendString:blockScript];
|
||||||
|
@ -200,7 +201,7 @@ RCT_EXPORT_MODULE()
|
||||||
/**
|
/**
|
||||||
* `UIWebViewDelegate` methods. Handle application script load.
|
* `UIWebViewDelegate` methods. Handle application script load.
|
||||||
*/
|
*/
|
||||||
- (void)webViewDidFinishLoad:(UIWebView *)webView
|
- (void)webViewDidFinishLoad:(__unused UIWebView *)webView
|
||||||
{
|
{
|
||||||
RCTAssertMainThread();
|
RCTAssertMainThread();
|
||||||
if (_onApplicationScriptLoaded) {
|
if (_onApplicationScriptLoaded) {
|
||||||
|
|
|
@ -101,7 +101,7 @@ RCT_EXPORT_METHOD(alertWithArgs:(NSDictionary *)args
|
||||||
}
|
}
|
||||||
|
|
||||||
[_alerts addObject:alertView];
|
[_alerts addObject:alertView];
|
||||||
[_alertCallbacks addObject:callback ?: ^(id unused) {}];
|
[_alertCallbacks addObject:callback ?: ^(__unused id unused) {}];
|
||||||
[_alertButtonKeys addObject:buttonKeys];
|
[_alertButtonKeys addObject:buttonKeys];
|
||||||
|
|
||||||
[alertView show];
|
[alertView show];
|
||||||
|
|
|
@ -139,7 +139,7 @@ RCT_IMPORT_METHOD(RCTJSTimers, callTimers)
|
||||||
_paused = NO;
|
_paused = NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)didUpdateFrame:(RCTFrameUpdate *)update
|
- (void)didUpdateFrame:(__unused RCTFrameUpdate *)update
|
||||||
{
|
{
|
||||||
NSMutableArray *timersToCall = [[NSMutableArray alloc] init];
|
NSMutableArray *timersToCall = [[NSMutableArray alloc] init];
|
||||||
for (RCTTimer *timer in _timers.allObjects) {
|
for (RCTTimer *timer in _timers.allObjects) {
|
||||||
|
|
|
@ -225,7 +225,7 @@ static NSString *RCTViewNameForModuleName(NSString *moduleName)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: only send name once instead of a dictionary of name and type keyed by name
|
// TODO: only send name once instead of a dictionary of name and type keyed by name
|
||||||
static NSDictionary *RCTViewConfigForModule(Class managerClass, NSString *viewName)
|
static NSDictionary *RCTViewConfigForModule(Class managerClass)
|
||||||
{
|
{
|
||||||
unsigned int count = 0;
|
unsigned int count = 0;
|
||||||
Method *methods = class_copyMethodList(object_getClass(managerClass), &count);
|
Method *methods = class_copyMethodList(object_getClass(managerClass), &count);
|
||||||
|
@ -308,11 +308,12 @@ static NSDictionary *RCTViewConfigForModule(Class managerClass, NSString *viewNa
|
||||||
// Get view managers from bridge
|
// Get view managers from bridge
|
||||||
NSMutableDictionary *viewManagers = [[NSMutableDictionary alloc] init];
|
NSMutableDictionary *viewManagers = [[NSMutableDictionary alloc] init];
|
||||||
NSMutableDictionary *viewConfigs = [[NSMutableDictionary alloc] init];
|
NSMutableDictionary *viewConfigs = [[NSMutableDictionary alloc] init];
|
||||||
[_bridge.modules enumerateKeysAndObjectsUsingBlock:^(NSString *moduleName, RCTViewManager *manager, BOOL *stop) {
|
[_bridge.modules enumerateKeysAndObjectsUsingBlock:
|
||||||
|
^(NSString *moduleName, RCTViewManager *manager, __unused BOOL *stop) {
|
||||||
if ([manager isKindOfClass:[RCTViewManager class]]) {
|
if ([manager isKindOfClass:[RCTViewManager class]]) {
|
||||||
NSString *viewName = RCTViewNameForModuleName(moduleName);
|
NSString *viewName = RCTViewNameForModuleName(moduleName);
|
||||||
viewManagers[viewName] = manager;
|
viewManagers[viewName] = manager;
|
||||||
viewConfigs[viewName] = RCTViewConfigForModule([manager class], viewName);
|
viewConfigs[viewName] = RCTViewConfigForModule([manager class]);
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
@ -325,7 +326,7 @@ static NSDictionary *RCTViewConfigForModule(Class managerClass, NSString *viewNa
|
||||||
return _shadowQueue;
|
return _shadowQueue;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)registerRootView:(UIView *)rootView;
|
- (void)registerRootView:(UIView *)rootView
|
||||||
{
|
{
|
||||||
RCTAssertMainThread();
|
RCTAssertMainThread();
|
||||||
|
|
||||||
|
@ -501,9 +502,9 @@ static NSDictionary *RCTViewConfigForModule(Class managerClass, NSString *viewNa
|
||||||
}
|
}
|
||||||
|
|
||||||
// Perform layout (possibly animated)
|
// Perform layout (possibly animated)
|
||||||
return ^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
return ^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||||
RCTResponseSenderBlock callback = self->_layoutAnimation.callback;
|
RCTResponseSenderBlock callback = self->_layoutAnimation.callback;
|
||||||
__block NSInteger completionsCalled = 0;
|
__block NSUInteger completionsCalled = 0;
|
||||||
for (NSUInteger ii = 0; ii < frames.count; ii++) {
|
for (NSUInteger ii = 0; ii < frames.count; ii++) {
|
||||||
NSNumber *reactTag = frameReactTags[ii];
|
NSNumber *reactTag = frameReactTags[ii];
|
||||||
UIView *view = viewRegistry[reactTag];
|
UIView *view = viewRegistry[reactTag];
|
||||||
|
@ -515,7 +516,7 @@ static NSDictionary *RCTViewConfigForModule(Class managerClass, NSString *viewNa
|
||||||
BOOL shouldAnimateCreation = isNew && ![parentsAreNew[ii] boolValue];
|
BOOL shouldAnimateCreation = isNew && ![parentsAreNew[ii] boolValue];
|
||||||
RCTAnimation *createAnimation = shouldAnimateCreation ? _layoutAnimation.createAnimation : nil;
|
RCTAnimation *createAnimation = shouldAnimateCreation ? _layoutAnimation.createAnimation : nil;
|
||||||
|
|
||||||
void (^completion)(BOOL finished) = ^(BOOL finished) {
|
void (^completion)(BOOL) = ^(BOOL finished) {
|
||||||
completionsCalled++;
|
completionsCalled++;
|
||||||
if (event != (id)kCFNull) {
|
if (event != (id)kCFNull) {
|
||||||
[self.bridge.eventDispatcher sendInputEventWithName:@"topLayout" body:event];
|
[self.bridge.eventDispatcher sendInputEventWithName:@"topLayout" body:event];
|
||||||
|
@ -578,7 +579,7 @@ static NSDictionary *RCTViewConfigForModule(Class managerClass, NSString *viewNa
|
||||||
NSMutableSet *applierBlocks = [NSMutableSet setWithCapacity:1];
|
NSMutableSet *applierBlocks = [NSMutableSet setWithCapacity:1];
|
||||||
[topView collectUpdatedProperties:applierBlocks parentProperties:@{}];
|
[topView collectUpdatedProperties:applierBlocks parentProperties:@{}];
|
||||||
|
|
||||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||||
for (RCTApplierBlock block in applierBlocks) {
|
for (RCTApplierBlock block in applierBlocks) {
|
||||||
block(viewRegistry);
|
block(viewRegistry);
|
||||||
}
|
}
|
||||||
|
@ -594,9 +595,9 @@ RCT_EXPORT_METHOD(removeSubviewsFromContainerWithID:(NSNumber *)containerID)
|
||||||
id<RCTViewNodeProtocol> container = _shadowViewRegistry[containerID];
|
id<RCTViewNodeProtocol> container = _shadowViewRegistry[containerID];
|
||||||
RCTAssert(container != nil, @"container view (for ID %@) not found", containerID);
|
RCTAssert(container != nil, @"container view (for ID %@) not found", containerID);
|
||||||
|
|
||||||
NSUInteger subviewsCount = [[container reactSubviews] count];
|
NSUInteger subviewsCount = [container reactSubviews].count;
|
||||||
NSMutableArray *indices = [[NSMutableArray alloc] initWithCapacity:subviewsCount];
|
NSMutableArray *indices = [[NSMutableArray alloc] initWithCapacity:subviewsCount];
|
||||||
for (NSInteger childIndex = 0; childIndex < subviewsCount; childIndex++) {
|
for (NSUInteger childIndex = 0; childIndex < subviewsCount; childIndex++) {
|
||||||
[indices addObject:@(childIndex)];
|
[indices addObject:@(childIndex)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -619,20 +620,21 @@ RCT_EXPORT_METHOD(removeSubviewsFromContainerWithID:(NSNumber *)containerID)
|
||||||
{
|
{
|
||||||
// If there are no indices to move or the container has no subviews don't bother
|
// If there are no indices to move or the container has no subviews don't bother
|
||||||
// We support parents with nil subviews so long as they're all nil so this allows for this behavior
|
// We support parents with nil subviews so long as they're all nil so this allows for this behavior
|
||||||
if ([atIndices count] == 0 || [[container reactSubviews] count] == 0) {
|
if (atIndices.count == 0 || [container reactSubviews].count == 0) {
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
// Construction of removed children must be done "up front", before indices are disturbed by removals.
|
// Construction of removed children must be done "up front", before indices are disturbed by removals.
|
||||||
NSMutableArray *removedChildren = [NSMutableArray arrayWithCapacity:atIndices.count];
|
NSMutableArray *removedChildren = [NSMutableArray arrayWithCapacity:atIndices.count];
|
||||||
RCTAssert(container != nil, @"container view (for ID %@) not found", container);
|
RCTAssert(container != nil, @"container view (for ID %@) not found", container);
|
||||||
for (NSInteger i = 0; i < [atIndices count]; i++) {
|
for (NSNumber *indexNumber in atIndices) {
|
||||||
NSInteger index = [atIndices[i] integerValue];
|
NSUInteger index = indexNumber.unsignedIntegerValue;
|
||||||
if (index < [[container reactSubviews] count]) {
|
if (index < [container reactSubviews].count) {
|
||||||
[removedChildren addObject:[container reactSubviews][index]];
|
[removedChildren addObject:[container reactSubviews][index]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (removedChildren.count != atIndices.count) {
|
if (removedChildren.count != atIndices.count) {
|
||||||
RCTLogMustFix(@"removedChildren count (%tu) was not what we expected (%tu)", removedChildren.count, atIndices.count);
|
RCTLogMustFix(@"removedChildren count (%tu) was not what we expected (%tu)",
|
||||||
|
removedChildren.count, atIndices.count);
|
||||||
}
|
}
|
||||||
return removedChildren;
|
return removedChildren;
|
||||||
}
|
}
|
||||||
|
@ -778,7 +780,7 @@ static BOOL RCTCallPropertySetter(NSString *key, SEL setter, id value, id view,
|
||||||
static void RCTSetViewProps(NSDictionary *props, UIView *view,
|
static void RCTSetViewProps(NSDictionary *props, UIView *view,
|
||||||
UIView *defaultView, RCTViewManager *manager)
|
UIView *defaultView, RCTViewManager *manager)
|
||||||
{
|
{
|
||||||
[props enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) {
|
[props enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, __unused BOOL *stop) {
|
||||||
|
|
||||||
SEL setter = NSSelectorFromString([NSString stringWithFormat:@"set_%@:forView:withDefaultView:", key]);
|
SEL setter = NSSelectorFromString([NSString stringWithFormat:@"set_%@:forView:withDefaultView:", key]);
|
||||||
RCTCallPropertySetter(key, setter, obj, view, defaultView, manager);
|
RCTCallPropertySetter(key, setter, obj, view, defaultView, manager);
|
||||||
|
@ -789,7 +791,7 @@ static void RCTSetViewProps(NSDictionary *props, UIView *view,
|
||||||
static void RCTSetShadowViewProps(NSDictionary *props, RCTShadowView *shadowView,
|
static void RCTSetShadowViewProps(NSDictionary *props, RCTShadowView *shadowView,
|
||||||
RCTShadowView *defaultView, RCTViewManager *manager)
|
RCTShadowView *defaultView, RCTViewManager *manager)
|
||||||
{
|
{
|
||||||
[props enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) {
|
[props enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, __unused BOOL *stop) {
|
||||||
|
|
||||||
SEL setter = NSSelectorFromString([NSString stringWithFormat:@"set_%@:forShadowView:withDefaultView:", key]);
|
SEL setter = NSSelectorFromString([NSString stringWithFormat:@"set_%@:forShadowView:withDefaultView:", key]);
|
||||||
RCTCallPropertySetter(key, setter, obj, shadowView, defaultView, manager);
|
RCTCallPropertySetter(key, setter, obj, shadowView, defaultView, manager);
|
||||||
|
@ -877,7 +879,7 @@ RCT_EXPORT_METHOD(updateView:(NSNumber *)reactTag
|
||||||
RCTSetShadowViewProps(props, shadowView, _defaultShadowViews[viewName], viewManager);
|
RCTSetShadowViewProps(props, shadowView, _defaultShadowViews[viewName], viewManager);
|
||||||
|
|
||||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||||
UIView *view = uiManager->_viewRegistry[reactTag];
|
UIView *view = viewRegistry[reactTag];
|
||||||
RCTSetViewProps(props, view, uiManager->_defaultViews[viewName], viewManager);
|
RCTSetViewProps(props, view, uiManager->_defaultViews[viewName], viewManager);
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
@ -885,7 +887,7 @@ RCT_EXPORT_METHOD(updateView:(NSNumber *)reactTag
|
||||||
RCT_EXPORT_METHOD(focus:(NSNumber *)reactTag)
|
RCT_EXPORT_METHOD(focus:(NSNumber *)reactTag)
|
||||||
{
|
{
|
||||||
if (!reactTag) return;
|
if (!reactTag) return;
|
||||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||||
UIView *newResponder = viewRegistry[reactTag];
|
UIView *newResponder = viewRegistry[reactTag];
|
||||||
[newResponder reactWillMakeFirstResponder];
|
[newResponder reactWillMakeFirstResponder];
|
||||||
[newResponder becomeFirstResponder];
|
[newResponder becomeFirstResponder];
|
||||||
|
@ -896,7 +898,7 @@ RCT_EXPORT_METHOD(focus:(NSNumber *)reactTag)
|
||||||
RCT_EXPORT_METHOD(blur:(NSNumber *)reactTag)
|
RCT_EXPORT_METHOD(blur:(NSNumber *)reactTag)
|
||||||
{
|
{
|
||||||
if (!reactTag) return;
|
if (!reactTag) return;
|
||||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
||||||
UIView *currentResponder = viewRegistry[reactTag];
|
UIView *currentResponder = viewRegistry[reactTag];
|
||||||
[currentResponder resignFirstResponder];
|
[currentResponder resignFirstResponder];
|
||||||
}];
|
}];
|
||||||
|
@ -908,7 +910,7 @@ RCT_EXPORT_METHOD(findSubviewIn:(NSNumber *)reactTag atPoint:(CGPoint)point call
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||||
UIView *view = viewRegistry[reactTag];
|
UIView *view = viewRegistry[reactTag];
|
||||||
UIView *target = [view hitTest:point withEvent:nil];
|
UIView *target = [view hitTest:point withEvent:nil];
|
||||||
CGRect frame = [target convertRect:target.bounds toView:view];
|
CGRect frame = [target convertRect:target.bounds toView:view];
|
||||||
|
@ -940,7 +942,7 @@ RCT_EXPORT_METHOD(findSubviewIn:(NSNumber *)reactTag atPoint:(CGPoint)point call
|
||||||
// Set up next layout animation
|
// Set up next layout animation
|
||||||
if (_nextLayoutAnimation) {
|
if (_nextLayoutAnimation) {
|
||||||
RCTLayoutAnimation *layoutAnimation = _nextLayoutAnimation;
|
RCTLayoutAnimation *layoutAnimation = _nextLayoutAnimation;
|
||||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
[self addUIBlock:^(RCTUIManager *uiManager, __unused RCTSparseArray *viewRegistry) {
|
||||||
uiManager->_layoutAnimation = layoutAnimation;
|
uiManager->_layoutAnimation = layoutAnimation;
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
@ -954,7 +956,7 @@ RCT_EXPORT_METHOD(findSubviewIn:(NSNumber *)reactTag atPoint:(CGPoint)point call
|
||||||
|
|
||||||
// Clear layout animations
|
// Clear layout animations
|
||||||
if (_nextLayoutAnimation) {
|
if (_nextLayoutAnimation) {
|
||||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
[self addUIBlock:^(RCTUIManager *uiManager, __unused RCTSparseArray *viewRegistry) {
|
||||||
uiManager->_layoutAnimation = nil;
|
uiManager->_layoutAnimation = nil;
|
||||||
}];
|
}];
|
||||||
_nextLayoutAnimation = nil;
|
_nextLayoutAnimation = nil;
|
||||||
|
@ -996,7 +998,7 @@ RCT_EXPORT_METHOD(measure:(NSNumber *)reactTag
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||||
UIView *view = viewRegistry[reactTag];
|
UIView *view = viewRegistry[reactTag];
|
||||||
if (!view) {
|
if (!view) {
|
||||||
RCTLogError(@"measure cannot find view with tag #%@", reactTag);
|
RCTLogError(@"measure cannot find view with tag #%@", reactTag);
|
||||||
|
@ -1063,7 +1065,7 @@ static void RCTMeasureLayout(RCTShadowView *view,
|
||||||
*/
|
*/
|
||||||
RCT_EXPORT_METHOD(measureLayout:(NSNumber *)reactTag
|
RCT_EXPORT_METHOD(measureLayout:(NSNumber *)reactTag
|
||||||
relativeTo:(NSNumber *)ancestorReactTag
|
relativeTo:(NSNumber *)ancestorReactTag
|
||||||
errorCallback:(RCTResponseSenderBlock)errorCallback
|
errorCallback:(__unused RCTResponseSenderBlock)errorCallback
|
||||||
callback:(RCTResponseSenderBlock)callback)
|
callback:(RCTResponseSenderBlock)callback)
|
||||||
{
|
{
|
||||||
RCTShadowView *shadowView = _shadowViewRegistry[reactTag];
|
RCTShadowView *shadowView = _shadowViewRegistry[reactTag];
|
||||||
|
@ -1079,7 +1081,7 @@ RCT_EXPORT_METHOD(measureLayout:(NSNumber *)reactTag
|
||||||
* height).
|
* height).
|
||||||
*/
|
*/
|
||||||
RCT_EXPORT_METHOD(measureLayoutRelativeToParent:(NSNumber *)reactTag
|
RCT_EXPORT_METHOD(measureLayoutRelativeToParent:(NSNumber *)reactTag
|
||||||
errorCallback:(RCTResponseSenderBlock)errorCallback
|
errorCallback:(__unused RCTResponseSenderBlock)errorCallback
|
||||||
callback:(RCTResponseSenderBlock)callback)
|
callback:(RCTResponseSenderBlock)callback)
|
||||||
{
|
{
|
||||||
RCTShadowView *shadowView = _shadowViewRegistry[reactTag];
|
RCTShadowView *shadowView = _shadowViewRegistry[reactTag];
|
||||||
|
@ -1095,7 +1097,7 @@ RCT_EXPORT_METHOD(measureLayoutRelativeToParent:(NSNumber *)reactTag
|
||||||
*/
|
*/
|
||||||
RCT_EXPORT_METHOD(measureViewsInRect:(CGRect)rect
|
RCT_EXPORT_METHOD(measureViewsInRect:(CGRect)rect
|
||||||
parentView:(NSNumber *)reactTag
|
parentView:(NSNumber *)reactTag
|
||||||
errorCallback:(RCTResponseSenderBlock)errorCallback
|
errorCallback:(__unused RCTResponseSenderBlock)errorCallback
|
||||||
callback:(RCTResponseSenderBlock)callback)
|
callback:(RCTResponseSenderBlock)callback)
|
||||||
{
|
{
|
||||||
RCTShadowView *shadowView = _shadowViewRegistry[reactTag];
|
RCTShadowView *shadowView = _shadowViewRegistry[reactTag];
|
||||||
|
@ -1107,7 +1109,8 @@ RCT_EXPORT_METHOD(measureViewsInRect:(CGRect)rect
|
||||||
NSMutableArray *results = [[NSMutableArray alloc] initWithCapacity:[childShadowViews count]];
|
NSMutableArray *results = [[NSMutableArray alloc] initWithCapacity:[childShadowViews count]];
|
||||||
|
|
||||||
|
|
||||||
[childShadowViews enumerateObjectsUsingBlock:^(RCTShadowView *childShadowView, NSUInteger idx, BOOL *stop) {
|
[childShadowViews enumerateObjectsUsingBlock:
|
||||||
|
^(RCTShadowView *childShadowView, NSUInteger idx, __unused BOOL *stop) {
|
||||||
CGRect childLayout = [childShadowView measureLayoutRelativeToAncestor:shadowView];
|
CGRect childLayout = [childShadowView measureLayoutRelativeToAncestor:shadowView];
|
||||||
if (CGRectIsNull(childLayout)) {
|
if (CGRectIsNull(childLayout)) {
|
||||||
RCTLogError(@"View %@ (tag #%@) is not a decendant of %@ (tag #%@)",
|
RCTLogError(@"View %@ (tag #%@) is not a decendant of %@ (tag #%@)",
|
||||||
|
@ -1167,7 +1170,7 @@ RCT_EXPORT_METHOD(scrollTo:(NSNumber *)reactTag
|
||||||
withOffsetX:(CGFloat)offsetX
|
withOffsetX:(CGFloat)offsetX
|
||||||
offsetY:(CGFloat)offsetY)
|
offsetY:(CGFloat)offsetY)
|
||||||
{
|
{
|
||||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
||||||
UIView *view = viewRegistry[reactTag];
|
UIView *view = viewRegistry[reactTag];
|
||||||
if ([view conformsToProtocol:@protocol(RCTScrollableProtocol)]) {
|
if ([view conformsToProtocol:@protocol(RCTScrollableProtocol)]) {
|
||||||
[(id<RCTScrollableProtocol>)view scrollToOffset:(CGPoint){offsetX, offsetY} animated:YES];
|
[(id<RCTScrollableProtocol>)view scrollToOffset:(CGPoint){offsetX, offsetY} animated:YES];
|
||||||
|
@ -1182,7 +1185,7 @@ RCT_EXPORT_METHOD(scrollWithoutAnimationTo:(NSNumber *)reactTag
|
||||||
offsetX:(CGFloat)offsetX
|
offsetX:(CGFloat)offsetX
|
||||||
offsetY:(CGFloat)offsetY)
|
offsetY:(CGFloat)offsetY)
|
||||||
{
|
{
|
||||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
||||||
UIView *view = viewRegistry[reactTag];
|
UIView *view = viewRegistry[reactTag];
|
||||||
if ([view conformsToProtocol:@protocol(RCTScrollableProtocol)]) {
|
if ([view conformsToProtocol:@protocol(RCTScrollableProtocol)]) {
|
||||||
[(id<RCTScrollableProtocol>)view scrollToOffset:(CGPoint){offsetX, offsetY} animated:NO];
|
[(id<RCTScrollableProtocol>)view scrollToOffset:(CGPoint){offsetX, offsetY} animated:NO];
|
||||||
|
@ -1195,7 +1198,7 @@ RCT_EXPORT_METHOD(scrollWithoutAnimationTo:(NSNumber *)reactTag
|
||||||
RCT_EXPORT_METHOD(zoomToRect:(NSNumber *)reactTag
|
RCT_EXPORT_METHOD(zoomToRect:(NSNumber *)reactTag
|
||||||
withRect:(CGRect)rect)
|
withRect:(CGRect)rect)
|
||||||
{
|
{
|
||||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
||||||
UIView *view = viewRegistry[reactTag];
|
UIView *view = viewRegistry[reactTag];
|
||||||
if ([view conformsToProtocol:@protocol(RCTScrollableProtocol)]) {
|
if ([view conformsToProtocol:@protocol(RCTScrollableProtocol)]) {
|
||||||
[(id<RCTScrollableProtocol>)view zoomToRect:rect animated:YES];
|
[(id<RCTScrollableProtocol>)view zoomToRect:rect animated:YES];
|
||||||
|
@ -1211,7 +1214,7 @@ RCT_EXPORT_METHOD(zoomToRect:(NSNumber *)reactTag
|
||||||
*/
|
*/
|
||||||
RCT_EXPORT_METHOD(setJSResponder:(NSNumber *)reactTag)
|
RCT_EXPORT_METHOD(setJSResponder:(NSNumber *)reactTag)
|
||||||
{
|
{
|
||||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||||
_jsResponder = viewRegistry[reactTag];
|
_jsResponder = viewRegistry[reactTag];
|
||||||
if (!_jsResponder) {
|
if (!_jsResponder) {
|
||||||
RCTLogError(@"Invalid view set to be the JS responder - tag %zd", reactTag);
|
RCTLogError(@"Invalid view set to be the JS responder - tag %zd", reactTag);
|
||||||
|
@ -1221,7 +1224,7 @@ RCT_EXPORT_METHOD(setJSResponder:(NSNumber *)reactTag)
|
||||||
|
|
||||||
RCT_EXPORT_METHOD(clearJSResponder)
|
RCT_EXPORT_METHOD(clearJSResponder)
|
||||||
{
|
{
|
||||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
[self addUIBlock:^(__unused RCTUIManager *uiManager, __unused RCTSparseArray *viewRegistry) {
|
||||||
_jsResponder = nil;
|
_jsResponder = nil;
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
@ -1326,7 +1329,7 @@ RCT_EXPORT_METHOD(clearJSResponder)
|
||||||
},
|
},
|
||||||
} mutableCopy];
|
} mutableCopy];
|
||||||
|
|
||||||
[_viewManagers enumerateKeysAndObjectsUsingBlock:^(NSString *name, RCTViewManager *manager, BOOL *stop) {
|
for (RCTViewManager *manager in _viewManagers) {
|
||||||
if (RCTClassOverridesInstanceMethod([manager class], @selector(customBubblingEventTypes))) {
|
if (RCTClassOverridesInstanceMethod([manager class], @selector(customBubblingEventTypes))) {
|
||||||
NSDictionary *eventTypes = [manager customBubblingEventTypes];
|
NSDictionary *eventTypes = [manager customBubblingEventTypes];
|
||||||
for (NSString *eventName in eventTypes) {
|
for (NSString *eventName in eventTypes) {
|
||||||
|
@ -1335,7 +1338,7 @@ RCT_EXPORT_METHOD(clearJSResponder)
|
||||||
}
|
}
|
||||||
[customBubblingEventTypesConfigs addEntriesFromDictionary:eventTypes];
|
[customBubblingEventTypesConfigs addEntriesFromDictionary:eventTypes];
|
||||||
}
|
}
|
||||||
}];
|
};
|
||||||
|
|
||||||
return customBubblingEventTypesConfigs;
|
return customBubblingEventTypesConfigs;
|
||||||
}
|
}
|
||||||
|
@ -1387,7 +1390,7 @@ RCT_EXPORT_METHOD(clearJSResponder)
|
||||||
},
|
},
|
||||||
} mutableCopy];
|
} mutableCopy];
|
||||||
|
|
||||||
[_viewManagers enumerateKeysAndObjectsUsingBlock:^(NSString *name, RCTViewManager *manager, BOOL *stop) {
|
for (RCTViewManager *manager in _viewManagers) {
|
||||||
if (RCTClassOverridesInstanceMethod([manager class], @selector(customDirectEventTypes))) {
|
if (RCTClassOverridesInstanceMethod([manager class], @selector(customDirectEventTypes))) {
|
||||||
NSDictionary *eventTypes = [manager customDirectEventTypes];
|
NSDictionary *eventTypes = [manager customDirectEventTypes];
|
||||||
for (NSString *eventName in eventTypes) {
|
for (NSString *eventName in eventTypes) {
|
||||||
|
@ -1395,7 +1398,7 @@ RCT_EXPORT_METHOD(clearJSResponder)
|
||||||
}
|
}
|
||||||
[customDirectEventTypes addEntriesFromDictionary:eventTypes];
|
[customDirectEventTypes addEntriesFromDictionary:eventTypes];
|
||||||
}
|
}
|
||||||
}];
|
};
|
||||||
|
|
||||||
return customDirectEventTypes;
|
return customDirectEventTypes;
|
||||||
}
|
}
|
||||||
|
@ -1418,8 +1421,11 @@ RCT_EXPORT_METHOD(clearJSResponder)
|
||||||
},
|
},
|
||||||
} mutableCopy];
|
} mutableCopy];
|
||||||
|
|
||||||
[_viewManagers enumerateKeysAndObjectsUsingBlock:^(NSString *name, RCTViewManager *manager, BOOL *stop) {
|
[_viewManagers enumerateKeysAndObjectsUsingBlock:
|
||||||
NSMutableDictionary *constantsNamespace = [NSMutableDictionary dictionaryWithDictionary:allJSConstants[name]];
|
^(NSString *name, RCTViewManager *manager, __unused BOOL *stop) {
|
||||||
|
|
||||||
|
NSMutableDictionary *constantsNamespace =
|
||||||
|
[NSMutableDictionary dictionaryWithDictionary:allJSConstants[name]];
|
||||||
|
|
||||||
// Add custom constants
|
// Add custom constants
|
||||||
// TODO: should these be inherited?
|
// TODO: should these be inherited?
|
||||||
|
@ -1440,7 +1446,7 @@ RCT_EXPORT_METHOD(clearJSResponder)
|
||||||
|
|
||||||
RCT_EXPORT_METHOD(configureNextLayoutAnimation:(NSDictionary *)config
|
RCT_EXPORT_METHOD(configureNextLayoutAnimation:(NSDictionary *)config
|
||||||
withCallback:(RCTResponseSenderBlock)callback
|
withCallback:(RCTResponseSenderBlock)callback
|
||||||
errorCallback:(RCTResponseSenderBlock)errorCallback)
|
errorCallback:(__unused RCTResponseSenderBlock)errorCallback)
|
||||||
{
|
{
|
||||||
if (_nextLayoutAnimation) {
|
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);
|
||||||
|
|
|
@ -618,6 +618,7 @@
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -626,6 +627,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Wextra",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -654,6 +659,7 @@
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = "";
|
GCC_PREPROCESSOR_DEFINITIONS = "";
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
@ -662,6 +668,10 @@
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
WARNING_CFLAGS = (
|
||||||
|
"-Wextra",
|
||||||
|
"-Wall",
|
||||||
|
);
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|
|
@ -64,7 +64,7 @@ RCT_CUSTOM_VIEW_PROPERTY(region, MKCoordinateRegion, RCTMap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)mapView:(RCTMap *)mapView regionWillChangeAnimated:(BOOL)animated
|
- (void)mapView:(RCTMap *)mapView regionWillChangeAnimated:(__unused BOOL)animated
|
||||||
{
|
{
|
||||||
[self _regionChanged:mapView];
|
[self _regionChanged:mapView];
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ RCT_CUSTOM_VIEW_PROPERTY(region, MKCoordinateRegion, RCTMap)
|
||||||
[[NSRunLoop mainRunLoop] addTimer:mapView.regionChangeObserveTimer forMode:NSRunLoopCommonModes];
|
[[NSRunLoop mainRunLoop] addTimer:mapView.regionChangeObserveTimer forMode:NSRunLoopCommonModes];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)mapView:(RCTMap *)mapView regionDidChangeAnimated:(BOOL)animated
|
- (void)mapView:(RCTMap *)mapView regionDidChangeAnimated:(__unused BOOL)animated
|
||||||
{
|
{
|
||||||
[mapView.regionChangeObserveTimer invalidate];
|
[mapView.regionChangeObserveTimer invalidate];
|
||||||
mapView.regionChangeObserveTimer = nil;
|
mapView.regionChangeObserveTimer = nil;
|
||||||
|
|
|
@ -267,8 +267,10 @@ NSInteger kNeverProgressed = -10000;
|
||||||
|
|
||||||
@synthesize paused = _paused;
|
@synthesize paused = _paused;
|
||||||
|
|
||||||
- (id)initWithBridge:(RCTBridge *)bridge
|
- (instancetype)initWithBridge:(RCTBridge *)bridge
|
||||||
{
|
{
|
||||||
|
RCTAssertParam(bridge);
|
||||||
|
|
||||||
if ((self = [super initWithFrame:CGRectZero])) {
|
if ((self = [super initWithFrame:CGRectZero])) {
|
||||||
_paused = YES;
|
_paused = YES;
|
||||||
|
|
||||||
|
@ -291,7 +293,10 @@ NSInteger kNeverProgressed = -10000;
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)didUpdateFrame:(RCTFrameUpdate *)update
|
RCT_NOT_IMPLEMENTED(-initWithFrame:(CGRect)frame)
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithCoder:(NSCoder *)aDecoder)
|
||||||
|
|
||||||
|
- (void)didUpdateFrame:(__unused RCTFrameUpdate *)update
|
||||||
{
|
{
|
||||||
if (_currentlyTransitioningFrom != _currentlyTransitioningTo) {
|
if (_currentlyTransitioningFrom != _currentlyTransitioningTo) {
|
||||||
UIView *topView = _dummyView;
|
UIView *topView = _dummyView;
|
||||||
|
@ -328,8 +333,8 @@ NSInteger kNeverProgressed = -10000;
|
||||||
* locks aside from the animation complete hook.
|
* locks aside from the animation complete hook.
|
||||||
*/
|
*/
|
||||||
- (void)navigationController:(UINavigationController *)navigationController
|
- (void)navigationController:(UINavigationController *)navigationController
|
||||||
willShowViewController:(UIViewController *)viewController
|
willShowViewController:(__unused UIViewController *)viewController
|
||||||
animated:(BOOL)animated
|
animated:(__unused BOOL)animated
|
||||||
{
|
{
|
||||||
id<UIViewControllerTransitionCoordinator> tc =
|
id<UIViewControllerTransitionCoordinator> tc =
|
||||||
navigationController.topViewController.transitionCoordinator;
|
navigationController.topViewController.transitionCoordinator;
|
||||||
|
@ -343,12 +348,12 @@ NSInteger kNeverProgressed = -10000;
|
||||||
NSUInteger indexOfFrom = [_currentViews indexOfObject:fromController.navItem];
|
NSUInteger indexOfFrom = [_currentViews indexOfObject:fromController.navItem];
|
||||||
NSUInteger indexOfTo = [_currentViews indexOfObject:toController.navItem];
|
NSUInteger indexOfTo = [_currentViews indexOfObject:toController.navItem];
|
||||||
CGFloat destination = indexOfFrom < indexOfTo ? 1.0 : -1.0;
|
CGFloat destination = indexOfFrom < indexOfTo ? 1.0 : -1.0;
|
||||||
_dummyView.frame = (CGRect){{destination}};
|
_dummyView.frame = (CGRect){{destination, 0}, CGSizeZero};
|
||||||
_currentlyTransitioningFrom = indexOfFrom;
|
_currentlyTransitioningFrom = indexOfFrom;
|
||||||
_currentlyTransitioningTo = indexOfTo;
|
_currentlyTransitioningTo = indexOfTo;
|
||||||
_paused = NO;
|
_paused = NO;
|
||||||
}
|
}
|
||||||
completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
|
completion:^(__unused id<UIViewControllerTransitionCoordinatorContext> context) {
|
||||||
[weakSelf freeLock];
|
[weakSelf freeLock];
|
||||||
_currentlyTransitioningFrom = 0;
|
_currentlyTransitioningFrom = 0;
|
||||||
_currentlyTransitioningTo = 0;
|
_currentlyTransitioningTo = 0;
|
||||||
|
@ -441,13 +446,13 @@ NSInteger kNeverProgressed = -10000;
|
||||||
// hooked up yet, so we do it on demand here
|
// hooked up yet, so we do it on demand here
|
||||||
[self addControllerToClosestParent:_navigationController];
|
[self addControllerToClosestParent:_navigationController];
|
||||||
|
|
||||||
NSInteger viewControllerCount = _navigationController.viewControllers.count;
|
NSUInteger viewControllerCount = _navigationController.viewControllers.count;
|
||||||
// The "react count" is the count of views that are visible on the navigation
|
// The "react count" is the count of views that are visible on the navigation
|
||||||
// stack. There may be more beyond this - that aren't visible, and may be
|
// stack. There may be more beyond this - that aren't visible, and may be
|
||||||
// deleted/purged soon.
|
// deleted/purged soon.
|
||||||
NSInteger previousReactCount =
|
NSUInteger previousReactCount =
|
||||||
_previousRequestedTopOfStack == kNeverRequested ? 0 : _previousRequestedTopOfStack + 1;
|
_previousRequestedTopOfStack == kNeverRequested ? 0 : _previousRequestedTopOfStack + 1;
|
||||||
NSInteger currentReactCount = _requestedTopOfStack + 1;
|
NSUInteger currentReactCount = _requestedTopOfStack + 1;
|
||||||
|
|
||||||
BOOL jsGettingAhead =
|
BOOL jsGettingAhead =
|
||||||
// ----- previously caught up ------ ------ no longer caught up -------
|
// ----- previously caught up ------ ------ no longer caught up -------
|
||||||
|
@ -486,7 +491,7 @@ BOOL jsGettingtooSlow =
|
||||||
|
|
||||||
// Views before the previous React count must not have changed. Views greater than previousReactCount
|
// Views before the previous React count must not have changed. Views greater than previousReactCount
|
||||||
// up to currentReactCount may have changed.
|
// up to currentReactCount may have changed.
|
||||||
for (NSInteger i = 0; i < MIN(_currentViews.count, MIN(_previousViews.count, previousReactCount)); i++) {
|
for (NSUInteger i = 0; i < MIN(_currentViews.count, MIN(_previousViews.count, previousReactCount)); i++) {
|
||||||
if (_currentViews[i] != _previousViews[i]) {
|
if (_currentViews[i] != _previousViews[i]) {
|
||||||
RCTLogError(@"current view should equal previous view");
|
RCTLogError(@"current view should equal previous view");
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,10 +37,11 @@ RCT_EXPORT_VIEW_PROPERTY(requestedTopOfStack, NSInteger)
|
||||||
|
|
||||||
// TODO: remove error callbacks
|
// TODO: remove error callbacks
|
||||||
RCT_EXPORT_METHOD(requestSchedulingJavaScriptNavigation:(NSNumber *)reactTag
|
RCT_EXPORT_METHOD(requestSchedulingJavaScriptNavigation:(NSNumber *)reactTag
|
||||||
errorCallback:(RCTResponseSenderBlock)errorCallback
|
errorCallback:(__unused RCTResponseSenderBlock)errorCallback
|
||||||
callback:(__unused RCTResponseSenderBlock)callback)
|
callback:(RCTResponseSenderBlock)callback)
|
||||||
{
|
{
|
||||||
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
[self.bridge.uiManager addUIBlock:
|
||||||
|
^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
||||||
RCTNavigator *navigator = viewRegistry[reactTag];
|
RCTNavigator *navigator = viewRegistry[reactTag];
|
||||||
if ([navigator isKindOfClass:[RCTNavigator class]]) {
|
if ([navigator isKindOfClass:[RCTNavigator class]]) {
|
||||||
BOOL wasAcquired = [navigator requestSchedulingJavaScriptNavigation];
|
BOOL wasAcquired = [navigator requestSchedulingJavaScriptNavigation];
|
||||||
|
|
|
@ -27,9 +27,11 @@ const NSInteger UNINITIALIZED_INDEX = -1;
|
||||||
NSInteger _selectedIndex;
|
NSInteger _selectedIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
||||||
{
|
{
|
||||||
if (self = [super initWithFrame:CGRectZero]) {
|
RCTAssertParam(eventDispatcher);
|
||||||
|
|
||||||
|
if ((self = [super initWithFrame:CGRectZero])) {
|
||||||
_eventDispatcher = eventDispatcher;
|
_eventDispatcher = eventDispatcher;
|
||||||
_selectedIndex = UNINITIALIZED_INDEX;
|
_selectedIndex = UNINITIALIZED_INDEX;
|
||||||
self.delegate = self;
|
self.delegate = self;
|
||||||
|
@ -37,12 +39,13 @@ const NSInteger UNINITIALIZED_INDEX = -1;
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithFrame:(CGRect)frame)
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithCoder:(NSCoder *)aDecoder)
|
||||||
|
|
||||||
- (void)setItems:(NSArray *)items
|
- (void)setItems:(NSArray *)items
|
||||||
{
|
{
|
||||||
if (_items != items) {
|
_items = [items copy];
|
||||||
_items = [items copy];
|
[self setNeedsLayout];
|
||||||
[self setNeedsLayout];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setSelectedIndex:(NSInteger)selectedIndex
|
- (void)setSelectedIndex:(NSInteger)selectedIndex
|
||||||
|
@ -58,12 +61,13 @@ const NSInteger UNINITIALIZED_INDEX = -1;
|
||||||
|
|
||||||
#pragma mark - UIPickerViewDataSource protocol
|
#pragma mark - UIPickerViewDataSource protocol
|
||||||
|
|
||||||
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
|
- (NSInteger)numberOfComponentsInPickerView:(__unused UIPickerView *)pickerView
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
|
- (NSInteger)pickerView:(__unused UIPickerView *)pickerView
|
||||||
|
numberOfRowsInComponent:(__unused NSInteger)component
|
||||||
{
|
{
|
||||||
return _items.count;
|
return _items.count;
|
||||||
}
|
}
|
||||||
|
@ -80,12 +84,14 @@ const NSInteger UNINITIALIZED_INDEX = -1;
|
||||||
return [self itemForRow:row][@"value"];
|
return [self itemForRow:row][@"value"];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
|
- (NSString *)pickerView:(__unused UIPickerView *)pickerView
|
||||||
|
titleForRow:(NSInteger)row forComponent:(__unused NSInteger)component
|
||||||
{
|
{
|
||||||
return [self itemForRow:row][@"label"];
|
return [self itemForRow:row][@"label"];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
|
- (void)pickerView:(__unused UIPickerView *)pickerView
|
||||||
|
didSelectRow:(NSInteger)row inComponent:(__unused NSInteger)component
|
||||||
{
|
{
|
||||||
_selectedIndex = row;
|
_selectedIndex = row;
|
||||||
NSDictionary *event = @{
|
NSDictionary *event = @{
|
||||||
|
@ -96,4 +102,5 @@ const NSInteger UNINITIALIZED_INDEX = -1;
|
||||||
|
|
||||||
[_eventDispatcher sendInputEventWithName:@"topChange" body:event];
|
[_eventDispatcher sendInputEventWithName:@"topChange" body:event];
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -27,7 +27,7 @@ RCT_EXPORT_VIEW_PROPERTY(selectedIndex, NSInteger)
|
||||||
|
|
||||||
- (NSDictionary *)constantsToExport
|
- (NSDictionary *)constantsToExport
|
||||||
{
|
{
|
||||||
RCTPicker *view = [[RCTPicker alloc] init];
|
UIPickerView *view = [[UIPickerView alloc] init];
|
||||||
return @{
|
return @{
|
||||||
@"ComponentHeight": @(view.intrinsicContentSize.height),
|
@"ComponentHeight": @(view.intrinsicContentSize.height),
|
||||||
@"ComponentWidth": @(view.intrinsicContentSize.width)
|
@"ComponentWidth": @(view.intrinsicContentSize.width)
|
||||||
|
|
|
@ -44,7 +44,9 @@ CGFloat const ZINDEX_STICKY_HEADER = 50;
|
||||||
scrollView:(UIScrollView *)scrollView
|
scrollView:(UIScrollView *)scrollView
|
||||||
userData:(NSDictionary *)userData
|
userData:(NSDictionary *)userData
|
||||||
{
|
{
|
||||||
if (self = [super init]) {
|
RCTAssertParam(reactTag);
|
||||||
|
|
||||||
|
if ((self = [super init])) {
|
||||||
_type = type;
|
_type = type;
|
||||||
_viewTag = reactTag;
|
_viewTag = reactTag;
|
||||||
_scrollView = scrollView;
|
_scrollView = scrollView;
|
||||||
|
@ -53,6 +55,8 @@ CGFloat const ZINDEX_STICKY_HEADER = 50;
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-init)
|
||||||
|
|
||||||
- (uint16_t)coalescingKey
|
- (uint16_t)coalescingKey
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -166,7 +170,7 @@ CGFloat const ZINDEX_STICKY_HEADER = 50;
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)handleCustomPan:(UIPanGestureRecognizer *)sender
|
- (void)handleCustomPan:(__unused UIPanGestureRecognizer *)sender
|
||||||
{
|
{
|
||||||
if ([self _shouldDisableScrollInteraction]) {
|
if ([self _shouldDisableScrollInteraction]) {
|
||||||
self.panGestureRecognizer.enabled = NO;
|
self.panGestureRecognizer.enabled = NO;
|
||||||
|
@ -181,7 +185,7 @@ CGFloat const ZINDEX_STICKY_HEADER = 50;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated
|
- (void)scrollRectToVisible:(__unused CGRect)rect animated:(__unused BOOL)animated
|
||||||
{
|
{
|
||||||
// noop
|
// noop
|
||||||
}
|
}
|
||||||
|
@ -228,7 +232,7 @@ CGFloat const ZINDEX_STICKY_HEADER = 50;
|
||||||
* In order to have this called, you must have delaysContentTouches set to NO
|
* In order to have this called, you must have delaysContentTouches set to NO
|
||||||
* (which is the not the `UIKit` default).
|
* (which is the not the `UIKit` default).
|
||||||
*/
|
*/
|
||||||
- (BOOL)touchesShouldCancelInContentView:(UIView *)view
|
- (BOOL)touchesShouldCancelInContentView:(__unused UIView *)view
|
||||||
{
|
{
|
||||||
//TODO: shouldn't this call super if _shouldDisableScrollInteraction returns NO?
|
//TODO: shouldn't this call super if _shouldDisableScrollInteraction returns NO?
|
||||||
return ![self _shouldDisableScrollInteraction];
|
return ![self _shouldDisableScrollInteraction];
|
||||||
|
@ -265,8 +269,9 @@ CGFloat const ZINDEX_STICKY_HEADER = 50;
|
||||||
__block UIView *previousHeader = nil;
|
__block UIView *previousHeader = nil;
|
||||||
__block UIView *currentHeader = nil;
|
__block UIView *currentHeader = nil;
|
||||||
__block UIView *nextHeader = nil;
|
__block UIView *nextHeader = nil;
|
||||||
NSInteger subviewCount = contentView.reactSubviews.count;
|
NSUInteger subviewCount = contentView.reactSubviews.count;
|
||||||
[_stickyHeaderIndices enumerateIndexesWithOptions:0 usingBlock:^(NSUInteger idx, BOOL *stop) {
|
[_stickyHeaderIndices enumerateIndexesWithOptions:0 usingBlock:
|
||||||
|
^(NSUInteger idx, __unused BOOL *stop) {
|
||||||
|
|
||||||
if (idx >= subviewCount) {
|
if (idx >= subviewCount) {
|
||||||
RCTLogError(@"Sticky header index %zd was outside the range {0, %zd}", idx, subviewCount);
|
RCTLogError(@"Sticky header index %zd was outside the range {0, %zd}", idx, subviewCount);
|
||||||
|
@ -358,6 +363,8 @@ CGFloat const ZINDEX_STICKY_HEADER = 50;
|
||||||
|
|
||||||
- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
||||||
{
|
{
|
||||||
|
RCTAssertParam(eventDispatcher);
|
||||||
|
|
||||||
if ((self = [super initWithFrame:CGRectZero])) {
|
if ((self = [super initWithFrame:CGRectZero])) {
|
||||||
|
|
||||||
_eventDispatcher = eventDispatcher;
|
_eventDispatcher = eventDispatcher;
|
||||||
|
@ -377,12 +384,15 @@ CGFloat const ZINDEX_STICKY_HEADER = 50;
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithFrame:(CGRect)frame)
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithCoder:(NSCoder *)aDecoder)
|
||||||
|
|
||||||
- (void)setRemoveClippedSubviews:(__unused BOOL)removeClippedSubviews
|
- (void)setRemoveClippedSubviews:(__unused BOOL)removeClippedSubviews
|
||||||
{
|
{
|
||||||
// Does nothing
|
// Does nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)insertReactSubview:(UIView *)view atIndex:(NSInteger)atIndex
|
- (void)insertReactSubview:(UIView *)view atIndex:(__unused NSInteger)atIndex
|
||||||
{
|
{
|
||||||
RCTAssert(_contentView == nil, @"RCTScrollView may only contain a single subview");
|
RCTAssert(_contentView == nil, @"RCTScrollView may only contain a single subview");
|
||||||
_contentView = view;
|
_contentView = view;
|
||||||
|
@ -401,11 +411,21 @@ CGFloat const ZINDEX_STICKY_HEADER = 50;
|
||||||
return _contentView ? @[_contentView] : @[];
|
return _contentView ? @[_contentView] : @[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)centerContent
|
||||||
|
{
|
||||||
|
return _scrollView.centerContent;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setCenterContent:(BOOL)centerContent
|
- (void)setCenterContent:(BOOL)centerContent
|
||||||
{
|
{
|
||||||
_scrollView.centerContent = centerContent;
|
_scrollView.centerContent = centerContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSIndexSet *)stickyHeaderIndices
|
||||||
|
{
|
||||||
|
return _scrollView.stickyHeaderIndices;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setStickyHeaderIndices:(NSIndexSet *)headerIndices
|
- (void)setStickyHeaderIndices:(NSIndexSet *)headerIndices
|
||||||
{
|
{
|
||||||
RCTAssert(_scrollView.contentSize.width <= self.frame.size.width,
|
RCTAssert(_scrollView.contentSize.width <= self.frame.size.width,
|
||||||
|
@ -506,7 +526,8 @@ RCT_SCROLL_EVENT_HANDLER(scrollViewDidZoom, RCTScrollEventTypeMove)
|
||||||
|
|
||||||
// Calculate changed frames
|
// Calculate changed frames
|
||||||
NSMutableArray *updatedChildFrames = [[NSMutableArray alloc] init];
|
NSMutableArray *updatedChildFrames = [[NSMutableArray alloc] init];
|
||||||
[[_contentView reactSubviews] enumerateObjectsUsingBlock:^(UIView *subview, NSUInteger idx, BOOL *stop) {
|
[[_contentView reactSubviews] enumerateObjectsUsingBlock:
|
||||||
|
^(UIView *subview, NSUInteger idx, __unused BOOL *stop) {
|
||||||
|
|
||||||
// Check if new or changed
|
// Check if new or changed
|
||||||
CGRect newFrame = subview.frame;
|
CGRect newFrame = subview.frame;
|
||||||
|
@ -589,7 +610,7 @@ RCT_SCROLL_EVENT_HANDLER(scrollViewDidZoom, RCTScrollEventTypeMove)
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
|
- (UIView *)viewForZoomingInScrollView:(__unused UIScrollView *)scrollView
|
||||||
{
|
{
|
||||||
return _contentView;
|
return _contentView;
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,7 +75,7 @@ RCT_DEPRECATED_VIEW_PROPERTY(throttleScrollCallbackMS, scrollEventThrottle)
|
||||||
RCT_EXPORT_METHOD(getContentSize:(NSNumber *)reactTag
|
RCT_EXPORT_METHOD(getContentSize:(NSNumber *)reactTag
|
||||||
callback:(RCTResponseSenderBlock)callback)
|
callback:(RCTResponseSenderBlock)callback)
|
||||||
{
|
{
|
||||||
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||||
|
|
||||||
UIView *view = viewRegistry[reactTag];
|
UIView *view = viewRegistry[reactTag];
|
||||||
if (!view) {
|
if (!view) {
|
||||||
|
|
|
@ -213,7 +213,8 @@ static void RCTProcessMetaProps(const float metaProps[META_PROP_COUNT], float st
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)collectRootUpdatedFrames:(NSMutableSet *)viewsWithNewFrame parentConstraint:(CGSize)parentConstraint
|
- (void)collectRootUpdatedFrames:(NSMutableSet *)viewsWithNewFrame
|
||||||
|
parentConstraint:(__unused CGSize)parentConstraint
|
||||||
{
|
{
|
||||||
[self fillCSSNode:_cssNode];
|
[self fillCSSNode:_cssNode];
|
||||||
layoutNode(_cssNode, CSS_UNDEFINED);
|
layoutNode(_cssNode, CSS_UNDEFINED);
|
||||||
|
|
|
@ -30,8 +30,10 @@
|
||||||
NSMutableArray *_tabViews;
|
NSMutableArray *_tabViews;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
||||||
{
|
{
|
||||||
|
RCTAssertParam(eventDispatcher);
|
||||||
|
|
||||||
if ((self = [super initWithFrame:CGRectZero])) {
|
if ((self = [super initWithFrame:CGRectZero])) {
|
||||||
_eventDispatcher = eventDispatcher;
|
_eventDispatcher = eventDispatcher;
|
||||||
_tabViews = [[NSMutableArray alloc] init];
|
_tabViews = [[NSMutableArray alloc] init];
|
||||||
|
@ -42,6 +44,9 @@
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithFrame:(CGRect)frame)
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithCoder:(NSCoder *)aDecoder)
|
||||||
|
|
||||||
- (UIViewController *)backingViewController
|
- (UIViewController *)backingViewController
|
||||||
{
|
{
|
||||||
return _tabController;
|
return _tabController;
|
||||||
|
@ -105,7 +110,8 @@
|
||||||
_tabsChanged = NO;
|
_tabsChanged = NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[self reactSubviews] enumerateObjectsUsingBlock:^(RCTTabBarItem *tab, NSUInteger index, BOOL *stop) {
|
[[self reactSubviews] enumerateObjectsUsingBlock:
|
||||||
|
^(RCTTabBarItem *tab, NSUInteger index, __unused BOOL *stop) {
|
||||||
UIViewController *controller = _tabController.viewControllers[index];
|
UIViewController *controller = _tabController.viewControllers[index];
|
||||||
controller.tabBarItem = tab.barItem;
|
controller.tabBarItem = tab.barItem;
|
||||||
if (tab.selected) {
|
if (tab.selected) {
|
||||||
|
@ -114,11 +120,21 @@
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (UIColor *)barTintColor
|
||||||
|
{
|
||||||
|
return _tabController.tabBar.barTintColor;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setBarTintColor:(UIColor *)barTintColor
|
- (void)setBarTintColor:(UIColor *)barTintColor
|
||||||
{
|
{
|
||||||
_tabController.tabBar.barTintColor = barTintColor;
|
_tabController.tabBar.barTintColor = barTintColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (UIColor *)tintColor
|
||||||
|
{
|
||||||
|
return _tabController.tabBar.tintColor;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setTintColor:(UIColor *)tintColor
|
- (void)setTintColor:(UIColor *)tintColor
|
||||||
{
|
{
|
||||||
_tabController.tabBar.tintColor = tintColor;
|
_tabController.tabBar.tintColor = tintColor;
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
||||||
{
|
{
|
||||||
if ((self = [super initWithFrame:CGRectZero])) {
|
if ((self = [super initWithFrame:CGRectZero])) {
|
||||||
|
RCTAssert(eventDispatcher, @"eventDispatcher is a required parameter");
|
||||||
_eventDispatcher = eventDispatcher;
|
_eventDispatcher = eventDispatcher;
|
||||||
[self addTarget:self action:@selector(_textFieldDidChange) forControlEvents:UIControlEventEditingChanged];
|
[self addTarget:self action:@selector(_textFieldDidChange) forControlEvents:UIControlEventEditingChanged];
|
||||||
[self addTarget:self action:@selector(_textFieldBeginEditing) forControlEvents:UIControlEventEditingDidBegin];
|
[self addTarget:self action:@selector(_textFieldBeginEditing) forControlEvents:UIControlEventEditingDidBegin];
|
||||||
|
@ -35,6 +35,9 @@
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithFrame:(CGRect)frame)
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithCoder:(NSCoder *)aDecoder)
|
||||||
|
|
||||||
- (void)setText:(NSString *)text
|
- (void)setText:(NSString *)text
|
||||||
{
|
{
|
||||||
if (![text isEqualToString:self.text]) {
|
if (![text isEqualToString:self.text]) {
|
||||||
|
|
|
@ -43,11 +43,11 @@ RCT_CUSTOM_VIEW_PROPERTY(fontSize, CGFloat, RCTTextField)
|
||||||
{
|
{
|
||||||
view.font = [RCTConvert UIFont:view.font withSize:json ?: @(defaultView.font.pointSize)];
|
view.font = [RCTConvert UIFont:view.font withSize:json ?: @(defaultView.font.pointSize)];
|
||||||
}
|
}
|
||||||
RCT_CUSTOM_VIEW_PROPERTY(fontWeight, NSString, RCTTextField)
|
RCT_CUSTOM_VIEW_PROPERTY(fontWeight, NSString, __unused RCTTextField)
|
||||||
{
|
{
|
||||||
view.font = [RCTConvert UIFont:view.font withWeight:json]; // defaults to normal
|
view.font = [RCTConvert UIFont:view.font withWeight:json]; // defaults to normal
|
||||||
}
|
}
|
||||||
RCT_CUSTOM_VIEW_PROPERTY(fontStyle, NSString, RCTTextField)
|
RCT_CUSTOM_VIEW_PROPERTY(fontStyle, NSString, __unused RCTTextField)
|
||||||
{
|
{
|
||||||
view.font = [RCTConvert UIFont:view.font withStyle:json]; // defaults to normal
|
view.font = [RCTConvert UIFont:view.font withStyle:json]; // defaults to normal
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ RCT_CUSTOM_VIEW_PROPERTY(fontFamily, NSString, RCTTextField)
|
||||||
{
|
{
|
||||||
NSNumber *reactTag = shadowView.reactTag;
|
NSNumber *reactTag = shadowView.reactTag;
|
||||||
UIEdgeInsets padding = shadowView.paddingAsInsets;
|
UIEdgeInsets padding = shadowView.paddingAsInsets;
|
||||||
return ^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
return ^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||||
((RCTTextField *)viewRegistry[reactTag]).contentInset = padding;
|
((RCTTextField *)viewRegistry[reactTag]).contentInset = padding;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,6 +129,8 @@ static NSString *RCTRecursiveAccessibilityLabel(UIView *view)
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithCoder:unused)
|
||||||
|
|
||||||
- (NSString *)accessibilityLabel
|
- (NSString *)accessibilityLabel
|
||||||
{
|
{
|
||||||
if (super.accessibilityLabel) {
|
if (super.accessibilityLabel) {
|
||||||
|
@ -236,10 +238,10 @@ static NSString *RCTRecursiveAccessibilityLabel(UIView *view)
|
||||||
- (void)react_remountAllSubviews
|
- (void)react_remountAllSubviews
|
||||||
{
|
{
|
||||||
if (_reactSubviews) {
|
if (_reactSubviews) {
|
||||||
NSInteger index = 0;
|
NSUInteger index = 0;
|
||||||
for (UIView *view in _reactSubviews) {
|
for (UIView *view in _reactSubviews) {
|
||||||
if (view.superview != self) {
|
if (view.superview != self) {
|
||||||
if (index < [self subviews].count) {
|
if (index < self.subviews.count) {
|
||||||
[self insertSubview:view atIndex:index];
|
[self insertSubview:view atIndex:index];
|
||||||
} else {
|
} else {
|
||||||
[self addSubview:view];
|
[self addSubview:view];
|
||||||
|
|
|
@ -79,12 +79,12 @@ RCT_EXPORT_MODULE()
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (RCTViewManagerUIBlock)uiBlockToAmendWithShadowView:(RCTShadowView *)shadowView
|
- (RCTViewManagerUIBlock)uiBlockToAmendWithShadowView:(__unused RCTShadowView *)shadowView
|
||||||
{
|
{
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (RCTViewManagerUIBlock)uiBlockToAmendWithShadowViewRegistry:(RCTSparseArray *)shadowViewRegistry
|
- (RCTViewManagerUIBlock)uiBlockToAmendWithShadowViewRegistry:(__unused RCTSparseArray *)shadowViewRegistry
|
||||||
{
|
{
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
@ -169,11 +169,11 @@ RCT_CUSTOM_VIEW_PROPERTY(borderWidth, CGFloat, RCTView)
|
||||||
view.layer.borderWidth = json ? [RCTConvert CGFloat:json] : defaultView.layer.borderWidth;
|
view.layer.borderWidth = json ? [RCTConvert CGFloat:json] : defaultView.layer.borderWidth;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RCT_CUSTOM_VIEW_PROPERTY(onAccessibilityTap, BOOL, RCTView)
|
RCT_CUSTOM_VIEW_PROPERTY(onAccessibilityTap, BOOL, __unused RCTView)
|
||||||
{
|
{
|
||||||
view.accessibilityTapHandler = [self eventHandlerWithName:@"topAccessibilityTap" json:json];
|
view.accessibilityTapHandler = [self eventHandlerWithName:@"topAccessibilityTap" json:json];
|
||||||
}
|
}
|
||||||
RCT_CUSTOM_VIEW_PROPERTY(onMagicTap, BOOL, RCTView)
|
RCT_CUSTOM_VIEW_PROPERTY(onMagicTap, BOOL, __unused RCTView)
|
||||||
{
|
{
|
||||||
view.magicTapHandler = [self eventHandlerWithName:@"topMagicTap" json:json];
|
view.magicTapHandler = [self eventHandlerWithName:@"topMagicTap" json:json];
|
||||||
}
|
}
|
||||||
|
@ -239,7 +239,7 @@ RCT_EXPORT_SHADOW_PROPERTY(borderTopWidth, CGFloat)
|
||||||
RCT_EXPORT_SHADOW_PROPERTY(borderRightWidth, CGFloat)
|
RCT_EXPORT_SHADOW_PROPERTY(borderRightWidth, CGFloat)
|
||||||
RCT_EXPORT_SHADOW_PROPERTY(borderBottomWidth, CGFloat)
|
RCT_EXPORT_SHADOW_PROPERTY(borderBottomWidth, CGFloat)
|
||||||
RCT_EXPORT_SHADOW_PROPERTY(borderLeftWidth, CGFloat)
|
RCT_EXPORT_SHADOW_PROPERTY(borderLeftWidth, CGFloat)
|
||||||
RCT_CUSTOM_SHADOW_PROPERTY(borderWidth, CGFloat, RCTShadowView) {
|
RCT_CUSTOM_SHADOW_PROPERTY(borderWidth, CGFloat, __unused RCTShadowView) {
|
||||||
[view setBorderWidth:[RCTConvert CGFloat:json]];
|
[view setBorderWidth:[RCTConvert CGFloat:json]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,8 @@
|
||||||
|
|
||||||
- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
||||||
{
|
{
|
||||||
|
RCTAssertParam(eventDispatcher);
|
||||||
|
|
||||||
if ((self = [super initWithFrame:CGRectZero])) {
|
if ((self = [super initWithFrame:CGRectZero])) {
|
||||||
super.backgroundColor = [UIColor clearColor];
|
super.backgroundColor = [UIColor clearColor];
|
||||||
_automaticallyAdjustContentInsets = YES;
|
_automaticallyAdjustContentInsets = YES;
|
||||||
|
@ -42,6 +44,9 @@
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithFrame:(CGRect)frame)
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithCoder:(NSCoder *)aDecoder)
|
||||||
|
|
||||||
- (void)goForward
|
- (void)goForward
|
||||||
{
|
{
|
||||||
[_webView goForward];
|
[_webView goForward];
|
||||||
|
@ -57,6 +62,11 @@
|
||||||
[_webView reload];
|
[_webView reload];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSURL *)URL
|
||||||
|
{
|
||||||
|
return _webView.request.URL;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setURL:(NSURL *)URL
|
- (void)setURL:(NSURL *)URL
|
||||||
{
|
{
|
||||||
// Because of the way React works, as pages redirect, we actually end up
|
// Because of the way React works, as pages redirect, we actually end up
|
||||||
|
@ -68,7 +78,7 @@
|
||||||
}
|
}
|
||||||
if (!URL) {
|
if (!URL) {
|
||||||
// Clear the webview
|
// Clear the webview
|
||||||
[_webView loadHTMLString:nil baseURL:nil];
|
[_webView loadHTMLString:@"" baseURL:nil];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
[_webView loadRequest:[NSURLRequest requestWithURL:URL]];
|
[_webView loadRequest:[NSURLRequest requestWithURL:URL]];
|
||||||
|
@ -128,7 +138,7 @@
|
||||||
|
|
||||||
static NSString *const RCTJSAJAXScheme = @"react-ajax";
|
static NSString *const RCTJSAJAXScheme = @"react-ajax";
|
||||||
|
|
||||||
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
|
- (BOOL)webView:(__unused UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
|
||||||
navigationType:(UIWebViewNavigationType)navigationType
|
navigationType:(UIWebViewNavigationType)navigationType
|
||||||
{
|
{
|
||||||
// We have this check to filter out iframe requests and whatnot
|
// We have this check to filter out iframe requests and whatnot
|
||||||
|
@ -146,7 +156,7 @@ static NSString *const RCTJSAJAXScheme = @"react-ajax";
|
||||||
return ![request.URL.scheme isEqualToString:RCTJSAJAXScheme];
|
return ![request.URL.scheme isEqualToString:RCTJSAJAXScheme];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
|
- (void)webView:(__unused UIWebView *)webView didFailLoadWithError:(NSError *)error
|
||||||
{
|
{
|
||||||
if ([error.domain isEqualToString:NSURLErrorDomain] && error.code == NSURLErrorCancelled) {
|
if ([error.domain isEqualToString:NSURLErrorDomain] && error.code == NSURLErrorCancelled) {
|
||||||
// NSURLErrorCancelled is reported when a page has a redirect OR if you load
|
// NSURLErrorCancelled is reported when a page has a redirect OR if you load
|
||||||
|
|
|
@ -47,7 +47,7 @@ RCT_EXPORT_VIEW_PROPERTY(shouldInjectAJAXHandler, BOOL);
|
||||||
|
|
||||||
RCT_EXPORT_METHOD(goBack:(NSNumber *)reactTag)
|
RCT_EXPORT_METHOD(goBack:(NSNumber *)reactTag)
|
||||||
{
|
{
|
||||||
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||||
RCTWebView *view = viewRegistry[reactTag];
|
RCTWebView *view = viewRegistry[reactTag];
|
||||||
if (![view isKindOfClass:[RCTWebView class]]) {
|
if (![view isKindOfClass:[RCTWebView class]]) {
|
||||||
RCTLogError(@"Invalid view returned from registry, expecting RKWebView, got: %@", view);
|
RCTLogError(@"Invalid view returned from registry, expecting RKWebView, got: %@", view);
|
||||||
|
@ -58,7 +58,7 @@ RCT_EXPORT_METHOD(goBack:(NSNumber *)reactTag)
|
||||||
|
|
||||||
RCT_EXPORT_METHOD(goForward:(NSNumber *)reactTag)
|
RCT_EXPORT_METHOD(goForward:(NSNumber *)reactTag)
|
||||||
{
|
{
|
||||||
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||||
id view = viewRegistry[reactTag];
|
id view = viewRegistry[reactTag];
|
||||||
if (![view isKindOfClass:[RCTWebView class]]) {
|
if (![view isKindOfClass:[RCTWebView class]]) {
|
||||||
RCTLogError(@"Invalid view returned from registry, expecting RKWebView, got: %@", view);
|
RCTLogError(@"Invalid view returned from registry, expecting RKWebView, got: %@", view);
|
||||||
|
@ -70,7 +70,7 @@ RCT_EXPORT_METHOD(goForward:(NSNumber *)reactTag)
|
||||||
|
|
||||||
RCT_EXPORT_METHOD(reload:(NSNumber *)reactTag)
|
RCT_EXPORT_METHOD(reload:(NSNumber *)reactTag)
|
||||||
{
|
{
|
||||||
[self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||||
RCTWebView *view = viewRegistry[reactTag];
|
RCTWebView *view = viewRegistry[reactTag];
|
||||||
if (![view isKindOfClass:[RCTWebView class]]) {
|
if (![view isKindOfClass:[RCTWebView class]]) {
|
||||||
RCTLogMustFix(@"Invalid view returned from registry, expecting RKWebView, got: %@", view);
|
RCTLogMustFix(@"Invalid view returned from registry, expecting RKWebView, got: %@", view);
|
||||||
|
|
|
@ -32,7 +32,10 @@
|
||||||
- (instancetype)initWithContentView:(UIView *)contentView
|
- (instancetype)initWithContentView:(UIView *)contentView
|
||||||
eventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
eventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
||||||
{
|
{
|
||||||
if (self = [super initWithNibName:nil bundle:nil]) {
|
RCTAssertParam(contentView);
|
||||||
|
RCTAssertParam(eventDispatcher);
|
||||||
|
|
||||||
|
if ((self = [super initWithNibName:nil bundle:nil])) {
|
||||||
_contentView = contentView;
|
_contentView = contentView;
|
||||||
_eventDispatcher = eventDispatcher;
|
_eventDispatcher = eventDispatcher;
|
||||||
self.automaticallyAdjustsScrollViewInsets = NO;
|
self.automaticallyAdjustsScrollViewInsets = NO;
|
||||||
|
@ -43,12 +46,15 @@
|
||||||
- (instancetype)initWithNavItem:(RCTNavItem *)navItem
|
- (instancetype)initWithNavItem:(RCTNavItem *)navItem
|
||||||
eventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
eventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
||||||
{
|
{
|
||||||
if (self = [self initWithContentView:navItem eventDispatcher:eventDispatcher]) {
|
if ((self = [self initWithContentView:navItem eventDispatcher:eventDispatcher])) {
|
||||||
_navItem = navItem;
|
_navItem = navItem;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithNibName:(NSString *)nn bundle:(NSBundle *)nb)
|
||||||
|
RCT_NOT_IMPLEMENTED(-initWithCoder:(NSCoder *)aDecoder)
|
||||||
|
|
||||||
- (void)viewWillLayoutSubviews
|
- (void)viewWillLayoutSubviews
|
||||||
{
|
{
|
||||||
[super viewWillLayoutSubviews];
|
[super viewWillLayoutSubviews];
|
||||||
|
|
|
@ -118,7 +118,7 @@
|
||||||
*/
|
*/
|
||||||
- (void)reactWillMakeFirstResponder {};
|
- (void)reactWillMakeFirstResponder {};
|
||||||
- (void)reactDidMakeFirstResponder {};
|
- (void)reactDidMakeFirstResponder {};
|
||||||
- (BOOL)reactRespondsToTouch:(UITouch *)touch
|
- (BOOL)reactRespondsToTouch:(__unused UITouch *)touch
|
||||||
{
|
{
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче