본문 바로가기

분류 전체보기

(44)
UIApplication에 대해 알아보자 - 목적 : 아주 희기하게 인터페이스나 현재 디바이스의 SafeArea영역의 값을 사용하기 위해서 사용되는 Class인 UIApplication이 어떤 클래스인지와 해당 클래스를 통해서 할 수 있는 것들에 대해서 알아보자. UIApplication iOS에서 돌아가는 앱들을 위한 준비와 통제의 중심점을 나타내는 객체이다. 모든 iOS 앱은 무조건 하나의 UIApplication인스턴스를 가진다. 앱이 열릴 때 시스템은 아래의 메서드를 호출한다. UIApplicationMain( _ argc: Int32, _ argv: UnsafeMutablePointer, _ principalClassName: String?, _ delegateClassName: String? ) -> Int32 다른 업무들 사이에서 ..
XCode 테스트에 대해서 알아보자 참조한 공식 문서 : https://developer.apple.com/documentation/xcode/testing-your-apps-in-xcode XCTest는 다양한 추상화 레벨에서 테스트를 작성하기 위해 설비화한 프레임워크이다. 좋은 테스팅 구성은 각 테스트의 이점을 최대화하여 다양한 타입의 테스트를 혼합해서 쓴다. 테스트들의 피라미드 형태의 구성을 위해 아래 이미지를 보자. 당신의 앱의 로직을 커버하는 빠르고, 잘 독립된 유닛 테스트들을 포함하여 유닛 테스트들의 집합체인 인테그레이션 테스트들까지 잘 연결되어 UI 테스트는 기대되는 사용자의 케이스의 동작이 맞는지 확인할 수 있다. UI 테스트는 당신의 앱이 실제로 동작하는 상태를 나타내지만 다른 종류의 테스트들보다는 오래걸릴 것이다. 같은 ..
[iOS16] setNeedsUpdateOfSupportedInterfaceOrentations와 requestGeometryUpdate 메서드 iOS16부터는 다음과 같은 UI API들이 Deprecated되었다. - shouldAutorotate : 디바이스 화면전환 혹은 해당 뷰 컨트롤러가 비활성화되어있다가 다시 활성화되었을 때 지원되는 오리엔테이션에 따라서 자동으로 회전되도록 허용하는 여부 - attemptRotationToDeviceOrientation : 현재 디바이스 방향으로 회전하도록 시도하는 API 위 두번째 API의 Deprecated에 따라 기존에 UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation") 이런식의 하드코딩 키 값으로 디바이스의 방향을 임의로 변경시키는 메서드 또한 의미가 없어졌다. 대신 iOS16부터 애플은..
DispatchSemaphore 개념 및 실험을 통한 추가 정리 DispatchSemaphore란 무엇인가 전통적인 세마포어 카운팅 방식을 사용함으로써 다중 실행 컨텍스트(멀티 스레드 환경) 전체를 포함하여 리소스로의 접근을 컨트롤하는 객체이다. 디스패치 세마포어는 전통적인 세마포어 카운팅을 효율적으로 구현한 객체이다. 디스패치 세마포어는 오직 블락이 될 필요가 있는 쓰레드를 호출할 때 커널 레벨까지 호출을 다운시킨다. signal() 메서드를 호출함으로써 세마포어 카운트를 증가시키고 wait()메서드 혹은 파라미터로 전달된 특정 타임아웃 값에 의해 세마포어 카운트를 감소시킨다. Creating a Semaphore init(value: Int) 초기화 값(세마포어 카운트)와 함께 새로운 세마포어를 생성한다. 파라미터로 전달되는 value는 리소스에 접근할 수 있는 ..
[Apple Framework] CoreAnimation CoreAnimation 비주얼 요소들을 그리고, 혼합하고, 애니메이팅하는 프레임워크이다. 코어 애니메이션은 당신의 앱을 느리게 만들거나 CPU에게 부담을 주지 않고도 부드럽고 높은 FPS의 애니메이션을 제공한다. 애니메이션의 매 프레임을 그리도록 요구되는 대부분의 업무는 당신을 위해 진행된다. 당신은 시작/종료 지점과 같은 애니메이션 파라미터들을 설정하고 코어 애니메이션은 나머지 작업을 수행하고 대부분의 작업을 GPU에 넘겨 렌더링을 수행한다. CALayer 이미지 기반의 컨텐츠를 관리하고 당신이 해당 컨텐츠에서 애니메이션을 수행하도록 허용하는 객체다. 레이어들은 뷰들을 위한 Backing Store를 제공하는 데 사용될뿐만 아니라 컨텐츠를 보여줄 뷰 없이도 사용될 수 있다. 레이어의 주요 업무는 당신..
[AVFoundation] AVFoundation에서 자주 쓰이는 객체들에 관하여 AVFoundation 애플 네이티브 프레임워크로 오디오비주얼 에셋들/디바이스 카메라 제어/오디오 처리/시스템 오디오 인터렉션 설정등을 할 수 있는 API 혹은 객체를 제공하는 프레임워크이다. 애플 플랫폼에서 오디오비주얼 미디어를 처리/캡처링/플레이/검사를 하기 위한 Tasks의 넓은 집합을 함께 압축한 몇몇 주요 기술들의 영역을 혼합한 프레임워크이다. Video Effects 표준 비디오 트랜지션 효과들을 정의하고 미디어 타임(비디오 혹은 오디오 타임)과 함께 레이어 애니메이션을 동기화하거나 커스텀 비디오 컴포지터들을 생성한다. Core Animation Integration CoreAnimation은 보통 스레드 디버깅에서 CA라고 불리는 약자의 풀 네임으로 비주얼 요소들을 애니메이팅/혼합/렌더링하는..
[Swift] Swift에서의 프로토콜 사용의 다양한 예 실제로 내가 개발을 하면서 많이 접해본 케이스들을 간결하게 설명하겠다. 보통 프로토콜을 사용하려다 실패하거나, 혹은 프로토콜을 통해 더 쉽게 개발을 했을 때를 정리해둔 것으로 해당 내용은 100%정확하지 않다. 오히려 다른 방식으로 풀 수 있는 경우도 있으므로 이런 경우에선 코멘트를 부탁드리겠습니다. 프로토콜의 init메서드 앞에 붙는 required를 이해하라. 프로토콜에 생성자 메서드가 존재하는 경우 해당 프로토콜을 준수하려는 객체가 이미 내부에 동일한 생성자가 구현되어있지 않은 이상 생성자 메서드를 구현하도록 강제한다. 단, 클래스의 정의가 final이냐 아니냐에 따라 생성자 메서드 앞 키워드는 달라진다. // 여기 이니셜라이저를 가지는 프로토콜이 있다. protocol ProtocolHasInit..
[Swift] Protocol에 대한 이해 및 정리 프로토콜 특정 객체 혹은 기능을 추상화하는 자료구조 그렇다면 프로토콜을 이해하는 것의 시발점은 추상화가 무엇인지 이해하는 것이 되겠다. 추상화 추상화는 특정 객체나 기능을 구현하기 위해 필요한 프로퍼티나 메서드의 집합을 의미한다고 개인적으로 정의하고 싶다. 그럼 여기서 의문이 들 수 있다. 특정 객체나 기능을 바로 실체화하여 사용하지 않고, 왜 굳이 추상화를 하여 한 번더 고민해야하는 걸까. 컴퓨터 과학용어중에 캡슐화라고 있다. 캡슐화는 특정 객체나 기능을 구현하는 데 매우 복잡한 로직을 외부로부터 숨기고 사용자는 오롯이 객체나 기능에서 노출된 API만 사용하여 비즈니스 목적에 도달할 수 있는 것이다. 추상화는 이 캡슐화를 진행하는 데 있어 매우 도움이 되고 특히, 위에서 말한 바로 실체화로는 이룰 수 ..