SlideShare a Scribd company logo
InjectionIII의 Hot Reload를 이용하여

앱 개발을 좀 더 편하게 하기
with Tuist
안정민
목차
• 개발 프로세스

• Xcode Plugin History

• InjectionIII

• 모듈화

• Tuist

• Reference
개발 프로세스
디버깅
코드 작성
빌드
동작 확인 실행
개발 프로세스
개발 프로세스
코드 작성
빌드
실행
동작 확인
디버깅
로그인

메뉴 진입
개발 프로세스 - 희망회로
• 작성/수정한 코드가 빠르게 빌드되면 어떨까?

• 작업하는 화면 UI가 시뮬레이터에서 실행할 때 바로 띄워지면 어떨까?

• 작성하는 코드가 시뮬레이터에서 실시간으로 반영되면 어떨까?

• React Native, Flutter, 웹앱 등은 코드를 작성하면 바로 반영되는 Hot Reload가 된다던
데, iOS 개발에는 그런 기능이 없는 걸까?

• Preview가 있기는 하지만, 매끄럽게 동작하지 않고 에러 날 때도 있고 좋은데, 없으면
아쉬움.
개발 프로세스
• 작성하는 코드가 시뮬레이터에서 실시간으로 반영되면 어떨까?

• React Native, Flutter, 웹앱 등은 코드를 작성하면 바로 반영되는 Hot Reload가 된다던
데, iOS 개발에는 그런 기능이 없는 걸까?

• Preview가 있기는 하지만, 매끄럽게 동작하지 않고 에러 날 때도 있고 좋은데, 없으면
아쉬움.
• 작성하는 코드가 시뮬레이터에서 실시간으로 반영되면 어떨까?

• React Native, Flutter, 웹앱 등은 코드를 작성하면 바로 반영되는 Hot Reload가 된다던
데, iOS 개발에는 그런 기능이 없는 걸까?

• Preview가 있기는 하지만, 매끄럽게 동작하지 않고 에러 날 때도 있고 좋은데, 없으면
아쉬움.
개발 프로세스
InjectionIII
InjectionIII 시연
옛날 옛적..
Xcode Plugin History 옛날 옛적..
• 옛날 옛적에 Alcatraz 도구를 이용해 Xcode의 제약을 벗어난 플러그인을 사용하였습니
다.
Xcode Plugin History
• 2015년 9월쯤에 XcodeGhost라는 사건이 발생합니다.

• Xcode 8(2016.9)부터 Alcatraz를 이용한 플러그인 막힘

• 모든 플러그인 오픈소스 운영 종료

• InjectionForXcode도 운영 종료

• Swift 기반으로 InjectionIII를 다시 만들고, 작업을 이어감.

• 플러그인이 막히기 전에 유용하게 사용도 했고, 커밋 하나지만 기여했었음.
Xcode Plugin History
• 2015년 9월쯤에 XcodeGhost라는 사건이 발생합니다.

• Xcode 8(2016.9)부터 Alcatraz를 이용한 플러그인 사용이 막혀버렸습니다.

• 모든 플러그인 오픈소스 운영 종료

• InjectionForXcode도 운영 종료

• Swift 기반으로 InjectionIII를 다시 만들고, 작업 계속이어감.

• 플러그인이 막히기 전에 유용하게 사용도 했고, 커밋 하나지만 기여했었음.
InjectionIII
• 시간이 흘러, 애플이 Xcode Extension 기능을 열어줌

• Swift Package Manager 출시

• InjectionIII를 이용하여 이전의 InjectionForXcode와 같이 개발 가능해짐.

• Swift PM을 활용해 InjectionIII를 쉽게 사용할 수 있는 프로젝트 HotReloading 출시

• Sourcery를 만든 krzysztofzablocki가 InjectionIII를 쉽게 사용할 수 있는 프로젝트
Inject를 출시

• 이를 이용해서 쉽게 프로젝트에 추가하여 Hot Reload로 앱 개발이 가능해짐
InjectionIII - Inject 활용한 설정 방법
1. InjectionIII를 설치

• AppStore에서 설치
1. InjectionIII를 설치

• AppStore에서 설치

• Github에서 다운로드
InjectionIII - Inject 활용한 설정 방법
1. InjectionIII를 설치

2. SwiftPM으로 Inject 추가
InjectionIII - Inject 활용한 설정 방법
1. InjectionIII를 설치

2. SwiftPM으로 Inject 추가
InjectionIII - Inject 활용한 설정 방법
1. InjectionIII를 설치

2. SwiftPM으로 Inject 추가

• OTHER_LDFLAGS에 

-Xlinker -interposable

추가
InjectionIII - Inject 활용한 설정 방법
1. InjectionIII를 설치

2. SwiftPM으로 Inject 추가

3. InjectionIII 실행

• 실행할 프로젝트 설정
InjectionIII - Inject 활용한 설정 방법
1. InjectionIII를 설치

2. SwiftPM으로 Inject 추가

3. InjectionIII 실행

4. Inject 활용한 코드 작성
InjectionIII - Inject 활용한 설정 방법
InjectionIII
• 이런 도구들은 각각의 환경마다 동작할 수 있거나, 동작하지 않을 수 있음

(슈뢰딩거의 InjectionIII)

• 프로젝트 규모가 중형 이상, 구조가 복잡하거나 기타 등등의 이유로 동작 안 할 수 있음

• 프로젝트 규모를 작게 만들고, 단순한 구조를 가져가거나 등으로 방법을 한다면

InjectionIII가 동작할 수 있지 않을까?
모듈화
• 특정 기능을 개발하는데 모든 것이 다 필요하지 않음

• 필요한 기능만 잘 조립해서 만들 수 있다면 기능 개발에 작은 규모의 프로젝트로 관리

• 프로젝트 규모가 작아지고 단순해지니 InjectionIII 같은 도구를 사용 가능해짐. 

• Preview 같은 기능도 잘 동작할 가능성이 커짐.

• 만약 SPM을 사용하지 않고, xcproject 단위로 모듈을 나눠야 한다면?

• Tuist를 이용하면 쉽게 가능
Tuist 프로젝트 시연
코드 작성
빌드
실행
동작 확인
디버깅
로그인

메뉴 진입
코드 작성
빌드
실행
동작 확인
디버깅
로그인

메뉴 진입
가능한가?
• 가능함.

• 하나의 프로젝트에서 개발하는 것에서 여러 프로젝트에서 여러 타겟 - Multi Project,
Multi Module 기반으로 만들 수 있어야함.

• 작은 단위의 데모앱을 만들 수 있으므로, InjectionIII 등의 도구 적용이 쉬움
QnA
• Cookpad - 코드 생성을 이용한 iOS 앱 멀티 모듈화를 위한 종속 솔루션

• Modular iOS Architecture @ Just Eat

• App Modularization at Wayfair

• iOS-Clean-Architecture-MVVM

• Android Clean Architecture

• Blog - Clean Architecture is not Domain-Data-Presentation

• Youtube - Micro/feature frameworks

• iOS Architecture at Lyft

• Github 

• johnno1962/InjectionIII

• krzysztofzablocki/Inject
Reference

More Related Content

What's hot

20190330 RxFlow 시작하기
20190330 RxFlow 시작하기20190330 RxFlow 시작하기
20190330 RxFlow 시작하기
Clint Jang
 
Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014
JWORKS powered by Ordina
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질도메인 주도 설계의 본질
도메인 주도 설계의 본질
Young-Ho Cho
 
[LetSwift 2023] 객체지향-함수형 아키텍처 직접 만들기
[LetSwift 2023] 객체지향-함수형 아키텍처 직접 만들기[LetSwift 2023] 객체지향-함수형 아키텍처 직접 만들기
[LetSwift 2023] 객체지향-함수형 아키텍처 직접 만들기
Moonbeom KWON
 
A Framework Driven Development
A Framework Driven DevelopmentA Framework Driven Development
A Framework Driven Development
정민 안
 
Document your rest api using swagger - Devoxx 2015
Document your rest api using swagger - Devoxx 2015Document your rest api using swagger - Devoxx 2015
Document your rest api using swagger - Devoxx 2015
johannes_fiala
 
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
Jiyeon Seo
 
GitHub Actions with Node.js
GitHub Actions with Node.jsGitHub Actions with Node.js
GitHub Actions with Node.js
Stefan Stölzle
 
Introducing Swagger
Introducing SwaggerIntroducing Swagger
Introducing Swagger
Tony Tam
 
Letswift19-clean-architecture
Letswift19-clean-architectureLetswift19-clean-architecture
Letswift19-clean-architecture
Jung Kim
 
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
Mintak Son
 
Authorization and Authentication in Microservice Environments
Authorization and Authentication in Microservice EnvironmentsAuthorization and Authentication in Microservice Environments
Authorization and Authentication in Microservice Environments
LeanIX GmbH
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com Python
Frederico Cabral
 
Designing APIs with OpenAPI Spec
Designing APIs with OpenAPI SpecDesigning APIs with OpenAPI Spec
Designing APIs with OpenAPI Spec
Adam Paxton
 
Container based CI/CD on GitHub Actions
Container based CI/CD on GitHub ActionsContainer based CI/CD on GitHub Actions
Container based CI/CD on GitHub Actions
Casey Lee
 
Sonarqube
SonarqubeSonarqube
CI/CD with GitHub Actions
CI/CD with GitHub ActionsCI/CD with GitHub Actions
CI/CD with GitHub Actions
Swaminathan Vetri
 
React JS
React JSReact JS
Rest API with Swagger and NodeJS
Rest API with Swagger and NodeJSRest API with Swagger and NodeJS
Rest API with Swagger and NodeJS
Luigi Saetta
 
Bootiful Development with Spring Boot and Angular - Connect.Tech 2017
 Bootiful Development with Spring Boot and Angular - Connect.Tech 2017 Bootiful Development with Spring Boot and Angular - Connect.Tech 2017
Bootiful Development with Spring Boot and Angular - Connect.Tech 2017
Matt Raible
 

What's hot (20)

20190330 RxFlow 시작하기
20190330 RxFlow 시작하기20190330 RxFlow 시작하기
20190330 RxFlow 시작하기
 
Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질도메인 주도 설계의 본질
도메인 주도 설계의 본질
 
[LetSwift 2023] 객체지향-함수형 아키텍처 직접 만들기
[LetSwift 2023] 객체지향-함수형 아키텍처 직접 만들기[LetSwift 2023] 객체지향-함수형 아키텍처 직접 만들기
[LetSwift 2023] 객체지향-함수형 아키텍처 직접 만들기
 
A Framework Driven Development
A Framework Driven DevelopmentA Framework Driven Development
A Framework Driven Development
 
Document your rest api using swagger - Devoxx 2015
Document your rest api using swagger - Devoxx 2015Document your rest api using swagger - Devoxx 2015
Document your rest api using swagger - Devoxx 2015
 
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
 
GitHub Actions with Node.js
GitHub Actions with Node.jsGitHub Actions with Node.js
GitHub Actions with Node.js
 
Introducing Swagger
Introducing SwaggerIntroducing Swagger
Introducing Swagger
 
Letswift19-clean-architecture
Letswift19-clean-architectureLetswift19-clean-architecture
Letswift19-clean-architecture
 
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
 
Authorization and Authentication in Microservice Environments
Authorization and Authentication in Microservice EnvironmentsAuthorization and Authentication in Microservice Environments
Authorization and Authentication in Microservice Environments
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com Python
 
Designing APIs with OpenAPI Spec
Designing APIs with OpenAPI SpecDesigning APIs with OpenAPI Spec
Designing APIs with OpenAPI Spec
 
Container based CI/CD on GitHub Actions
Container based CI/CD on GitHub ActionsContainer based CI/CD on GitHub Actions
Container based CI/CD on GitHub Actions
 
Sonarqube
SonarqubeSonarqube
Sonarqube
 
CI/CD with GitHub Actions
CI/CD with GitHub ActionsCI/CD with GitHub Actions
CI/CD with GitHub Actions
 
React JS
React JSReact JS
React JS
 
Rest API with Swagger and NodeJS
Rest API with Swagger and NodeJSRest API with Swagger and NodeJS
Rest API with Swagger and NodeJS
 
Bootiful Development with Spring Boot and Angular - Connect.Tech 2017
 Bootiful Development with Spring Boot and Angular - Connect.Tech 2017 Bootiful Development with Spring Boot and Angular - Connect.Tech 2017
Bootiful Development with Spring Boot and Angular - Connect.Tech 2017
 

Similar to InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf

[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
NAVER D2
 
파견맨 와치앱 개발일지
파견맨 와치앱 개발일지파견맨 와치앱 개발일지
파견맨 와치앱 개발일지
Jaeeun Lee
 
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Soojin Ro
 
P ilot plant_2014
P ilot plant_2014P ilot plant_2014
P ilot plant_2014
성관 윤
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot intro
Jae-il Lee
 
SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션
DoHyun Jung
 
React native development
React native developmentReact native development
React native development
SangSun Park
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합
중선 곽
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellij
Sewon Ann
 
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
smartstudy_official
 
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYWHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
Hyun-woo Park
 
CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)
DONGSU KIM
 
빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?
빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?
빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?
hyunho Lee
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
Sewon Ann
 
안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들
Sewon Ann
 
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
nexusz99
 
2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기
Jay Park
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
NAVER D2
 
JavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJSJavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJSNAVER D2
 
포트폴리오 김규하
포트폴리오 김규하포트폴리오 김규하
포트폴리오 김규하
GyooHa Kim
 

Similar to InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf (20)

[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
 
파견맨 와치앱 개발일지
파견맨 와치앱 개발일지파견맨 와치앱 개발일지
파견맨 와치앱 개발일지
 
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
 
P ilot plant_2014
P ilot plant_2014P ilot plant_2014
P ilot plant_2014
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot intro
 
SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션
 
React native development
React native developmentReact native development
React native development
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellij
 
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
 
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYWHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
 
CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)CI in the Mobile World (한글번역)
CI in the Mobile World (한글번역)
 
빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?
빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?
빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
 
안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들안드로이드 개발에 유용한 도구들
안드로이드 개발에 유용한 도구들
 
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
 
2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
JavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJSJavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJS
 
포트폴리오 김규하
포트폴리오 김규하포트폴리오 김규하
포트폴리오 김규하
 

More from 정민 안

20240516_동적_데이터을_대응하는_코드_작성하기.pdf
20240516_동적_데이터을_대응하는_코드_작성하기.pdf20240516_동적_데이터을_대응하는_코드_작성하기.pdf
20240516_동적_데이터을_대응하는_코드_작성하기.pdf
정민 안
 
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
정민 안
 
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
정민 안
 
Letusgo 2019 Summer - StringInterpolation and SwiftUI
Letusgo 2019 Summer - StringInterpolation and SwiftUILetusgo 2019 Summer - StringInterpolation and SwiftUI
Letusgo 2019 Summer - StringInterpolation and SwiftUI
정민 안
 
Debugging with xcode, lldb and chisel
Debugging with xcode, lldb and chiselDebugging with xcode, lldb and chisel
Debugging with xcode, lldb and chisel
정민 안
 
fastlane을 이용하여 iOS/Mac 앱 관리하기
fastlane을 이용하여 iOS/Mac 앱 관리하기fastlane을 이용하여 iOS/Mac 앱 관리하기
fastlane을 이용하여 iOS/Mac 앱 관리하기
정민 안
 
Introduce fastlane
Introduce fastlaneIntroduce fastlane
Introduce fastlane
정민 안
 
Git lecture
Git lectureGit lecture
Git lecture
정민 안
 
형상관리 발표자료 안정민
형상관리 발표자료 안정민형상관리 발표자료 안정민
형상관리 발표자료 안정민
정민 안
 

More from 정민 안 (9)

20240516_동적_데이터을_대응하는_코드_작성하기.pdf
20240516_동적_데이터을_대응하는_코드_작성하기.pdf20240516_동적_데이터을_대응하는_코드_작성하기.pdf
20240516_동적_데이터을_대응하는_코드_작성하기.pdf
 
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
 
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
 
Letusgo 2019 Summer - StringInterpolation and SwiftUI
Letusgo 2019 Summer - StringInterpolation and SwiftUILetusgo 2019 Summer - StringInterpolation and SwiftUI
Letusgo 2019 Summer - StringInterpolation and SwiftUI
 
Debugging with xcode, lldb and chisel
Debugging with xcode, lldb and chiselDebugging with xcode, lldb and chisel
Debugging with xcode, lldb and chisel
 
fastlane을 이용하여 iOS/Mac 앱 관리하기
fastlane을 이용하여 iOS/Mac 앱 관리하기fastlane을 이용하여 iOS/Mac 앱 관리하기
fastlane을 이용하여 iOS/Mac 앱 관리하기
 
Introduce fastlane
Introduce fastlaneIntroduce fastlane
Introduce fastlane
 
Git lecture
Git lectureGit lecture
Git lecture
 
형상관리 발표자료 안정민
형상관리 발표자료 안정민형상관리 발표자료 안정민
형상관리 발표자료 안정민
 

InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf

  • 1. InjectionIII의 Hot Reload를 이용하여
 앱 개발을 좀 더 편하게 하기 with Tuist 안정민
  • 2. 목차 • 개발 프로세스 • Xcode Plugin History • InjectionIII • 모듈화 • Tuist • Reference
  • 8. 개발 프로세스 - 희망회로 • 작성/수정한 코드가 빠르게 빌드되면 어떨까? • 작업하는 화면 UI가 시뮬레이터에서 실행할 때 바로 띄워지면 어떨까? • 작성하는 코드가 시뮬레이터에서 실시간으로 반영되면 어떨까? • React Native, Flutter, 웹앱 등은 코드를 작성하면 바로 반영되는 Hot Reload가 된다던 데, iOS 개발에는 그런 기능이 없는 걸까? • Preview가 있기는 하지만, 매끄럽게 동작하지 않고 에러 날 때도 있고 좋은데, 없으면 아쉬움.
  • 9. 개발 프로세스 • 작성하는 코드가 시뮬레이터에서 실시간으로 반영되면 어떨까? • React Native, Flutter, 웹앱 등은 코드를 작성하면 바로 반영되는 Hot Reload가 된다던 데, iOS 개발에는 그런 기능이 없는 걸까? • Preview가 있기는 하지만, 매끄럽게 동작하지 않고 에러 날 때도 있고 좋은데, 없으면 아쉬움.
  • 10. • 작성하는 코드가 시뮬레이터에서 실시간으로 반영되면 어떨까? • React Native, Flutter, 웹앱 등은 코드를 작성하면 바로 반영되는 Hot Reload가 된다던 데, iOS 개발에는 그런 기능이 없는 걸까? • Preview가 있기는 하지만, 매끄럽게 동작하지 않고 에러 날 때도 있고 좋은데, 없으면 아쉬움. 개발 프로세스 InjectionIII
  • 13. Xcode Plugin History 옛날 옛적.. • 옛날 옛적에 Alcatraz 도구를 이용해 Xcode의 제약을 벗어난 플러그인을 사용하였습니 다.
  • 14.
  • 15.
  • 16.
  • 17. Xcode Plugin History • 2015년 9월쯤에 XcodeGhost라는 사건이 발생합니다. • Xcode 8(2016.9)부터 Alcatraz를 이용한 플러그인 막힘 • 모든 플러그인 오픈소스 운영 종료 • InjectionForXcode도 운영 종료 • Swift 기반으로 InjectionIII를 다시 만들고, 작업을 이어감. • 플러그인이 막히기 전에 유용하게 사용도 했고, 커밋 하나지만 기여했었음.
  • 18. Xcode Plugin History • 2015년 9월쯤에 XcodeGhost라는 사건이 발생합니다. • Xcode 8(2016.9)부터 Alcatraz를 이용한 플러그인 사용이 막혀버렸습니다. • 모든 플러그인 오픈소스 운영 종료 • InjectionForXcode도 운영 종료 • Swift 기반으로 InjectionIII를 다시 만들고, 작업 계속이어감. • 플러그인이 막히기 전에 유용하게 사용도 했고, 커밋 하나지만 기여했었음.
  • 19. InjectionIII • 시간이 흘러, 애플이 Xcode Extension 기능을 열어줌 • Swift Package Manager 출시 • InjectionIII를 이용하여 이전의 InjectionForXcode와 같이 개발 가능해짐. • Swift PM을 활용해 InjectionIII를 쉽게 사용할 수 있는 프로젝트 HotReloading 출시 • Sourcery를 만든 krzysztofzablocki가 InjectionIII를 쉽게 사용할 수 있는 프로젝트 Inject를 출시 • 이를 이용해서 쉽게 프로젝트에 추가하여 Hot Reload로 앱 개발이 가능해짐
  • 20. InjectionIII - Inject 활용한 설정 방법 1. InjectionIII를 설치 • AppStore에서 설치
  • 21. 1. InjectionIII를 설치 • AppStore에서 설치 • Github에서 다운로드 InjectionIII - Inject 활용한 설정 방법
  • 22. 1. InjectionIII를 설치 2. SwiftPM으로 Inject 추가 InjectionIII - Inject 활용한 설정 방법
  • 23. 1. InjectionIII를 설치 2. SwiftPM으로 Inject 추가 InjectionIII - Inject 활용한 설정 방법
  • 24. 1. InjectionIII를 설치 2. SwiftPM으로 Inject 추가 • OTHER_LDFLAGS에 
 -Xlinker -interposable
 추가 InjectionIII - Inject 활용한 설정 방법
  • 25. 1. InjectionIII를 설치 2. SwiftPM으로 Inject 추가 3. InjectionIII 실행 • 실행할 프로젝트 설정 InjectionIII - Inject 활용한 설정 방법
  • 26. 1. InjectionIII를 설치 2. SwiftPM으로 Inject 추가 3. InjectionIII 실행 4. Inject 활용한 코드 작성 InjectionIII - Inject 활용한 설정 방법
  • 27. InjectionIII • 이런 도구들은 각각의 환경마다 동작할 수 있거나, 동작하지 않을 수 있음
 (슈뢰딩거의 InjectionIII) • 프로젝트 규모가 중형 이상, 구조가 복잡하거나 기타 등등의 이유로 동작 안 할 수 있음 • 프로젝트 규모를 작게 만들고, 단순한 구조를 가져가거나 등으로 방법을 한다면
 InjectionIII가 동작할 수 있지 않을까?
  • 28. 모듈화 • 특정 기능을 개발하는데 모든 것이 다 필요하지 않음 • 필요한 기능만 잘 조립해서 만들 수 있다면 기능 개발에 작은 규모의 프로젝트로 관리 • 프로젝트 규모가 작아지고 단순해지니 InjectionIII 같은 도구를 사용 가능해짐. • Preview 같은 기능도 잘 동작할 가능성이 커짐. • 만약 SPM을 사용하지 않고, xcproject 단위로 모듈을 나눠야 한다면? • Tuist를 이용하면 쉽게 가능
  • 32. 가능한가? • 가능함. • 하나의 프로젝트에서 개발하는 것에서 여러 프로젝트에서 여러 타겟 - Multi Project, Multi Module 기반으로 만들 수 있어야함. • 작은 단위의 데모앱을 만들 수 있으므로, InjectionIII 등의 도구 적용이 쉬움
  • 33. QnA
  • 34. • Cookpad - 코드 생성을 이용한 iOS 앱 멀티 모듈화를 위한 종속 솔루션 • Modular iOS Architecture @ Just Eat • App Modularization at Wayfair • iOS-Clean-Architecture-MVVM • Android Clean Architecture • Blog - Clean Architecture is not Domain-Data-Presentation • Youtube - Micro/feature frameworks • iOS Architecture at Lyft • Github • johnno1962/InjectionIII • krzysztofzablocki/Inject Reference