ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • react-native link의 저주 (feat. .xcodeproj & .xcworkspace)
    React-Native 개발중 2019. 1. 11. 12:26

     암호화화폐 지갑 App을 개발 하여 Google Play에 앱 배포를 성공적으로 끝마쳤다.

    Apple 개발자 계정 발급이 늦어지게 되었고, 이제서야 App Store 심사를 진행하기 위하여 Xcode 빌드를 시도해보았다.



    linker command failed with exit code 1 (use -v to see invocation)



    로그를 보면, 결론적으로 Pod Install을 통하여 받은 모듈들의 경로를 찾지 못하는 것으로 추측하고 있다.

    하지만 신기하게도 팀원들은 빌드가 잘 되었고, 그렇게 3일동안 구글링을 통하여 얻은 모든 해결책을 적용해보았지만 해결되지 않았다.


    그렇게 우연히 ".xcworkspace 로 실행한 것 아니냐? .xcodeproj 로 실행해보아라." 라는 답변을 발견했고,

    난 정확하게 반대로 .xcworkspace 로 실행하여 빌드에 성공할 수 있었다. 


    도대체 두 파일의 차이점은 무엇인지 공부해보기로 했다.




    정의



    .xcodeproj : 프로젝트 파일로 코드와 리소스등이 포함 되있다.

    - .xcworkspace : 하나 이상의 프로젝트들이 포함 되어있다. 이 프로젝트들은 보통 서로 연관 되어있는 경우가 많다.




    위의 사진을 예로 들면, impurse라는 프로젝트 안에 하위 관계로 여러 모듈의 프로젝트 파일이 존재한다.

    만약 하위 관계가 아닌 동등한 관계로 연결된 프로젝트를 한 프로젝트로 묶기 위해서는 .xcworkspace 파일을 사용하면 된다.


    내가 겪은 문제는 Pods에 설치 되어 있는 modules을 찾지 못하는 문제였다.

    그렇다면 강제로 Pods.xcodeproj를 프로젝트 파일에 추가하는 방법이 있지만,

    아무리 추가하려고 해도 프로젝트 파일은 추가되지 않았고, 불가능 했다.


    그 이유는 위에 정의 된 것 처럼 .xcodeproj 파일에서는 하위 관계로 프로젝트를 추가할 수는 있어도,

    동등한 관계에서는 추가할 수 없었기 때문이다.





    (추측) 해당 문제 발생 지점



    [react-native link]


    `react-native link moudule_Name` 명령어를 입력하면 아래의 파일이 변경 된다.


    IOS : AppDelegate.m

    Android : MainApplication.java & settings.gradle, build.gradle


    각 플랫폼 마다 설정이 다를 경우 해당 모듈에서 link 명령어를 입력하라고 안내 해준다.


    react-native-fbsdk / react-native-google-signin 등 다양한 모듈을 사용하며 link를 걸어주었지만, 

    위 두 개의 모듈에서 문제가 생겼다.


    React 중복 설치 경고



    위의 문제는 프로젝트/node_modules/React 가 이미 있지만, 프로젝트/ios/Pods/React 를 재설치 하며, 중복되기 때문이다.


    dependency React



    해당 문제를 해결하는 방법은 Podfile을 수정하면 된다. (검색하면 잘 나옴)

    다만, 난 역시나 저주를 받아서 그런지는 모르겠지만 해당 문제로 해결이 되지 않아 수동 link를 걸었었다.


    1. PodFile 이름을 바꾼 후

    2. react-native link module_name


    수동 링크를 진행 하면 .xcodeproj에 각 모듈의 .xcodeproj가 하위 관계로 자동 연결 되었다.



    하지만, 현재 프로젝트 파일에서는 링크가 제대로 걸리지 않았기 때문에 모듈들이 하위 관계에도 등록되지 않았다.





    결론


     현재는 명확하게 A이기 때문에 B이다. 라고 말할 수 없지만 모듈 경로 문제는 link 문제와 연결 되는 것 같다. 정상적인 link면,

    프로젝트의 하위 관계로 설정 될 것이고 Link Binary With Libraries 에 Library를 추가 할 수 있거나 자동으로 추가가 되어

    있을 것이다.


     그렇게 프로젝트에 직접 연결이 되어있지 않다 보니, 프로젝트 파일에서는 빌드가 실패한 것이다.

    한 개 이상의 프로젝트를 담을 수 있는 .xcworkspace에서는 Pods 프로젝트 파일이 함께 존재 하게 되었고 그렇게 경로를 가지고 올

    수 있게 되어, 빌드가 성공할 수 있었던 것 같다.



    댓글

Developer RyuK