반응형

react-native-vector-icons 사용하는 방법입니다.

Mac 기준입니다.

( icon 하나 사용하는데 하루가 걸린 기분이 듭니다... )

 

npm

$ npm install react-native-vector-icons
$ npm install -D @types/react-native-vector-icons

 

저는 typescript를 사용하고 있기 때문에 @types 부분도 추가했습니다.

 

 

iOS에서 아이콘 추가하기

 

1. 프로젝트를 열고 터미널을 열어줍니다.

$ cd ios
$ pod install

 

ios로 들어간다음 pod install을 해줍니다.

 

2. 프로젝트 폴더에서 ios -> project-name.xcworkspace를 열어줍니다. ( 대기 ! )

 

3. 다시 프로젝트 폴더에서 node_modules -> react-native-vector-icons -> Fonts 폴더를 복사합니다.

 

4. 아까 대기시켜둔 workspace에 project-name 폴더 아래에 복사한 Fonts폴더를 추가해줍니다.

추가할 때 아래 창이 뜨면 이렇게 해주면 됩니다.

 

아래처럼 추가된 모습을 볼 수 있습니다.

 

5. Fonts폴더를 추가시키고 아래를 보면 Info파일이 있습니다.

Info로 들어가서 아래처럼 내용들을 추가해줍니다.

Informations Property List
 - Fonts provided by application
   - item 0 ~ item 18 ( value에 폰트 내용을 추가합니다. )

 

Informations Property List 옆에 +를 누르고 Fonts provided by application을 추가합니다. ( 자동완성 )

Fonts provided by application 옆에 +를 누르고 item들을 추가시킨다음 Fonts내부에 ttf파일들 이름을 추가시켜줍니다.

 

추가를 하고난다음 Info를 닫고 프로젝트에서 ios -> project-name -> Info.plist파일을 열어보면 아래처럼 추가된 내용을 확인 할 수 있습니다.

 

workspace에서 project-name 폴더에 Build Phases -> Copy Bundle Resources를 확인해보면 여기도 Fonts가 추가된 것을 확인 할 수 있습니다.

 

이렇게 완료하고 ios를 재시작하면 icon이 들어오는 것을 확인 할 수 있습니다.

( 아이콘 추가방법을 가장 아래 추가해 두었습니다. )

 

 

Android에서 아이콘 추가하기

 

1. android/app/build.gradle 파일로 이동해서 아래 내용을 추가해줍니다.

apply from: file("../../node_modules/react-native-vector-icons/fonts.gradle")

 

2. android/settings.gradle 파일로 이동해서 아래 내용을 추가해줍니다.

include ':react-native-vector-icons'
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android')

 

3. 다시한번 android/app/build.gradle 파일로 이동해서 아래 내용을 추가해줍니다.

dependencies {
    implementation project(':react-native-vector-icons')
    ...
}

 

dependencies 내부에 추가해줍니다.

 

4. gradlew clean를 실행합니다.

$ cd android
$ ./gradlew clean

 

pod install 한것과 같습니다.

 

이렇게 iOS, 안드로이드 모두 아이콘을 추가할 준비가 됐습니다.

 


 

아이콘 추가하기

react-native-vector-icons 바로가기

 

위 사이트에 접속하면 아래처럼 빨간배경에 제목과 아이콘 이름들을 확인 할 수 있습니다.

제목은 import할 때 사용하고 아이콘 이름은 아이콘을 추가할 때 사용하는 이름입니다.

 

 

아이콘 추가하는 방법 1

import { StyleSheet, Text, View } from "react-native";
import AntDesign from 'react-native-vector-icons/AntDesign';

const Headers = () => {
    return (
        <View>
            <Text>Header</Text>
            <AntDesign size={35} name="creditcard" color="#000000" />
        </View>
    );
}


export default Headers;

 

아이콘 추가하는 방법 2

import { StyleSheet, Text, View } from "react-native";
import Icon from 'react-native-vector-icons/FontAwesome';

const myIcon = <Icon name="rocket" size={30} color="red" />;

const Headers = () => {
    return (
        <View>
            <Text>Header</Text>
            {myIcon}
        </View>
    );
}

export default Headers;

 

 

확인해보면 아래처럼 아이콘이 추가된 것을 확인 할 수 있습니다.

 

 

 

React Native... 쉽지 않습니다..

반응형
반응형

React Native 프로젝트 생성하고 앱을 실행하는 방법입니다.

xcode와 Android Studio가 설치된 이후에 시작하는 내용입니다.

 

brew install

$ brew install node
$ brew install watchman

 

node version은 18이상으로 설치해줍니다.

watchman은 파일 시스템의 변경 사항을 감시하기 위한 도구입니다.

 

:: watchman 설치 에러가 일어날 때

python@3.11: the bottle needs the Apple Command Line Tools to be installed. You can install them, if desired, with: xcode-select --install

 

위와같은 에러가 나오면 아래 내용을 입력해줍니다.

$ xcode-select --install

 

 

react native cli 생성하기전에 이전에 글로벌로 react-native-cli를 설치한적이 있다면 제거해줍니다.

:: 이전에 글로벌로 설치한 경우 문제가 발생할 수 있다고 합니다.

$ npm uninstall -g react-native-cli @react-native-community/cli

 

 

프로젝트 생성하기

생성할 때, cocoaPods추가 내용이 나왔을 때 y 해주었습니다. ( 종속성 관리 시스템입니다. )

$ npx react-native@latest init AwesomeProject

 

특정 버전으로 새 프로젝트를 시작할 때

$ npx react-native@X.XX.X init AwesomeProject --version X.XX.X

 

프로젝트 실행하기

$ npm start

 

 

위처럼 실행하면 문제없이 바로 실행이 되는줄 알았습니다...

 


 

에뮬레이터 작동안되는 문제..

Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'

> err...

 

 

문제내용

  • JDK 버전
  • Android 환경변수

 

먼저 java 버전을 확인해줍니다.

$ java --version

 

 

첫번째 문제가, 자바 버전이 11이였기에 문제가 일어났었습니다. 그래서 일단 버전을 17로 올려주었습니다.

 

JDK 17버전 설치하기

$ brew install openjdk@17

 

이후 .zshrc 파일에 경로를 추가해주었습니다.

$ export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"

 

터미널에서 추가하기

위처럼 vi로 적용하거나, 아래처럼 입력하면 .zshrc에 추가하고 변경사항을 저장해줍니다.

$ echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc
$ source ~/.zshrc

 

 

두번째 문제는 안드로이드 환경변수가 설정되어 있지 않아서 발생했습니다.

 

먼저 Android SDK Tools(Obsolete)를 체크해주었습니다.

 

Android SDK Tools체크하러 가기

1. Android Studio에서 SDK Manager로 들어갑니다.

 

2. Android SDK -> SDK Tools -> Hide Obsolete Packages 해제 -> Android SDK Tools (Obsolete ) 체크

 

 

ANDROID_HOME 환경변수 추가하기

.zshrc 파일에 아래 내용을 추가합니다.

ANDROID_HOME에 있는 경로는 위 이미지에 Android SDK Location의 경로입니다.

$ export ANDROID_HOME=/Users/junhyeok/Library/Android/sdk
$ export PATH=$PATH:$ANDROID_HOME
$ 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-toolsexport PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"

 

위 내용들을 실행하고 난 후에 Android와 iOS 에뮬레이터가 문제없이 작동되었습니다.

반응형
반응형

리액트 프로젝트 생성 방법인 Expo와 React-native CLI에 대한 내용입니다.

 

리액트 네이티브프로젝트를 생성하는 두가지 방법

 

Expo와 React Native의 장단점

 

Expo 장점

  • 초기 환경 세팅이 쉬워서 빠르고 간편하게 만들수 있습니다.
  • React Native의 기본 설정이 구성되어 있습니다.
  • 개발하기 어려운 기능들이 탑재되어 있습니다.
  • 네이티브 관련작업들을 Expo가 관리해줍니다.
  • 모바일 앱 관련 개발에 친숙하지 않은 사람들에게 좋은 도구입니다.
  • Apple, Google Store에 배포와 업데이트가 간단합니다.

Expo 단점

  • 숨겨져 있는 네이티브 파일을 변경하기 어렵습니다.
  • Expo에서 지원하지 않는 네이티브 라이브러리는 사용할 수 없습니다.
  • 네이티브 기능을 완벽하게 다룰 수 없기 때문에 한계가 명확합니다.

 

React Native CLI 장점

  • 네이티브로 어플리케이션 개발이 가능합니다.
  • 다양한 라이브러리를 사용할 수 있습니다.
  • 필요한 기능을 직접 만들어서 사용할 수 있습니다.

React Native CLI 장점

  • Android, IOS에 대한 네이티브 지식이 필요합니다. ( 러닝커브가 높습니다. )
  • 초기 환경 세팅이 어렵습니다.
  • 빌드시 Android Studio, Xcode를 이용한 별도의 과정과 장비가 필요합니다.

 

어떤걸 선택해야 하는가 ?

Expo를 사용하게되면 결국 eject를 고민하는 순간이 옵니다.

예를들어 핸드폰 자체 기능을 사용한 기능이 거의 들어가지 않고 JS비중이 높은 간단한 어플이라면 Expo를 사용해도 무방하지만 핸드폰 자체 기능이 하나 둘씩 들어가다보면 결국 한계가 오게됩니다.

또한 이제 빌드를 하게되면 Expo는 무료를 사용하게 되면 빠르면 30분 느리면 1시간 이상 걸리는걸 확인할 수 있습니다.

 

결론은 정말 간단하고 핸드폰 기능이 없는 앱을 만들 경우에는 Expo를 사용하고 그 이외에는 React Native를 사용하는 것이 맞지 않을까라는 생각을 하게 되었습니다.

 

반응형

+ Recent posts