65. 환경 변수로 프로젝트 관리
with ProcessInfo Environment
- Project.swift에 Key값을 가진 환경 변수 생성
- 환경 변수의 Value가 “App”인지 확인하는
Bool 타입 변수 생성
66. 환경 변수로 프로젝트 관리
with ProcessInfo Environment
- Project를 생성할 때
삼항 연산자로 Target 배열에
들어가는 값을 제어한다.
- App일 때는 DevSource, FLEX 제거
- DevApp일 때는 DevSource, FLEX 포함
#38:타겟이 늘어나는 이유를 알아보니/
다양한 개발 환경을 구분하기 위해서였다./
개발 환경을 구분하지 않는다면 어떻게 될까요 /
환경이 바뀔 때마다 매번 서버 URL을 바꿔줘야 한다.
현재 환경이 Dev인지 Prod인지 헷갈리고 실수를 할 수 있음 /
#39:따라서 타겟을 추가해 개발 환경을 구축하면 /
개발 환경에 맞게 URL을 분기처리할 수 있고 /
실수를 줄여준다.
#40:타겟이 늘어나서 발생하는 문제는 무엇일까요 /
/ 대부분의 개발 환경은 동일한 코드를 가짐 /
동일한 코드가 프로젝트 파일에 중복되어 작성 /
/ 프로젝트 파일도 커지게 된다. / 만개면 어떢함? / 따라서 인덱싱 속도가 느려지게 된다. / 새로운 파일을 추가할 때 타겟을 수동으로 체크하다 보니 실수할 여지가 생긴다 /
따라서 타겟을 줄여야 최적화된 프로젝트 환경을 만들 수 있다.
#47:Configuration에 맞는 이름으로 아래 하단의 버튼을 통해서 스킴을 추가한다.
#48:스킴을 생성했으니 이제 Configuration과 연결해줘야겠죠?/
이번에는 Edit Schemes를 통해서 Scheme과 Configuration을 연결해줍니다. /
Edit Schemes을 누르면 /
#49:이런 창이 뜹니다. /
여기 Run, Test, Profile, Analyze, Archive 에서 configuration과 연결해주면 됩니다. / 그리고 다른 QA, Prod 스킴도 똑같이 해줍니다.
#50:다음으로 / 환경에 맞는 빌드 세팅을 하기 위해 XCConfig를 사용할 것이다./
XCConfig 는 타겟 또는 프로젝트에 대한 Build Setting을 작성하는 text 파일이다./
#51:프로젝트에 Build Setting Text 파일인 XCConfig 를 넣을 Config 디렉토리를 만들어주고요/
파일을 추가을 해서 오른쪽과 같이 각 개발환경에 대한 Build Setting 파일을 만들어 주겠습니다. /
그리고 공통으로 사용될 빌드 세팅은 shared에 넣기 위해 shared 파일도 만들어주겠습니다.
#52:파일 추가를 누르면 우측 상단에 Configuration을 검색을 하면 됩니다.
그리고 여기 Other에 Configuration 을 클릭해 추가해줍니다.
#53:shared 파일에 공통된 빌드세팅으로
/ 각 환경에 맞게 OTHER_SWIFT_FLAGS 값을 추가하여 분기할 수 있도록 한다.
#54:각 환경의 xcconfig에는 다음과 같이 작성을 합니다./
include를 통해서 shared xcconfig 파일의 설정을 포함한다.
#55:Project 세팅에 들어가서 Configurations에 Xcconfig 파일을 연결해준다.
#56:다음으로 Project 파일을 클릭해 Configurations에 Xcconfig 파일을 연결해줍니다.
#57:Xcconfig 파일에서 설정해둔 정보가 Build Setting에 들어간 것을 확인할 수 있다. /
#58:Xcconfig 파일에서 설정해둔 정보가 Build Setting에 들어간 것을 확인할 수 있다. /
이제 전처리문을 사용할 수 있게 되었다.
#59:Dev 스킴에서 실행하면 전처리문 DEV Configuration 에 해당하는 코드가 실행된다.
#61:PROD 스킴에서 실행하면 전처리문 PROD에 해당하는 코드가 실행된다./
서버 URL 같이 개발 환경에 따라 달라지는 코드를 전처리문을 통해서 분기처리를 할 수 있습니다./따라서 개발 환경을 타겟으로 만들지 않아도 configuration 충분히 해결할 수 있게되어 / 결국은 타겟을 줄일 수 있게 되었고 프로젝트 환경을 최적화 시킬 수 있게 됩니다.
#63:개발을 하다보면 특정 환경에서만 필요한 프레임워크가 있다. /flex 는 개발용 프레임워크/ dev 환경에서만 사용되어야 함 / 그런데 프레임 워크를 어떻게 분기처리하냐?/ 빌드 세팅만 제어할 수 있는 XCConfig로는 이것을 제어할 수 없다. /
/ 따라서 개발용 타겟과 배포용 타겟을 분리해서 관리를 해야한다./
이렇게 되면 타겟이 늘어나게 되니 문제의 상황으로 돌아가게 되는 것이다. /
#64:그러면 타겟을 어떻게 다시 줄이는 방법을 알아보자. /개발할 때에는 Dev App 타겟만 있으면 됨
/ 배포 할때는 App 타겟만 있으면 됨 / 사실상 /
개발을 할 때는 배포용 타겟이 있을 필요가 없다. / 그래서 사용할 때는 상황에 맞는 하나의 타겟만 프로젝트에 넣으면 된다. / 그러면 두개의 타겟에서 하나의 타겟으로 줄어들게 된다.
#65:그런데 개발 환경에서 프레임워크, 타겟을 동적으로 제어하고 싶다면 어떻게 해야할까 /
#66:바로 프로젝트를 동적으로 제어하는 툴을 사용하면 된다. /
프로젝트를 동적으로 제어하는 툴인 XCodeGen과 Tuist가 있는데 /
이 중 Swift 언어 기반인 Tuist를 사용해 프로젝트를 동적으로 제어해보겠습니다./
#67:바로 프로젝트를 동적으로 제어하는 툴을 사용하면 된다. /
프로젝트를 동적으로 제어하는 툴인 XCodeGen과 Tuist가 있는데 /
이 중 Swift 언어 기반인 Tuist를 사용해 프로젝트를 동적으로 제어해보겠습니다./
#68:Tuist를 사용하면 Project 파일에서 프로젝트를 동적으로 제어할 수 있는데 /
이 파일에서 /
TuistDeploy 변수를 만들어서 KEY 값을 가진 환경 변수를 생성해준다. /
그리고 환경 변수의 값이 App인지 확인하는 Bool 타입 변수 생성
#69:프로젝트 파일의 프로젝트를 생성하는 부분에서 Target 의 값을 매개변수로 넣는 곳에서 제어를 해줄 것이다./
아까 만들어줬던 isDeploy 변수와 삼항연산자를 사용해서 /
App일 때는 DevSource와 FLEX를 제거해주고, DevApp일 때는 DevSource와 FLEX를 포함시켜준다. /
이렇게 환경 변수를 이용해서 타겟, 프레임워크를 제어할 수 있다.
#70:터미널에서 환경 변수에 값 넣어줍니다. / 그럼 일반 App이 나오게 되고 / 개발용 프레임 워크인 FLEX가 포함되지 않는 것을 확인할 수 있습니다.
#71:터미널에서 환경 변수에 값을 안넣어주면 / DevApp이 생성되고 FLEX 프레임워크가 포함되어 생성됩니다.
#72:
배포환경을 XCConfig와 Configuration, Schemes으로 간단하게 생성해 타겟의 수를 줄인다.
프로젝트 동적 제어 툴인 Tuist를 이용해 환경변수로 모듈 또는 타겟을 제어할 수 있다.