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

코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked ChangesJiyeon Seo
 
20190330 RxFlow 시작하기
20190330 RxFlow 시작하기20190330 RxFlow 시작하기
20190330 RxFlow 시작하기Clint Jang
 
fastlane을 이용하여 iOS/Mac 앱 관리하기
fastlane을 이용하여 iOS/Mac 앱 관리하기fastlane을 이용하여 iOS/Mac 앱 관리하기
fastlane을 이용하여 iOS/Mac 앱 관리하기정민 안
 
SwiftUI and Combine All the Things
SwiftUI and Combine All the ThingsSwiftUI and Combine All the Things
SwiftUI and Combine All the ThingsScott Gardner
 
ReactorKit으로 단방향 반응형 앱 만들기
ReactorKit으로 단방향 반응형 앱 만들기ReactorKit으로 단방향 반응형 앱 만들기
ReactorKit으로 단방향 반응형 앱 만들기Suyeol Jeon
 
SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기규영 허
 
React.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOMReact.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOMJimit Shah
 
How to implement internationalization (i18n) in angular application(multiple ...
How to implement internationalization (i18n) in angular application(multiple ...How to implement internationalization (i18n) in angular application(multiple ...
How to implement internationalization (i18n) in angular application(multiple ...Katy Slemon
 
A Framework Driven Development
A Framework Driven DevelopmentA Framework Driven Development
A Framework Driven Development정민 안
 
Certificate 와 Provisioning Profile
Certificate 와 Provisioning ProfileCertificate 와 Provisioning Profile
Certificate 와 Provisioning Profilessuser9054541
 
Whitebox testing of Spring Boot applications
Whitebox testing of Spring Boot applicationsWhitebox testing of Spring Boot applications
Whitebox testing of Spring Boot applicationsYura Nosenko
 
Android jetpack compose | Declarative UI
Android jetpack compose | Declarative UI Android jetpack compose | Declarative UI
Android jetpack compose | Declarative UI Ajinkya Saswade
 
SwiftUI - Performance and Memory Management
SwiftUI - Performance and Memory ManagementSwiftUI - Performance and Memory Management
SwiftUI - Performance and Memory ManagementWannitaTolaema
 
Swift in SwiftUI
Swift in SwiftUISwift in SwiftUI
Swift in SwiftUIBongwon Lee
 
Jetpack Compose.pptx
Jetpack Compose.pptxJetpack Compose.pptx
Jetpack Compose.pptxGDSCVJTI
 
20171104 FRP 패러다임
20171104 FRP 패러다임20171104 FRP 패러다임
20171104 FRP 패러다임Chiwon Song
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018devCAT Studio, NEXON
 

What's hot (20)

코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
 
20190330 RxFlow 시작하기
20190330 RxFlow 시작하기20190330 RxFlow 시작하기
20190330 RxFlow 시작하기
 
fastlane을 이용하여 iOS/Mac 앱 관리하기
fastlane을 이용하여 iOS/Mac 앱 관리하기fastlane을 이용하여 iOS/Mac 앱 관리하기
fastlane을 이용하여 iOS/Mac 앱 관리하기
 
SwiftUI and Combine All the Things
SwiftUI and Combine All the ThingsSwiftUI and Combine All the Things
SwiftUI and Combine All the Things
 
ReactorKit으로 단방향 반응형 앱 만들기
ReactorKit으로 단방향 반응형 앱 만들기ReactorKit으로 단방향 반응형 앱 만들기
ReactorKit으로 단방향 반응형 앱 만들기
 
SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기
 
Angular Observables & RxJS Introduction
Angular Observables & RxJS IntroductionAngular Observables & RxJS Introduction
Angular Observables & RxJS Introduction
 
React.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOMReact.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOM
 
How to implement internationalization (i18n) in angular application(multiple ...
How to implement internationalization (i18n) in angular application(multiple ...How to implement internationalization (i18n) in angular application(multiple ...
How to implement internationalization (i18n) in angular application(multiple ...
 
A Framework Driven Development
A Framework Driven DevelopmentA Framework Driven Development
A Framework Driven Development
 
Certificate 와 Provisioning Profile
Certificate 와 Provisioning ProfileCertificate 와 Provisioning Profile
Certificate 와 Provisioning Profile
 
Whitebox testing of Spring Boot applications
Whitebox testing of Spring Boot applicationsWhitebox testing of Spring Boot applications
Whitebox testing of Spring Boot applications
 
Android jetpack compose | Declarative UI
Android jetpack compose | Declarative UI Android jetpack compose | Declarative UI
Android jetpack compose | Declarative UI
 
SwiftUI - Performance and Memory Management
SwiftUI - Performance and Memory ManagementSwiftUI - Performance and Memory Management
SwiftUI - Performance and Memory Management
 
Swift in SwiftUI
Swift in SwiftUISwift in SwiftUI
Swift in SwiftUI
 
Jetpack Compose.pptx
Jetpack Compose.pptxJetpack Compose.pptx
Jetpack Compose.pptx
 
MVP Clean Architecture
MVP Clean  Architecture MVP Clean  Architecture
MVP Clean Architecture
 
20171104 FRP 패러다임
20171104 FRP 패러다임20171104 FRP 패러다임
20171104 FRP 패러다임
 
Redux workshop
Redux workshopRedux workshop
Redux workshop
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
 

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 introJae-il Lee
 
SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션DoHyun Jung
 
React native development
React native developmentReact native development
React native developmentSangSun Park
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합중선 곽
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellijSewon Ann
 
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 SMARTSTUDYHyun-woo Park
 
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가smartstudy_official
 
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가지 팁정민 안
 
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정민 안
 
Introduce fastlane
Introduce fastlaneIntroduce fastlane
Introduce fastlane정민 안
 
형상관리 발표자료 안정민
형상관리 발표자료 안정민형상관리 발표자료 안정민
형상관리 발표자료 안정민정민 안
 

More from 정민 안 (7)

20240516_동적_데이터을_대응하는_코드_작성하기.pdf
20240516_동적_데이터을_대응하는_코드_작성하기.pdf20240516_동적_데이터을_대응하는_코드_작성하기.pdf
20240516_동적_데이터을_대응하는_코드_작성하기.pdf
 
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
 
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
 
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