SlideShare a Scribd company logo
안정민 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 개발 전체 과정
프로젝
트
생성, 설
정
코드 작
성
빌드
실행
아카이
브
앱 제출
심사
앱스토
어
배포
앱 설치
실행
이슈
트래킹
타겟을 줄이는 방법
타겟이 늘어나는 이유
타겟이 늘어나는 이유
다양한 개발 환경 - 구분하지 않는다면?
App - 환경이 바뀔 때 마다
개발자가 직접 서버 URL을 수정해줘야 한다.
- Dev인지 Prod인지 헷갈리고 실수를 할 수 있다.
타겟이 늘어나는 이유
다양한 개발 환경 - 구분한다면?
Dev
QA
PRO
D
- 개발 환경에 맞게 타겟을 선택만 해주면
서버 URL을 분기처리 해줄 수 있다.
- 휴면 에러를 줄여준다.
타겟이 늘어나는 이유
발생하는 문제점
- 동일한 코드가 프로젝트 파일에 중복되어 저장
- 프로젝트 인덱싱 속도 저하
- 새로운 파일을 추가할 때 타겟을 수동으로
체크하다 보니 실수할 여지가 생긴다
<중복되어 저장되는 xcodeproj 파일 내부>
타겟을 줄여보자!
타겟을 줄이는 방법
기존의 개발 환경 방식
- 타겟에 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 생성
50
타겟을 줄이는 방법
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로 환경 변수를 사용해 모듈, 타겟을 제어할 수 있다.

More Related Content

PDF
letswift22_권은빈_비전공자 개발자로 살아남기.pdf
PDF
Certificate 와 Provisioning Profile
PDF
SwiftUI와 TCA로 GitHub Search앱 만들기
PDF
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
PPTX
PDF
Spring Boot
PPTX
Introduction to react js
PDF
Spring Boot & Actuators
letswift22_권은빈_비전공자 개발자로 살아남기.pdf
Certificate 와 Provisioning Profile
SwiftUI와 TCA로 GitHub Search앱 만들기
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Spring Boot
Introduction to react js
Spring Boot & Actuators

What's hot (20)

PDF
letswift22_우당탕탕 확장 프로그램(이다혜 light).pdf
PDF
TypeScript - An Introduction
PPTX
Spring boot Introduction
PDF
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
PDF
그래서 테스트 코드는 어떻게 작성하나요?.pdf
PDF
Introduction to Spring Boot!
PDF
NextJS, A JavaScript Framework for building next generation SPA
PDF
ReactorKit으로 단방향 반응형 앱 만들기
PPTX
React web development
PDF
RxSwift to Combine
PDF
Why Vue.js?
PDF
Let'Swift 2022 PencilKit과 Point in Polygon 알고리즘을 활용한 올가미 툴 개발기
PDF
Connecting Connect with Spring Boot
PDF
Node JS reverse shell
PPT
Spring ppt
ODP
Xke spring boot
PPTX
Spring Boot
PPTX
Technologies sur angular.pptx
PDF
만화경 앱 개발기(iOS)
PDF
Java EE 再入門
letswift22_우당탕탕 확장 프로그램(이다혜 light).pdf
TypeScript - An Introduction
Spring boot Introduction
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
그래서 테스트 코드는 어떻게 작성하나요?.pdf
Introduction to Spring Boot!
NextJS, A JavaScript Framework for building next generation SPA
ReactorKit으로 단방향 반응형 앱 만들기
React web development
RxSwift to Combine
Why Vue.js?
Let'Swift 2022 PencilKit과 Point in Polygon 알고리즘을 활용한 올가미 툴 개발기
Connecting Connect with Spring Boot
Node JS reverse shell
Spring ppt
Xke spring boot
Spring Boot
Technologies sur angular.pptx
만화경 앱 개발기(iOS)
Java EE 再入門
Ad

Similar to LetsSwift(강민규스피커,안정민서포터).pptx (20)

PDF
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
PDF
DevOps - CI/CD 알아보기
PDF
생산성을 높여주는 iOS 개발 방법들.pdf
PDF
[NDC17] 왓 스튜디오 서비스파트
PPTX
How to implement your dream 20150427
PPTX
Jurano강의 lec1. AndroidAnnotations 시작하기
PDF
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
PDF
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
PDF
델파이 소스코드의재발견
PPTX
my activities before getting a job
PPTX
2022.08 멘토링 자료.pptx
PPTX
WordCamp 2012 Seoul - Plugin
PPTX
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
PDF
gradle로 안드로이드 앱 빌드하기
PDF
삶이편해지는_백엔드_개발자_지식.pdf
PDF
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
PDF
01.개발환경 교육교재
PDF
React native development
PDF
Enterprise mobile standard, morpheus 모피어스 모바일 표준 플랫폼
PPTX
[170403 2주차]C언어 A반
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
DevOps - CI/CD 알아보기
생산성을 높여주는 iOS 개발 방법들.pdf
[NDC17] 왓 스튜디오 서비스파트
How to implement your dream 20150427
Jurano강의 lec1. AndroidAnnotations 시작하기
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
델파이 소스코드의재발견
my activities before getting a job
2022.08 멘토링 자료.pptx
WordCamp 2012 Seoul - Plugin
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
gradle로 안드로이드 앱 빌드하기
삶이편해지는_백엔드_개발자_지식.pdf
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
01.개발환경 교육교재
React native development
Enterprise mobile standard, morpheus 모피어스 모바일 표준 플랫폼
[170403 2주차]C언어 A반
Ad

LetsSwift(강민규스피커,안정민서포터).pptx

Editor's Notes

  • #5: 안녕하세요 / iOS 개발한지 1년이 되어가는 iOS 개발자 강 민규 입니다. / 정민님의 발표를 이어서 진행해보도록 하겠습니다 /
  • #34: 안녕하세요 / iOS 개발한지 1년이 되어가는 iOS 개발자 강 민규 입니다. / 정민님의 발표를 이어서 진행해보도록 하겠습니다 /
  • #36: 제가 발표할 내용은 / 타겟을 줄이는 방법 /
  • #37: 타겟을 줄이는 방법을 알기전 / 우선 / 타겟이 늘어나는 이유가 무엇이 있을까 /
  • #38: 타겟이 늘어나는 이유를 알아보니/ 다양한 개발 환경을 구분하기 위해서였다./ 개발 환경을 구분하지 않는다면 어떻게 될까요 / 환경이 바뀔 때마다 매번 서버 URL을 바꿔줘야 한다. 현재 환경이 Dev인지 Prod인지 헷갈리고 실수를 할 수 있음 /
  • #39: 따라서 타겟을 추가해 개발 환경을 구축하면 / 개발 환경에 맞게 URL을 분기처리할 수 있고 / 실수를 줄여준다.
  • #40: 타겟이 늘어나서 발생하는 문제는 무엇일까요 / / 대부분의 개발 환경은 동일한 코드를 가짐 / 동일한 코드가 프로젝트 파일에 중복되어 작성 / / 프로젝트 파일도 커지게 된다. / 만개면 어떢함? / 따라서 인덱싱 속도가 느려지게 된다. / 새로운 파일을 추가할 때 타겟을 수동으로 체크하다 보니 실수할 여지가 생긴다 / 따라서 타겟을 줄여야 최적화된 프로젝트 환경을 만들 수 있다.
  • #41: 그럼 이제 타겟을 줄여서 개발 환경을 분리해봅시다.
  • #42: 기존에는 이렇게 개발 환경이 이렇게 타겟으로 분리되어있다./ 이걸 이제 줄여보도록 합시다.
  • #43: 기존에는 이렇게 개발 환경이 이렇게 타겟으로 분리되어있다./ 이걸 이제 줄여보도록 합시다.
  • #44: 타겟을 줄이기 위해 Configuration을 사용해보겠습니다. / Project 파일의 Info에 들어가서 Configuration 영역/ Dev, QA, Prod, Configuration 추가
  • #45: 타겟을 줄이기 위해 Configuration을 사용해보겠습니다. / Project 파일의 Info에 들어가서 Configuration 영역/ Dev, QA, Prod, Configuration 추가
  • #46: Configuration과 연결해줄 Scheme을 추가해줄것입니다. / 상단에 Scheme을 클릭하고 / Manage Schemes에 들어갑니다. /
  • #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 에 해당하는 코드가 실행된다.
  • #60: QA 스킴에서 실행하면 전처리문 QA에 해당하는 코드가 실행된다.
  • #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를 이용해 환경변수로 모듈 또는 타겟을 제어할 수 있다.