iOSã¢ããªã®èµ·åæã«ãã®èŠåãã©ã³ãã ã«è¡šç€ºãããŸãïŒåžžã«ã§ã¯ãããŸããïŒã
ã¯ã
ã¯ã
OSïŒmacOS Sierra 10.12.6
ããŒãïŒ6.10.2
æ¯ç³žïŒ1.0.2
npmïŒ5.4.2
èŠåå¡ïŒ4.7.0
XcodeïŒXcode9.0ãã«ãããŒãžã§ã³9A235
Android StudioïŒ2.1 AI-143.2915827
ããã±ãŒãž:(å¿
èŠ=>ã€ã³ã¹ããŒã«æžã¿ïŒ
åå¿ïŒ^ 16.0.0 => 16.0.0
react-nativeïŒ^ 0.49.3 => 0.49.3
èŠåãªã
該åœãªã
https://github.com/antoinerousseau/react-native-custom-components
https://github.com/rebeccahughes/react-native-device-info
https://github.com/evollu/react-native-fcm
https://github.com/gwmccull/react-native-polyfill
https://github.com/getsentry/react-native-sentry
ãã£ã¡ãäžç·ïŒ
iOSã§ãã®é»è²ã®åé¡ãçºçããŸãã
ãããèŠããŸãã ããããïŒ11196ã«é¢é£ããŠããŸãã
ãããããªããŒãããããšãããšãã«ã¢ããªãã¯ã©ãã·ã¥ããåå ã§ããããšæããŸãã ããã¯å€±æããŸãTerminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'This method must not be called before the JS thread is created'
iOS 11ã§ããã®ãšã©ãŒãçºçããããšããããŸãããããããããã°ããŠè©³çŽ°æ å ±ãæäŸããæ¹æ³ãããããŸããã ãã®å ŽåãStacktraceã¯ãŸã£ãã圹ã«ç«ã¡ãŸããã
+1
+1
+1
ã®è¿œå ãåæ¢ããŠãã ãããããã«ãããæ
å ±ãè¿œå ããªãé»åã¡ãŒã«éç¥ãçæãããŸãã 代ããã«ããªã¢ã¯ã·ã§ã³ã®è¿œå ãæ©èœã䜿çšããŠãã ããã
åãåé¡ã ç§ã䜿çšããããã±ãŒãžã¯æ¬¡ã®ãšããã§ãã
@antoinerousseauã®ãªã¹ããšã®
react-native-device-infoãè¿œå ããrn0.49ãã0.50ã«ç§»åããŸããã ãããŠä»ãç§ã¯ãã®ãã°ãèŠã€ããŸããã ãããåé¡ãã©ããã¯ããããŸããããç§ããããæã«å ¥ããã®ã¯ãã®æã§ãã
åãåé¡...
ããã§ãããã¯ç§ã®ããã§ã¯ãããŸããã§ãããïŒ
åãåé¡...解決çã¯ãããŸããïŒ
åãåé¡ã äžèšã®ãªã¹ããã䜿çšããå¯äžã®ããã±ãŒãžã¯react-native-sentry
ã§ãã
ä»æ¥ããã§åãåé¡ç§ã¯çæ°ããã¢ããªãéå§ããç§ãè¿œå ããããã±ãŒãžã®ã¿
"native-base"ïŒ "^ 2.3.3"ã
"react"ïŒ "16.0.0"ã
"react-native"ïŒ "0.50.3"ã
"react-native-fcm"ïŒ "^ 10.0.3"
@rizzomichaelg
+1
"react-native"ïŒ "0.49.3"ã
æåã«ã©ã³ãã ã«ããŒããããšãã«ã¢ããªãã¯ã©ãã·ã¥ããŸããã
誰ããããã解決ããŸãããïŒ
@dantman react-native-device-infoãã€ã³ã¹ããŒã«ããçŽåŸã«åé¡ãçºçãå§ããã®ã§ãå°ãªããšãç§ãã¡ã®å Žåã¯ããã®åé¡ããã®ç¹å®ã®ããã±ãŒãžã«é¢é£ããŠãããšåŒ·ãæããŸãã
ç§ã䜿çšããŠããä»ã®å¯äžã®ããã±ãŒãžã¯react-native-keychainã§ãããªãåã«åé¡ãªãã€ã³ã¹ããŒã«ããã®ã§ãããã¯è¯ãè³ãã®ããã§ãã
rebeccahughes / react-native-device-infoïŒ260ã«ã¯RNDeviceInfo
ãåç
§ããã¡ãã»ãŒãžãããããã§ããããã®ãã°ã¯RCTDevLoadingView
ãŸãã ãããã£ãŠããã®èŠåãããªã¬ãŒããã¹ããããè€æ°ããå¯èœæ§ããããŸãã
次ã®è¡ã«ãã¬ãŒã¯ãã€ã³ããèšå®ããå ŽåïŒ
RCTLogWarn(@"RCTBridge required dispatch_sync to load %@. This may lead to deadlocks", _moduleClass);
ã©ã®ã¢ãžã¥ãŒã«/ã¹ã¿ãã¯ãRCTDevLoadingView
èªã¿èŸŒã¿ãæ
åœããŠããããããããŸããç§ã®å Žåããªã¢ãŒããã³ãã«ãèªã¿èŸŒã¿ã RCTDevLoadingView
ããŠã³ããŒãã®é²è¡ç¶æ³ãå ±åããŠããã®ã¯RCTCxxBridge.mm
RCTDevLoadingView
ã
... onProgress:^(RCTLoadingProgress *progressData) {
#if RCT_DEV && __has_include("RCTDevLoadingView.h")
RCTDevLoadingView *loadingView = [weakSelf moduleForClass:[RCTDevLoadingView class]];
[loadingView updateProgress:progressData];
#endif
}];
ããã§ãRCTCxxBridgeã¯moduleForClass
ã䜿çšããŠãããã¢ãžã¥ãŒã«ããŸã å©çšã§ããªãå Žåã¯ãã¢ãžã¥ãŒã«ã®ã€ã³ã¹ã¿ã³ã¹ãããŒãããŸãã onProgress
ãããã¯ã«äœ¿çšããããã¥ãŒã®ããã RCTDevLoadingView
ã¯éã¡ã€ã³ãã¥ãŒã«ããŒããããŸããã RCTDevLoadingView
ã¯ã¡ã€ã³ãã¥ãŒã®èšå®ãå¿
èŠã§ãã
以äžã䜿çšããŠRCTBridgeDelegate
ããã€ã³ã¹ã¿ã³ã¹ãè¿ãããšã«ããã RCTDevLoadingView
楜芳çã«ããŒãããããšã§ãèŠåãåé¿ããããšãã§ããŸããã
- (NSArray<id<RCTBridgeModule>> *)extraModulesForBridge:(RCTBridge *)bridge;
AppDelegate.m
æŽæ°ããããšã§ãèŠåãåé¿ããããšãã§ããŸããã
#if RCT_DEV
#import <React/RCTDevLoadingView.h>
#endif
...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:jsCodeLocation
moduleProvider:nil
launchOptions:launchOptions];
#if RCT_DEV
[bridge moduleForClass:[RCTDevLoadingView class]];
#endif
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
moduleName:@"Test"
initialProperties:nil];
...
}
åå¿ãã€ãã£ãïŒ0.50.4
åãåé¡...
åå¿ãã€ãã£ãïŒ0.51.0
åãåé¡...
"react"ïŒ "16.2.0"ã
"react-native"ïŒ "0.52.0"ã
åãåé¡...
"react"ïŒ "16.2.0"ã
"react-native"ïŒ "0.51.0"ã
"react-native-device-info"ïŒ "0.13.0"
ããã§ã®ç§ã®è§£æ±ºçã¯ãreact-native-device-infoãããããã¡ã€ã«ãã移åãããããžã§ã¯ãå ã§æåã§ãªã³ã¯ããããšã§ããã ããã§åé¡ã¯è§£æ±ºããããã§ãã å¥ã®ã¢ãããŒããšããŠãããããã¡ã€ã«ã«Reactã®ãµãã¹ããã¯ãšããŠCxxBridgeãå«ããããšãã§ãããšæããŸãããããã«ã¯FollyïŒããã³ããŒã¹ãïŒãå¿ èŠã§ãããã»ããã¢ããå šäœãé¢åã§æéãããããŸãã è¿ éãªä¿®æ£ãå¿ èŠãªå Žåã¯ãåé¡ã®åå ãšãªã£ãŠããããã±ãŒãžããããããåé€ããã ãã§ãã
ãreact-native-device-infoããã€ã³ã¹ããŒã«ãããŠããŸããïŒ
0.54.2ã«åé¡ããããŸãïŒ
"react"ïŒ "16.3.0-alpha.2"ã
"react-native"ïŒ "0.54.2"ã
"react-native-action-button"ïŒ "^ 2.8.4"ã
"react-native-admob"ïŒ "^ 2.0.0-beta.4"ã
"react-native-animatable"ïŒ "^ 1.2.4"ã
"react-native-awesome-alerts"ïŒ "^ 1.0.7"ã
"react-native-elements"ïŒ "^ 0.19.0"ã
"react-native-fbsdk"ïŒ "^ 0.7.0"ã
"react-native-linear-gradient"ïŒ "^ 2.4.0"ã
"react-native-parallax-scroll-view"ïŒ "^ 0.21.0"ã
"react-native-photo-grid"ïŒ "0.0.2"ã
"react-native-responsive-dimensions"ïŒ "^ 1.0.2"ã
"react-native-snap-carousel"ïŒ "^ 3.6.0"ã
"react-native-vector-icons"ïŒ "^ 4.5.0"ã
"react-navigation"ïŒ "^ 1.5.7"
ãã㯠"react-native-action-button"ïŒ "^ 2.8.4"ã§ã shadowStyle={{shadowOpacity: 0.9}}
è¿œå ãããšèŠåã解決ããŸããã
ããã§åãåé¡ã
åãåé¡ã
RN 0.54.4
誰ãã解決çãåŸãŸãããïŒ
æ°ããäœæãã/æ°ããäœæãããããžã§ã¯ãã§ããšã©ãŒãçºçããŸãã
"react"ïŒ "16.3.1"ã
"react-native"ïŒ "0.54.4"
åã
+1
@antoinerousseauãã®åé¡ã«é¢ããæŽæ°ã¯ãããŸããïŒ
@devburmistroãæäŸãããœãªã¥ãŒã·ã§ã³ã¯ãå§ãããŸããã ç§ã®ãããžã§ã¯ãã§ã¯ããã®ã¢ãµãŒã·ã§ã³ãšã©ãŒãã·ãã¥ã¬ãŒã¿ãŒããå®è¡ããããšãã«èµ·åæã«ã©ã³ãã ã«çŸãããããçš®ã®ç«¶åç¶æ ãäœæããŸããã
ç§ã®ã»ããã¢ããïŒ
react-native-cli: 2.0.1
react-native: 0.53.0
ãªããžããªãæåããèšå®ããããã«çŽç²ãªjsã³ãŒããæ¿å ¥ããçŽåŸã«ããã®åé¡ãçºçãå§ããŸããã 以åã®ãªããžããªãšãã®æ°ãããªããžããªã®æœåšçãªéãã¯ãçŸåšãCocoapodsã䜿çšããŠããããšã§ãã
Cocoapodsã䜿çšããŠããªã人ã¯ããŸããïŒ
ããã¯ç§ãè¿œå ããçŽåŸã«èµ·ãããŸãã
react-native-blur
å ã«ãã¹ããããå ±ææ¡åŒµæ©èœãã¥ãŒã«
react-native-modalbox
@Babazonãããçºçãããšãã«ãããã¬ãŒã䜿çšããŠããŸããïŒ
ããããªããã å ±ææ¡åŒµæ©èœãã¥ãŒãããããã°/ã³ã³ãœãŒã«ãã°ãååŸã§ããŸããã§ãããã¡ã€ã³ã¢ããªã®ã¿ã§ãã
+1
ãããæçš¿ããŠãããŠããããšãïŒ åé¡ãReactNativeã®å€ãããŒãžã§ã³ãåç §ããŠããå¯èœæ§ãããããã§ãã ææ°ãªãªãŒã¹v0.55ã§åé¡ãåçŸã§ããŸããïŒ
è²¢ç®ããŠããã ãããããšãããããŸãã
@ react-native-botã®åé¡ã¯ReactNative0.55ã§åŒãç¶ãçºçããŸã
@ react-native-bot cocoapodsã䜿çšããŠreactnativeã管çãããšãåé¡ãçºçããŸãã
0.50.4ãš0.55.4ãè©ŠãããŒãžã§ã³
React Native 0.55.3ã«react-native-svgãã€ã³ã¹ããŒã«ãããšããããã®åé¡ãçºçããŸããã
ãŸã çºçããŠããåé¡ïŒ
react-native-cliïŒ2.0.1
åå¿ãã€ãã£ãïŒ0.55.4
ã³ãŒããè¿œå ããã«æ°ããäœæãããããžã§ã¯ãã§ãŸã£ããåãèŠåã衚瀺ãããŸãããFirebaseã®äŸåé¢ä¿ã®ã¿ãæ¿å
¥ãããŠããŸãã
ç§ã¯äœ¿çšããŠããŸãïŒreactïŒ16.3.1
åå¿ãã€ãã£ãïŒ0.55.4
ããããšãããããŸãã
åãåé¡ãçºçããŠããŸãããXcodeãããã«ããåå®è¡ãããšãã«ã以åã®ã¿ãŒããã«ãŠã£ã³ããŠãå®è¡ãããŠããããšãåå ã§ããã ã¿ãŒããã«ãšã·ãã¥ã¬ãŒã¿ãŒãçµäºããŠãã«ããå床å®è¡ãããšããã®åé¡ã¯è§£æ±ºããŸããã
ãŸããreact-native-device-infoãã€ã³ã¹ããŒã«ããŸããããé»è²ã®ã¡ãã»ãŒãžã¯å°ãç°ãªããŸãããRCTBridgeã¯RCCManagerModuleãããŒãããããã«dispatch_syncãå¿ èŠã§ã...ã
é
åãmap
ããŠæ°ããèŠçŽ ãè¿ãããã«ã¹ã¿ã ã³ã³ããŒãã³ãã«style
ããããã£ãæž¡ããšããã®èŠåã衚瀺ããããšèšããŸããããèŠåã¯äºæž¬ã§ããªãããã§ãã
OS11ã§ããã®åé¡ãçºçããŸããã
ããã§ããã¯ã¿ãŒã¢ã€ã³ã³ã®äœ¿çšã«ã€ããŠèšåããŠãã人ãäœäººãããŸãã
ç§ã«ãåãåé¡ããããreact-native-device-infoã®ãªã³ã¯ã解é€ããŠåé€ããŸããããèŠåã衚瀺ãããŸããã
react-native-vector-iconsãè¿œå ããåŸãåãåé¡ãçºçãããããåé€ããŠèŠåãæ¶ããŸããã
åèãŸã§ã«ããã®èŠåã¯ããªã¢ãŒããããã¬ãŒããªã³ã«ããŠãªããŒãããåŸãä»æ¥è¡šç€ºãããŸããã ãªã¢ãŒãããªãã«ãããªããŒãããŸãããèŠåã¯ãããŸããã ãªã¢ãŒãããªã³ã«æ»ãããªããŒãããŸãããèŠåã¯ãããŸããã
åèãŸã§ã«ããã®èŠåã¯ããªã¢ãŒããããã¬ãŒããªã³ã«ããŠãªããŒãããåŸãä»æ¥è¡šç€ºãããŸããã ãªã¢ãŒãããªãã«ãããªããŒãããŸãããèŠåã¯ãããŸããã ãªã¢ãŒãããªã³ã«æ»ãããªããŒãããŸãããèŠåã¯ãããŸããã
ã @ mokriyaã³ã¡ã³ããèªãã åŸããããã¬ãŒããªããŒããããšãèŠåã衚瀺ãããªããªããŸããã ãã©ãŠã¶ã§ãããã¬ã¿ããéããç¶æ ã§AndroidãšIOSãšãã¥ã¬ãŒã¿/ã·ãã¥ã¬ãŒã¿éã移åãããšããããçºçããå¯èœæ§ããããŸãã
ããããããã§ã¯ãããŸãã
iOS 12ãRN0.57.0åãåé¡ã
解決ããæ¹æ³ã¯ïŒ
ãŸãã¯ç¡èŠããŸããïŒ
import { YellowBox } from 'react-native';
YellowBox.ignoreWarnings(['RCTBridge']);
ã¯ããreact-native-videoãè¿œå ããåŸããã®åé¡ãçºçããŠããŸãããã©ãããæå³ã§ããïŒ åç»ã®åçã劚ãããã®ã§ã¯ãªãããã§ãã ãŸãããããã®ãµãŒãããŒãã£ã³ã³ããŒãã³ããã¹ãŠããšã©ãŒã®åå ãšãªã£ãŠããã®ã¯ãªãã§ããïŒ ãã€ãã£ãã¢ãžã¥ãŒã«ã®éçºã§äœãã足ããŸãããïŒ
react-native-device-info
ãªãã§iOS 12.1ãRN0.57.4ã§åãåé¡ãçºçãã
ããã€ãåé¡ããããŸã
"lodash": "^4.17.10",
"react": "16.4.1",
"react-native": "0.56.0",
"react-native-check-box": "^2.1.0",
"react-native-collapsible": "^1.2.1",
"react-native-elements": "^0.19.1",
"react-native-google-analytics-bridge": "^5.8.0",
"react-native-google-places-autocomplete": "^1.3.9",
"react-native-map-clustering": "^1.3.0",
"react-native-maps": "^0.21.0",
"react-native-masked-text": "^1.7.2",
"react-native-modal-picker": "0.0.16",
"react-native-onesignal": "^3.2.8",
"react-native-simple-radio-button": "^2.7.2",
"react-native-svg": "^8.0.0",
"react-native-ui-kitten": "^3.0.1",
"react-native-vector-icons": "^5.0.0",
"react-navigation": "^2.11.2",
"rn-sliding-up-panel": "^1.2.1",
"victory-native": "^30.5.0"
IOSã§ããRCTBridgeã¯RCTDevLoadingViewãããŒãããããã«dispatch_snycãå¿ èŠãšããŸãããããã¯ãããããã¯ã«ã€ãªããå¯èœæ§ããããŸããã
Xcodeã§Project -> Clean
ããŠãããã¢ããªã±ãŒã·ã§ã³ãåå®è¡ããå¿
èŠããããããããŸããã
ãã®ã³ã¡ã³ãã解決çã§ããããšã確èªããŸããã ããããšã@mattijsfïŒ
RCTBridgeDelegate
ãèŠã€ããŠã extraModulesForBridge
ã¡ãœããããªãŒããŒã©ã€ãããŸãã
<strong i="11">@interface</strong> MyBridgeDelegate : NSObject <RCTBridgeDelegate>
<strong i="12">@end</strong>
<strong i="13">@implementation</strong> MyBridgeDelegate
- (NSArray<id<RCTBridgeModule>> *)extraModulesForBridge:(RCTBridge *)bridge
{
return @[
#if RCT_DEV
[bridge moduleForClass:[RCTDevLoadingView class]],
#endif
];
}
<strong i="14">@end</strong>
class MyBridgeDelegate: NSObject, RCTBridgeDelegate {
func extraModules(for bridge: RCTBridge!) -> [RCTBridgeModule]! {
var modules: [Any]! = []
if RCT_DEV == 1 {
modules.append(bridge.module(for: RCTDevLoadingView.self))
}
return modules as? [RCTBridgeModule]
}
}
iOS12ã§ã®åçŸãRN 0.57.8
ç§ã®äŸåé¢ä¿ãåãåé¡
@aleclarsonãã®ã³ãŒãã¯æ£ç¢ºã«äœãããŸããïŒ
@ccorcos RCTDevLoadingView
å
ã«ããŒããããããRNã«ãã£ãŠããŒãããããšãã«ã¡ã€ã³ã¹ã¬ããããããã¯ããå¿
èŠã¯ãããŸããã ãã®ã³ã¡ã³ãã¯ããªãã«ãšã£ãŠããç°¡åãªè§£æ±ºçãããããŸããã
ãããä»ã®äººã«ããŸã èµ·ãã£ãŠãããã©ããã¯ããããŸããããRN 0.57.8 + iOS 11.3ïŒå°ãªããšãïŒã§ç§ã«ã¯ãŸã èµ·ãã£ãŠããŸã
@devburmistroã«ããäžèšã®ã³ã¡ã³ãããã®å€æŽãæ£åžžã«äœ¿çšããŠããŸã
ãã®åé¡ã«çŽé¢ããŠãã
RN 0.58.3
iOS 11.4ã12.1
ãããŠããã¯ãããããã¯ã«ã€ãªãããŸãã ã«ã¹ã¿ã ã¢ãŒãã«ãéãããšçºçããŸã
以åã®0.57.8ã§ã¯ãããæã£ãŠããŸããã§ããããåé¡ãããŸããã§ãã
ããã§ãåãã§ãããRN0.58.3ã«ã¢ããã°ã¬ãŒãããåŸã«ãããååŸããŸã
ç§ã®æ£ç¢ºãªãšã©ãŒã¯æ¬¡ã®ãšããã§ãïŒ Unable find module for DevLoadingView
ãäžèšã®è§£æ±ºçã¯ç§ã®ããã«ãããä¿®æ£ããŸãã
ãã®ã³ãããã«é¢é£ããŠããããã§ãããå®éã«ã¯RN0.58.3ã«è¿œå ãããŠããŸã
https://github.com/facebook/react-native/commit/d7a0c44590bcf3fb9d055aeae3391d5bcd7e21be#diff -a2a67635fffd7b690d14dc17ae563a71
ä»æ¥RN0.58.3ã«ã¢ããã°ã¬ãŒãããåŸã@ oferRoundsãšåããDevLoadingViewã®ã¢ãžã¥ãŒã«ãèŠã€ãããŸããããšããåé¡ãçºçããŠããŸãã
ã·ãã¥ã¬ãŒã¿ãŒã§ã¢ããªãæåã«éãããšãã«ããªã¬ãŒãããããã§ãã ãã®åŸã®ãªããŒãïŒcmd-RïŒã§ã¯ãšã©ãŒã¯çºçããŸããã
ç·šéïŒãã®ç¹å®ã®ãšã©ãŒã«ã€ããŠå¥ã®åé¡ãæåºããŸããïŒïŒ23235
ãŸããããã0.58.3ã®iOSã§ããŸã åé¡ã§ããããšã確èªã§ããŸãã
ããã€ãã®èå³æ·±ã芳å¯ïŒ
_ç·šéïŒãã®åé¿çããŸã å®è¡å¯èœãªè§£æ±º
AppDelegate.m
æŽæ°ããããšã§ãèŠåãåé¿ããããšãã§ããŸããã#if RCT_DEV #import <React/RCTDevLoadingView.h> #endif ... - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:jsCodeLocation moduleProvider:nil launchOptions:launchOptions]; #if RCT_DEV [bridge moduleForClass:[RCTDevLoadingView class]]; #endif RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"Test" initialProperties:nil]; ... }
ããã¯ç§ã®ããã«åããã
react-native-navigationã䜿çšããŠãããšãã«ãã«ã¹ã¿ã RCTBridgeDelegateãç»é²ã§ãã人ã¯ããŸããïŒ bridgeManagerDelegate
ãã©ã¡ãŒã¿ãä»ããŠããªã²ãŒããæž¡ãããšãã§ããã¯ãã§ãããå£ããŠããããã§ãïŒ extraModulesForBridge
æäŸãããRCTBridgeã¯åžžã«nil
ïŒã
RN0.58.6ãšiOS12ã§react-native-device-info
ãè¿œå ããçŽåŸã«ããããååŸãå§ããŸããã
OKããã®ã³ã¡ã³ãã¯ç§ã®ããã«ãããä¿®æ£ããããã§ãã
React Native 0.59.1
react-native-device-infoãã€ã³ã¹ããŒã«ããçŽåŸã«ãã®èŠåã衚瀺ããå§ããŸãããå®éã®è§£æ±ºçã¯ãããŸããïŒ
ãããã©ã³ãã ã«è¡šç€ºãããŸããRN0.57.8ãã0.59.5ã«ã¢ããã°ã¬ãŒãããéã«ããã¹ãŠãåã³æ©èœãããããã«å¿ èŠãªãã®ïŒconfigïŒä»¥å€ã¯ãã¢ããªã³ãŒãã«å€æŽãå ããŠããŸããã ç§ã®å Žåãåé¡ã®libã¯CodePushã§ããã2ã€ã®ã€ãšããŒããã¯ã¹èŠåããããŸãã
RCTBridge required dispatch_sync to load CodePush. This may lead to deadlocks
ãããŠRequired dispatch_sync to load constants for CodePush. This may lead to deadlocks
ãã®åé¡ã¯é·ãã§ãã æ ¹æ¬åå ãçªãæ¢ããã®ã¯ãŸã è¬ã ãšæããŸããïŒ ä»ã«åœ¹ç«ã€ãããã°æ å ±ãæããŠãã ããã
ç§ã®package.jsonïŒ
{
"name": "wonderswipe",
"version": "0.0.1",
"private": true,
"eslintConfig": {
"parserOptions": {
"ecmaVersion": 7,
"sourceType": "module",
"ecmaFeatures": {
"jsx": true
}
},
"env": {
"browser": false,
"node": true
},
"plugins": [
"react",
"react-native",
"react-hooks"
],
"rules": {
"comma-dangle": [
2,
"always-multiline"
],
"semi": [
2,
"never"
],
"react-native/no-unused-styles": 2,
"react-native/split-platform-components": 2,
"react-hooks/rules-of-hooks": "error"
}
},
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"postinstall": "patch-package"
},
"dependencies": {
"@postlight/mercury-parser": "^2.0.0",
"@react-native-community/async-storage": "^1.3.3",
"@react-native-community/viewpager": "^1.1.6",
"babel-plugin-idx": "^2.4.0",
"buffer": "^5.2.1",
"he": "^1.1.0",
"idx": "^2.5.5",
"lodash": "^4.17.2",
"moment": "^2.19.0",
"moment-timezone": "^0.5.10",
"node-summary": "../node-summary",
"react": "16.8.3",
"react-native": "^0.59.4",
"react-native-actionsheet": "^2.4.2",
"react-native-blur": "^3.2.0",
"react-native-cached-image": "../react-native-cached-image",
"react-native-cheerio": "^1.0.0-rc.4",
"react-native-code-push": "^5.3",
"react-native-custom-tabs": "^0.1.7",
"react-native-easy-toast": "^1.0.9",
"react-native-firebase": "^5.3.1",
"react-native-fit-image": "^1.4.8",
"react-native-flanimatedimage": "^0.4.0",
"react-native-highlight-words": "^1.0.1",
"react-native-keep-awake": "^4.0.0",
"react-native-linear-gradient": "^2.0.0",
"react-native-modal-dropdown": "^0.6.2",
"react-native-modalbox": "^1.6.0",
"react-native-orientation": "^3.1.3",
"react-native-parallax-scroll-view": "../react-native-parallax-scroll-view",
"react-native-rate": "^1.0.8",
"react-native-safari-view": "^2.0.0",
"react-native-sentry": "^0.42.0",
"react-native-sha256": "^1.1.1",
"react-native-status-bar-size": "^0.3.2",
"react-native-swiper": "^1.5.14",
"react-native-tooltip": "^5.2.0",
"react-native-tts": "^3.0.0",
"react-native-vector-icons": "^6.4.2",
"react-native-webview": "^5.7.0",
"react-native-webview-bridge": "^0.40.1",
"react-redux": "^7.0.1",
"redux": "^4.0.0",
"redux-thunk": "^2.1.0"
},
"devDependencies": {
"babel-eslint": "^10.0.1",
"eslint": "^5.15.1",
"eslint-plugin-react": "^7.12.4",
"eslint-plugin-react-hooks": "^1.0.1",
"eslint-plugin-react-native": "^3.6.0",
"patch-package": "^6.1.2",
"postinstall-postinstall": "^2.0.0",
"redux-logger": "^3.0.6"
},
"resolutions": {
"babel-core": "7.0.0-bridge.0"
}
}
@grossingdevã³ã¡ã³ãã§ãã®ãšã©ãŒãä¿®æ£ããŸããã ããããreact-nativeã0.59.8ããŒãžã§ã³ã«æŽæ°ããåŸã ãã®ãšã©ãŒãåã³çºçããŸãã
react-native 0.59.3ã§ã¯ãåé¡ãåé¿ããããã®ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
#if RCT_DEV
[bridge moduleForClass:[RCTDevLoadingView class]];
#endif
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
moduleName:@"YourAppName"
initialProperties:nil];
iOSã¢ããªã§react-native-maps
googleããããçµ±åããŠãããšãã«AppDelegate.mãã¡ã€ã«ãæŽæ°ããåŸãåãèŠåã«çŽé¢ããŸãã
"react-native": "0.59.5"
ç§ã«ãšã£ãŠ-ããã¯ããŸããã£ã---
"react"ïŒ "16.8.3"ã
"react-native"ïŒ "0.59.9"ã
AppDelegate.mãã¡ã€ã«
#if RCT_DEV
#import <React/RCTDevLoadingView.h>
#endif
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
// RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
// moduleName:@"mobileapp"
// initialProperties:nil];
NSURL *theurl ;
#if DEBUG
theurl = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
theurl = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:theurl
moduleProvider:nil
launchOptions:launchOptions];
#if RCT_DEV
[bridge moduleForClass:[RCTDevLoadingView class]];
#endif
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
moduleName:@"mobileapp"
initialProperties:nil];
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *rootViewController = [UIViewController new];
rootViewController.view = rootView;
self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];
return YES;
}
@ amitkumar3968ã³ã¡ã³ããã³ãŒããšããŠãã©ãŒããããã
åæ§ã®ãšã©ãŒãçºçããŸããïŒ
ç§ã®package.jsonïŒ
{
"name": "auth",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "react-native start",
"test": "jest",
"lint": "eslint ."
},
"dependencies": {
"firebase": "^6.3.1",
"react": "16.8.6",
"react-native": "0.60.0"
},
"devDependencies": {
"@babel/core": "7.5.0",
"@babel/runtime": "7.5.0",
"@react-native-community/eslint-config": "0.0.3",
"babel-jest": "24.8.0",
"eslint": "6.0.1",
"jest": "24.8.0",
"metro-react-native-babel-preset": "0.54.1",
"react-test-renderer": "16.8.6"
},
"jest": {
"preset": "react-native"
}
}
ãªããŒãã¯ãããä¿®æ£ããŸãããããããã©ã³ãã ã«çºçããå Žåãäœããæ£ãããªãããã§ãã
ãã®åé¡ã¯ããããã¬ãŒãéã¢ã¯ãã£ãåãããšãã«ã®ã¿çºçããŸãã ããã©ãŒãã³ã¹ã¢ãã¿ãŒãéããšãéã¢ã¯ãã£ãåããåŸãRAMã±100MBãã±300MBã«ãªãããšã«æ°ä»ããŸããã
ãããã¬ãŒã®å ŽåïŒ
ãããã¬ãŒãªãïŒ
ææ¡ãããåé¿çã¯ãèŠåã®è¡šç€ºãåæ¢ããã ããªã®ã§ãç§ã®å Žåã¯æ©èœããŸããããã¡ã¢ãªã®åé¡ã¯è§£æ±ºããŸããã
ãã®åé¡ããªãªãŒã¹ã¢ãŒãã§ã®ã¢ããªã®ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããã®ã§ã¯ãªãããšæããŸãã
åè¿°ã®åé¿çã¯ãReact Native 0.59.10
ãç§ã«ãšã£ãŠããã®åé¡ã解決ããŸããïŒ
diff --git a/ios/Foo/AppDelegate.m b/ios/Foo/AppDelegate.m
index e446e79..2c28719 100644
--- a/ios/Foo/AppDelegate.m
+++ b/ios/Foo/AppDelegate.m
@@ -18,6 +18,11 @@
#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
+// https://github.com/facebook/react-native/issues/16376#issuecomment-350523177
+#if RCT_DEV && __has_include(<React/RCTDevLoadingView.h>)
+#import <React/RCTDevLoadingView.h>
+#endif
+
<strong i="7">@implementation</strong> AppDelegate
@@ -39,6 +44,13 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
+
+ // https://github.com/facebook/react-native/issues/16376#issuecomment-350523177
+ #if RCT_DEV && __has_include(<React/RCTDevLoadingView.h>)
+ [bridge moduleForClass:[RCTDevLoadingView class]];
+ #endif
+
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"Foo" initialProperties:nil];
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
ããã§ã®å¯äžã®éãã¯ãããŒãããããã«ãŸã£ããåãããžãã¯ïŒ RCT_DEV && __has_include(<React/RCTDevLoadingView.h>)
éšåïŒãäžèŽãããããšã§ã...
react-native-firebase
2ãåŸãŸããã ãã£ãã«èµ·ãããŸãããïŒ
react-native 0.61.2ã䜿çšããŠãæ°ããäœæãããã¹ããããžã§ã¯ãã®Images.xcassets/AppIcon.appiconset
ãã£ã¬ã¯ããªã«ã¢ããªã¢ã€ã³ã³ãè¿œå ããããšã§ããã®åé¡ãåçŸããããšãã§ããŸããã ãã®åé¡ã§èšåãããŠããã³ãŒãè¡ãè¿œå ããããšã§ãåé¡ã¯è§£æ±ºããŸããã
åå¿ãã€ãã£ã0.59.10
åãåé¡ã
ããã§åãåé¡ïŒ 誰ãããã®åé¡ã解決ããŸãããïŒ
AppDelegate.m
æŽæ°ããããšã§ãèŠåãåé¿ããããšãã§ããŸããã#if RCT_DEV #import <React/RCTDevLoadingView.h> #endif ... - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:jsCodeLocation moduleProvider:nil launchOptions:launchOptions]; #if RCT_DEV [bridge moduleForClass:[RCTDevLoadingView class]]; #endif RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"Test" initialProperties:nil]; ... }
ãã®åé¿çã¯èŠåã解決ããŸããã ã©ããããããšãããããŸããã
åãåé¡ã§ãããã³ãŒãcomponentDidUpdateã®ãããã¯ãåé€ãããšããã®èŠåã¯æ¶ããŸãã ããããããããããããç§ã¯componentDidUpdateãå¿ èŠã§ãã
æåïŒXcodeãéããã³ã³ããŒãã³ããã€ã³ã¹ããŒã«ããå Žåã¯éåžžXcodeã®åçïŒ[ã€ã³ã¹ããŒã«]ãã¯ãªãã¯ããŸã
macOSãœãããŠã§ã¢ãæŽæ°ãããšãã¯ãæŽæ°ã®ããã«Xcodeãéãå¿ èŠããããŸã
AppDelegate.m
æŽæ°ããããšã§ãèŠåãåé¿ããããšãã§ããŸããã#if RCT_DEV #import <React/RCTDevLoadingView.h> #endif ... - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:jsCodeLocation moduleProvider:nil launchOptions:launchOptions]; #if RCT_DEV [bridge moduleForClass:[RCTDevLoadingView class]]; #endif RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"Test" initialProperties:nil]; ... }
@grossingdev jsCodeLocationã¯äœã§ããïŒ URLã§ããã¯ãã§ãããäœãæãå¿ èŠããããŸããïŒ
react-native-firebase
2ãåŸãŸããã ãã£ãã«èµ·ãããŸãããïŒ
Firebaseãåå ã§ãã®ãšã©ãŒãçºçããŠããŸãã ã©ã®ããã«è§£æ±ºããããå ±æããŠãã ããã @fungilation
@ abdi4ç§ãããã«ééããŸãããããªãã¯ããããªããšã解決ããŸãããïŒ
@zlokaããããããã¯ã©ã³ãã ã«çºçããåäœæã§ããŸãã
ããããã®ä»ã®èŠåãç¡èŠããæãç°¡åãªæ¹æ³ã¯
import { YellowBox } from 'react-native';
YellowBox.ignoreWarnings([
'RCTBridge'
]);
ãã®åé¡ã¯ãç§ã«ãšã£ãŠé決å®è«çã«çºçããŸãã ç§ãæã£ãŠããå¯äžã®ä¿®æ£ã¯ãããã€ã¹ããã¢ããªãåé€ããŠåå®è¡ããããšã§ãã
è¿ éãªè§£æ±ºçïŒ
let bridge = RCTBridgeïŒbundleURLïŒjsCodeLocationãmoduleProviderïŒnilãlaunchOptionsïŒnilïŒ
#if RCT_DEV
bridgeïŒ.moduleïŒforïŒRCTDevLoadingView.selfïŒ
#endif
rootView = RCTRootViewïŒbridgeïŒbridgeïŒãmoduleNameïŒ "AppMain"ãinitialPropertiesïŒnilïŒ
ãããæè¿ãã®åé¡ã«é¢ãã掻åã¯ãªãã£ãããã§ãã åé¡ã¯ä¿®æ£ãããŸãããããããšãã³ãã¥ããã£ã®æ³šæãå¿ èŠã§ããïŒ ãã以äžã®ã¢ã¯ãã£ããã£ãçºçããªãå Žåããã®åé¡ã¯è§£æ±ºãããå¯èœæ§ããããŸãã ãã®åé¡ã«ããã£ã¹ã«ãã·ã§ã³ããšããã©ãã«ãä»ãããããããã¯ãã°ãã«è¿œå ããããšãã§ããŸããéãããŸãŸã«ããŠãããŸãã è²¢ç®ããŠããã ãããããšãããããŸãã
ãããæè¿ãã®åé¡ã«é¢ãã掻åã¯ãªãã£ãããã§ãã åé¡ã¯ä¿®æ£ãããŸãããããããšãã³ãã¥ããã£ã®æ³šæãå¿ èŠã§ããïŒ ãã以äžã®ã¢ã¯ãã£ããã£ãçºçããªãå Žåããã®åé¡ã¯è§£æ±ºãããå¯èœæ§ããããŸãã ãã®åé¡ã«ããã£ã¹ã«ãã·ã§ã³ããšããã©ãã«ãä»ãããããããã¯ãã°ãã«è¿œå ããããšãã§ããŸããéãããŸãŸã«ããŠãããŸãã è²¢ç®ããŠããã ãããããšãããããŸãã
ãããããªãã®æŽ»åã§ãã èŠåã¯ãæ°ããã¢ããªã§åŒãç¶ã衚瀺ãããŸãã
@sospedraã¯ãå€éšã®äŸåé¢ä¿ãªãã«React Nativeãã³ãã¬ãŒãã§çºçãããã®ã¬ããæäŸã§ããŸããïŒ
ãµãŒãããŒãã£ã®ã©ã€ãã©ãªã§çºçããå Žåã¯ããããã®ã©ã€ãã©ãªã«åé¡ãæåºããå¿ èŠããããŸã
0.63.2
åãåé¡ãçºçããŠããåå ãããããŸãããã©ã³ãã ã«çºçããããšããããã¢ããªã®ãã¹ãŠã®æäœãæ©èœããªããªãããšããããŸãã
åãèŠåã¯ãMetroïŒæåïŒãªããŒãã®react-native-macos
泚æïŒRN0.62.2ã®ç§ã«ãšã£ãŠ
Catalystã¢ããªã§åãèŠåã衚瀺ãããŸããã
XCode build and run
ã·ãã¥ã¬ãŒã¿ãŒãéããã¡ããã匷å¶çµäºããŸããèŠåãæ¶ããŸããïŒ
ã¡ãããã³ãã©ãŒãéããŠãã·ãã¥ã¬ãŒã¿ãŒããã¢ããªãã¢ã³ã€ã³ã¹ããŒã«ãããšãèŠåãæ¶ããŸããã ããããå éšã§äœãèµ·ãã£ãŠããã®ãããããªãã ãµã³ã¯ããã±ãŒãžãè¿œå ããåŸã«èŠåã衚瀺ãããŸããã
æãåèã«ãªãã³ã¡ã³ã
+1
ã®è¿œå ãåæ¢ããŠãã ãããããã«ãããæ å ±ãè¿œå ããªãé»åã¡ãŒã«éç¥ãçæãããŸãã 代ããã«ããªã¢ã¯ã·ã§ã³ã®è¿œå ãæ©èœã䜿çšããŠãã ããã