본문 바로가기
React Native

[React Native] Upgrade Expo SDK 49→51

by dev수니 2024. 9. 26.
반응형

최근 공부하거나 해결한 내용들을 모두 노션에만 정리하고

블로그 포스팅을 미루고 있었는데 이제는 포스팅을 해야 할 때가 온 것 같다.

 

오늘의 포스팅, 사이드 프로젝트로 expo 프로젝트를 배포하려다 생긴 길고 험난했던 에러 핸들링 과정시작

 

읽다가 포기하기 금지 🙅🏻‍♀️
스크롤 그냥 내리기 금지 🙅🏻‍♀️
나중에 꼭 다시 읽어보기,,,(제발) 🙏

 

첫번째, eas submit

eas build 로 ios, android 둘다 빌드까지 완료! eas submit 이용하여 각 os 별로 제출하려는데 android에선 수동으로 한번이상 출시를 해야 그 이후에 eas로 제출할 수 있다고 한다.

play console android SDK version 오류

그래서 play console에서 수동으로 제출하려는데 targetSdkVersion 이 34이상 지원하지 않아 출시 할 수가 없다는 오류가 떴다.

현재 앱이 33의 API 수준을 타겟팅하고 있지만, 보안 및 성능에 최적화된 최신 API를 기반으로 앱을 빌드하려면 API 수준 34 이상을 타겟팅해야 합니다. 자세히 알아보기

 

expo docs에서 찾아보니 SDK 50 이상으로 upgrade 하면 targetSdkVersion 도 34로 지원해주고, 사용중이던 49 version은 expo 에서 더이상 지원 중단했기 때문에 기왕 업그레드하는거 51로 업그레이드 했다.

docs 따라서 expo upgarde 해주었다.

yarn add expo@51

npx expo install --fix

 

그리고 SDK realize note (50, 51) 를 통하여 앱에 영향을 미칠 수 있는 중단 변경, 지원 중단 및 기타 변경 사항을 확인 한 후 google map 변경사항 적용한 후 다시 적용시킨다.

 

npx expo prebuild → yarn → cd ios → pod install

 

Expo SDK Upgrade 중에 생긴 오류

근데 여기서 자꾸 아래 에러가 뜨는 것이다.

[!] Invalid Podfile file: undefined method []' for nil:NilClass

  project_root = Pathname.new(config["project"]["ios"]["sourceDir"])
                                                      ^^^^^^^^^^^^^.

 #  from /Users/soonipy/moilae/moilae-user-app/ios/Podfile:42
 #  -------------------------------------------
 #    use_expo_modules!
 >    config = use_native_modules!
 #  
 #  -------------------------------------------

종속성 관련 오류인 것 같아 node_modules 를 지우고 다시 yarn 한 후 Pods 폴더와 Podfile.lock을 지우고 pod cache clean 한 후 다시 pod install 해주었으나 결과는 똑같았다.

expo upgrade helper 통하여 native code 의 버전 변경사항을 일일이 확인하여 수동으로 업데이트 해주었는데도 결과는 같았다.

node_modules 종속성 관련 오류

왜그럴까 한참 고민한 끝에 혹시 pakage.json의 라이브러리 버전들이 바꼈지만 yarn.lock 의 각 종속성 버전들이 안바뀌지 않았을까하여 yarn.lock 제거 후 다시 yarn install 해주었더니 pod install 까지 성공했다.

xcode run build 중 kakaologinSDK 관련 오류

하지만 xcode에서 test device에 빌드하는 도중 또 에러를 만났다.

/Users/soonipy/moilae/moilae-user-app/node_modules/@react-native-seoul/kakao-login/ios/RNKakaoLogins/RNKakaoLogins.swift:252:54 Value of type 'UserServiceTerms' has no member 'id'

app.json 에서 overrideKakaoSDKVersion 지정해줘서 생긴 오류

iOS 버전의 코드 베이스가 2.22.0 기준으로 작성되었는데 overrideKakaoSDKVersion 때문에 이전 버전의 SDK 를 가져와서 빌드를 하려고 시도하였고 이 때 인터페이스가 맞지 않아서 생기는 문제였다.

overrideKakaoSDKVersion": "2.11.2",

https://github.com/crossplatformkorea/react-native-kakao-login/pull/405

ios Minimum Deployment target version 오류

/Users/soonipy/moilae/moilae-user-app/ios/Pods/Target Support Files/Pods-moilae/ExpoModulesProvider.swift:8:8 Compiling for iOS 13.0, but module 'ExpoModulesCore' has a minimum deployment target of iOS 13.4: /Users/soonipy/Library/Developer/Xcode/DerivedData/moilae-dhzfblbphubewafjqrdidnlwjsem/Index.noindex/Build/Products/Debug-iphoneos/ExpoModulesCore/ExpoModulesCore.swiftmodule/arm64-apple-ios.swiftmodule
  1. xcode General → Minimum Deployment 13.0 에서 13.4로 변경

googleMap 오류

  1. app.json ios android 에 google API key 추가

ios API Network Error

app.json 에 ios.infoPlist.NSAppTransportSecurity.NSAllowsArbitraryLoads: true 하니까 됨.

Android expo-module > kotlin > jni > JavaScriptValue.kt 에서 발생한 에러

gradle build 는 성공적으로 끝났는데 프로젝트 빌드 시에 에러가 났다. 모듈 버전은 올라갔는데 종속성이 남아있어서 남아있던 오류던가 native 코드쪽에서 참조하면서 발생한것 같았다.

e: file:///Users/soonipy/moilae/moilae-user-app/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/JavaScriptValue.kt:42:7 Public-API inline function cannot access non-public-API property accessor.
// Kotlin 코드에서 public API로 선언된 inline 함수가 private 또는 internal로 선언된 속성이나 메서드에 접근하려고 할 때 발생합니다. Kotlin에서는 inline 함수는 호출된 코드가 실제로 해당 위치에 인라인되어 컴파일되므로, 컴파일러가 접근 수준에 따라 이를 제한하게 됩니다.

결국 git에 커밋 해두고 expo prebuild —clean 시켜주었다…

ios는 yarn run ios로 build 했더니 시뮬레이터에서도 google map 도 켜지고 mmkv 도 실행되서 넘나 감격

근데 또 안드로이드가 안된다. yarn run android.

Caused by: com.android.builder.errors.EvalIssueException: SDK location not found. Define a valid SDK location with an ANDROID_HOME environment variable or by setting the sdk.dir path in your project's local properties file at '/Users/soonipy/moilae/moilae-user-app/android/local.properties'.

찾아보니 ANDROID_HOME 설정해주면 된대서 .zhrc 가서 export 해주고 $ soruce 로 실행

export ANDROID_HOME=/Users/{내이름헤헷}/Library/Android/sdk
export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

그리고 yarn run android 했더니 에뮬레이터에서 잘 켜졌다. 그리고 android studio 가서도 다시 project build 했는데 잘된다.

 

길고 험난했던 expo version upgrade 과정 끄읏...~!

반응형

댓글