목차
개요
최근 앱에 생동감을 넣기 위해 마이크로 인터렉션(Micro-interactions)을 많이 사용하고 있습니다. 이번 블로그에서는 어도비 애프터이펙트(Adobe After Effects)
에서 작성한 애니메이션을 에어비엔비(Airbnb)가 만든 lottie
라이브러리를 사용하여 RN(React Native)에 적용하는 방법에 대해서 알아보겠습니다.
- lottie 공식 사이트: https://airbnb.design/lottie/
설치
RN(React Native)에서 lottie
라이브러리를 사용하기 위해 아래의 명령어를 실행하여 lottie-react-native
라이브러리를 설치합니다.
0.60 이상
npm install --save lottie-react-native lottie-ios
라이브러리 연동
설치가 완료되면 아래에 명령어를 실행하여 iOS에 필요한 라이브러리를 연동합니다.
cd ios
pod install
cd ..
0.59 이하
npm install --save lottie-react-native
라이브러리 연결
RN(React Native)에서 lottie
라이브러리를 사용하기 위해 lottie-react-native
라이브러리를 설치를 완료하였다면 아래에 방법으로 OS에 맞게 라이브러리를 연결합니다.
- iOS
RN(React Native)에서 lottie
라이브러리를 iOS에 사용하기 위해 아래와 같이 lottie-react-native
라이브러리를 RN(React Native) 프로젝트와 연결합니다.
react-native link lottie-ios
react-native link lottie-react-native
그리고 ios/[project_name].xcodeproj
이나 ios/[project_name].xcworkspace
파일을 실행하여 xcode를 실행합니다. 그리고 아래와 같이 추가 설정을 해줍니다.
- 왼쪽 메뉴에 프로젝트명 선택
TARGETS
에서 프로젝트명 선택- 상단 메뉴에서
General
선택 - 스크롤해서 하단으로 이동하면
Embedded Binaries
항목이 보임.+
버튼을 누르고Lottie.framework
를 검색,ios
용을 선택하여 추가
- 안드로이드
위에 iOS
과정을 거쳤다면 lottie
라이브러리를 안드로이드에서 사용하기 위해 추가적으로 해줄 과정이 없습니다. 아래에 명령어를 실행했을때, 안드로이드는 lottie-react-native
와 연결이 되었습니다.
react-native link lottie-react-native
사용 방법
RN(React Native)에서 lottie를 사용하기 위해서는 어도비 애프터이펙트(Adobe After Effects)로 만든 애니메이션 파일이 필요합니다. 어도비 애프터이펙트(Adobe After Effects)에서 lottie에 필요한 애니메이션 파일을 만드는 방법에 대해서는 이 블로그에서 다루지 않습니다. 아래에 링크를 참고하여 어도비 애프터이펙트(Adobe After Effects)에서 lottie 애니메이션 파일을 생성하세요.
또는 아래에 사이트에서 필요한 마이크로 인터렉션(Micro-interactions) 파일을 검색하세요.
어도비 애프터이펙트(Adobe After Effects) 또는 사이트에서 다운로드한 파일은 json
형식으로 되어있습니다.
RN(React Native)에서 lottie를 이용하여 마이크로 인터렉션(Micro-interactions)을 적용하기 위해 아래와 같이 코드를 작성합니다.
...
import LottieView from 'lottie-react-native';
...
export default class BasicExample extends React.Component {
render() {
return (
<LottieView
source={require('./animation.json')}
autoPlay
loop
/>
);
}
}
...
애니메이션 파일에 이미지가 포함된 경우
어도비의 애프터이펙트(AEF)를 사용하여 애니메이션을 제작하다보면, 애니메이션에 이미지를 포함해야 하는 경우가 발생합니다.
이미지를 포함한 애니메이션을 lottie용으로 내보내면 아래와 같이 이미지가 포함된 data.json
을 확인 할 수 있습니다.
// data.json
{
...
"assets": [
{
"id": "image_0",
"w": 588,
"h": 792,
"u": "images/",
"p": "main_character.jpg",
"e": 0
}
]
...
이미지가 포함된 애니메이션 파일은 보통의 파일과는 다르게 이미지 파일을 따로 추가해 주는 과정이 필요합니다.
- iOS
RN(React Native) 프로젝트 폴더에서 ios/[project name].xcworkspace
(또는 ios/xcodeproj
)를 선택하여 xcode를 실행합니다.
위와 같이 왼쪽 메뉴에서 프로젝트를 선택하고 Resources
폴더를 우클릭하여 Add Files to [project name]
을 선택합니다.
추가하고 싶은 파일을 선택하고, 하단에 Copy items if needed
옵션을 선택하고 추가합니다.
위와 같이 Resources
폴더가 보이지 않는 경우, 왼쪽 메뉴에서 프로젝트명을 우클릭한 후, New Group without Folder
를 선택하고 추가된 그룹명을 Resources
로 수정합니다.
- 안드로이드
안드로이드는 iOS보다 간단합니다. RN(React Native) 프로젝트의 android/app/src/main/assets
에 애니메이션에 포함된 이미지를 넣을 폴더를 생성합니다. 여기에서는 images
폴더를 생성하였습니다. 그리고 해당 폴더에 이미지를 복사합니다. (android/app/src/main/assets/images
)
복사를 완료하였다면, 아래와 같이 소스코드에 imageAssetsFolder={'images'}
를 추가합니다.
<LottieView
source={require('./animation.json')}
autoPlay
loop
imageAssetsFolder={'images'}
/>
Git 저장소
애니메이션 파일에 이미지가 포함된 경우에 Lottie
를 사용하는 방법에 관한 git 저장소(Repository)를 만들었습니다. 아래에 링크를 통해 예제를 확인하실 수 있습니다.
- git 저장소: react_native_lottie_exercise
에러 대응
(0.60 / iOS) ld: warning: Could not find or use auto-linked library
0.60에서 아래에 명령어로 iOS를 실행하면
react-native run-ios
아래와 같은 에러가 발생합니다.
ld: warning: Could not find or use auto-linked library ‘swiftCoreFoundation’
ld: warning: Could not find or use auto-linked library ‘swiftCompatibility50’
ld: warning: Could not find or use auto-linked library ‘swiftSwiftOnoneSupport’
ld: warning: Could not find or use auto-linked library ‘swiftObjectiveC’
ld: warning: Could not find or use auto-linked library ‘swiftQuartzCore’
ld: warning: Could not find or use auto-linked library ‘swiftCore’
ld: warning: Could not find or use auto-linked library ‘swiftCoreGraphics’
ld: warning: Could not find or use auto-linked library ‘swiftDispatch’
ld: warning: Could not find or use auto-linked library ‘swiftDarwin’
ld: warning: Could not find or use auto-linked library ‘swiftUIKit’
ld: warning: Could not find or use auto-linked library ‘swiftCompatibilityDynamicReplacements’
ld: warning: Could not find or use auto-linked library ‘swiftCoreImage’
ld: warning: Could not find or use auto-linked library ‘swiftFoundation’
ld: warning: Could not find or use auto-linked library ‘swiftMetal’
이를 해결하기 위해 /ios/[project name].xcworkspace
파일을 실행시켜 Xcode를 실행시킵니다.
위의 그림과 같이 File > New > File...
을 선택합니다.
위에 그림과 같이 Swift File
을 선택하고 오른쪽 하단의 Next
버튼을 선택합니다.
위와 같이 새 파일을 생성하는 화면이 나오면 오른쪽 하단의 Create
버튼을 선택합니다.
위와 같은 화면이 나오면 오른쪽 하단의 Create Bridging Header
를 선택합니다.
그리고 아래에 명령어를 실행하여 기존에 실행한 프로젝트를 iOS 시뮬레이터에서 삭제합니다.
rm -rf ~/Library/Developer/Xcode/DerivedData/*
마지막으로 아래와 같이 Product > Clean Build Folder
를 선택합니다.
이제 아래에 명령어를 실행하여 iOS를 실행합니다.
react-native run-ios
error: Cycle in dependencies between targets
RN(React Native) 프로젝트에 react-native-lottie
를 구현해서 잘 사용하다가 다른 라이브러리를 설치하고 빌드할 때, 아래와 같은 에러가 발생하였다.
Build system information
error: Cycle in dependencies between targets 'LottieLibraryIOS' and 'LottieReactNative'; building could produce unreliable results.
Cycle path: LottieLibraryIOS → LottieReactNative → LottieLibraryIOS
Cycle details:
...
RN(React Native) 프로젝트의 Pods
폴더나 node_modules
를 지우고 다시 설치해도 계속 문제가 발생하였다.
아래에서 설명하는 방법으로 제 RN(React Native) 프로젝트는 정상적으로 빌드가 되었습니다. 다른 분들도 저와 같은 문제가 있으시면 아래에 방법을 한번 시도해 보시기 바랍니다.
RN(React Native) 프로젝트의 ios/[project_name].xcworkspace
파일을 실행하여 xcode를 실행합니다.
xcode가 실행되면 위와 같이 File > Workspace Settings...
를 선택합니다.
위와 같이 빌드 시스템(Build System)을 New Build System (Default)
에서 Legacy Build System
으로 변경합니다.
저의 경우는 위와 같이 빌드 시스템(Build System)을 변경한 후 RN(React Native)를 빌드하면 정상적으로 빌드되는 것을 확인하였습니다. 다른 분들도 이 방법으로 해결이 되었으면 좋겠습니다.
안드로이드 빌드 에러
안드로이드에서 빌드하다 보면 아래와 같은 에러가 발생할 경우가 있습니다.
Execution failed for task ':app:transformClassesWithDexBuilderForDevDebug'.
이 경우, RN(React Native) 프로젝트 폴더의 android/app/build.gradle
를 열고 아래와 같이 수정합니다.
android{
...
configurations.all {
resolutionStrategy {
force 'com.airbnb.android:lottie:2.5.5'
}
}
}
완료
이것으로 RN(React Native)에 lottie를 이용하여 마이크로 인터렉션(Micro-interactions)을 구현했습니다. 간단하죠? lottie로 애니메이션을 적용하는 것보다 애니메이션을 만드는게 더 힘들거 같습니다. 저는 애프터 이펙트(After Effects)를 사용할지 모르기 때문에 https://lottiefiles.com/ 사이트를 이용하고 있습니다. lottie를 이용하여 여러분도 여러분의 앱에 재미있는 마이크로 인터렉션(Micro-interactions) 적용해 보세요.
참고
- lottie 공식 사이트: https://airbnb.design/lottie/
제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!
앱 홍보
Deku
가 개발한 앱을 한번 사용해보세요.Deku
가 개발한 앱은 Flutter로 개발되었습니다.관심있으신 분들은 앱을 다운로드하여 사용해 주시면 정말 감사하겠습니다.