(1) App 구조
앱의 수명 주기를 실제 앱 사용 케이스에 빗대어 설명할 수 있다.
예) 앱을 실행할 때, BG로 내릴 때, 알림센터를 표시할 때 등
앱 시닝(app thinning)의 개념을 알고 있다.
Bit code
App slicing
On-demand Resource
URL scheme과 universal link의 차이를 설명할 수 있다.
sandbox와 production 환경을 분리해 개발하는 방법을 알고 있다.
예) 개발 인증서와 배포 인증서의 차이와 그에 따른 필요한 환경 구축 방법 등
UIScreen, UIWindowScene, UIWindow, UIView의 차이점을 설명할 수 있다.
I386, X86_64, armv7s, arm64의 의미를 설명할 수 있다.
RegionCode, LanguageCode, PreferredLangues의 차이점을 설명할 수 있다.
List 화면에서 메모리 절약을 위한 View 재사용 로직을 이해하고 있다.
예) UITableView나 UICollectionView 등의 동작에 대한 예시
예) 이미지 다운로드, 파일 열기 등 비동기와 관련된 기능이 있을 때 재사용 로직에서 처리해야 할 작업의 예시
백그라운드 처리가 필요할 때 backgroundTask를 처리하는 방법을 알고 있다.
extension, app 간 데이터 공유 방법을 알고 있다.
다국어를 지원할 수 있다.
앱의 life-cycle event를 받는 delegate의 종류와 종류별 차이를 설명할 수 있다.
앱을 포그라운드 상태에서 백그라운드로 전환했다가 다시 포그라운드로 전환했을 때 호출되는 delegate의 함수에는 어떤 것들이 있는지 설명할 수 있다.
앱이 inactive인 상태는 어떤 경우인지 설명할 수 있다.
UIViewController에서 앱의 백그라운드와 포그라운드 진입에 따라 어떤 추가적인 작업을 해야 하는지 설명할 수 있다.
Xcode의 Capabilities에 있는 Background Modes의 종류를 알고 있다.
URI scheme 방식의 문제점을 알고 있다.
(2) UI 설계 및 개발
- UIKit
view와 control의 차이를 알고 있다.
UIView를 상속한 CustomView를 만들 수 있고, 화면 크기에 따라 동적으로 크기를 조정하고 subview를 배치할 수 있다.
frame과 bounds의 차이를 알고 있다.
layoutSubviews의 사용 용도를 알고 있다.
UITableView와 UICollectionView의 사용 방법을 알고 있다.
Touch event와 연관된 Chain of Responsibility의 개념을 이해하고 이를 이용할 수 있다.
다국어와 다크 모드를 지원하는 방법과 시뮬레이터에서 테스팅하는 방법을 알고 있다.
- Auto Layout
Auto Layout에서 leading/trailing과 right/left의 차이와 용도를 알고 있다.
auto size를 활용한 멀티 디바이스 지원 방법을 알고 있다.
layout이 제대로 그려지는 조건을 알고 있다.
Auto Layout의 constraint 변경 시 어느 시점에 UI에 반영되는지 알고 있다.
priority를 알고 있다.
ContentHuggingPriority와 ContentCompressionResistancePriority를 알고 있다.
StackView에 Auto Layout으로 구현된 CustomView를 추가할 수 있다.
- 스토리보드, xib
스토리보드, xib를 이용해 UI를 설계, 구현할 수 있다.
UI가 어느 시점에 로드되는지 알고 있다.
Auto Layout을 함께 사용해 UI를 구현할 수 있다.
Human Interface Guideline의 기본 내용을 이해하고 있다.
2x, 3x 등의 해상도에 따른 이미지 지원과 벡터 이미지(PDF) 원리
색 공간의 이해(RGB, sRGB, P3, HSV 등)
UITableView, UICollectionView, UIStackView 등의 용도와 차이
navigation controller, tab bar, switch, segmented control 등, 앱 구조에 영향을 주는 UI component 시스템의 용도와 차이
각 view, control, bar의 사용 목적과 그에 대한 이해와 응용
예) control의 touch event 인식을 위한 최소 권장 영역 등
- Appstore Review Guideline
Appstore Review Guideline의 기본 내용을 이해하고 있다.
다음과 같은 경우 승인 여부를 판단할 수 있다.
식재료를 파는 온라인 쇼핑몰 앱에서 인앱 결제가 아닌 자체 결제를 사용
디지털북을 판매하는 앱에서 인앱 결제 대신 웹에서 결제할 수 있는 링크를 제공
SNS 로그인을 지원하는 앱에서 Apple 로그인과 Google 로그인을 함께 제공
- Graphics
CALayer와 UIView의 차이를 알고 있다.
animatable property에 대해 알고 있다.
CAAnimation을 상속받은 각 animation 클래스를 알고 있다.
CAMetalLayer를 기반으로 하는 view를 만드는 방법을 알고 있다.
(3) 개발 언어 > Swift
함수, 반복문, 조건문 등의 기본 문법을 숙지했다.
구조체와 클래스의 차이를 인지하고 있다.
예) value type, reference type
예) shallow copy, deep copy
inheritance와 extension 등 기능을 확장하는 방법의 용도와 차이를 숙지하고 있다.
designate initializer와 convenience initializer의 차이를 안다.
protocol과 generic 등을 이용한 기능 확장과 코드 재사용의 개념을 이해하고 있다.
예) Abstraction, delegation, template method
(4) 개발 언어 > Objective-C
property와 변수의 차이점을 설명할 수 있다.
property 속성인 assign, strong, weak, copy의 차이점을 설명할 수 있다.
\@synthesize를 적절히 사용할 수 있다.
\@dynamic을 적절히 사용할 수 있다.
block의 특징과 사용법을 설명할 수 있다.
selector 문법을 설명하고 활용할 수 있다.
(5) 개발도구 > Xcode
xib(nib: 닙)과 스토리보드의 차이와 동작 원리를 알고 있다.
디버깅을 위한 break point의 원리를 알고 있다.
console을 통한 backtrace와 stack의 메모리 접근 및 데이터 확인 방법을 알고 있다.
visual debugger를 사용해 view와 memory를 조사할 수 있다.
Instruments를 사용한 성능 개선 방법을 알고 있다(메모리 누수, Time Profiler 등).
(6) 네트워킹 > URLSession HTTP / HTTPS
HTTP와 HTTPS의 연결 방식의 차이와 효과를 알고 있다.
RESTful API를 연동할 수 있다(GET, POST, PUT, DELETE 등).
GET과 POST의 차이를 알고 있다.
HTTP status code에 대해 알고 있다.
여러 개의 파일을 POST로 한 번에 업로드하는 방법을 알고 있다.
HTTP를 통해서 서버에서 데이터를 받아올 때 필요한 timeout을 설명할 수 있다.
HTTP 캐시에 관여하는 헤더의 종류와 각각의 의미를 알고 있다.
URLSession을 이용한 로딩 방식을 이해하고 있다.
예) request, upload task, download task 등
URLRequest를 이용해서 timeout, header, method 등을 설정할 수 있다.
ATS 설정 방법을 알고 있다.
(7) 데이터 처리
앱 내에서 다뤄지는 파일 디렉터리와 각 디렉터리의 용도를 알고 있다.
예) Document, Library (Application Support, Caches), Tmp 등
NSCache를 설정해 캐시가 특정 크기 이상 커지지 않도록 구현할 수 있다.
캐시의 작동 방식을 응용해 Custom Cache를 구현할 수 있다.
예) LRU Cache
UserDefaults의 특징을 이해하고, Codable을 사용해서 커스텀 클래스를 저장, 로드해서 사용할 수 있다.
plist의 특성을 알고, 저장 타입을 나열할 수 있다.
plist와 UserDefaults database 간의 차이를 알고 있다.
CoreData와 SQLite의 차이를 알고 있다.
서로 다른 앱과의 데이터 공유 방법을 알고 있다.
예) app group과 keychain 등의 사용 방법
앱에 저장이 필요할 때 keychain과 UserDefaults의 사용을 구분할 수 있다.
(8) 비동기 처리 / 동시성 제어 > GCD NSOperation / NSOperationQueue
GCD의 우선 순위와 main/global queue의 차이를 알고 있다.
예) UI 조작 및 File I/O 등의 사례에 따라
DispatchQueue의 sync와 async의 동작 차이를 설명할 수 있다.
DispatchQueue를 사용하는 경우와 스레드를 직접 사용하는 경우의 차이를 설명할 수 있다.
QoS(priority)의 기능을 알고 있다.
DispatchQueue의 sync 또는 async block 내에서 Timer를 사용하는 방법을 알고 있다.
(9) 비동기 처리 / 동시성 제어 > Combine
merge, zip, combineLatest의 차이를 설명할 수 있다.
combineLatest many를 구현할 수 있다.
flatMap으로 비동기 작업을 직렬화할 수 있다.
flatMapLatest를 구현할 수 있다.
subscribe(on:)과 receive(on:)의 차이를 설명할 수 있다.
(10) 메모리 > reference counting
ARC의 개념을 설명할 수 있다.
ARC로 작성된 코드를 non-ARC(MRC)로 바꿀 수 있다.
AutoreleasePool의 동작 매커니즘을 설명할 수 있다.
strong reference cycle 사례와 해결 방법을 알고 있다.
(11) 배포
CSR, certificate, provisioning profile, 기기 간의 상관 관계를 이해하고 있다.
certificate, provisioning profile을 발급할 수 있다.
App Store Review Guideline의 기본 내용을 이해하고 있다.
현물 거래와 디지털 저작물 거래에 대한 In App Purchase 정책 채택 가능 여부
IP (지적 자산)에 대한 사용과 로열티 관련 이슈
다국어 지원과 리뷰어를 위한 테스트 환경 제공에 대한 이해
기타 비지니스 및 앱 구조 등에 대한 준수 사항에 대한 숙지 여부
배포 시나리오를 Developing & Testing, Distribution 각 단계별 세부 구성을 이해하고 설명할 수 있다.
TestFlight, Enterprise Distribution, AppStore Distribution 등 각 phase별 배포 목적을 이해하고 수행할 수 있다.
adhoc 배포와 enterprise 배포의 차이를 설명할 수 있다.
(12) 빌드 /통합
static library와 dynamic library, framework의 구조와 기능의 차이를 이해하고 있다.
Swift Package Manager를 통한 패키지 제공과 이식 방법을 알고 있다.
Pod install과 update의 차이를 알고 있다.
버전과 빌드 번호의 차이를 알고 있다.
(13) 푸시 > APNS 알림센터
APNs payload의 field의 기능을 알고 있다.
APNs payload에 custom field를 추가하고 해당 필드에 접근할 수 있다.
APNs 인증서 발급에 대해 알고 있다.
예) 인증서, JSON web token 등
Remote Notification의 extension을 구현하는 방법을 알고 있다.
Remote Notification에 action을 추가할 수 있다.
Notification에 있는 정보를 활용해 원하는 화면으로 이동할 수 있다.
remote와 local notification의 구현 방식을 알고 있다.
(14) 아키텍쳐
- MVC
MVC에서 각 주체의 역할과 기능을 알고 있다.
예) model, view, controller의 역할, ViewController의 수명 주기 등
ViewController의 비즈니스 로직들을 잘 묶어서 ViewController가 controller의 역할만 하도록 코드를 작성할 수 있다.
각 주체 간 메시지 전달을 위한 장치들에 대해 이해하고 있다.
예) IBOuetlet, IBAction, Delegation, Notification (or KVO) 등
- MVVM
MVVM(Model - View - ViewModel)의 각 역할과 기능을 설명할 수 있다.
MVC 패턴과 MVVM 패턴의 차이를 명확하게 설명할 수 있다.
ViewModel의 바인딩의 개념을 설명할 수 있다.
(15) 유지 / 보수 > Bug/Crash Report
사용자 크래시 로그를 확인하는 방법을 알고 있다.
예) NELO, Organizer
크래시 로그가 있을 때, symbolicate하는 방법을 알고 있다.
symbolicate한 로그를 활용해 크래시를 수정할 수 있다.
코드 작성, 리뷰 시 크래시가 발생할 만한 코드를 인지하고, 리뷰, 사전 방지할 수 있다.
(16) 웹뷰 > WKWebView
WKUIDelegate를 활용해 웹뷰의 각 UI 이벤트에 대응할 수 있다.
WKHTTPCookieStore를 사용서 쿠키 저장소를 활용하는 방법을 안다.
WKWebsiteDataStore를 사용해 웹뷰와 관련된 데이터를 처리할 수 있다.
WKNavigationDelegate를 사용해 웹뷰의 페이지 이동을 처리할 수 있다.
WKWebView를 사용해야 할 때와 SFSafariViewController를 사용해야 할 때를 구분할 수 있다.
WKWebView를 사용해 웹 페이지와 JavaScript로 데이터 통신 및 이벤트 처리를 할 수 있다.
- 다음 내용을 참 또는 거짓으로 판단할 수 있다.
WKWebView 내에서 획득한 쿠키는 URLSession에서 사용할 수 없다.
WKWebView내에서는 Universal Link가 동작하지 않는다.
(17) 품질관리
이슈 추적을 위한 도구 사용 경험이 있다.
예) BTS(Jira), OSS(Github) 등
크래시 수집을 통해 분석해 본 경험이 있다.
예) dsym 파일을 통한 크래시 로그 분석
예) NELO, Firebase 등을 이용
코딩 컨벤션을 왜 준수해야 하는지 알고 있다.
정적 분석이란 무엇이고 어떤 도움을 줄 수 있는지 알고 있다.
Lint를 적용할 수 있다.
(18) 협업 > Code Review
본인이 주로 리뷰하는 코드 이슈를 설명할 수 있다.
메모리나 성능에 이슈가 발생할 수 있는 코드에는 어떤 것이 있는지 설명할 수 있다.
코드 리뷰를 할 때 리뷰해야 할 포인트를 잘 알고 있다.
리뷰 코멘트를 남길 때 상대가 납득할 수 있는 근거(performance, convention 등)를 들 수 있다.
(19) 형상관리
Git의 기본적인 기능을 잘 알고 활용하고 있다.
patch, cherry pick 등의 기본적인 기능을 상황별로 잘 알고 있다.
interactive rebase를 사용할 수 있다.
master, develop, branch 등의 버전 관리 방법을 알고 있다.
git branch 전략을 잘 이해하고 있다. 또는 git flow를 잘 이해하고 응용하고 있다.
1.0.0 버전을 배포하고 1.1.0 버전을 개발 하는 중에 1.0.0 버전에 버그가 발생하여 수정이 필요한 경우 변경 사항을 어떻게 관리하는 것이 효율적인지 설명할 수 있다.
코드 병합 과정에서 git merge와 rebase는 어떤 차이가 있는지 설명할 수 있다.