ν™˜κ²½μ„ΈνŒ…

μ„€μΉ˜

brew install node
brew install watchman
brew install --cask adoptopenjdk/openjdk/adoptopenjdk8

Android

1. μ•ˆλ“œλ‘œμ΄λ“œ μŠ€νŠœλ””μ˜€ μ„€μΉ˜

μ•ˆλ“œλ‘œμ΄λ“œ μŠ€νŠœλ””μ˜€ λ₯Ό μ„€μΉ˜ν•˜κ³  μ•„λž˜ ν•­λͺ©λ“€μ„ 체크해쀀닀.

  • Android SDK
  • Android SDK Platform
  • Android Virtual Device

2. Android SDK μ„€μΉ˜

μ•ˆλ“œλ‘œμ΄λ“œ μŠ€νŠœλ””μ˜€ SDK Managerμ—μ„œ Android 10.0 버전을 μ²΄ν¬ν•˜μ—¬ μ„€μΉ˜ν•΄μ€€λ‹€. img_4.png

  • Inter x86 Atom_64 System Image or Google APIs Inter x86 Atom System Image

β€œSDK Tools” νƒ­μœΌλ‘œ μ΄λ™ν•˜μ—¬ μ•„λž˜ 두가지 ν•­λͺ©μ„ μ²΄ν¬ν•œ ν›„ Apply ν•΄μ€€λ‹€.

  • β€œAndroid SDK Build-Tools” 29.0.2
  • β€œAndroid SDK Command-line Tools (latest)”

3. ANDROID_HOME ν™˜κ²½ λ³€μˆ˜

vi ~/.zshrc
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools

μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό 톡해 ν™˜κ²½λ³€μˆ˜κ°€ 잘 μ§€μ •λ˜μ—ˆλŠ”μ§€ ν™•μΈν•œλ‹€.

source ~/.zshrc
echo $ANDROID_HOME

λͺ…λ Ήμ–΄λ“€

μƒνƒœ 확인

μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό 톡해 ν™˜κ²½ μ„ΈνŒ…μ΄ μž˜λ˜μ—ˆλŠ”μ§€λ₯Ό 확인할 수 μžˆλ‹€.

npx @react-native-community/cli doctor

[μ‹€ν–‰ κ²°κ³Ό] img.png

νŒλ“€

μ‹€ν–‰ 였λ₯˜

yrun λͺ…λ Ήμ–΄λ₯Ό 톡해 μ‹€ν–‰ μ‹œ 였λ₯˜λ‚˜λŠ” 상황에 μ ‘ν•˜λ©΄ λ¨Όμ € Xcodeλ‚˜ Android Studioλ₯Ό 톡해 ν•΄λ‹Ή 디렉토리λ₯Ό μ—΄μ–΄ λΉŒλ“œ ν›„ 원인을 μ°ΎλŠ” 것이 λΉ λ₯΄κ³  μΉœμ ˆν•˜λ‹€.

No bundle URL present

img_2.png iOS λ””λ°”μ΄μŠ€μ—μ„œ No bundle URL present μ—λŸ¬κ°€ λ°œμƒν•  경우 ν”„λ‘œμ νŠΈ 루트 λ””λ ‰ν† λ¦¬μ—μ„œ λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•΄ iOS λΉŒλ“œ 디렉토리λ₯Ό μ‚­μ œν•˜κ³  μ„Έμ…˜(8081 포트)을 μ‚­μ œν•œλ‹€.

rm -rf ios/build/; kill $(lsof -t -i:{PORT}); react-native run-ios

Optional

λ‹€μŒ λͺ…λ ΉμœΌλ‘œ Bash κ΅¬μ„±νŒŒμΌ .bashrc에 μΆ”κ°€ν•˜μ—¬ μ΄λŸ¬ν•œ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ ν•œλ‹€.

echo "alias rni=\"kill \$(lsof -t -i:8081); rm -rf ios/build/; react-native run-ios\"" >> ~/.bashrc; source ~/.bashrc

Android μ‹€ν–‰ 였λ₯˜

General error during semantic analysis: Unsupported class file major version 60

원인

μœ„ 였λ₯˜μ˜ 원인은 jdk 버전이 μ§€μ›λ˜μ§€ μ•ŠλŠ” λ²„μ „μ΄λΌμ„œ λ°œμƒν•œλ‹€. jdk μ—¬λŸ¬ 버전이 μ„€μΉ˜ λ˜μ–΄μžˆλŠ” 경우 버전을 λͺ…μ‹œν•΄μ£Όμ§€ μ•ŠμœΌλ©΄ 이런 였λ₯˜κ°€ λ°œμƒν•  수 μžˆλ‹€. (μ΄λ•Œμ˜ 경우 jdk 16 λ²„μ „μœΌλ‘œ μ§€μ •λ˜μ–΄ μžˆμ—ˆλ‹€.)

ν•΄κ²°

  1. μ„€μΉ˜λ˜μ–΄μžˆλŠ” jdk 버전 확인
/usr/libexec/java_home -V

Matching Java Virtual Machines (3):
16.0.2 (x86_64) "Oracle Corporation" - "OpenJDK 16.0.2" /Users/jigeol/Library/Java/JavaVirtualMachines/openjdk-16.0.2/Contents/Home
15.0.4 (x86_64) "Azul Systems, Inc." - "Zulu 15.34.17" /Users/jigeol/Library/Java/JavaVirtualMachines/azul-15.0.4/Contents/Home
1.8.0_292 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
/Users/jigeol/Library/Java/JavaVirtualMachines/openjdk-16.0.2/Contents/Home
  1. jdk 버전 λ³€κ²½
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
  1. λ³€κ²½λœ 버전 확인
java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.292-b10, mixed mode)

React Native Absolute imports

// AS-IS
import foo from '../../../../../foo';

// TO-BE
import foo from 'src/foo'
  1. νŒ¨ν‚€μ§€ μ„€μΉ˜
ya -D babel-plugin-module-resolver
  1. babel.config.ts
plugins: [
[
  'module-resolver',
  {
    root: ['.'],
    extensions: [
      '.ios.ts',
      '.android.ts',
      '.ts',
      '.ios.tsx',
      '.android.tsx',
      '.tsx',
      '.jsx',
      '.js',
      '.json',
    ],
    alias: {
      '@src': './src',
    },
  },
],
  1. tsconfig.json
"baseUrl": "./src",
 "paths": {
   "@src/*": ["./*"]
 },    
  1. μΊμ‹œ λΉ„μš°κ³  μž¬μ‹œμž‘
yst --reset-cache

React Native μ•± 이름 λ³€κ²½

  1. app.json 파일 μˆ˜μ •
{
  "displayName": "{APP_NAME}"
}
  1. strings.xml 파일 μˆ˜μ •
<string name="app_name"> { APP_NAME }</string>
  1. Info.plist 파일 μˆ˜μ •
<key>CFBundleDisplayName</key>
<string>{APP_NAME}</string>

ScrollView VS FlatList

μ•± κ°œλ°œμ„ ν•˜λ©° μŠ€ν¬λ‘€λ˜λŠ” μŠ€ν¬λ¦°μ„ κ°œλ°œν•΄μ•Όν–ˆλŠ”λ° React Native ScrollView λ¬Έμ„œλ₯Ό λ³΄λ‹ˆ FlatListλΌλŠ” 것도 μžˆλ‹€λŠ” 사싀을 μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
λ¬Έμ„œμ—μ„œ μ†Œκ°œν•˜κ³  μžˆλŠ” λ‚΄μš©μœΌλ‘œλŠ” ScrollViewλŠ” ν•œκΊΌλ²ˆμ— λͺ¨λ“  ν•˜μœ„ κ΅¬μ„±μš”μ†Œλ₯Ό λ Œλ”λ§ ν•˜κΈ° λ•Œλ¬Έμ— μ½˜ν…μΈ κ°€ λ§Žμ€ 슀크린의 경우 λΆ€ν•˜κ°€ 생길 수 μžˆλ‹€κ³  ν•©λ‹ˆλ‹€. (λ Œλ”λ§ 속도 느렀짐, λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ 증가)
반면 FlatListλŠ” ν•­λͺ©μ΄ λ‚˜νƒ€λ‚˜μ•Ό ν•˜λŠ” μ‹œμ μ— λ‘œλ”©μ„ ν•˜κ³  λ©”λͺ¨λ¦¬μ™€ 처리 μ‹œκ°„μ„ μ ˆμ•½ν•˜κΈ° μœ„ν•΄ 화면에 보이지 μ•ŠλŠ” μš”μ†Œλ“€μ€ μ œκ±°ν•œλ‹€κ³  ν•©λ‹ˆλ‹€.

Firebase μ„€μ • 쀑 μ‚½μ§ˆ

  1. GoogleService-Info.plist Not Found

이것 λ•Œλ¬Έμ— μ‚½μ§ˆ 이틀 .. Xcodeμ—μ„œ β€˜Add Files to {PROJECT}β€˜λ‘œ 잘 λ„£μ–΄μ€¬λŠ”λ°λ„ 자꾸 찾을 수 μ—†λ‹€λ©° Crash 됐닀. /ios 루트 κ²½λ‘œμ— 넣어쀄 뿐만 μ•„λ‹ˆλΌ Build Phases > Compile Sources 에도 잘 λ“€μ–΄κ°€ μžˆλŠ”μ§€ 확인해야 ν•œλ‹€. img_5.png