Skip to content

Commit

Permalink
Fix React module build error with swift integration on new architectu…
Browse files Browse the repository at this point in the history
…re mode (#34527)

Summary:
when integrates with swift, the compiler will build clang module based on the *React-Core-umbrella.h*.  however, the include chain reaches some c++ headers that are not available from swift. it will cause build error.

![Screen Shot 2022-08-29 at 8 25 08 PM](https://user-images.githubusercontent.com/46429/187200668-2a1f12c9-61e5-4d8b-9531-69ff5c1a5741.png)

this pr adds `#ifdef __cplusplus` guard for it.

## Changelog

[iOS] [Fixed] - Fix React module build error with swift integration on new architecture mode

Pull Request resolved: #34527

Test Plan:
one thing we didn't figure out is that we require reanimated to repro the build error.

1.  `npx react-native init RN070 --version 0.70.0-rc.4`. # can also repro this issue on 0.69
2.  `cd RN070`
3. `yarn add react-native-reanimated@next`
4. `cd ios && rm -rf Pods build && RCT_NEW_ARCH_ENABLED=1 pod install`
5. add `import React;` in `main.m` for clang module generation

```diff
 --- a/ios/RN070/main.m
+++ b/ios/RN070/main.m
@@ -1,5 +1,6 @@
 #import <UIKit/UIKit.h>

+@import React;
 #import "AppDelegate.h"

 int main(int argc, char *argv[])
```

6. `yarn ios`

Reviewed By: cipolleschi

Differential Revision: D39128716

Pulled By: jacdebug

fbshipit-source-id: d9e9130f99e3b9e5f7807c475a24cdd84880e720
  • Loading branch information
Kudo authored and facebook-github-bot committed Aug 30, 2022
1 parent b444f0e commit 3afef3c
Showing 1 changed file with 11 additions and 7 deletions.
18 changes: 11 additions & 7 deletions React/AppSetup/RCTAppSetupUtils.h
Expand Up @@ -9,6 +9,8 @@
#import <React/RCTBridge.h>
#import <React/RCTRootView.h>

#ifdef __cplusplus

#if RCT_NEW_ARCH_ENABLED

#ifndef RCT_USE_HERMES
Expand All @@ -28,17 +30,19 @@
#import <ReactCommon/RCTTurboModuleManager.h>
#endif

RCT_EXTERN_C_BEGIN

void RCTAppSetupPrepareApp(UIApplication *application);
UIView *RCTAppSetupDefaultRootView(RCTBridge *bridge, NSString *moduleName, NSDictionary *initialProperties);

RCT_EXTERN_C_END

#if RCT_NEW_ARCH_ENABLED
RCT_EXTERN id<RCTTurboModule> RCTAppSetupDefaultModuleFromClass(Class moduleClass);

std::unique_ptr<facebook::react::JSExecutorFactory> RCTAppSetupDefaultJsExecutorFactory(
RCTBridge *bridge,
RCTTurboModuleManager *turboModuleManager);
#endif

#endif // __cplusplus

RCT_EXTERN_C_BEGIN

void RCTAppSetupPrepareApp(UIApplication *application);
UIView *RCTAppSetupDefaultRootView(RCTBridge *bridge, NSString *moduleName, NSDictionary *initialProperties);

RCT_EXTERN_C_END

0 comments on commit 3afef3c

Please sign in to comment.