목차
- 개발/배포용 나누게 된 배경
- 개발/배포 나누기
1. 개발/배포용 나누게 된 배경
혹시 모를 실수와 편의성을 위해 나누었습니다.
서버가 테스트/실서버 2개로 나뉘어져 있습니다. 그런데 앱은 딱히 구분이 안되어 있기 때문에 테스트할 때마다, 심사 올릴 때마다 매번 base url을 바꿔주는 식으로 되어 있었습니다. (실서버 -> 테스트 서버) or (테스트 서버 -> 실서버)
그래서 실수로 테스트 서버를 앱스토어에 올릴지 혹시 모르는 일이니 가능성을 막고 좀 더 편하게 할 순 없을까? 고민했고 방법을 알아봤습니다.
2. 개발/배포용 나누기
개발/배포용으로 나누는 핵심은 테스트용 앱을 쓰고 있는지 실서버에 연결된 배포용 앱을 사용하고 있는 지 확실하게 해주는 것이라고 생각합니다.
그리고 이것을 달성하기 위한 방법은 블로그글도 찾아보고 주변에도 물어봤는데 '개발/배포용으로 나누는 방법은 팀에 따라 다르구나'를 깨달았습니다.
테스트용 앱인지 배포용 앱인지 확실하게 알려주려면 어떻게 해야 하는지?
-> 테스트/실서버용으로 2개의 앱으로 나뉘어 있으면 확실하게 어떤 앱이 어떤 서버로 연결되어 있는지 확실하게 알 수 있습니다.
암튼 저렇게 앱 2개 만들려면
- Bundle Identifier 다르게 하기
- 앱 아이콘 다르게 하기
- 앱 이름 다르게 하기
- Base url 다르게 하기
를 해주면 됩니다. 그럼 끝. (구체적인 방법은 밑에 써놨어요)
그런데 말입니다. 나만 테스트해볼 거면 시뮬레이터에다가 바로 넣어도 되지만 다른 분들이 테스트해보시거나 다른 많은 테스트 기기에다가도 앱 2개를 넣어줘야 하잖아요. 그럼 어딘가에 배포를 해야 합니다. (어디에 배포하는지 팀마다 다름)
4가지 배포 방법
- 앱스토어 커넥트: TestFlight 에 배포
- Ad Hoc: 개발자 계정 홈페이지에 등록된 기기에 배포
- Enterprise: 사내 배포용
- Development: ipa 파일 추출
여기서 저는 1번(실서버용)과 2,4번(테스트용)을 사용하기로 정했어요.
이유는 어차피 실서버 연결된 앱은 배포하려면 앱스토어에 올려야 하니까 1번으로 선택했고,
테스트용 같은 경우 1번을 안 하고 2,4번을 한 이유는 테스트플라이트에 앱이 올라가기까지 길면 30분 정도 걸려서 그 시간을 절약하고자 2,4번을 선택했습니다.
자 이제 드디어 개념정리 머리말 끝났습니다. 그럼 이제 본격적으로 구체적인 내용으로 들어가 봅시다!!
개발/배포용 앱 2개 만들기
- Bundle Identifier 다르게 하기
- 앱 아이콘 다르게 하기
- 앱 이름 다르게 하기
- base url 다르게 하기
일단 위의 4가지를 수행해야 하는데 저는 Target과 Scheme 생성, 그리고 info.plist 및 코드 수정을 통해서 구현했어요.
일단 순서대로 차근차근 해볼게요.
1. Target 생성 (Target에 따라서 개발 / 실서버 각각 라이브러리를 다르게 줄 수 있음)
기존 타겟을 복제해 줍시다.
그럼 이렇게 되는데 엔터를 클릭해서 이름을 바꿔줍시다. 저는 Dev용으로 쓸 거니까 Dev-VideoConverter로 할게요.
이제 Dev-VideoConverter에서
- Bundle Identifier 다르게 하기
- 앱 아이콘 다르게 하기
- 앱 이름 다르게 하기
- base url 다르게 하기
를 해줄 거예요.
2,3 번 앱 아이콘, 앱 이름 바꾸기
혹시라도 앱 이름을 바꿨는데 안 바꿔지면
info.plist
다국어를 위한 파일
프로젝트 빌드셋팅
에 지정되어 있는지 확인해 보셔요! 저는 다국어 설정 해놓아서 안 먹는 거 같아요.
아무것도 없는 프로젝트 만들어서 해봤는데 잘 되네요.
1번 Bundle Identifier 바꾸기
4번 Base url 다르게 하기
Dev용 info.plist에 API_URL 을 추가해 줍니다.
아 근데 개발용 info.plist 이름이 Dev-VideoConverter 가 아니라 처음에 복제했을 때 그대로네요.
이것도 바꿔줄게요.
API_URL을 개발/배포용 앱에서 info.plist를 다 설정해 줬다면 코드단에서 info.plist의 API_URL을 가져다가 쓰면 됩니다.
let serverBaseURL: URL = {
if let info = Bundle.main.infoDictionary {
if let apiUrl = info["API_URL"] as? String {
return URL(string: apiUrl)!
}
}
return URL(string: nil)!
}()
휴우.. 1,2,3,4번 모두 다르게 바꿨습니다. 고생했다!!
Target에 대한 설정은 여기서 끝.
다음~~
2. Scheme 생성
Target을 복제한 후에 위 그림처럼 Scheme가 생겼을 거예요. 근데 아까 이름 바꿨는데 Target만 바뀌고 Scheme은 안 바뀌었네요.
이것도 바꿔줄게요.
이제 각각 선택해서 실행하면
시뮬레이터에 2개 앱 만들기 성공@@@
근데 쓰다 보니 글이 엄청 긴데 테스트용 배포는 다음글에 - - -
테스트용은 Firebase에다가 배포했어요. 그 이유는 여기 블로그글에 작성해놨어요~!
https://hongz-developer.tistory.com/218
'IOS Swift' 카테고리의 다른 글
iOS App 강제 업데이트 기능 (0) | 2023.01.10 |
---|---|
iOS 긴급 심사 요청 후기 (2) | 2023.01.05 |
iOS WebView(feat. Swift) (0) | 2022.08.19 |
Property Wrapper (0) | 2022.08.08 |
Swift Codable로 Json null 값 파싱하기 (0) | 2022.08.02 |