안정민 Supporter
iOS 개발에서 알아두면 좋은것들
강민규 Speaker
• IPA 분석과 다른 앱의 IPA 분석
• 개발 환경의 최적화
발표를 통해 기대하는 것
• iOS 개발 전체 과정
• 아카이브
• IPA 설명 및 타 IPA 분석
• 타겟을 줄이는 방법
• 환경 변수로 프로젝트 관리
목차
안정민 (minsone)
카카오뱅크 iOS 애플리케이션 개발자
iOS 개발 전체 과정
iOS 개발 전체 과정
- 신규 서비스, 상품 개발 요청
프로젝트 생성
iOS 개발 전체 과정
- 화면 작성
- 아키텍처 설계
- 네트워크 연동
- 라이브러리 추가
- 환경 설정
…
코드 작성
iOS 개발 전체 과정
- 작성한 코드 검증
- 로직 확인
빌드 & 실행
iOS 개발 전체 과정
- 아카이브로 애플리케이션 결과물 생성
- 앱스토어, 사내 등에 배포할 수 있는 결과물
아카이브
iOS 개발 전체 과정
- 아카이브로 애플리케이션 결과물 생성
- 앱스토어, 사내 등에 배포할 수 있는 결과물
아카이브
iOS 개발 전체 과정
- 아카이브로 애플리케이션 결과물 생성
- 앱스토어, 사내 등에 배포할 수 있는 결과물
- xcarchive 패키지
- BCSymbolMaps
- dSYMs
- IPA
- Info.plist
…
아카이브
iOS 개발 전체 과정
- ITunesConnect 제출
- 앱 심사
- 앱스토어 노출
- 유저의 앱 설치
- 이슈 트래킹
배포
iOS 개발 전체 과정
프로젝트
생성, 설정
코드 작성
빌드
실행
아카이브
앱 제출
심사
앱스토어
배포
앱 설치
실행
이슈
트래킹
iOS 개발 전체 과정
프로젝트
생성, 설정
코드 작성
빌드
실행
아카이브
앱 제출
심사
앱스토어
배포
앱 설치
실행
이슈
트래킹
아카이브
아카이브
xcarchive
- Xcode Archive
- 앱스토어에 제출하기 위해 서명된 빌드 결과물
아카이브
xcarchive
- IPA
- execute binary
- IDA, machoViewer 등으로 분석 가능
- Framework
- 라이브러리 종류, 사용방법 확인 가능
- CocoaPods 사용 여부
- Dynamic, Static Library 등
- 리소스
- storyboardc, nib, car, webp, lottie, js, html, mom 등
- Bundle
아카이브
xcarchive
- execute binary
- Framework
아카이브
xcarchive
- execute binary
- Framework
아카이브
xcarchive
- execute binary
- Framework
아카이브
xcarchive
- storyboardc
- nib
아카이브
xcarchive
- storyboardc
- nib
아카이브
xcarchive
- storyboardc
- nib
아카이브
xcarchive
- webp
- lottie
아카이브
xcarchive
- webp
- lottie
아카이브
xcarchive
- webp
- lottie
AppStore에 있는 App 내려받기
AppStore에 있는 App 내려받기
- iMazing
AppStore에 있는 App 내려받기
- Github - majd/ipatool
IPA 살펴보기
강민규 (KoreaMango)
iOS 시작한지 1년이 되어가는
👶 iOS 개발자입니다.
iOS 개발 전체 과정
프로젝트
생성, 설정
코드 작성
빌드
실행
아카이브
앱 제출
심사
앱스토어
배포
앱 설치
실행
이슈
트래킹
타겟을 줄이는 방법
타겟이 늘어나는 이유
Target
타겟이 늘어나는 이유
다양한 개발 환경 - 구분하지 않는다면?
App - 환경이 바뀔 때 마다
개발자가 직접 서버 URL을 수정해줘야 한다.
- Dev인지 Prod인지 헷갈리고 실수를 할 수 있다.
타겟이 늘어나는 이유
다양한 개발 환경 - 구분한다면?
Dev
QA
PROD
- 개발 환경에 맞게 타겟을 선택만 해주면
서버 URL을 분기처리 해줄 수 있다.
- 휴면 에러를 줄여준다.
타겟이 늘어나는 이유
발생하는 문제점
- 동일한 코드가 프로젝트 파일에 중복되어 저장
- 프로젝트 인덱싱 속도 저하
- 새로운 파일을 추가할 때 타겟을 수동으로
체크하다 보니 실수할 여지가 생긴다
<중복되어 저장되는 xcodeproj 파일 내부>
타겟을 줄여보자!
Target
타겟을 줄이는 방법
기존의 개발 환경 방식
- 타겟에 Dev, QA, PROD로 분리되어 있음
타겟을 줄이는 방법
기존의 개발 환경 방식
- 타겟에 Dev, QA, PROD로 분리되어 있음
타겟을 줄이는 방법
Configuration 추가하기
- 프로젝트 Info의 Configuration
- 원하는 환경을 추가
타겟을 줄이는 방법
Configuration 추가하기
- 프로젝트 Info의 Configuration
- 원하는 환경을 추가
타겟을 줄이는 방법
Schemes 추가하기
- 상단 Schemes 클릭
- Manage Schemes
타겟을 줄이는 방법
Schemes 추가하기
- 상단 Schemes 클릭
- Manage Schemes
- Dev, QA, PROD Scheme 추가
타겟을 줄이는 방법
Schemes과 Configuration 연결
- 원하는 스킴을 체크한 다음
- Edit Schemes 클릭
타겟을 줄이는 방법
Schemes과 Configuration 연결
- 각각의 개발환경에서
Run, Test, Profile, Analyze, Archive 설정
- 알맞은 Configuration이랑 연결
타겟을 줄이는 방법
XCConfig란?
XCConfig
Build Setting
Text 파일
=
타겟을 줄이는 방법
XCConfig 생성
48
타겟을 줄이는 방법
XCConfig 생성
- 우측 상단에 “Configuration” 검색
- Other에 Configuration Settings File 추가
타겟을 줄이는 방법
XCConfig 생성
- shared.xcconfig에는
config에 맞는 플래그를 추가
타겟을 줄이는 방법
XCConfig 생성
- 각각의 xcconfig 파일은
shared의 설정을 포함한다.
타겟을 줄이는 방법
Configuration 과 XCConfig 연결
- Project 파일의 Info에서
- Configuration에 이름에 맞는 XCConfig 연결
타겟을 줄이는 방법
Configuration 과 XCConfig 연결
- XCConfig가 적용된 모습
타겟을 줄이는 방법
Configuration 과 XCConfig 연결
- XCConfig에서 작성한 플래그가
Build Setting에 연결된 것을 확인할 수 있음
타겟을 줄이는 방법
Configuration 과 XCConfig 연결
- XCConfig에서 작성한 플래그가
Build Setting에 연결된 것을 확인할 수 있음
타겟을 줄이는 방법
DEV
- DEV Scheme 에서 실행
- 전처리문으로 분기 처리한 코드
타겟을 줄이는 방법
QA
- QA Scheme 에서 실행
- 전처리문으로 분기 처리한 코드
타겟을 줄이는 방법
PROD
- PROD Scheme 에서 실행
- 전처리문으로 분기 처리한 코드
환경 변수로 프로젝트 관리
With Tuist
환경 변수로 프로젝트 관리
Dev 타겟에만 필요한 프레임워크
- App Target은
개발용 프레임워크인 FLEX 제거
- Dev Target은
개발용 프레임워크인 FLEX 포함
환경 변수로 프로젝트 관리
필요한 타겟만 프로젝트에!
- 개발할 때에는 Dev App 타겟만 있으면 됨
- 배포 할때는 App 타겟만 있으면 됨
- 한 프로젝트에 두 개의
타겟이 있을 필요가 없음!
Dev App
App
환경 변수로 프로젝트 관리
필요한 타겟만 프로젝트에!
Dev App
App
제어!
- 개발할 때에는 Dev App 타겟만 있으면 됨
- 배포 할때는 App 타겟만 있으면 됨
- 한 프로젝트에 두 개의
타겟이 있을 필요가 없음!
1
프로젝트 관리 툴
XcodeGen Tuist
1
프로젝트 관리 툴
XcodeGen
Tuist
환경 변수로 프로젝트 관리
with ProcessInfo Environment
- Project.swift에 Key값을 가진 환경 변수 생성
- 환경 변수의 Value가 “App”인지 확인하는
Bool 타입 변수 생성
환경 변수로 프로젝트 관리
with ProcessInfo Environment
- Project를 생성할 때
삼항 연산자로 Target 배열에
들어가는 값을 제어한다.
- App일 때는 DevSource, FLEX 제거
- DevApp일 때는 DevSource, FLEX 포함
환경 변수로 프로젝트 관리
with ProcessInfo Environment
환경 변수로 프로젝트 관리
with ProcessInfo Environment
정리
- XCConfig와 Configuration으로 개발 환경을 만들어 타겟을 줄인다.
- Tuist로 환경 변수를 사용해 모듈, 타겟을 제어할 수 있다.

20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf