EEYatHo 앱 깎는 이야기

Git ) GithubAction3 레거시 프로젝트에 도입성공 - EEYatHo iOS 본문

Git

Git ) GithubAction3 레거시 프로젝트에 도입성공 - EEYatHo iOS

EEYatHo 2022. 2. 10. 21:58
반응형

레거시 프로젝트가 싫은 이유 하나 추가..

CI/CD 할 때 더럽게 힘들다.. 물론 내가 실력이 모자라서 그런거겠지만 zz..

 

개인 프로젝트에 도입할 땐 하루이틀이면 됐는데,

레거시에는 여러 알수없는 설정들과 많은 서드파티들 때문에, 구글링으로 나온 일반적인 해결책이 통하지 않는 에러가 많아서 고생했다.

 

CompileSwiftSources normal arm64

error: failed to emit precompiled header

error: generate-pch command failed with exit code 1

file not found with <angled> include; use "quotes" instead

*.h file not found

등등... 만약 나와 같은 문제를 겪는 사람이 있다면, 아래를 차례대로 따라하면 해결할 수 있다고 믿는다.

 


1. Xcode에서 빌드시 chrono, Foundation 등 Xcode기본 라이브러리에서 file not found 에러 발생.

-> Search Paths 세팅이 완전 맛이 갔음을 의미한다.

-> 에러와 싸우던 도중에,

     Framework 및 Header Search Paths에

     ${PODS_ROOT}, ${PODS_CONFIGURATION_BUILD_DIR} 등 다양한 경로를 recursive로 설정했었고,

     경로를 찾는데에 너무 많은 시간이 소요되어 에러가 발생한 것이었다.

-> recursive를 사용하면 안된다. (특정 Root 경로를 non-recursive로 지정하여야 한다.)

     만약 한단계 더 안에 헤더파일이 있다면, <SomeFolder/MyHeader.h> 라는 식으로 import 문에서 추가로 찾아들어가게 한다.

-> search path에 있는 모든 recursive를 non-recursive로 바꾼다.  

 

 

2. 그런데 사실, 완성도 있는 라이브러리를 사용할 때, 개발자가 임의로 헤더를 찾아다닐 일은 없다.

-> 레거시 프로젝트에는 20개가 넘는 Search Paths 설정이 있었다. 진절머리나서 하나씩 정리해나갔고,

     긴 싸움 끝에 3, 4 번에 적혀있는 간단한 Search Paths만 있으면 된다는 결론이 나왔다.

 

 

3. Xcode에서 빌드시, Pod이 아닌, 수동삽입한 Objective-C 프레임워크를 못찾는 에러 발생. ( Bridging_Header #import "

KakaoOpenSDK/KakaoOpenSDK.h" file not found 에러 )

-> 나같은 경우 .framework 파일들을 프로젝트 경로에 있었다. 본인 프로젝트의 .framework 파일들 경로 찾아서 넣어주면 된다. 

-> 해당 Project -> Build Setting -> Framwork Search Paths -> $(SRCROOT) non-recursive

 

 

4. Xcode에서 빌드시, Pod으로 추가한 서드파티를 못찾는 에러 발생. ( 'MZAppearance/MZAppearance.h' file not found )

-> pod을 사용시, 서드파티를 어떻게 찾아야하는지 담긴 Pod-Config 라는 설정파일이 나오는데, Target에서 이를 상속받아야 한다.

-> 해당 Target -> Build Setting -> Framwork Search Paths -> $(inherited) non-recursive

     해당 Target -> Build Setting -> Header Search Paths -> $(inherited) non-recursive

    ( 3번과 다르게 Target다. Project 아니다. )

* 설정하지 않으면 pod install시 아래와 같은 warning이 발생한다.

 

 

 

5. Xcode 빌드는 되는데, command Line build 에서만 #import "AFNetworking.h" file not found 에러 발생.

-> 커맨드 라인으로는 Release 빌드를 하는데, Xcode에는 Debug 설정 등 둘이 다른 경우 발생.

-> 해당 Project -> Info 에서 설정을 같게 맞춰준다.


* 추가로, 나에게는 효과가 없었지만 StackOverFlow 등 여러 사이트에서 찾은 팁을 나열한다.

 

1. pod에서 무언가 바꾸었다면 한번 청소해라.

pod deintegrate

pod cache clean --all

pod install

Xcode -> Product -> build clean

DerivedData 삭제

 

2. Pod File과 Target과 Project의 iOS 버전을 통일시킨다.

 

3. Pod File에서 테스트 타겟에 inherit! :search_paths 추가.

테스트 할 부모 타겟으로부터 search_paths 상속받기 위함. 공식 설명 링크

 

4. Pod File 최상단에 use_frameworks! 추가.

Pod으로 설치하는 라이브러리들이 정적이 아닌 동적 라이브러리라는 의미인데, 스위프트는 애초에 정적 라이브러리를 지원하지 않아서, use_framework를 쓰지않으면 The following Swift pods cannot yet be integrated as static libraries 에러가 발생한다.

 


* APNS ( Apple Push Notification Service )타겟에 대한 자잘한 팁이다.

이놈의 레거시 프로젝트는 안가진게 없다ㅏㅏㅏㅏ.

Objective-C 프레임워크, 수많은 자잘한 Pod 서드파티들, APNS 타겟, Test 타겟, UITest 타겟...... 후... 여튼,

 

1. Search Paths에는 아무것도 필요없다.

 

2. 메인앱과 별개로, 인증서와 프로파일이 필요하다.

-> 새로 발급받았다. 덕분에 githubAction 빌드서버에 올리는 인증서와 프로파일이 2배로 늘었다 ^_^

 

 

Comments