Π― ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ iOS (Ρ.Π΅. Π½Π΅ Π²ΡΠ΅Π³Π΄Π°).
Π΄Π°
Π΄Π°
ΠΠ‘: macOS Sierra 10.12.6
Π£Π·Π΅Π»: 6.10.2
ΠΡΡΠΆΠ°: 1.0.2
npm: 5.4.2
Π‘ΡΠΎΡΠΎΠΆ: 4.7.0
Xcode: Xcode 9.0, ΡΠ±ΠΎΡΠΊΠ° Π²Π΅ΡΡΠΈΠΈ 9A235
Android-ΡΡΡΠ΄ΠΈΡ: 2.1 AI-143.2915827
ΠΠ°ΠΊΠ΅ΡΡ: (Ρ
ΠΎΡΠ΅Π» => ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½)
ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ: ^ 16.0.0 => 16.0.0
ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ-ΡΠΎΠ΄Π½ΠΎΠΉ: ^ 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
s, ΡΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΏΠΎ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Β«Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅Π°ΠΊΡΠΈΡΒ».
Π’Π° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ:
Π£ΡΠΈΡΡΠ²Π°Ρ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ @antoinerousseau , Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΌΠ΅ΡΡΠ° Π΄Π»Ρ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ:
Π― ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ» response-native-device-info ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ΅Π» Ρ rn 0,49 Π½Π° 0,50. ΠΈ Π²ΠΎΡ Ρ Π½Π°ΡΠ΅Π» ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ. ΠΠ΅ Π·Π½Π°Ρ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Ρ ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ».
Π’Π° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ...
ΠΠ½Π°ΡΠΈΡ, ΡΡΠΎ Π½Π΅ ΠΌΠΎΡ Π²ΠΈΠ½Π°?
Π’Π° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ... Π£ Π²Π°Ρ Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ?
Π’Π° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ ΠΈΠ· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅ ΡΠΏΠΈΡΠΊΠ° - ΡΡΠΎ react-native-sentry
.
Π’Π°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π΄Π΅ΡΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ, Ρ Π·Π°ΠΏΡΡΡΠΈΠ» Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΠΊΠ΅Ρ
"native-base": "^ 2.3.3",
"ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ": "16.0.0",
"react-native": "0.50.3",
"react-native-fcm": "^ 10.0.3"
@rizzomichaelg
+1
"react-native": "0.49.3",
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠ»Π΅ΡΠ°Π»ΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠ΅ΡΠΈΠ» ΡΡΠΎ ??
@dantman Π― Π½Π°ΡΠ°Π»
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ, - ΡΡΠΎ response-native-keychain, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π΄Π°Π²Π½ΠΎ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΡΠ°ΠΊ ΡΡΠΎ ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ Ρ ΠΎΡΠΎΡΠ΅ΠΉ ΡΡΠ°Π²ΠΊΠΎΠΉ.
rebeccahughes / react-native-device-info # 260, ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΎΡΠ½ΠΎΡΡΡΠ΅Π΅ΡΡ ΠΊ RNDeviceInfo
ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ RCTDevLoadingView
. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠΎΡΠΊΠ°ΠΌΠΈ.
ΠΡΠ»ΠΈ Π±Ρ Π²Ρ ΠΏΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ ΡΠΎΡΠΊΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π° Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅:
RCTLogWarn(@"RCTBridge required dispatch_sync to load %@. This may lead to deadlocks", _moduleClass);
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ / ΡΡΠ΅ΠΊ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π·Π°Π³ΡΡΠ·ΠΊΡ 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
block RCTDevLoadingView
Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠΆΠ΅Π½ Π² Π½Π΅ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ RCTDevLoadingView
ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
ΠΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΎΠ±ΠΎΠΉΡΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΎΠΏΡΠΈΠΌΠΈΡΡΠΈΡΠ½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΠ² RCTDevLoadingView
, Π²Π΅ΡΠ½ΡΠ² ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΈΠ· ΠΌΠΎΠ΅Π³ΠΎ RCTBridgeDelegate
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ:
- (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
ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ...
"ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ": "16.2.0",
"react-native": "0.52.0",
ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ...
"ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ": "16.2.0",
"react-native": "0.51.0",
"response-native-device-info": "0.13.0"
ΠΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π»ΠΎΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ response-native-device ΠΈΠ· ΡΠ°ΠΉΠ»Π° pod ΠΈ ΡΠ²ΡΠ·Π°ΡΡ Π΅Π³ΠΎ Π²ΡΡΡΠ½ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅. ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΡΠ΅ΡΠΈΠ»ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ CxxBridge Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠ΄ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π΄Π»Ρ React Π² ΡΠ°ΠΉΠ» pod, Π½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Folly (ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅), ΠΈ Π²ΡΡ ΡΡΠ° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠ° / Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΡΡΡΠΎΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΏΡΠΎΡΡΠΎ ΡΠ΄Π°Π»ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΈΠ· pod.
ΠΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ "response-native-device-info":
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π² 0.54.2:
"ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ": "16.3.0-alpha.2",
"react-native": "0.54.2",
"ΠΊΠ½ΠΎΠΏΠΊΠ°-Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅-ΡΠ΅Π°ΠΊΡΠΈΡ": "^ 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",
"ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ-ΡΠΎΠ΄Π½ΠΎΠΉ-Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ": "^ 2.4.0",
"response-native-parallax-scroll-view": "^ 0.21.0",
"react-native-photo-grid": "0.0.2",
"response-native-response-sizes": "^ 1.0.2",
"react-native-snap-carousel": "^ 3.6.0",
"ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ-ΡΠΎΠ΄Π½ΡΠ΅-Π²Π΅ΠΊΡΠΎΡΠ½ΡΠ΅-ΠΈΠΊΠΎΠ½ΠΊΠΈ": "^ 4.5.0",
"ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ-Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ": "^ 1.5.7"
ΠΡΠΎ Π±ΡΠ»ΠΎ Ρ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Β«ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΠΎΠ΄Π½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅Β»: Β«^ 2.8.4Β». ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ shadowStyle={{shadowOpacity: 0.9}}
ΡΠ΅ΡΠΈΠ»ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠ΄Π΅ΡΡ ΡΠ° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
Π’Π° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
Π Π 0,54,4
Π£ ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅?
ΠΡΠΈΠ±ΠΊΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π΄Π°ΠΆΠ΅ Π΄Π»Ρ Π½Π΅Π΄Π°Π²Π½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ / Π½Π΅Π΄Π°Π²Π½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
"ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ": "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?
ΠΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ»
ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΠΎΠ΄Π½ΠΎΠ΅ ΡΠ°Π·ΠΌΡΡΠΈΠ΅
ΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Share Extension, Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡ Π²
ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ-native-modalbox
@Babazon , Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ?
Π‘ΠΎΠΆΠ°Π»Π΅Ρ. Π― Π½Π΅ ΠΌΠΎΠ³ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ / ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΉ ΠΆΡΡΠ½Π°Π» ΠΈΠ· ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π΄ΠΎΡΡΡΠΏΠ°, ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
+1
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠ»ΠΈ ΡΡΠΎ! ΠΠΎΡ ΠΎΠΆΠ΅, Π²Π°ΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ½ΠΎΡΠΈΡΡΡΡ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ React Native. ΠΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ v0.55 ?
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π°Ρ Π²ΠΊΠ»Π°Π΄.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° @ react-native-bot Π²ΡΠ΅ Π΅ΡΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π² React Native 0.55
@ react-native-bot ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ cocoapods Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ react native ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π°.
Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΎΠ±ΡΡ 0.50.4 ΠΈ 0.55.4
ΠΡΠΎΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» response-native-svg Π½Π° React Native 0.55.3, ΠΈ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π°.
ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΡΠ΅ Π΅ΡΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ:
ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ-native-cli: 2.0.1
ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ-ΡΠΎΠ΄Π½ΠΎΠΉ: 0.55.4
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠΎ ΡΠ²Π΅ΠΆΠΈΠΌ Π½ΠΎΠ²ΡΠΌ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Π±Π΅Π· Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°, Π° ΡΠΎΠ»ΡΠΊΠΎ Ρ Π²Π²Π΅Π΄Π΅Π½Π½ΡΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ Firebase.
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ: response: 16.3.1
ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ-ΡΠΎΠ΄Π½ΠΎΠΉ: 0.55.4
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Π½ΠΎ Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΈΠ·-Π·Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΎΠΊΠ½Π° ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°, ΠΊΠΎΠ³Π΄Π° Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Ρ ΡΠ±ΠΎΡΠΊΡ ΠΈΠ· Xcode. Π― ΠΏΡΠΎΡΡΠΎ Π²ΡΡ ΠΎΠΆΡ ΠΈΠ· ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° ΠΈ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ° ΠΈ ΡΠ½ΠΎΠ²Π° Π·Π°ΠΏΡΡΠΊΠ°Ρ ΡΠ±ΠΎΡΠΊΡ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅ΡΠ΅Π½Π°.
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ββresponse-native-device-info, Π½ΠΎ ΠΆΠ΅Π»ΡΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΌΠ΅Π½Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ: Β«RCTBridge ΡΡΠ΅Π±ΡΠ΅Ρ dispatch_sync Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ RCCManagerModule ...Β»
Π― ΡΠΎΠ±ΠΈΡΠ°Π»ΡΡ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° map
ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Ρ ΠΌΠ°ΡΡΠΈΠ², ΡΡΠΎΠ±Ρ Π²Π΅ΡΠ½ΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ style
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ, Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΌ.
Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π° OS11.
Π― Π²ΠΈΠΆΡ Π·Π΄Π΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΠ»ΠΈ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π²Π΅ΠΊΡΠΎΡΠ½ΡΡ ΠΈΠΊΠΎΠ½ΠΎΠΊ.
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ»Π° ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Ρ ΠΎΡΠΊΠ»ΡΡΠΈΠ» ΠΈ ΡΠ΄Π°Π»ΠΈΠ» response-native-device-info, ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ.
Π£ ΠΌΠ΅Π½Ρ Π±ΡΠ»Π° ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅Π°Π³ΠΈΡΡΡΡΠΈΡ -native-vector-icons, ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π΅Π΅, ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΡΡΠ΅Π·Π»ΠΎ.
Π Π²Π°ΡΠ΅ΠΌΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ Ρ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΌ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ. ΠΡΠΊΠ»ΡΡΠΈΠ» ΠΏΡΠ»ΡΡ, ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΠ», Π±Π΅Π· ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ. Π‘Π½ΠΎΠ²Π° Π²ΠΊΠ»ΡΡΠΈΠ» ΠΏΡΠ»ΡΡ, ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΠ», Π±Π΅Π· ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ.
Π Π²Π°ΡΠ΅ΠΌΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ Ρ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΌ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ. ΠΡΠΊΠ»ΡΡΠΈΠ» ΠΏΡΠ»ΡΡ, ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΠ», Π±Π΅Π· ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ. Π‘Π½ΠΎΠ²Π° Π²ΠΊΠ»ΡΡΠΈΠ» ΠΏΡΠ»ΡΡ, ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΠ», Π±Π΅Π· ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ.
~ ΠΡΠΎΡΠΈΡΠ°Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ @mokriya, Ρ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΠ» ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ, ΠΈ ΠΎΠ½ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π» ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ / ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ Android ΠΈ IOS Ρ ΠΎΡΠΊΡΡΡΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠΎΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅. ~
ΠΠ΅Ρ, Π½Π΅ ΡΠΎ
iOS 12, RN 0.57.0 ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
ΠΊΠ°ΠΊ ΡΠ΅ΡΠΈΡΡ?
ΠΈΠ»ΠΈ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π΅ΡΡΡ?
import { YellowBox } from 'react-native';
YellowBox.ignoreWarnings(['RCTBridge']);
ΠΠ°, Ρ ΠΌΠ΅Π½Ρ ΡΠΎΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ response-native-video, Π½ΠΎ ΡΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ? ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π²ΠΈΠ΄Π΅ΠΎ. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΡΠ΅ΠΌΡ Π²ΡΠ΅ ΡΡΠΈ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ? ΠΡ ΡΡΠΎ-ΡΠΎ ΡΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ?
ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π° iOS 12.1, RN 0.57.4 Π±Π΅Π· react-native-device-info
Π£ ΠΌΠ΅Π½Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°
"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 ΡΡΠ΅Π±ΡΠ΅Ρ dispatch_snyc Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ RCTDevLoadingView. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΒ».
ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Π²Π°ΠΌ ΡΡΠΎΠΈΡ Project -> Clean
Π² Π²Π°ΡΠ΅ΠΌ Xcode, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
Π― ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΠ», ΡΡΠΎ ΡΡΠΎΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ - ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @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, Π Π 0.57.8
ΠΌΠΎΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ, ΡΠ° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°
@aleclarson, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎΡ ΠΊΠΎΠ΄?
@ccorcos ΠΠ½ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ RCTDevLoadingView
ΡΠ°Π½ΡΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π΅ΠΌΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ RN. ΠΡΠΎΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄Π»Ρ Π²Π°Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΠ΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ , Π½ΠΎ ΡΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΌΠ΅Π½Ρ Ρ RN 0.57.8 + iOS 11.3 (ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅)
Π― ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ @devburmistro Π²ΡΡΠ΅
Π‘ΡΠΎΠ»ΠΊΠ½ΡΠ²ΡΠΈΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ
Π Π 0,58,3
iOS 11.4, 12.1
ΠΈ ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΡΠΏΠΈΠΊΡ. ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎ ΠΌΠ½ΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° Ρ Π·Π°ΠΊΡΡΠ²Π°Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΡΠΉ
Π£ ΠΌΠ΅Π½Ρ Π½Π΅ Π±ΡΠ»ΠΎ ΡΡΠΎΠ³ΠΎ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ 0.57.8, ΠΈ ΡΡΠΎ Π±ΡΠ»ΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄ΠΎ RN 0.58.3.
ΠΌΠΎΡ ΡΠΎΡΠ½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ°: Unable find module for DevLoadingView
, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π²ΡΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΡΠΎ Π΄Π»Ρ ΠΌΠ΅Π½Ρ
ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΡΠΈΠΌ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ» RN 0.58.3
https://github.com/facebook/react-native/commit/d7a0c44590bcf3fb9d055aeae3391d5bcd7e21be#diff -a2a67635fffd7b690d14dc17ae563a71
Π― ΠΈΡΠΏΡΡΡΠ²Π°Ρ ΡΡ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Β«ΠΠ΅ ΡΠ΄Π°Π΅ΡΡΡ Π½Π°ΠΉΡΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ DevLoadingViewΒ», ΡΡΠΎ ΠΈ @oferRounds, ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄ΠΎ RN 0.58.3 ΡΠ΅Π³ΠΎΠ΄Π½Ρ.
ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ Π² ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ΅. ΠΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ (cmd-R) Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ.
Π ΠΠΠΠΠ’ΠΠ ΠΠΠΠ’Π¬: ΠΏΠΎΠ΄Π°Π» ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ: # 23235
Π― ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ, ΡΡΠΎ ΡΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π° iOS Ρ 0.58.3.
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠΉ:
_Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ: Ρ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ, ΡΡΠΎ ΡΡΠΎΡ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΎΠ±ΠΎΠΉΡΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΎΠ±Π½ΠΎΠ²ΠΈΠ²
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]; ... }
ΠΡΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π΄Π»Ρ ΠΌΠ΅Π½Ρ.
ΠΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠΌΠΎΠ³ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ RCTBridgeDelegate ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ response-native-Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ? Π£ Π²Π°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π΅Π»Π΅Π³Π°ΡΠ° ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ bridgeManagerDelegate
, Π½ΠΎ ΠΎΠ½ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΠ»ΠΎΠΌΠ°Π½Π½ΡΠΌ (RCTBridge, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ extraModulesForBridge
, Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π΅Π½ nil
).
Π― Π½Π°ΡΠ°Π» ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΡΠΎ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ react-native-device-info
Π½Π° RN 0.58.6 ΠΈ iOS 12.
Π₯ΠΎΡΠΎΡΠΎ, ΡΡΠΎΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ, ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΠΈΡΠΏΡΠ°Π²ΠΈΠ» ΡΡΠΎ Π΄Π»Ρ ΠΌΠ΅Π½Ρ.
React Native 0.59.1
Π― Π½Π°ΡΠΈΠ½Π°Ρ Π²ΠΈΠ΄Π΅ΡΡ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ response-native-device-info, Π»ΡΠ±ΠΎΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅?
Π― ΡΠΎΠΆΠ΅ Π²ΠΈΠΆΡ ΡΡΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈ Ρ Π½Π΅ Π²Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΡΠΎΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ (ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ), ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΡΠ½ΠΎΠ²Π° ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Ρ RN 0.57.8 Π΄ΠΎ 0.59.5. Π ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ CodePush Ρ Π΄Π²ΡΠΌΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡΠΌΠΈ ΠΆΠ΅Π»ΡΠΎΠ³ΠΎ ΡΡΠΈΠΊΠ°:
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 . Π½ΠΎ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ response-native Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ 0.59.8. ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΡΠ½ΠΎΠ²Π°
Π response-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];
Π’Π°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° AppDelegate.m ΠΏΡΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΊΠ°ΡΡΡ Google react-native-maps
Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ios.
"react-native": "0.59.5"
ΠΠ»Ρ ΠΌΠ΅Π½Ρ - ΡΡΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ---
"ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ": "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"
}
}
ΠΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈΡΠΏΡΠ°Π²ΠΈΠ»Π° ΡΡΠΎ, Π½ΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ-ΡΠΎ Π½Π΅ ΡΠ°ΠΊ, Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ.
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Ρ ΠΌΠ΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Ρ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ. ΠΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ Perf Monitor Ρ Π·Π°ΠΌΠ΅ΡΠΈΠ», ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Ρ Β± 100 ΠΠ Π΄ΠΎ Β± 300 ΠΠ ΠΏΠΎΡΠ»Π΅ Π΄Π΅Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ.
Π‘ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ:
ΠΠ΅Π· ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°:
ΠΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΡΠΉ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ Π² ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π½ΠΎ Π½Π΅ ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π»ΠΈ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ Π²ΡΠΏΡΡΠΊΠ°.
ΠΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠΉ ΠΎΠ±Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ ΡΠ΅ΡΠΈΠ» ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ Π΄Π»Ρ ΠΌΠ΅Π½Ρ Π² 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>)
) ...
Π’ΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ» 2 Ρ react-native-firebase
. ΠΡΠ²Π°Π΅Ρ ΡΠ΅Π΄ΠΊΠΎ, Π½ΠΎ:
ΠΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π²ΠΎΡΡΠΎΠ·Π΄Π°ΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π·Π½Π°ΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Images.xcassets/AppIcon.appiconset
ΠΌΠΎΠ΅Π³ΠΎ Π½Π΅Π΄Π°Π²Π½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ react-native 0.61.2. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°, ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ
Π² ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅, ΡΠ΅ΡΠΈΠ»ΠΎ Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ-ΡΠΎΠ΄Π½ΠΎΠΉ 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-Π°Π΄ΡΠ΅Ρ, Π½ΠΎ Π½Π° ΡΡΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ?
Π’ΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ» 2 Ρ
react-native-firebase
. ΠΡΠ²Π°Π΅Ρ ΡΠ΅Π΄ΠΊΠΎ, Π½ΠΎ:
Firebase Π²ΡΠ·ΡΠ²Π°Π΅Ρ Ρ ΠΌΠ΅Π½Ρ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ. Π Π°Π·Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΌΡΡΠ»ΠΈ, ΠΊΠ°ΠΊ Π²Ρ Π΅Π΅ ΡΠ΅ΡΠΈΠ»ΠΈ? @fungilation
@ abdi4 Π― ΡΠΎΠΆΠ΅ Ρ ΡΡΠΈΠΌ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ, ΡΠ΅Π±Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠ΅ΡΠΈΡΡ?
@zloka Π½Π΅Ρ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ, ΠΈ Ρ Π½Π΅ ΠΌΠΎΠ³Ρ ΡΡΠΎ Π²ΠΎΡΡΠΎΠ·Π΄Π°ΡΡ
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ -
import { YellowBox } from 'react-native';
YellowBox.ignoreWarnings([
'RCTBridge'
]);
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Ρ ΠΌΠ΅Π½Ρ Π½Π΅Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΡΡΠΎ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, - ΡΡΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΌΠΎΠ΅Π³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ.
ΠΡΡΡΡΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅:
let bridge = RCTBridge (bundleURL: jsCodeLocation, moduleProvider: nil, launchOptions: nil)
#if RCT_DEV
ΠΌΠΎΡΡ? .module (Π΄Π»Ρ: RCTDevLoadingView.self)
#endif
let rootView = RCTRootView (ΠΌΠΎΡΡ: ΠΌΠΎΡΡ !, moduleName: "AppMain", initialProperties: nil)
ΠΡΠΈΠ²Π΅Ρ, ΠΏΠΎΡ ΠΎΠΆΠ΅, Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ Π±ΡΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅ΡΠ΅Π½Π° ΠΈΠ»ΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°? ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΊΡΡΡΠ°, Π΅ΡΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΊΠ°ΠΊ Β«ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅Β» ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π΅ Π² Β«ΠΡΠΊΠ»ΠΎΠ³Β», ΠΈ Ρ ΠΎΡΡΠ°Π²Π»Ρ Π΅Π΅ ΠΎΡΠΊΡΡΡΠΎΠΉ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π°Ρ Π²ΠΊΠ»Π°Π΄.
ΠΡΠΈΠ²Π΅Ρ, ΠΏΠΎΡ ΠΎΠΆΠ΅, Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ Π±ΡΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅ΡΠ΅Π½Π° ΠΈΠ»ΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°? ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΊΡΡΡΠ°, Π΅ΡΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΊΠ°ΠΊ Β«ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅Β» ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π΅ Π² Β«ΠΡΠΊΠ»ΠΎΠ³Β», ΠΈ Ρ ΠΎΡΡΠ°Π²Π»Ρ Π΅Π΅ ΠΎΡΠΊΡΡΡΠΎΠΉ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π°Ρ Π²ΠΊΠ»Π°Π΄.
ΠΠΎΡ Π²Π°ΡΠ° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ. ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π² ΡΠ²Π΅ΠΆΠΈΡ Π½ΠΎΠ²ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ .
@sospedra Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ΅ΠΏΠΎ ΠΎΠ± ΡΡΠΎΠΌ Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ React Native Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ Π²Π½Π΅ΡΠ½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ?
Π ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Ρ Ρ ΡΡΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ.
ΡΠ° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ 0.63.2
Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π΅Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ, ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
Π’Π°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ response-native-macos ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Metro (Π²ΡΡΡΠ½ΡΡ) , Π½ΠΎ Π½Π΅ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠΎΠ΄Π°, ΠΈ Π½Π΅ Ρ ios, android ΠΈΠ»ΠΈ Windows.
NB: Ρ ΠΌΠ΅Π½Ρ Ρ RN 0.62.2
ΠΠΎΠ»ΡΡΠΈΠ» ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Catalyst.
ΠΠ°ΠΊΡΡΠ» ΡΠΈΠΌΡΠ»ΡΡΠΎΡ, ΡΠ±ΠΈΠ» ΠΌΠ΅ΡΡΠΎ, ββΠ² XCode build and run
ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΏΠ°Π»ΠΎ!
ΠΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΡΠ±ΠΎΡΡΠΈΠΊΠ° ΠΌΠ΅ΡΡΠΎ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ° ΠΈΡΡΠ΅Π·Π»ΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. ΠΠΎ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ. ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ thunk ΠΏΠ°ΠΊΠ΅ΡΠ°.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ
+1
s, ΡΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΏΠΎ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Β«Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅Π°ΠΊΡΠΈΡΒ».