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
์ด ๋ฌธ์ ๋ฅผ 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์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋ด ์
๊ทธ๋ ์ด๋ ์ ๋ต :
0.58.4
ํ๊ณ ๊ทธ ์์ ์๋ก์ด ๊ฒ์ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฒ์ด ์ ์๊ฒ ํจ๊ณผ๊ฐ ์์์ง ๊ถ๊ธํ์ญ๋๊น?
ํธ์ง : ๋๋ ๋ํ ์คํ ํ npm ci
์ ๊ฑฐํ๊ธฐ ์ํด ๋ด node_modules
(๋จ์ง ํ์ธํ๊ธฐ ์ํด) ๊ทธ๋ฆฌ๊ณ ๋๋ ์์ง๋ ์์ค ์ฝ๋์์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ถ ํ ์ ์์๋ค ๐ค
EDIT2 : ๊ทธ๋ฆฌ๊ณ ๋๋ YGFloatOptional.cpp
:
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๋ฅผ ์ฐพ์ ์ ์๋ค๊ณ ๋งํ์ง๋ง ํธ์ง๊ธฐ์์๋ ํค๋์ ์ ์ ๋ ๋ชจ๋ ์ ํ์ ๊ฐ์ ธ์ต๋๋ค.
์ปดํ์ผ์ ์คํจํ ํ์ผ์ 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 ์์ ๊ณต๊ฐ์ ๋ซ์๋ค๊ฐ ๋ค์ ์ด๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋์์ต๋๋ค. ์ผ๋จ ๊ทธ๋ ๊ฒํ์ ๋ค์ ๋น๋๋ฅผ ์๋ํ๋๋ฐ ํจ๊ณผ๊ฐ์์์ต๋๋ค.
์ข์์ ์ฌ๋ฌ๋ถ,์ด ๋ฌธ์ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ (๊ฒ์๋ฌผ ์ฝ๊ธฐ)๋ก ์ธํ ๋น๋ ์บ์ ๋ฌธ์ ์ ๊ดํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฌธ์ ๊ฐ์๋ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค.
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 ๊ฒ์์ด ์ฌ๊ธฐ ์ ํด๊ฒฐ์ฑ ์ ์ ๊ณต
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์๊ฒผ๋๋ฐ ... ๋ฆฌ ์กํธ ๋ค์ดํฐ๋ธ์์ ์ ๊ทธ๋ ์ด๋์ ๋ฌธ์ ๊ฐ์์ ๋๋ง๋ค ๋๋ฌด ํผ๊ณคํด ..