관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] SwiftGen, 리소스 관리, swiftgen.yml 본문

빌드 환경 설정

[iOS - swift] SwiftGen, 리소스 관리, swiftgen.yml

jake-kim 2021. 12. 8. 23:29

SwiftGen

  • R.swift와 같이 프로젝트 리소스를 Swift코드로 생성해주는것
    • R.swift는 모든 리소스에 대해서 코드화가 되지만, SwiftGen은 Assets파일 따로, String파일 따로 코드화가 가능
  • 문자열을 통해 Image등을 불러올 때 오타가 생길 위험을 피할 수 있는 장점 존재

SwiftGen 설치 전 준비

  • SwiftGen 설치 전 준비
  • 프로젝트 디렉토리에 Mintfile 생성
    SwiftGen/SwiftGen@6.5.1​
  • 프로젝트 디렉토리에 Mintfile 실행
    mint bootstrap --link​
    
    # arm cpu인 경우
    arch -arm64 mint bootstrap --link
    * Failed to resolve SwiftGen... 오류 발생 시 sudo xcode-select -s /Applications/Xcode.app/Contents/Developer 실행 후 재시도

warning 메시지 확인

  • 전역변수에 위에 명시된 "/Users/jake.k/.mint/bin" path 추가
PATH=$PATH:/Users/jake.k/.mint/bin

Xcode에 빌드 스크립트 작성

  • BuildPhases -> Targets -> + 버튼 클릭하여, "New run script phase" 눌러서 스크립트 생성
    • mint run swiftgen 입력

  • Compile Sources 위로 이동
    • compile 되기 전에 SwiftGen 적용하기 위함

Input, Ouput 정의

  • 초기화
$ swiftgen config init

swiftgen.yml 파일 생성

  • ouput파일이 저장될 Generated 폴더 생성

  • swiftgen.yml 파일 자동으로 오픈

  • 윗 부분의 input_dir, output_dir 부분 주석 해제 후 수정
    • input_dir: 탐색할 폴더 스코프 "{ProjectName}/" - 프로젝트 하위 모든 경로 탐색
    • output_dir: 저장할 폴더 위치  "{ProjectName}/Generated" - Generated 하위 그룹에 새로운 파일 생성

  • 파일에서 사용할 부분 주석 해제
    • ex) Assets 부분 주석 해제하여 활성화
    • Inputs 정보 맞도록 수정
      • 현재 Assets.xcassets 파일의 위치는 {프로젝트}/Assets.xcassets이지만, {프로젝트}부분은 input_dir에서 입력했으므로 디폴트로 이미 설정
      • 하위 폴더만 작성
  • 전체 swiftgen.yml
input_dir: ExAssets/
output_dir: ExAssets/Generated/

xcassets:
  inputs:
    - Assets.xcassets
  outputs:
    - templateName: swift5
      params:
        forceProvidesNamespaces: true
      output: XCAssets+Generated.swift
  • 실험 용도로 Assets 폴더에 임의의 파일 추가

  • 빌드
    • Generated 폴더에는 파일이 존재하지 않지만 경로로가면 존재

Generated 폴더에는 존재 x
경로로 가면 존재 o

  • Xcode에 추가
    • Add Files to "{Project name}" 클릭
    • 두 옵션 체크 후 Add
  • 코드로 접근 완료

코드 생성 시 enum 이름 변경

  • params의 enumName으로 추가
  • 빌드 후 확인 -> 변경 완료

* 전체 코드: https://github.com/JK0369/ExAssets

* 응용) SwiftGen을 이용하여 Localization 사용 방법 포스팅 글

 

* 참고

- https://www.raywenderlich.com/23709326-swiftgen-tutorial-for-ios

- https://github.com/SwiftGen/SwiftGen

Comments