react-native ios 부분 내용 및 트러블 슛팅

낭만개발자·2021년 6월 20일
3

트러블슛팅

목록 보기
1/17
post-custom-banner

폴더트리

  • ios
    iOS 프로젝트가 담겨 있는 폴더
  • ios/프로젝트명/AppDelegate.h,
    AppDeletegate.m
    iOS 앱의 메인 파일
  • ios/프로젝트명/Info.plist
    iOS 프로젝트의 설정 파일
  • ios/프로젝트명.xcworkspace
    iOS 프로젝트를 Xcode로 시작하기 위한 파일
  • ios/프로젝트명/Podfile
    iOS에서 코코아포드라는 의존성 관리자(Dependency Manager)를 사용하여 라이브러리를 관리, 오브젝티브-C, Switft에서 npm과 같은 역할을 한다.
    npm -> package.json으로 의존성을 관리하듯, 코코아포드에서는 Podfile을 사용해 의존성을 관리

https://padosum.dev/React-Native-folder-and-file-structure

CocoaPod

Swift 및 Objective-C 코코아 프로젝트의 종속성 관리자

cocoaPod 사용법_간단
https://zeddios.tistory.com/25

트러블슛팅

라는 에러가 떴다.

  • 해결
    ios 라이브러리 설치 순서가 꼬인듯하다.
    새로운 프로젝트 명을 TEST로 해서 하나 만들고, RN버전 0.64.2인가로 해서 라이브러리에 나와있는 get started 처럼
    따라하니 2번 정도에 Pod update'에서

    해결 된 듯 하다. 이걸토대로
    본 프로젝트의 pod를 다 날리고
    다시 pod 설치한 후
    (방법 :
sudo rm Podfile.lock 
sudo rm -r [프로젝트명].xcworkspace 
sudo rm -r Pods 
pod install

//출처: https://shoveller.tistory.com/4 

아래처럼 설치 셋팅하니 되었다.

아마 이전엔 npm install react-native-ble-plx 하고 pod update를 안해준게 아닌가 하는 생각이 든다.

error: Multiple commands produce '/Users/david/Library/Developer/Xcode/DerivedData/smartMattApp-badqbroephxjrzdctpaxelrzzwod/Build/Products/Debug-iphonesimulator/smartMattApp.app/smartMattApp':

1) Target 'smartMattApp' has copy command from '/Users/david/Desktop/code/smartMattApp/ios/smartMattApp' to '/Users/david/Library/Developer/Xcode/DerivedData/smartMattApp-badqbroephxjrzdctpaxelrzzwod/Build/Products/Debug-iphonesimulator/smartMattApp.app/smartMattApp'
2) Target 'smartMattApp' has link command with output '/Users/david/Library/Developer/Xcode/DerivedData/smartMattApp-badqbroephxjrzdctpaxelrzzwod/Build/Products/Debug-iphonesimulator/smartMattApp.app/smartMattApp'

여러개의 커맨드가 생산한다는 뜻으로
https://stackoverflow.com/questions/50718018/xcode-10-error-multiple-commands-produce
위에 가보면 중복된 파일명, 즉 내 경우는 에러 메시지 마지막에 smartMattApp을 삭제해주면 된다. 중복되니까.

⚠ No permission handler detected.

• Check that you link at least one permission handler in your Podfile.
• Uninstall this app, delete your Xcode DerivedData folder and rebuild it.
• If you use use_frameworks!, follow the workaround guide in the project README.

퍼미션 핸들러가 감지 안되었다는 에러.
아마 앞의 에러 땜에 ios 폴더 안에 pod 관련 파일들을 다 날리고 reinstall 해줬기에
react-native-permission 라이브러리 사용을 위해 ios에서 설정해주는 게 초기화 돼서 에러 뜨는듯.

  • 해결 :
    아래 공식문서에 나온대로 ios/pod 파일에 pod를 등록한다.
    (주소: https://github.com/zoontek/react-native-permissions)

    그런데 내가 실수한게 전에 외주가 줬던 pod 파일에서 그대로 긁어와 적용했더니
    !] No podspec found for ``Permission-BluetoothPeripheral`` in ``../node_modules/react-native-permissions/ios/BluetoothPeripheral.podspe
    에러가 뜬다 알고보니 react-native-permission이 3.0 업데이트 되면서 path가 달라진것이다. (몇달 밖에 안지났다고 걍 이전에 소스 복사하지 말고 항상 api 문서 최신버전 읽어 보든지 버전을 고정하는법을 배우든지 해야겠다)

그래서 위에 공식문서에 나온대로 pod를 넣어주고 pod install을 해주면 detect가 되므로 에러가 해결된다.

이제 ios 부분에 큰 에러는 다 잡고 기존에 Windows os에서 잘 진행해왔던 안드로이드 쪽을 맥
에서 갈아타려고 git pull 해서 프로젝트 이전 후 되겠지 하고 안드로이드 실행 react-native run-android 해봤다

error Failed to install the app. Make sure you have the Android development environment set up: https://reactnative.dev/docs/environment-setup. Error: spawn ./gradlew EACCES

겨우 ios 어느정도 잡았는데.. 와 신난다 xx
어쨋거나 이유는 알아야 하니, 에러 메시지 긁어서 구글링.

구글링 답은 접근권한 문제라 한다.

chmod 755 android/gradlew

실행하면 됨. ios pod쪽인가 거기선 root로 실행했다고 지x 안드로이드 쪽은 root 권한 안줬다고 지x
이게 하이브리드 프레임워크에 묘미인가? 지랄인가 모르겠지만..
출처 : https://right-hot.tistory.com/entry/React-Native-Error-spawn-gradlew-EACCES

물론 내가 맥을 첨 써보고 하니 pod 개념을 아직 모르고, 리눅스도 유닉스계열도 안써보니 chmod 즉 권한을 잘 몰라서 헤맨것도 있는데 맥북 옮기고 3일동안 기존 프로젝트 런을 위한 에러만 잡은듯.. ㄷㄷ

pod랑 권한 공부해야지

cocoaPods

pod install

pod install 실행시 ios/Podfile에 pod들을 install함. Podfile에 추가, 수정, 삭제시에도 사용. Podfile.lock에 리스트된 팟들엘 대해선 지정된 버전만 다운. 리스트 되지 않은 팟들은 Podfile에 명시된 조건으로 다운.

다운로드 받을 pod를 결정하는 것은 Podfile.lock 또는 Podfile.
Podfile.lock이 있으면 .lock파일 내에서 명시된 pod와 그 버전을..
없으면 Podfile에서 pod와 명쇠던 버전을 받고, Podfile.lock에 버전을 명시함.

pod update

Podfile.lock을 참조하지 않고 가진 pods들의 최신버전으로 업데이트 시켜줌.

즉 pod install vs update

install은 .lock에 지정된 version만 install.
update는 lock 무시하고 걍 모든 pod 라이브러리의 최신 version으로 update함.
대체로 Podfile에 pod 기록 하고 pod install 만 해줘도 될듯.

기본 레퍼런스 :
https://onelife2live.tistory.com/30

추가 고급 : http://monibu1548.github.io/2018/04/16/cocoapods-prompt/

pod install vs pod update :
https://eso0609.tistory.com/96

profile
낭만닥터와 슬의를 보고 저런 개발자가 되어야 겠다고 꿈꿔봅니다.
post-custom-banner

0개의 댓글