React-native: ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ 0.59 iOS ๋นŒ๋“œ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•œ ํ›„ ์‹คํŒจ

์— ๋งŒ๋“  2019๋…„ 03์›” 13์ผ  ยท  69์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/react-native

๐Ÿ› ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ

react-native 0.59๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  iOS ์šฉ ์•ฑ์„ ๋นŒ๋“œํ•˜๋ ค๊ณ ํ•˜๋ฉด ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ ์ž…๋ ฅ ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค : '/app/node_modules/react-native/ReactCommon/yoga/yoga/YGFloatOptional.cpp'

๋‚˜์—๊ฒŒ ์ด์ƒํ•œ ์ ์€ ํ˜„์žฌ ๋งˆ์Šคํ„ฐ์—์„œ์ด ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค : react-native/tree/master/ReactCommon/yoga/yoga (๋‹จ์ง€ YGFloatOptional.h )

์žฌํ˜„ํ•˜๋ ค๋ฉด

์ค‘ํ˜• ํ”„๋กœ์ ํŠธ๋ฅผ 0.57.7 โ†’ 0.59๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘

๋นŒ๋“œ๋Š” ์ด์ „์ฒ˜๋Ÿผ ์ž˜ ์‹คํ–‰๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ

  React Native Environment Info:
    System:
      OS: macOS 10.14.3
      CPU: (12) x64 Intel(R) Core(TM) i7-8850H CPU @ 2.60GHz
      Memory: 2.95 GB / 32.00 GB
      Shell: 3.2.57 - /bin/bash
    Binaries:
      Node: 10.15.1 - /var/folders/1r/ymkpxdlj21lb638kzp4jxvwm0000gn/T/yarn--1552463658468-0.20119758467048565/node
      Yarn: 1.13.0 - /var/folders/1r/ymkpxdlj21lb638kzp4jxvwm0000gn/T/yarn--1552463658468-0.20119758467048565/yarn
      npm: 6.4.1 - /usr/local/Cellar/node@10/10.15.1/bin/npm
      Watchman: 4.9.0 - /usr/local/bin/watchman
    SDKs:
      iOS SDK:
        Platforms: iOS 12.1, macOS 10.14, tvOS 12.1, watchOS 5.1
      Android SDK:
        API Levels: 23, 24, 25, 27, 28
        Build Tools: 23.0.1, 23.0.3, 24.0.1, 25.0.0, 27.0.3, 28.0.3
        System Images: android-24 | ARM 64 v8a, android-24 | ARM EABI v7a, android-24 | Intel x86 Atom_64, android-28 | Google APIs Intel x86 Atom, android-28 | Google Play Intel x86 Atom_64
    IDEs:
      Android Studio: 3.3 AI-182.5107.16.33.5264788
      Xcode: 10.1/10B61 - /usr/bin/xcodebuild
    npmPackages:
      react: 16.8.3 => 16.8.3
      react-native: 0.59.0 => 0.59.0
Bug Follow Up iOS Locked

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋Š”๋ฐ ... ๋ฆฌ ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ์—์„œ ์—…๊ทธ๋ ˆ์ด๋“œ์— ๋ฌธ์ œ๊ฐ€์žˆ์„ ๋•Œ๋งˆ๋‹ค ๋„ˆ๋ฌด ํ”ผ๊ณคํ•ด ..

๋ชจ๋“  69 ๋Œ“๊ธ€

์ด ๋ฌธ์ œ๋ฅผ XCode : 10.1 ๋ฐ RN 0.59.0์œผ๋กœ ์žฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ 1 : XCode UI ๋นŒ๋“œ ๋„๊ตฌ๋กœ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ react-native run-ios ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค (์ตœ์‹  2.x cli๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค).
ํŽธ์ง‘ 2 : ๋ ˆ๊ฑฐ์‹œ ๋นŒ๋“œ๋ฅผ ํ™œ์„ฑํ™” ํ•˜์—ฌ XCode 10.1์—์„œ ์ž‘๋™ํ•˜๋„๋ก ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. # 19573 ๊ด€๋ จ

ํ , ๋ฐฉ๊ธˆ 0.58.4 ์—์„œ 0.59 ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  XCode์—์„œ ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ •๋ฆฌํ–ˆ์œผ๋ฉฐ ์•ฑ์„ ๋””๋ฒ„๊ทธ ๋ฐ ๋ณด๊ด€ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. XCode 10.1์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚ด ์—…๊ทธ๋ ˆ์ด๋“œ ์ „๋žต :

  1. ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ์•ˆ์ •์ ์ธ ๋ฒ„์ „์— ๋”ฐ๋ผ ์ข…์†์„ฑ์„ ๋ฒ”ํ”„ํ•ฉ๋‹ˆ๋‹ค.
  2. https://github.com/react-native-community/rn-diff-purge ์—์„œ ๊ฐ ๋น„๊ต๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์ˆ˜๋™์œผ๋กœ ์ ์šฉํ•˜์‹ญ์‹œ์˜ค.

0.58.4 ํ•˜๊ณ  ๊ทธ ์œ„์— ์ƒˆ๋กœ์šด ๊ฒƒ์„ ์ ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ฒƒ์ด ์ €์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์žˆ์„์ง€ ๊ถ๊ธˆํ•˜์‹ญ๋‹ˆ๊นŒ?

ํŽธ์ง‘ : ๋‚˜๋Š” ๋˜ํ•œ ์‹คํ–‰ ํ•œ npm ci ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด node_modules (๋‹จ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด) ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ์•„์ง๋„ ์—‘์Šค ์ฝ”๋“œ์—์„œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์ถ• ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค ๐Ÿค”

EDIT2 : ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” YGFloatOptional.cpp :
Screen Shot 2019-03-13 at 12 55 51

0.57.8-> 0.59.1์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์ƒˆ๋กœ์šด 0.59.1 ์ดˆ๊ธฐํ™”๋ฅผ ๋ณด๋ฉด YGFloatOptional.cpp ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค.

Podfile์— ๋‹ค์Œ ํ–‰์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

  pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
  pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'

๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰

pod install

@jpudysz ๋„ค, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•˜๊ณ  .xcworkspace ํŒŒ์ผ๋กœ XCode ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฐ ํ›„์— ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋Œ€์‹  Podfile ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก react-native unlink ๋ฐ react-native link ๋ธŒ๋ฆฌ์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ ˆ๊ฑฐ์‹œ (์ฝ”์ฝ”์•„ ํฌ๋“œ ์—†์Œ) ๋งํฌ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๊นŒ?

@jpudysz ๋„ ์ €๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ์ด๊ฒƒ์ด ์ ์ ˆํ•œ ํ•ด๊ฒฐ์ฑ…์ด ๋  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ถ€ํ’€๋ฆฝ๋‹ˆ๋‹ค. Pods/boost-for-react-native ์€ 160.8MB์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ์ข‹์•„, ์ •๋ง ์ด์ƒํ•ฉ๋‹ˆ๋‹ค, ๋‚˜๋Š” ๊ทธ 3 ๊ฐœ์˜ ํฌ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  Xcode์—์„œ Clean์„ ์‹คํ–‰ํ•˜๊ณ  ๋นŒ๋“œํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ์š”๊ฐ€๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @jpudysz . ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์— ๋”ฐ๋ผ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
JSBundleType.h์— 'folly / Portability.h'ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋ฌด์Šจ ์ผ์ธ์ง€ ์•„๋Š” ์‚ฌ๋žŒ ์žˆ๋‚˜์š”?

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

RN ํ‘œ์ค€ ์—…๊ทธ๋ ˆ์ด๋“œ, git ์—…๊ทธ๋ ˆ์ด๋“œ ๋„๊ตฌ, diff ํŒจ์น˜ ์ ์šฉ ๋“ฑ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์„ ์‹œ๋„ํ•œ ํ›„ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค๊ณ  ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ๋‹ค์‹œ ๊ตฌ์ถ•ํ•˜๋Š” ์ง€๋ฃจํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. 0.59๋ถ€ํ„ฐ ๋‚˜์•„์งˆ ๊ฑฐ๋ผ๊ณ  .. ์ž˜ํ•˜๋ฉด ๋งž์•„์š”

๋ฐฉ๊ธˆ 0.59.0์—์„œ 0.59.1๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ๋Š”๋ฐ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
์š”๊ฐ€ ๋ฌธ์ œ ํ•ด๊ฒฐ

๋‚˜๋„ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€ ์šด์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ข‹์€ ์˜ค๋ž˜๋œ rm -rf node_modules && npm i ๋ฐ ๋นŒ๋“œ ํด๋” ์ •๋ฆฌ๊ฐ€ ๋‚˜๋ฅผ ์œ„ํ•ด ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

npm audit fix ์‚ฌ์šฉํ•œ ํ›„ 'react-native'๊ฐ€ ์ž๋™์œผ๋กœ ๋ฒ„์ „ 0.59๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋˜๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์†”๋ฃจ์…˜ : ๋ฒ„์ „์„ ๋‚ฎ์€ ๋ฒ„์ „์œผ๋กœ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.
npm install react-native@<version>
์˜ˆ : npm install [email protected]

0.58.4์—์„œ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ (rn-diff-purge ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋”ฐ๋ผ) RN 0.59.0 ๋˜๋Š” 0.59.1์—์„œ๋„์ด ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, 0.58๊นŒ์ง€ YGFloatOptional.cpp https://github.com/facebook/react-native/blob/0.58-stable/ReactCommon/yoga/yoga/YGFloatOptional.cpp

๋„๋Œ€์ฒด ์—ฌ๊ธฐ์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘ํ•˜๋‹ค
@jpudysz ์˜ ์†”๋ฃจ์…˜์œผ๋กœ 'folly/Portability.h' file not found

0.58.4์—์„œ 0.59.0 ๋ฐ 0.59.1๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•œ ํ›„ 'folly / Portability.h'์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ƒํ•œ ์ ์€ ์ปดํŒŒ์ผ ํ›„ XCode์—์„œ Portability.h๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๊ณ  ๋งํ•˜์ง€๋งŒ ํŽธ์ง‘๊ธฐ์—์„œ๋Š” ํ—ค๋”์— ์ •์˜ ๋œ ๋ชจ๋“  ์œ ํ˜•์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

image

์ปดํŒŒ์ผ์— ์‹คํŒจํ•œ ํŒŒ์ผ์€ React ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ RCTJavasScriptLoader.mm์ž…๋‹ˆ๋‹ค.

CompileC /Users/xxx/Projects/xxx/ios/build/xxx/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/React.build/Objects-normal/x86_64/RCTJavaScriptLoader.o /Users/xxx/Projects/xxx/node_modules/react-native/React/Base/RCTJavaScriptLoader.mm normal x86_64 objective-c++ com.apple.compilers.llvm.clang.1_0.compiler (in target: React)
    cd /Users/xxx/Projects/xxx/ios/Pods
    export LANG=en_US.US-ASCII
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c++ -arch x86_64 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=c++14 -stdlib=libc++ -fobjc-arc -fobjc-weak -fmodules -fmodules-cache-path=/Users/xxx/Projects/xxx/ios/build/xxx/ModuleCache.noindex -fmodules-prune-interval=86400 -fmodules-prune-after=345600 -fbuild-session-file=/Users/xxx/Projects/xxx/ios/build/xxx/ModuleCache.noindex/Session.modulevalidation -fmodules-validate-once-per-build-session -Wnon-modular-include-in-framework-module -Werror=non-modular-include-in-framework-module -Wno-trigraphs -fpascal-strings -O0 -fno-common -Wno-missing-field-initializers -Wno-missing-prototypes -Werror=return-type -Wdocumentation -Wunreachable-code -Wno-implicit-atomic-properties -Werror=deprecated-objc-isa-usage -Wno-objc-interface-ivars -Werror=objc-root-class -Wno-arc-repeated-use-of-weak -Wimplicit-retain-self -Wno-non-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors -Wduplicate-method-match -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wconditional-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wno-float-conversion -Wnon-literal-null-conversion -Wobjc-literal-conversion -Wshorten-64-to-32 -Wno-newline-eof -Wno-selector -Wno-strict-selector-match -Wundeclared-selector -Wdeprecated-implementations -Wno-c++11-extensions -DPOD_CONFIGURATION_DEBUG=1 -DDEBUG=1 -DCOCOAPODS=1 -DOBJC_OLD_DISPATCH_PROTOTYPES=0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk -fasm-blocks -fstrict-aliasing -Wprotocol -Wdeprecated-declarations -Winvalid-offsetof -mios-simulator-version-min=9.0 -g -Wno-sign-conversion -Winfinite-recursion -Wmove -Wcomma -Wblock-capture-autoreleasing -Wstrict-prototypes -Wrange-loop-analysis -Wno-semicolon-before-method-body -Wunguarded-availability -fobjc-abi-version=2 -fobjc-legacy-dispatch -index-store-path /Users/xxx/Projects/xxx/ios/build/xxx/Index/DataStore -iquote /Users/xxx/Projects/xxx/ios/build/xxx/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/React.build/React-generated-files.hmap -I/Users/xxx/Projects/xxx/ios/build/xxx/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/React.build/React-own-target-headers.hmap -I/Users/xxx/Projects/xxx/ios/build/xxx/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/React.build/React-all-non-framework-target-headers.hmap -ivfsoverlay /Users/xxx/Projects/xxx/ios/build/xxx/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/React.build/all-product-headers.yaml -iquote /Users/xxx/Projects/xxx/ios/build/xxx/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/React.build/React-project-headers.hmap -I/Users/xxx/Projects/xxx/ios/build/xxx/Build/Products/Debug-iphonesimulator/React/include -I/Users/xxx/Projects/xxx/ios/Pods/Headers/Private -I/Users/xxx/Projects/xxx/ios/Pods/Headers/Private/React -I/Users/xxx/Projects/xxx/ios/Pods/Headers/Public -I/Users/xxx/Projects/xxx/ios/Pods/Headers/Public/React -I/Users/xxx/Projects/xxx/ios/Pods/Headers/Public/yoga -I/Users/xxx/Projects/xxx/node_modules/react-native/ReactCommon -I/Users/xxx/Projects/xxx/ios/build/xxx/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/React.build/DerivedSources/x86_64 -I/Users/xxx/Projects/xxx/ios/build/xxx/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/React.build/DerivedSources -F/Users/xxx/Projects/xxx/ios/build/xxx/Build/Products/Debug-iphonesimulator/React -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -include /Users/xxx/Projects/xxx/ios/Pods/Target\ Support\ Files/React/React-prefix.pch -MMD -MT dependencies -MF /Users/xxx/Projects/xxx/ios/build/xxx/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/React.build/Objects-normal/x86_64/RCTJavaScriptLoader.d --serialize-diagnostics /Users/xxx/Projects/xxx/ios/build/xxx/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/React.build/Objects-normal/x86_64/RCTJavaScriptLoader.dia -c /Users/xxx/Projects/xxx/node_modules/react-native/React/Base/RCTJavaScriptLoader.mm -o /Users/xxx/Projects/xxx/ios/build/xxx/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/React.build/Objects-normal/x86_64/RCTJavaScriptLoader.o






In file included from /Users/xxx/Projects/xxx/node_modules/react-native/React/Base/RCTJavaScriptLoader.mm:12:
/Users/xxx/Projects/xxx/node_modules/react-native/ReactCommon/cxxreact/JSBundleType.h:

info fatal error:

'folly/Portability.h' file not found

 #include <folly/Portability.h>
          ^~~~~~~~~~~~~~~~~~~~~
 1 error generated.

๋‚˜๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋Š”๋ฐ ... ๋ฆฌ ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ์—์„œ ์—…๊ทธ๋ ˆ์ด๋“œ์— ๋ฌธ์ œ๊ฐ€์žˆ์„ ๋•Œ๋งˆ๋‹ค ๋„ˆ๋ฌด ํ”ผ๊ณคํ•ด ..

ํŒŒ์ผ์€ 2018 ๋…„ 12 ์›” 13 ์ผ ์ดํ›„ ์š”๊ฐ€ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ญ์ œ ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ yoga/YGFloatOptional.h "์ธ๋ผ์ธ"๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. : https://github.com/facebook/yoga/commit/96d93f29826257ff6e9bb6c19211adb423029c29

๋‚ด ์ƒ๊ฐ ์—” ReactCommon/yoga/yoga/YGFloatOptional.cpp ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์บ์‹œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ์ฆ‰์‹œ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ React Native 0.59.1๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•œ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚ด node_modules, ์บ์‹œ ๋ฐ ๋นŒ๋“œ ํด๋”๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

rm -rf $TMPDIR/react-* && rm -rf $TMPDIR/metro-* && rm -rf $TMPDIR/haste-* && watchman watch-del-all && npm cache clean --force && npm cache verify && rm -rf ios/build && rm -rf node_modules/ && npm i

๋”ฐ๋ผ์„œ ์บ์‹œ์™€ ๊ด€๋ จ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

React Native 0.59.1๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์€ ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์˜ ์ผ๋ถ€๊ฐ€ ๋‚˜๋ฅผ ์œ„ํ•ด ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค!

ํฌ๊ธฐํ•˜๊ณ  Pods ํŒŒ์ผ์—์„œ node_modules์— ๋Œ€ํ•œ ๋ชจ๋“  ๋งํฌ๋ฅผ ์‚ญ์ œ ํ•œ ๋‹ค์Œ node_modules๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์‹œ ์„ค์น˜ ํ•œ ๋‹ค์Œ ๋งˆ์นจ๋‚ด ์„ฑ๊ณต์ ์œผ๋กœ ๋‹ค์‹œ ๋นŒ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋„ˆ๋ฌด ํ”ผ๊ณคํ•ฉ๋‹ˆ๋‹ค.

@jvandenaardweg ์บ์‹ฑ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์ด

๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•œ ๊ฒƒ์€ Xcode์˜ ํŒŒ์ƒ ๋ฐ์ดํ„ฐ ํด๋”๋ฅผ ์‚ญ์ œํ•˜๊ณ  Xcode๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
rm -rf ~/Library/Developer/Xcode/DerivedData

๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์‹คํŒจํ•˜๊ณ  xcode ์ž‘์—… ๊ณต๊ฐ„์„ ๋‹ซ์•˜๋‹ค๊ฐ€ ๋‹ค์‹œ ์—ด๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ๊ทธ๋ ‡๊ฒŒํ•˜์ž ๋‹ค์‹œ ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ํšจ๊ณผ๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ข‹์•„์š” ์—ฌ๋Ÿฌ๋ถ„,์ด ๋ฌธ์ œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ (๊ฒŒ์‹œ๋ฌผ ์ฝ๊ธฐ)๋กœ ์ธํ•œ ๋นŒ๋“œ ์บ์‹œ ๋ฌธ์ œ์— ๊ด€ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Xcode์—์„œ ํŒŒ์ƒ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ
  • rm -rf node_modules; rm -rf Pods ํ›„ ๋‹ค์‹œ ์„ค์น˜
  • react-native upgrade x.y.z

์ด๊ฒƒ์€ ๋ชจ๋“  ๋ฒ„์ „์—์„œ ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ์ผ๋ถ€ ๋ช…๋ น ์ž์ฒด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด react-native-cli์— ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋“ ์ง€ ์ด๊ฒƒ์— ๋Œ€ํ•œ ํŠน์ • ์žฌ์ƒ์‚ฐ ๋‹จ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

#include <folly/Portability.h> ์˜ค๋ฅ˜๋„ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์˜ ๋ฌธ์ œ๋Š” podfile์— ํ•˜์œ„ ์‚ฌ์–‘์ด ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž˜ ๊ตฌ์ถ•๋ฉ๋‹ˆ๋‹ค.

  pod 'React', :path => '../node_modules/react-native', :subspecs => [
    'Core',
    'CxxBridge', # Include this for RN >= 0.47
    'DevSupport', # Include this to enable In-App Devmenu if RN >= 0.43
    'RCTText',
    'RCTNetwork',
    'RCTWebSocket', # needed for debugging
    'RCTImage',
    'RCTWebSocket', # Needed for debugging
    'RCTAnimation', # Needed for FlatList and animations running on native UI thread
    # Add any other subspecs you want to use in your project
  ]

  pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'

  # Third party deps podspec link
  pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
  pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'

"react-native 0.57.8๊ณผ 0.58.5 ์‚ฌ์ด์— Xcode ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ ๋œ ํ•œ ๊ฐ€์ง€ ํฐ ๋ณ€ํ™”๋Š” JavaScriptCore.Framework๋ฅผ Linked FrameWorks ๋ฐ Libraries์— ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค."- ์—ฌ๊ธฐ์—์„œ

์„ ๋”ํ•œ

@jvandenaardweg ๋‹ต๋ณ€ :

rm -rf $TMPDIR/metro-* && rm -rf $TMPDIR/haste-* && watchman watch-del-all && npm cache clean --force && npm cache verify && rm -rf ios/build && rm -rf node_modules/ && npm i

๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋งํ–ˆ๋“ฏ์ด ์ด์ „์— ์ž‘๋™ํ•˜๋˜ ์ฝ”๋“œ๋ฅผ ๊นจ๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์ถ”์ธก ํ•  ํ•„์š”๊ฐ€์žˆ์–ด ์ •๋ง ์‹ค๋ง ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ Android์—์„œ ๋‹ค์‹œ ์ž‘๋™ํ•˜๋ ค๋ฉด Build Gradle ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถ”์ธก ํ•  ํ•„์š”๊ฐ€

์šฐ๋ฆฌ๋Š” ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์˜ค๋ž˜ ์ง€์†๋˜๋Š” ๊ณ ํ†ต ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ v0.59๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด CLI ๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ํ๋ฆ„์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ๋ณ€๊ฒฝ ๋กœ๊ทธ ์™€ ๋ฆด๋ฆฌ์Šค ํƒญ ์— ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž‘์„ฑ ํ–ˆ์œผ๋ฏ€๋กœ ์‹ค์ œ ์ถ”์ธก์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ์ด๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ์—…๊ทธ๋ ˆ์ด๋“œ์™€ ๊ด€๋ จ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ซ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ผ๋ฐ˜์ ์œผ๋กœ rn-diff-repo ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”,

๋งŽ์€ ํŒŒ๊ณ  ๋์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์ด์œ ๋ฅผ ํŒŒ์•…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์บ์‹œ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ์œผ๋ฉฐ ์—ฌ์ „ํžˆ #include๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค..

๋‚ด ํ”„๋กœ์ ํŠธ์˜ React ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ž˜ ์ปดํŒŒ์ผ๋˜์—ˆ์ง€๋งŒ ๋‚ด๊ฐ€ ๊ฐ€์ง„ Pod์—์„œ๋Š” ์ปดํŒŒ์ผํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

Folly / glog / DoubleConversion ํฌ๋“œ๋ฅผ ์ถ”๊ฐ€ ํ•œ ํ›„์—๋„ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ React.podspecs ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์—ฌ Core ํ•˜์œ„ ์‚ฌ์–‘์„ ํŽธ์ง‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

pod_target_xcconfig์— Folly ์ฐธ์กฐ๋ฅผ ์ถ”๊ฐ€ ํ•œ ํ›„ ๋‹ค๋ฅธ ๋ฌธ์ œ์—†์ด ์ปดํŒŒ์ผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ss.pod_target_xcconfig  = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/ReactCommon\"  \"$(PODS_ROOT)/Folly\"" }

๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์— ๋‚ด๊ฐ€ ๊ฐ€์ง„ ์ „์ฒด podfile์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ENV['COCOAPODS_DISABLE_STATS'] = 'true'

target 'CryptoReact' do
  platform :ios, '9.0'

  pod 'CodePush', :path => '../node_modules/react-native-code-push'
  pod 'Firebase/Core', '~> 5.14.0'


  pod 'react-native-sqlite-storage', :path => '../node_modules/react-native-sqlite-storage'
  pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga/yoga.podspec'
  pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
  pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
  pod 'react-native-randombytes', :path => '../node_modules/react-native-randombytes'
  pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons'
  pod 'react-native-splash-screen', :path => '../node_modules/react-native-splash-screen'
  pod 'RNLocalize', :path => '../node_modules/react-native-localize/ios'
  pod 'react-native-camera', :path => '../node_modules/react-native-camera'
  pod 'RNPermissions', :path => '../node_modules/react-native-permissions'
  pod 'react-native-keep-awake', :path => '../node_modules/react-native-keep-awake'
  pod 'SwiftyJSON', '4.2.0'
  pod 'Charts', '3.1.1' 
  pod 'Fabric', '~> 1.9.0'
  pod 'Crashlytics', '~> 3.12.0'
  pod 'Firebase/Performance', '~> 5.14.0'
  pod 'Firebase/Auth', '~> 5.14.0'
  pod 'lottie-ios', :path => '../node_modules/lottie-ios'
  pod 'lottie-react-native', :path => '../node_modules/lottie-react-native'
  pod 'react-native-webview', :path => '../node_modules/react-native-webview'
  pod 'RNScreens', :path => '../node_modules/react-native-screens'
  pod 'ReactNativeExceptionHandler', :podspec => '../node_modules/react-native-exception-handler/ReactNativeExceptionHandler.podspec'
  pod 'RCTRestart', :path => '../node_modules/react-native-restart/ios'
  pod 'react-native-version-number', :path => '../node_modules/react-native-version-number'
  pod 'RNBackgroundFetch', :path => '../node_modules/react-native-background-fetch'

  pod 'React', :path => '../node_modules/react-native', :subspec => [
    'Core',
    'ART',
    'cxxreact',
    'CxxBridge', # Include this for RN >= 0.47
    'DevSupport', # Include this to enable In-App Devmenu if RN >= 0.43
    'RCTText',
    'RCTNetwork',
    'RCTWebSocket', # needed for debugging
    'RCTImage',
    'RCTWebSocket', # Needed for debugging
    'RCTAnimation', # Needed for FlatList and animations running on native UI thread
    'RCTPushNotification',
    # Add any other subspecs you want to use in your project
  ]
end

swift4 = ['Charts']

post_install do |installer|
installer.pods_project.targets.each do |target|
  target.build_configurations.each do |config|
    if swift4.include?(target.name)
      config.build_settings['SWIFT_VERSION'] = '4.1'
    end
  end
end
end

์ €๋„ ๊ฐ™์€ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. react native diff์— ๋”ฐ๋ผ 0.57์—์„œ 0.59๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ๊ณ  0.58.6์—์„œ 0.59๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ๋•Œ๊นŒ์ง€ ๋ชจ๋“  ๊ฒƒ์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šด์ด์—†๋Š”์ด ์Šค๋ ˆ๋“œ์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ 'folly / Portability.h'ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ ์˜ค๋ฅ˜๋Š” ์‚ฌ๋ผ์ง€๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

0.58.6์œผ๋กœ ๋กค๋ฐฑํ•˜๋ฉด ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜์ง€๋งŒ 0.59.0 ๋˜๋Š” 0.59.1๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ˆœ๊ฐ„ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘ : node_modules / react-native / third-party / folly-2018.10.22.00 / folly / Portability.h์—์„œ ํŒŒ์ผ์„ ์ฐพ์•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฑฐ๊ธฐ์— ์—†๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๊ฒŒ์‹œ๋ฌผ์ด ๋งค์šฐ ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ 'folly / Portability.h'์— ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์•ผํ•˜๋Š” diff ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

nodes_modules / react-native / React.podspec ํŒŒ์ผ์— ๋‹ค์Œ ์ˆ˜์ •์„ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค. ์ ์–ด๋„ ์ œ ๊ฒฝ์šฐ์—๋Š” ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค! ์ด์ œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ๋ฌธ์ œ์—†์ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

diff --git a/node_modules/react-native/React.podspec b/node_modules/react-native/React.podspec

s.subspec "Core" do |ss|
[...]
     ss.header_dir           = "React"
     ss.framework            = "JavaScriptCore"
     ss.libraries            = "stdc++"
-    ss.pod_target_xcconfig  = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/ReactCommon\"" }
+    ss.pod_target_xcconfig  = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/ReactCommon\"  \"$(PODS_ROOT)/Folly\"" }
   end

@aaska๊ฐ€ ๋งํ•œ ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ถ”๊ฐ€
pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec' pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec' pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'

Podfile ๋ฐ pod ์„ค์น˜์— ๋„์›€์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@jpudysz , @jvandenaardweg ๋ฐ @johnryan ํŒ์„ ์‚ฌ์šฉํ•œ ํ›„ ์ €์—๊ฒŒ๋„ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค.
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‚˜๋ฅผ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•œ @ th3ac3 . ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๊ทธ๋“ค ์ค‘ ๋ˆ„๊ตฌ๋„ ์ผํ•˜์ง€ ์•Š์•˜๋‹ค

@jvandenaardweg ์บ์‹ฑ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์ด

๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•œ ๊ฒƒ์€ Xcode์˜ ํŒŒ์ƒ ๋ฐ์ดํ„ฐ ํด๋”๋ฅผ ์‚ญ์ œํ•˜๊ณ  Xcode๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
rm -rf ~/Library/Developer/Xcode/DerivedData

๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์‹คํŒจํ•˜๊ณ  xcode ์ž‘์—… ๊ณต๊ฐ„์„ ๋‹ซ์•˜๋‹ค๊ฐ€ ๋‹ค์‹œ ์—ด๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ๊ทธ๋ ‡๊ฒŒํ•˜์ž ๋‹ค์‹œ ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ํšจ๊ณผ๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ณ ๋งˆ์›Œ์š”, ๊ทธ๋ ‡๊ฒŒํ–ˆ๊ณ  ๋‹ค์‹œ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ diff๋ฅผ 59.4๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•œ ํ›„์—๋„ ( rn-diff-purge ์‚ฌ์šฉ ) ์—ฌ๊ธฐ์—์žˆ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค (๋จผ์ € YGFloatOptional.cpp ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๋‹ค์Œ folly/Portability.h ์˜ค๋ฅ˜). ๊ทธ๋Ÿฌ๋‚˜ ์†”๋ฃจ์…˜ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์ž์ฒด์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

# Clean caches/build folder/existing pods
rm -rf node_modules
rm -rf ~/Library/Developer/Xcode/DerivedData
rm -rf ios/build
rm -rf ios/Pods

# Reinstall deps
npm install

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‚ด Podfile์„ ๋‹ค์Œ์œผ๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'CityChallenge' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  pod 'React', :path => '../node_modules/react-native', subspecs: [
    # Comment out any unneeded subspecs to reduce bundle size.
    'Core',
    'CxxBridge', # --> I was missing Cxxbridge here, may have resolved the issue for me as well
    'DevSupport',
    'RCTActionSheet',
    'RCTAnimation',
    'RCTBlob',
    'RCTCameraRoll',
    'RCTGeolocation',
    'RCTImage',
    'RCTNetwork',
    'RCTPushNotification',
    'RCTSettings',
    'RCTTest',
    'RCTText',
    'RCTVibration',
    'RCTWebSocket',
    'RCTLinkingIOS'
  ]

  pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'

  # Third party --> This bit is also new
  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'


end

๊ทธ ํ›„ ํฌ๋“œ๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

cd ios
pod install

๊ทธ ํ›„์—์•ผ ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋‹ค์‹œ ๊ตฌ์ถ•๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค.

iOS ๊ฐœ๋ฐœ์ž ์ธ ๊ฒฝ์šฐ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ๋•Œ JavaScriptCore.framework๋ฅผ ์ˆ˜๋™์œผ๋กœ ์—ฐ๊ฒฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ Xcode๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์—ฌ๊ธฐ์— ํ‘œ์‹œ๋œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

์˜ˆ

๋‚ด๊ฐ€ ํ•œ ํ›„์— xcode๋Š” ์ •์ƒ์ ์œผ๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์–ด๋Š ๊ฒƒ๋„ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค : https://github.com/facebook/react-native/issues/18408#issuecomment -386696744
๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์ฝ˜์†”์— ๋„ฃ์œผ์‹ญ์‹œ์˜ค-> xcrun -k --sdk iphoneos --show-sdk-path
๋Œ€๋‹ต์ด
xcrun : _ ์˜ค๋ฅ˜ : SDK "iphoneos"๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
xcrun : ์˜ค๋ฅ˜ : SDK "iphoneos"๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
xcrun : ์˜ค๋ฅ˜ : SDK 'iphoneos'์—์„œ 'Path'ํ•ญ๋ชฉ์„ ์กฐํšŒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ์ด sudo xcode-select --switch /Applications/Xcode.app๋ฅผ ๋„ฃ์œผ์‹ญ์‹œ์˜ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ํฌ๋“œ๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค.

์ด ๋Œ€๋‹ต ์€ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ์—์„œ ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ๋ชจ๋“  ๊ฒƒ ์™ธ์—๋„ ๋ฉ”ํŠธ๋กœ ๋ฒˆ ๋“ค๋Ÿฌ๊ฐ€ ์‹คํ–‰์ค‘์ธ ํ„ฐ๋ฏธ๋„์„ ๋‹ค์‹œ ์—ด์–ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค "react-native": "0.57.4", ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ

๋‹ค์‹œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค "react-native": "0.57.4", ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ

์ด ๋ฒ„์ „์œผ๋กœ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ด @miukki ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ฒ„์ „ (0.59)์€ Android ์•ฑ์— ๋Œ€ํ•œ 64 ๋น„ํŠธ ์ง€์›์„ ์ œ๊ณตํ•˜๋ฉฐ ์•ฑ์„ ๊ฒŒ์‹œํ•˜๊ธฐ์œ„ํ•œ ํ–ฅํ›„ ์š”๊ตฌ ์‚ฌํ•ญ์œผ๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค ( ์—ฌ๊ธฐ์—์„œ ์ •๋ณด

์œ„์˜ ๋ชจ๋“  ์†”๋ฃจ์…˜์— ์ ‘๊ทผ ํ•œ ํ›„ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ld : ๊ฒฝ๊ณ  : '-F / Users / pumeo / Library / Developer / Xcode / DerivedData / GreenPlanet-cekcooliietupofcqlsnkupeolal / Build / Products / Debug-iphonesimulator / React'์˜ต์…˜์— ๋Œ€ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
ld : ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ React
clang : error : ๋ง์ปค ๋ช…๋ น์ด ์ข…๋ฃŒ ์ฝ”๋“œ 1๋กœ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค (ํ˜ธ์ถœ์„ ๋ณด๋ ค๋ฉด -v ์‚ฌ์šฉ).

post_install์„ ์‚ฝ์ž…ํ–ˆ์„ ๋•Œ

๋ˆ„๊ตฌ๋“ ์ง€ ์ œ๋ฐœ ๋„์™€ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
hackintosh๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ž„

@ Pumeo1010 , ์ฃผ์ œ์— ๋จธ๋ฌผ๋Ÿฌ์ฃผ์„ธ์š”.

์ฃผ์ œ :์ด ๋ฌธ์ œ๊ฐ€ ์ข…๊ฒฐ ๋œ ๊ฒฝ์šฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚˜๋Š” ์œ„์˜ ๋ชจ๋“  ๊ฒƒ์„ ์‹œ๋„ํ–ˆ๊ณ  ์–ด๋–ป๊ฒŒ ๋“  ์ž‘๋™ํ•˜๊ฒŒํ–ˆ์Šต๋‹ˆ๋‹ค (ํŠธ๋ฆญ์ด ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค). ์ด์ œ๋Š” ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ๋™์ผํ•œ ๋ฌธ์ œ์— ๋‹ค์‹œ ๋ถ€๋”ช ์ณค๊ณ  ๋‚ด๊ฐ€ ์‹œ๋„ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์ด ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ : ๋งˆ์นจ๋‚ด ๋‹ค์‹œ ์ž‘๋™ํ•˜๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ํ™•์‹คํ•˜์ง€๋Š” ์•Š์ง€๋งŒ Xcode ํŒŒ์ƒ ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ, Podfile.lock ์ œ๊ฑฐ, pods-dir ์ œ๊ฑฐ / ์žฌ์„ค์น˜, Xcode ๋นŒ๋“œ ํด๋” ์ •๋ฆฌ ๋ฐ ์‹œ์Šคํ…œ ์žฌ๋ถ€ํŒ…์ด ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฑฐ์˜ ์ดํ‹€ ๋™์•ˆ 0.57.8์—์„œ 0.59.9๋กœ React Native๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋Œ“๊ธ€ ์œ„์˜ ๋ชจ๋“  ์†”๋ฃจ์…˜์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ค‘๋ณต ๊ธฐํ˜ธ, ํ—ค๋”๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ, YGFloatOptional.cpp๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค .... ์ƒˆ React Native ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“  ๋‹ค์Œ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ์ƒˆ ํ”„๋กœ์ ํŠธ์— ๋ณต์‚ฌํ•˜๊ณ  rn-diff-purge ์˜ ๋„์›€์œผ๋กœ ์ฐจ์ด์ ์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋นŒ๋“œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๊ฒฐ๊ตญ ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค! ๋‚˜๋Š” v0.57.8์„ ์‚ฌ๋ž‘ํ•œ๋‹ค

๋”ฐ๋ผ์„œ diff๋ฅผ 59.4๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•œ ํ›„์—๋„ ( rn-diff-purge ์‚ฌ์šฉ ) ์—ฌ๊ธฐ์—์žˆ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค (๋จผ์ € YGFloatOptional.cpp ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๋‹ค์Œ folly/Portability.h ์˜ค๋ฅ˜). ๊ทธ๋Ÿฌ๋‚˜ ์†”๋ฃจ์…˜ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์ž์ฒด์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

# Clean caches/build folder/existing pods
rm -rf node_modules
rm -rf ~/Library/Developer/Xcode/DerivedData
rm -rf ios/build
rm -rf ios/Pods

# Reinstall deps
npm install

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‚ด Podfile์„ ๋‹ค์Œ์œผ๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'CityChallenge' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  pod 'React', :path => '../node_modules/react-native', subspecs: [
    # Comment out any unneeded subspecs to reduce bundle size.
    'Core',
    'CxxBridge', # --> I was missing Cxxbridge here, may have resolved the issue for me as well
    'DevSupport',
    'RCTActionSheet',
    'RCTAnimation',
    'RCTBlob',
    'RCTCameraRoll',
    'RCTGeolocation',
    'RCTImage',
    'RCTNetwork',
    'RCTPushNotification',
    'RCTSettings',
    'RCTTest',
    'RCTText',
    'RCTVibration',
    'RCTWebSocket',
    'RCTLinkingIOS'
  ]

  pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'

  # Third party --> This bit is also new
  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'


end

๊ทธ ํ›„ ํฌ๋“œ๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

cd ios
pod install

๊ทธ ํ›„์—์•ผ ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋‹ค์‹œ ๊ตฌ์ถ•๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

@Hless ์•ˆ๋…•ํ•˜์„ธ์š”. ๋‚˜๋Š” ๋‹น์‹ ์˜ ํ•ด๊ฒฐ์ฑ…์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๋‚ด Podfile์ด ์žˆ์Šต๋‹ˆ๋‹ค.

target '..' do
   # this is very important to have!
   rn_path = '../node_modules/react-native'
   pod 'yoga', path: "#{rn_path}/ReactCommon/yoga/yoga.podspec"
   pod 'React', path: rn_path, subspecs: [
     'Core',
     'CxxBridge',
     'RCTActionSheet',
     'RCTAnimation',
     'RCTGeolocation',
     'RCTImage',
     'RCTLinkingIOS',
     'RCTNetwork',
     'RCTSettings',
     'RCTText',
     'RCTVibration',
     'RCTWebSocket'
   ]

   pod 'RNImageCropPicker', :path =>  '../node_modules/react-native-image-crop-picker'

   pod 'AppCenter/Crashes', '~> 1.12.0'
   pod 'AppCenter/Analytics', '~> 1.12.0'
   pod 'AppCenterReactNativeShared', '~> 1.11.0'
   pod 'Fabric'
   pod 'Crashlytics'
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  platform :ios, '9.0'
  pod 'react-native-webview', :path => '../node_modules/react-native-webview'
  pod 'react-native-document-picker', :path => '../node_modules/react-native-document-picker'

  pod 'react-native-video', :path => '../node_modules/react-native-video'

  pod 'RNReanimated', :path => '../node_modules/react-native-reanimated'

  pod 'rn-fetch-blob', :path => '../node_modules/rn-fetch-blob'

  pod 'react-native-netinfo', :path => '../node_modules/@react-native-community/netinfo'

  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'

end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name == "React"
      target.remove_from_project
    end
  end
end

๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฒˆ์—๋Š” ์ค‘๋ณต ๊ธฐํ˜ธ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ด ์†”๋ฃจ์…˜์„ ์ฐพ์•˜์œผ๋ฉฐ ์ด์ œ ์„ฑ๊ณต์ ์œผ๋กœ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด์ œ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด ์ฆ‰์‹œ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. Xcode์˜ ๋””๋ฒ„๊ทธ ์˜์—ญ์—์„œ ์˜ค๋ฅ˜ ์ด์œ ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[RCTRootView reactTag]: unrecognized selector sent to instance 0x7fbf02c05530'
์šฉ์•ก ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์˜ ๋ฐ˜๋Œ€์ด๋‹ค. ์ •๋ง ๋‚˜์œ ์—…๊ทธ๋ ˆ์ด๋“œ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค. :(

๋งˆ์ง€๋ง‰์œผ๋กœ iOS ํ”„๋กœ์ ํŠธ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๋นŒ๋“œํ•˜๊ณ  ์—…๊ทธ๋ ˆ์ด๋“œ ์ง„ํ–‰์„ ์—ด์‹ฌํžˆ ํ•œ ํ›„ ์˜ค๋ฅ˜์—†์ด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € rn-diff-purge ์˜ ๋„์›€์œผ๋กœ @Hless '์†”๋ฃจ์…˜์„ ์ ์šฉ ๋”ฐ๋ฅด๋ฉด ์ด์ œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฌธ์ œ๋กœ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

rm -rf node_modules
rm -rf ios/Pods
rm ios/Podfile.lock 
rm -rf ~Library/Developer/Xcode/DerivedData

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‚ด ์ข…์†์„ฑ (npm ๋ฐ pod)์„ ๋‹ค์‹œ ์„ค์น˜ํ–ˆ์œผ๋ฉฐ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. :)

rm -rf ~ Library / Developer / XCode / DerivedData

์˜ค๋ฅธ์ชฝ ์ค„ : rm -rf ~/Library/Developer/Xcode/DerivedData

RN์—์„œ ๋ง๋„ ์•ˆ๋˜๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋จธ๋ฆฌ ๋‹น๊ธฐ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ํ•„์‚ฌ์ ์œผ๋กœ github์—์„œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์†”๋ฃจ์…˜์€ ์บ์‹œ ์‚ญ์ œ, ํŒŒ์ƒ ๋ฐ์ดํ„ฐ ์‚ญ์ œ, Xcode ๋‹ค์‹œ ์—ด๊ธฐ, ๋นŒ๋“œ ํด๋” ์ง€์šฐ๊ธฐ ๋“ฑ์ž…๋‹ˆ๋‹ค. ์ˆ˜๋…„์— ๊ฑธ์ณ package.json์— npm ์Šคํฌ๋ฆฝํŠธ๋กœ ์ถ”๊ฐ€ ํ•œ์ด bash ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ชจ์•˜์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ฒซ ๋ฒˆ์งธ ํ•ด๊ฒฐ์ฑ…์€ npm run clear ์ž…๋‹ˆ๋‹ค.

// package.json
{
  "scripts": {
    "clear": ". scripts/Clear.sh",
  }
}
// scripts/Clear.sh
#!/bin/bash

echo "rm -rf ios/build..."
rm -rf ios/build

echo "rm -rf android/app/build..."
rm -rf android/app/build

echo "Removed all Xcode derived data..."
rm -rf ~/Library/Developer/Xcode/DerivedData

echo "rm -rf lib... (for Flow)"
rm -rf lib

echo "watchman watch-del-all..."
watchman watch-del-all

echo "rm -rf node_modules..."
rm -rf node_modules

echo "npm install..."
npm install

echo "rm -rf $TMPDIR/react-*..."
rm -rf $TMPDIR/react-*

echo "rm -rf $TMPDIR/haste-map-react-native-packager-*..."
rm -rf $TMPDIR/haste-map-react-native-packager-*

์ถ”์‹ . ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋‚˜ ์—๊ฒŒ๋„์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค : D

pod install ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋ถ€๋””. ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ ๋œ Xcode 10.1

๋˜ ๋‹ค๋ฅธ react-native link ๊ฐ€ ์ €๋ฅผ ๋„์™”์Šต๋‹ˆ๋‹ค. :(

React Native๋Š” ์ง€์† ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋งˆ์ฃผ ์น˜๋Š” ๋ชจ๋“  ๋ฒ„๊ทธ์— ๋Œ€ํ•ด 100 ๊ฐ€์ง€ ํ•ด๊ฒฐ์ฑ…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝ๊ณผ ์ „์ฒด ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค, ์ƒ์šฉ๊ตฌ ๋ฐ React Native๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด๋„ˆ์ง‘๋‹ˆ๋‹ค. ๊ธฐ์—…์€ ์–ด๋–ป๊ฒŒ์ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ œํ’ˆ ํŒŒ์ดํ”„ ๋ผ์ธ์— ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด๋ฆฌ์„์€!!!!

0.59๋ถ€ํ„ฐ ๋‚˜์•„์งˆ ๊ฑฐ๋ผ๊ณ  .. ์ž˜ํ•˜๋ฉด ๋งž์•„์š”

@philipaarseth 0.60์ด ๋‚˜์™”์„ ๋•Œ ๋‹น์‹ ์˜ ๋ง์„ ๋จน์—ˆ ์œผ๋ฉด ์ข‹๊ฒ ์–ด์š” ๐Ÿ˜†

์ด์ „์— ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ์ด๊ฒƒ์„ ๋ณด์•˜์ง€๋งŒ ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

cd node_modules/react-native/scripts
./ios-install-third-party.sh

๋‚˜๋Š” ์ด๊ฒƒ์ด 0.59 ์ด์ „์—์„œ ์ˆ˜์ •๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ณ  ์ผ๋ถ€ ๋นŒ๋“œ์—์„œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ณธ ๊ธฐ์–ต์ด ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ˆ„๋ฝ ๋œ ๊ฒฝ์šฐ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ฒ˜์Œ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์ ํŠธ์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ์„น์…˜์— ํฌํ•จ์‹œํ‚ฌ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. $ conda deactivate

@jpudysz ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์™œ rn ์š”๊ฐ€ ๋นŒ๋“œ ์˜ค๋ฅ˜์— folly / glog / doubleConversion๊ณผ ๊ด€๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด ์˜ค๋ฅ˜ ๋กœ๊ทธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ ๋ช…๋ น์€ ๋ถ„์„๊ธฐ ๋ฌธ์ œ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
/Users/superqa/jenkins/workspace/xxxxx-xxxx-iOS-new/node_modules/react-native/ReactCommon/yoga/yoga/Yoga.cpp normal arm64 ๋ถ„์„
Base / RCTModuleMethod.mm ์ผ๋ฐ˜ arm64 ๋ถ„์„
(๋ถ„์„๊ธฐ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” 2 ๊ฐœ์˜ ๋ช…๋ น)

Android๋Š” ์ •๋ง ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. iOS ๋งŒ ... :-(

์œ ๋งํ•œ ํ•ด๊ฒฐ์ฑ…์€ ๋ถˆํ–‰ํžˆ๋„ RN ๋ฒ„์ „์„ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํƒ€์‚ฌ ์ข…์†์„ฑ์ด ๋งŽ์œผ๋ฉด ์ƒ๋‹นํžˆ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” Xcode๊ฐ€ ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์ผ์œผ์ผฐ์Šต๋‹ˆ๋‹ค.
๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๊ฐ€ ํ•œ ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
cd ios
rm -fr ํฌ๋“œ
rm Podfile.lock
ํฌ๋“œ ์„ค์น˜

Pod ๋ฐ Podfile์„ ๋‹ค์‹œ ์„ค์น˜ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ƒ ๋ฐ์ดํ„ฐ ์‚ญ์ œ
cd ios
ํฌ๋“œ ๋ฐ Podfile.lock ์ œ๊ฑฐ
ํฌ๋“œ ์„ค์น˜

์œ„์˜ ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋นŒ๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋„๋กํ–ˆ์œผ๋ฉฐ ์ด์ œ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. FWIW Xcode 10.1-> 11.1์—์„œ ์—…๊ทธ๋ ˆ์ด๋“œ ์ค‘์ด๋ฉฐ react native๋ฅผ 0.57.8-> 0.59.9์—์„œ ์—…๊ทธ๋ ˆ์ด๋“œ ์ค‘์ž…๋‹ˆ๋‹ค.

dyld: Library not loaded: @rpath/XCTest.framework/XCTest
  Referenced from: /Users/par/Library/Developer/CoreSimulator/Devices/2B68242E-D2AF-49A4-9AEA-C320820D8D2F/data/Containers/Bundle/Application/E665681B-C213-42C0-9A51-746B4CA17599/Kismet.app/Kismet
  Reason: image not found

ํŽธ์ง‘ : ๋‚˜๋Š” podfile์—์„œ RCTTest๋ฅผ ์ œ๊ฑฐํ–ˆ๊ณ  ๊ทธ ํ›„์— ์ข‹์•˜์Šต๋‹ˆ๋‹ค.

#include <folly/Portability.h> ์˜ค๋ฅ˜๋„ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์˜ ๋ฌธ์ œ๋Š” podfile์— ํ•˜์œ„ ์‚ฌ์–‘์ด ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž˜ ๊ตฌ์ถ•๋ฉ๋‹ˆ๋‹ค.

  pod 'React', :path => '../node_modules/react-native', :subspecs => [
    'Core',
    'CxxBridge', # Include this for RN >= 0.47
    'DevSupport', # Include this to enable In-App Devmenu if RN >= 0.43
    'RCTText',
    'RCTNetwork',
    'RCTWebSocket', # needed for debugging
    'RCTImage',
    'RCTWebSocket', # Needed for debugging
    'RCTAnimation', # Needed for FlatList and animations running on native UI thread
    # Add any other subspecs you want to use in your project
  ]

  pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'

  # Third party deps podspec link
  pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
  pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'

glog๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ Xcode๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— sudo xcode-select --switch /Applications/Xcode.app/ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผํ–ˆ๊ณ , ๊ทธ๋Ÿฐ ๋‹ค์Œ / Applications ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ–ˆ๊ณ  ๋„๊ตฌ๊ฐ€ ๋ชจ๋‘ ์—‰๋ง์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. .

@jenskuhrjorgensen rm ๋ช…๋ น์€ ๊ณต๊ฐ„์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— $ TMPDIR ์ „์ฒด๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

@ jduffy7 ์•„๋งˆ ์•ฝ๊ฐ„ ๊ณผ์ž‰ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค ๐Ÿ˜„ Thx, ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

ํŠธ์œ— ๋‹ด์•„ ๊ฐ€๊ธฐ

pod update ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์—…๋ฐ์ดํŠธ .. ?

์œ„์˜ ์†”๋ฃจ์…˜์ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๋‹ค์Œ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

cd ios
pod repo update
pod update

์ด ๋ช…๋ น์„ ์‹คํ–‰ ํ•œ ํ›„ xcode์—์„œ ๋นŒ๋“œ ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ react-native run-ios ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค (https://github.com/facebook/react-native/issues/23886#issuecomment-509528212 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค).

rm -rf ios/build
rm -rf ~/Library/Developer/Xcode/DerivedData
watchman watch-del-all
rm -rf node_modules
npm install

๋‹ค์‹œ react-native run-ios ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์‹œ๋„ํ•ด๋ณด์‹ญ์‹œ์˜ค : https://react-native-community.github.io/upgrade-helper/

@khanguslee ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ํ•˜์ง€๋งŒ ์Šฌํ”„๊ฒŒ๋„ ๋นŒ๋“œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

* ๋นŒ๋“œ ์‹คํŒจ *

๋‹ค์Œ ๋นŒ๋“œ ๋ช…๋ น์ด ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
PhaseScriptExecution [CP] Pod Manifest.lock ํ™•์ธ /../ios/build/music/Build/Intermediates.noindex/music.build/Debug-iphonesimulator/music.build/Script-C5D676D55145145333E00AC9.sh
(1 ํšŒ ์‹คํŒจ)

๋ชจ๋“  ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ
: -1 : ์ƒŒ๋“œ ๋ฐ•์Šค๊ฐ€ Podfile.lock๊ณผ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 'pod install'์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ CocoaPods ์„ค์น˜๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์‹ญ์‹œ์˜ค.

์ƒŒ๋“œ ๋ฐ•์Šค๋Š” Podfile.lock๊ณผ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 'pod install'์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ CocoaPods ์„ค์น˜๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์‹ญ์‹œ์˜ค.

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํฌํ•จ ๋œ ๋น ๋ฅธ Google ๊ฒ€์ƒ‰์ด ์—ฌ๊ธฐ ์— ํ•ด๊ฒฐ์ฑ…์„ ์ œ๊ณต

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰