react native로 iOS 앱 개발하고 등록하기

Posted by 이창권 on July 20, 2019

react-native로 앱을 만들고 등록하는 과정중의 에러나 힘들었던 사항들을 정리하였습니다.

Xcode로 iOS개발 시 빌드 방법(Error처리 포함)

Build전 수행해야할 사항

  • npm install --save : node_modules directory생성 (후에 pod에서 node_modules안의 파일을 건드리기 때문에 sudo는 쓰지말도록 합니다.)
  • react-native link : node.js패키지를 react-native에서 쓰기 위해 native code상의 필요한 부분에 코드를 주입시켜줍니다. link 명령어를 지원하지 않거나 manual한 link방법을 추천하는 패키지도 존재하므로 패키지 별로 문서를 한번 씩 읽어보는 것도 좋습니다.(현재 사용하는 패키지에서는 다 link사용 가능)
  • cd ios&pod install : node.js package를 바로 ios에서 쓰기 위해서는 패키지 관리자를 사용하여야 하는데 이것이 pod입니다. package.json=Podfile, package-lock.jso=Podfile.lock, node_modules=Pods입니다. (Pod와 관련해서 에러가 난다면 Podfile.lock, Pods를 삭제 후, pod install을 합니다.)
  • 이제 Xcode에서 .xcworkspace파일을 엽니다(Pod를 쓰기 때문에 .xcodeproj대신 .xcworkspace를 엽니다)

Build 시 발생하는 주요 에러

  • third-party와 관련되어 에러가 날 수 있습니다.(파일이 없습니다. 어쩌구 저쩌구….)
    • third-party에서 패키지를 제대로 설치하지 못하는 모양입니다. 수동으로 해줍시다.
    • cd node_modules/react-native/third-party/glog-0.3.4
    • ./configure
    • make&make install

소스파일로 된 패키지를 설치하실 때 기본적으로 내리는 3가지 명령어가 있는데 그것이 바로 configure, make, make install 입니다.

여기서 소스파일이란 것은 설치파일에 대한 소스 파일입니다. 그러므로 컴파일을 하고나면 설치파일이 생기는 것이죠. 그리고 위의 세가지 명령에 대해 알아보도록 하죠.

configure 는 환경설정을 해주는 명령어입니다. 컴파일을 할 때 어떤 옵션을 넣거나 할 때 configure 뒤에 옵션을 넣어줍니다. 여기에 어떤 옵션이 정확히 들어간다고 말씀드릴 수 있는 것은 아니고 소스를 제작한 자가 readme 파일 등에 명시되어 있습니다.

make 는 소스를 컴파일 하는 것입니다. 컴파일이란 것은 소스파일을 사용자가 실행 가능한 파일로 만들어 주는 과정을 말합니다. make 과정이 끝나고 나면 설치파일이 생성된 상태라고 볼 수 있습니다.

make install 은 설치를 하는 과정입니다. 앞 과정에서 생성된 설치파일을 실행해서 설치를 끝내는 과정입니다.

  • No member named ‘__rip’ in ‘__darwin_arm_thread_state64’ 에러
    • ucontext_t *context = reinterpret_cast<ucontext_t *>(ucontext_in_void);

      return (void*)context->PC_FROM_UCONTEXT; // <---- build error here

      return NULL;로 code를 직접 수정해줍니다.

앱 등록시 reject 사유

  • 구글 로그인 시 보안을 다 풀어두어도 새로운 핸드폰에서 로그인시 인증을 한번 거쳐야 한다. 하지만 Reviewer들은 해주지 않는다. 우리가 제공하는 계정은 가장 높은 권한을 가진 바로 로그인할 수 있어야 한다.
  • 구글 콘솔 상에서 OAuth인증 파트에서 사용하는 API가 느낌표가 떠있으면 로그인 시에 this app is not verified 라는 것이 뜨는데, 보통의 경우에는 advanced를 눌러 진행할 수 있지만 Reviewer는 이것을 reject사유로 잡는다.