애플 세계 개발자 컨퍼런스(Worldwide Development Conference, WWDC)
애플에서 매년 6월 개최되는 대규모 개발자 컨퍼런스로 새로운 소프트웨어와 기술 등을 공개한다.
애플이 개발한 애플 자사 모바일 기기 전용 운영체제로 iPhone, iPad, iPod Touch 등의 애플 디바이스에서 동작한다.
iOS Privacy 정책을 따라 같은 앱이더라도 안드로이드에서 가능한 기능이 iOS에서는 불가능한 경우가 생긴다.
애플의 폐쇄성 예시
- App Store : 애플 플랫폼에서만 사용 가능한 애플리케이션을 다운받을 수 있는 서비스
- Xcode : 애플 플랫폼용 앱을 개발할 수 있는 통합 개발 환경으로 macOS에서만 동작한다.
- 카카오톡 키워드 알림 기능은 iOS 알림 정책 변경으로 인해 지원 중단한 사례
iOS는 매년 WWDC에서 새 버전이 공개되며 세부적으로 자주 업데이트가 발생한다. 따라서 앱을 개발할 때 애플 기기의 사용자들이 사용 중인 iOS 버전별 점유율을 확인하고 버전별 호환성을 생각하며 개발해야 한다.
① Human Interface Guidelines (HIG)
애플 플랫폼에서 개발하기 원하는 디자이너와 개발자를 위한 종합 리소스
쉽게 이야기하면, 애플은 사용자가 익숙한 방식으로(일관된 사용자 경험이나 익숙한 방식) 앱을 사용하는 것을 추구하기 때문에 애플 기기에서 구동될 앱의 모든 요소에 대해 가이드 라인을 정해두는 것이다.
(예시) App icons - iOS, iPadOS
Don’t add an overlay or border to your Settings icon. iOS automatically adds a 1-pixel stroke to all icons so that they look good on the white background of Settings. (설정 아이콘에 오버레이나 테두리를 추가하지 마세요. iOS는 모든 아이콘에 1픽셀 스트로크를 자동으로 추가하기 때문에 흰색 배경에 잘 어울립니다.)
Human Interface Guidelines | Apple Developer Documentation
새로운 Human Interface Guidelines 소개 | Apple Developer
② SF Symbols
애플 플랫폼의 시스템 서체인 San Francisco와 매끄럽게 통합되도록 설계된 아이콘 라이브러리
- Not Running : 앱이 실행되기 전이거나 완전히 종료된 상태
- Foreground : 사용자가 앱을 보고 있는 상태로 CPU 자원 사용의 우선순위가 높은 상태
- Active : 앱이 화면에서 실행 중인 상태
- Inactive : 앱이 화면에 보이지는 않지만 코드를 실행하고 있는 상태
- Background : 앱이 백그라운드에서 실행 중이며 코드를 실행하고 있지 않은 상태
- Suspended : 앱이 곧 종료되는 상태. 시스템이 제어하며 정확한 종료 시점은 알 수 없으며 종료되면 다시 Not Running으로 돌아간다.
만약 어떤 앱을 실행해 작업하고 있는 도중 전화나 알림이 오면 사용하던 앱 위로 전화나 알림이 덮어씌워지게 된다. 이 경우에는 기존에 실행 중이던 앱이 Active 상태에서 Inactive 상태로 바뀌게 된다.
Background에 위치한 앱이 전부 실행 중인 상태는 아니며, 앱을 다시 실행했을 때 재로딩이 발생하면 시스템이 해당 앱을 Suspend 상태로 전환한 것이고, 재로딩이 발생하지 않고 바로 실행된다면 Background 상태였던 것이다. 따라서 개발자는 앱의 상태가 변경됨에 따라 대응할 수 있는 앱을 만들어야 한다.
iOS 13 버전에서는 다크모드, iPadOS, SwiftUI 등이 등장했다.
iOS 13 이전의 환경에서 앱의 상태 변화는 일반적으로 AppDelegate를 통해 제어할 수 있었지만 iOS 13과 함께 등장한 iPadOS에서는 Split View(하나의 화면에서 동시에 2개 이상, 최대 3개의 앱이 실행되는 화면 뷰)가 가능해지면서 앱의 생명주기에 변화가 생겼다.
기존에는 하나의 화면에서 하나의 앱을 사용했기에 AppDelegate에서 Process LifeCycle과 UI LifeCycle을 모두 관리했지만 iPadOS 이후 하나의 화면에서 여러개의 뷰를 관리하게 되면서 SceneDelegate가 UI LifeCycle을 관리한다.
- iOS 12 이하 : AppDelegate 사용
- iOS 13 이상 : AppDelegate + SceneDelegate 혼용
- AppDelegate - 앱의 실행과 종료 여부 관리
- SceneDelegate - 앱 하나당 UI적인 상태 관리 (Active, Inactive…)
- Cocoa Touch : 애플 환경에서 앱을 제작하기 위한 도구 모음으로 화면 이벤트 및 UI 기능 포함한다. (e.g. UIKit)
- Media : 음악, 파일, 비디오 등의 멀티미디어 관리 서비스
- Core Service : GPS, 근접 센서, 조도 센서, 중력가속도 센서, 기울임(자이로스코프), 나침반 등 기기 자체의 움직임이나 하드웨어 특성에 기반한 서비스 제공
- Core OS : C언어 기반의 저수준 API, 하드웨어와 가까이 있는 최하위 계층으로 물리적으로 이루어진 영역이다. (e.g. 아이폰 배터리)
코코아 쪽 계층일수록 사용자(개발자)와 가깝고 반대일수록 사용자(개발자)와 멀어지게 된다.
코코아 프레임워크(Cocoa Framework)는 애플 플랫폼 기반의 애플리케이션을 만들기 위해 사용하는 프레임워크이다. 코코아 프레임워크에서 iOS, iPadOS, watchOS 등 터치와 관련된 애플리케이션을 개발할 때 사용하는 프레임워크가 코코아 터치 프레임워크이다.
코코아 터치 프레임워크는 iOS 개발 환경을 구축하기 위한 최상위 프레임워크로, 애플리케이션의 다양한 기능 구현에 필요한 여러가지 개발 도구를 포함한다. (카메라, 광고, 주소록, 알림, 지도 등…)
코코아 터치 프레임워크의 대표적인 예로 유저 인터페이스 도구인 UIKit이 있다.
파운데이이션 프레임워크는 원시 데이터 타입(Int, String…)과 컬렉션 데이터 타입(Array, Dictionary, Set), 그리고 앱의 기본 객체와 기반 기술을 제공하는 역할을 하는 프레임워크이다.
앱의 기본적인 기능 구현을 위해 필수적으로 import 되어야 하지만 UIKit에 Foundation이 기본으로 import 되어있기 때문에 UIKit만 사용하더라도 Foundation 기능을 함께 사용할 수 있다.
UIKit은 iOS 애플리케이션의 사용자 인터페이스를 구성하고 사용자 액션(이벤트)를 관리하기 위한 프레임워크이다.