iOS-factor는 고품질의 웹 서비스를 만드는 방법론으로 유명한 앱 프레임워크 개발의 12 요소에서 영감을 받았습니다. iOS-factor는 그와 같은 구조와 비슷한 규칙들로 이루어져 있으며, iOS 앱 개발 프로세스에 맞게 작성되었습니다.

배경

지난 10년간, iOS 개발 과정은 아주 많이 변해왔습니다.

  • 하나의 기기만을 지원하는 것에서 시작해 iOS기반의 아이폰들과 아이패드들, 그리고 tvOS와 watchOS 같이 다양한 플랫폼까지 지원하게 되었습니다.
  • 옛날엔 깃 서브모듈을 수동으로 임포트했지만 지금은 디펜던시 매니저를 사용하게 되었습니다.
  • 대부분의 iOS 앱이 기기에서 로컬로 실행되는 것부터 시작해서 지금은 백엔드 서비스에 아주 많이 의존하게 되었습니다.
  • 과거의 iOS 앱 리뷰 시간은 2주가 넘게 걸렸지만 지금은 하루가 채 걸리지 않습니다.
  • 예전엔 앱 배포를 위해 iTunes를 이용해서 직접 설치했었고 요즘은 공식 TestFlight 채널이 제공됩니다.
  • 순수 Objective-C/C++ 만을 사용했었지만 이젠 JavaScript를 포함한 다양한 언어를 섞어서 사용합니다.
  • 무언가 준비되었어도 느렸던 배포들이 이제는 매주 일어나고 있습니다.
  • 기존엔 모두에게 배포했던 것이 A/B 테스트를 지원하고 느린 롤아웃 및 자동 회귀 추적까지 해주게 되었습니다.

iOS-factor가 무엇인가요?

iOS-factor는 2018년 5월에 시작된 실험적인 프로젝트입니다. 이 프로젝트는 고급 iOS 어플리케이션을 만들기 위한 최고의 예제들을 모아 제공하는데에 목적이 있습니다. 각 주제들은 iOS 앱 개발 과정의 어떤 카테고리가 어떻게 되어야하는지에 대한 이상적인 상태를 보여주는 요소(factor)를 가지고 있습니다.

어떠한 제한(예를 들자면 Xcode는 macOS에서 실행될 수 없다와 같이요)때문에 모든 요구사항이 충족될 순 없을 것입니다. 이 프로젝트는 우리가 직면한 문제들 중 일부를 해결할 수 있는 최선의 접근 방법을 제공하는 것과 같은 목표를 가지고 있습니다.

iOS-factor는 iOS 앱 개발 프로세스와 아키텍쳐 결정에 대한 빅 픽쳐에 대한 것을 다루기 때문에, 특정 언어의 구체적인 문제점을 다루진 않을 것입니다.

이 프로젝트는 iOS 개발자 커뮤니티에 의해 유지되고 있는 살아있는 프로젝트입니다. 전체 소스는 GitHub에서 확인하실 수 있고 페이지를 업데이트하거나 새로운 요소에 대한 페이지를 추가하실 수 있습니다.


iOS 앱 개발 요소

I. 디펜던시(Dependencies)

선언은 명시적으로, 디펜던시는 고립시키세요.

II. 설정(Config)

코드에선 설정을 하지마세요. 디폴트 설정을 정해두고, OTA 업데이트를 허용하세요.

III. 개발/라이브 동일시하기(Dev/prod parity)

개발 버전과 테스트 버전, 그리고 라이브 버전을 가능한한 똑같이 만드세요.

IV. 배포(Deployment)

배포를 자동화해서 아무 기기에서나 릴리즈할 수 있도록 하세요.

V. 원격보다 로컬 선호하기(Prefer local over remote)

가능하다면 iOS 앱을 백엔드 없이도 잘 작동하는 똑똑한 앱으로 만드세요.

VI. 이전 버전과 호환되는 API(Backwards compatible APIs)

모든 유저가 최신 버전을 사용한다고 가정하지 마세요.

VII. 앱 버전 정하기(App versioning)

일관성을 유지하기 위해 앱의 빌드와 버전 넘버를 자동화하세요.

VIII. Rollbacks

Reverting a build that causes issues

IX. 데이터의 지속성(Persistence of data)

데이터를 저장할 때는 Apple의 가이드라인을 지키세요.