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

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

  • 1.
    InjectionIII의 Hot Reload를이용하여
 앱 개발을 좀 더 편하게 하기 with Tuist 안정민
  • 2.
    목차 • 개발 프로세스 •Xcode Plugin History • InjectionIII • 모듈화 • Tuist • Reference
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 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
  • 11.
  • 12.
  • 13.
    Xcode Plugin History옛날 옛적.. • 옛날 옛적에 Alcatraz 도구를 이용해 Xcode의 제약을 벗어난 플러그인을 사용하였습니 다.
  • 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를 이용하면 쉽게 가능
  • 29.
  • 30.
  • 31.
  • 32.
    가능한가? • 가능함. • 하나의프로젝트에서 개발하는 것에서 여러 프로젝트에서 여러 타겟 - Multi Project, Multi Module 기반으로 만들 수 있어야함. • 작은 단위의 데모앱을 만들 수 있으므로, InjectionIII 등의 도구 적용이 쉬움
  • 33.
  • 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