iOS

[Swift] - fastlane + GitHub Actions CI 구축(3)

강철곰탱이 2025. 1. 20. 01:49

 

이전 포스팅에서 해결 못한 상태로 끝났던 문제를 드디어 해결했다!!

 

 

[Swift] - fastlane + GitHub Actions CI 구축(2)

fastlane 설치와 작동법에 이어서 GitHub Actions에 대해 알아보자.  [Swift] - fastlane + GitHub Actions CI 구축(1)📖 목차1. CI가 무엇인가2. 왜 fastlane + GitHub Actions를 사용하는가3. fastlane 설치 및 실행 1. CI가

steelbeartaeng2.tistory.com

 


1. 여러 문제 마지막으로 해결

 

 

문제 1️⃣ - pod 파일 오류

 

 

위와 같이 pod 파일을 못 찾는 오류가 있었다.

 

로컬 환경에서는 필요한 파일들이 이미 빌드된 상태이기 때문에 Fastlane으로 테스트 코드를 실행하더라도 문제가 발생하지 않았다. 근데 GitHub Actions은 빌드가 된 상태가 아니기 때문에 테스트를 실행하려다 보니 관련 오류가 발생한 것 같다.

 

이를 해결하기 위해 pod install을 실행하여, GitHub 환경에서도 CocoaPods 관련 파일들을 제대로 찾을 수 있도록 설정했다.
그래서 Workflow의 yml 파일에 pod install 명령어를 추가하여 문제를 해결했다.

 

    - name: Install Pod
      run: pod install --repo-update --clean-install

 

이렇게 하고 깃헙 액션에서 test 실행하는 걸 확인해 보면 pod 관련된 오류가 더 이상 발생하지 않는 걸 확인할 수 있다.

 

 

문제 2️⃣ - xcconfig 파일 참조 오류

 

 

위와 같이 xcconfig 파일을 못 찾는 오류가 발생했다.

 

 

 

그 이유는 프로젝트의 Configurations에 Test뿐만 아니라 Debug와 Release도 포함되어 있어, 이들 역시 CocoaPods 설치를 통해 빌드가 필요했기 때문이다.

 

그래서 이전 포스팅에서는 Test.xcconfig만 추가했지만, 이번에는 Debug.xcconfig와 Release.xcconfig도 추가해야 했다. 또한, Secrets.xcconfig는 Debug.xcconfig와 Release.xcconfig에서 include로 참조하고 있기 때문에 필요했다.

이에 따라, GitHub Secrets에 Debug, Release, 그리고 Secrets와 관련된 데이터도 추가했다.

 

Workflow의 yml 파일에 xcconfig 파일의 위치를 추가하여 설정을 완료했다.

- name: Create xcconfig files
      run: |
        echo "${{ secrets.TEST_CONFIG }}" > ./pennyway-client-iOS/Xcconfig/Test.xcconfig
        echo "${{ secrets.RELEASE_CONFIG }}" > ./pennyway-client-iOS/Xcconfig/Release.xcconfig
        echo "${{ secrets.DEBUG_CONFIG }}" > ./pennyway-client-iOS/Xcconfig/Debug.xcconfig
        echo "${{ secrets.SECRETS_CONFIG }}" > ./pennyway-client-iOS/Xcconfig/Secrets.xcconfig

 

| 를 사용하면 run에 여러 명령어를 넣을 수 있다고 한다.

 

 


2. 테스트 실행시간 줄이기 위한 노력

 

 

이렇게 마지막으로 모든 문제를 해결하고 깃헙 액션을 다시 실행해 보니 드디어 성공했다!!

근데 이렇게 성공한 건 좋은데 테스트 실행시간이 11분이나 된다,,, ㅜ

 

pod 설치로 인해서 모든 파일들을 빌드하는 과정이 추가되면서 테스트 실행시간이 늘어났다.....

그래서 어떻게든 테스트 실행하는 시간을 줄이기 위해 찾아보던 중 fastlane에서 제공해 주는 옵션들을 사용해 봤다.

 

여기서 다양한 옵션들을 확인할 수 있다.

 

scan - fastlane docs

Returns Outputs hash of results with the following keys: :number_of_tests, :number_of_failures, :number_of_retries, :number_of_tests_excluding_retries, :number_of_failures_excluding_retries

docs.fastlane.tools

 

 

첫 번째 시도

 

skip_build 옵션을 사용했다.

skip_build 옵션이 테스트하기 전에 빌드를 스킵한다고 설명되어 있어서 빌드하는 시간을 단축할 수 있지 않을까..? 생각했다.

 

 

 

그래서 Fastfile에 skip_build를 true로 넣어줬다.

 

 desc "Description of what the lane does"

  lane :tests do
    run_tests(
	scheme: "Pennyway-iOSTests",
	skip_build: true
	)
  end

 

하지만 테스트 실행시간에 큰 변화는 없었다,,,

 

찾아보니 skip_build는 빌드가 이미 완료되어 있을 때에만 효과적이고,

만약 이전에 빌드가 수행되지 않았으면 scan은 새롭게 빌드를 수행한다고 한다.

 

깃헙 액션에서는 빌드가 수행되지 않은 상태이기 때문에 skip_build를 사용해도 새롭게 빌드를 하는 것 같다.

 

 

두 번째 시도

 

output_style 옵션을 사용했다.

output_style 옵션은 출력 형식을 제어하는 데 사용되고, 테스트 결과가 터미널에 표시되는 방식에 영향을 준다고 한다.

 

 

 desc "Description of what the lane does"

  lane :tests do
    run_tests(
	scheme: "Pennyway-iOSTests",
	output_style: "raw"
	)
  end

 

test_output을 raw로 설정하면, 테스트 결과를 원시 형태(raw format)로 출력한다.

 

테스트 결과가 나올 때 예쁘게 보이려고 색깔도 알록달록하게 나오는데 이런 부분을 없애려고 하는 것이다. 

아래 보라색 글씨가 output_style = raw를 사용한 결과이고, 그 밑에 알록달록한 글씨가 output_style을 사용하지 않은 결과이다. 

확실히 output_style을 사용하지 않은 버전이 출력값이 예쁘게 나오는 것 같다.

 

 

 

이런 출력값을 예쁘게 만드는 부분을 없애면 조금이나마 빨라지지 않을까 하는 기대를 했지만,, 오히려 더 늘어난 것 같다 ㅎ

출력값이 칠천 줄을 넘어갈 정도로 많이 생겨서 테스트가 20분 넘게 걸렸다. 도중에 멈춰서 20분이었는데 계속 테스트했으면 몇 분이 나왔을지 감이 안 잡힌다....

 

 

 

 

세 번째 시도

 

마지막으로 suppress_xcode_output 옵션을 사용했다.

이 옵션은 Xcode의 빌드 및 테스트 출력 내용을 터미널에 표시하지 않도록 제어한다.

 

테스트 실행하면 계속 테스트 과정을 보여주는 로그를 출력하게 되는데 이 과정조차도 생략해서 테스트 시간을 줄여보고자 했다.

 

 desc "Description of what the lane does"

  lane :tests do
    run_tests(
	scheme: "Pennyway-iOSTests",
	suppress_xcode_output: true
	)
  end

 

 

이렇게 수정한 뒤 깃헙 액션 테스트를 실행해 보니 드디어 좀 줄어들었다.

8분 정도로 줄였다. ㅎㅎ

 

 

8분도 아직 테스트 실행시간 치고 오래 걸린다고 생각하는데 이 정도로 줄였으니 너무 좋다~

 


 

fastlane을 적용하는데 너무 오래 걸렸는데,,, 많은 에러들을 만나면서 여러 방법을 찾아보고 해결하는 과정에서 많이 배울 수 있었다. 여러 시행착오들을 지나오면서 포기할까 생각도 했는데 이렇게 성공하게 되어서 너무 좋다 ㅎㅎㅎ

 

아직 테스트 시간이 오래 걸린다는 단점을 많이 해결하지는 못했지만, 줄이려고 찾아보면서 fastlane의 새로운 옵션들도 배우고 조금이나마 시간을 줄일 수 있어서 다행이다. 문제 해결하는 과정에서 정말 많이 배우는 것 같다.