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

MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
정민 안
 
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가? Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
정민 안
 
SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기
규영 허
 
만화경 앱 개발기(iOS)
만화경 앱 개발기(iOS)만화경 앱 개발기(iOS)
만화경 앱 개발기(iOS)
ssuserb942d2
 
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
Mintak Son
 
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
Iida Yukako
 
RxSwift to Combine
RxSwift to CombineRxSwift to Combine
RxSwift to Combine
Bo-Young Park
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음
nexusz99
 
ウェブパフォーマンスの基礎とこれから
ウェブパフォーマンスの基礎とこれからウェブパフォーマンスの基礎とこれから
ウェブパフォーマンスの基礎とこれから
Hiroshi Kawada
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
 
Microservice architecture
Microservice architectureMicroservice architecture
Microservice architecture
Žilvinas Kuusas
 
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
SOAT
 
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのかなぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのか
Yusuke Suzuki
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드
Insub Lee
 
Microservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring CloudMicroservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring Cloud
Eberhard Wolff
 
DevOps Overview
DevOps OverviewDevOps Overview
DevOps Overview
IIJ
 
A Pattern Language for Microservices
A Pattern Language for MicroservicesA Pattern Language for Microservices
A Pattern Language for Microservices
Chris Richardson
 
Intégration de SonarQube dans GitLab ci
Intégration de SonarQube dans GitLab ciIntégration de SonarQube dans GitLab ci
Intégration de SonarQube dans GitLab ci
wiemfourati
 
Railway Oriented Programming
Railway Oriented ProgrammingRailway Oriented Programming
Railway Oriented Programming
Scott Wlaschin
 
안정적인 서비스 운영 2014.03
안정적인 서비스 운영   2014.03안정적인 서비스 운영   2014.03
안정적인 서비스 운영 2014.03
Changyol BAEK
 

What's hot (20)

MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
 
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가? Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
 
SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기
 
만화경 앱 개발기(iOS)
만화경 앱 개발기(iOS)만화경 앱 개발기(iOS)
만화경 앱 개발기(iOS)
 
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
 
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
 
RxSwift to Combine
RxSwift to CombineRxSwift to Combine
RxSwift to Combine
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음
 
ウェブパフォーマンスの基礎とこれから
ウェブパフォーマンスの基礎とこれからウェブパフォーマンスの基礎とこれから
ウェブパフォーマンスの基礎とこれから
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
Microservice architecture
Microservice architectureMicroservice architecture
Microservice architecture
 
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
 
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのかなぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのか
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드
 
Microservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring CloudMicroservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring Cloud
 
DevOps Overview
DevOps OverviewDevOps Overview
DevOps Overview
 
A Pattern Language for Microservices
A Pattern Language for MicroservicesA Pattern Language for Microservices
A Pattern Language for Microservices
 
Intégration de SonarQube dans GitLab ci
Intégration de SonarQube dans GitLab ciIntégration de SonarQube dans GitLab ci
Intégration de SonarQube dans GitLab ci
 
Railway Oriented Programming
Railway Oriented ProgrammingRailway Oriented Programming
Railway Oriented Programming
 
안정적인 서비스 운영 2014.03
안정적인 서비스 운영   2014.03안정적인 서비스 운영   2014.03
안정적인 서비스 운영 2014.03
 

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가지 팁
정민 안
 
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 정민 안 (8)

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
 
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