본문 바로가기

iOS 개발/App 개발 관련

(12)
[iOS] GCD, 비동기 프로그래밍 참고 자료 Apple 공식 문서 Dispatch Apple 공식 문서 DispatchQueue Stackoverflow GCD 관련 Apple 공식 문서 Concurrency Programming Guide 목차 (눌러서 이동) 비동기 프로그래밍, Grand Central Dispatch(GCD) Apple 의 UI 는 Main thread 에서만 업데이트 되도록 디자인되어 있다. UIKit 가 thread-safe 하지 않아 Main thread 에서 순차적으로 처리하는 것이 안정적이기 때문이다. (UIKit 가 thread-safe 하지 않은 이유.) Main thread 가 UI 를 업데이트 할 동안 네트워킹과 같은 무거운 작업들을 다른 thread 에서 동시에 작업할 수 있다면 앱 성능 향상에 효..
[iOS] AppDelegate, SceneDelegate 의 역할, WWDC2019 (iOS 13~) 참고자료 WWDC2019 목차 (눌러서 이동) iOS 13 이전의 App Delegate iOS 13 이전의 App Delegate 는 Process level 의 App event 를 관리 (App Launched) 하거나, App 의 UI Status 를 관리(Entered Foreground)했다. 이전에는 App 이 하나의 Process 와 이를 표현하기 위한 하나의 UI 를 가졌었다. 하지만, iOS 13 부터 하나의 Process 에 대해 여러 UI 객체를 (Scene Session 이라고 부른다.) 가질 수 있게 되어 UI 에 대한 책임을 Scene Delegate class 로 분리한다. App Delegate & Scene Delegate App Delegate 는 이전처럼 App p..
[iOS] Stanford iOS Lecture - MVVM (cs193p) MVVM Architecture MVVM 의 핵심은 View (user-interface code) 와 Model (backend or logic) 의 분리이다. 이를 위해 Model 의 모든 변화를 View 가 파악하고 UI 를 Rebuild 할 수 있어야 한다. Model Model 은 UI 와 독립적이다. (Model 파일에는 "import SwiftUI" 구문이 없다.) Model 은 앱이 '무엇인지, 무엇을 할지' 설명하는 모든 Data & Logic 을 담고 있다. Model 은 앱의 Source of truth 로서 Model 의 데이터 혹은 정보를 UI 코드에 저장하거나 하는 일은 없다. View View 는 앱을 사용자에게 '어떻게 보여 줄지' 에 대한 것이다. View 는 Model 로..
[iOS] 모의 URLSession 으로 네트워킹 Test 하기 목차 (눌러서 이동) 모의 URLSession 이 필요한 이유 Network 연결이 필요한 작업을 테스트할 때 항상 실제 network 를 통해 해당 URL 에 접근한다면 너무 많은 시간이 소요된다. 따라서, 실제 network 연결 없이 네트워킹 함수를 테스트 할 수 있어야 한다. URL download 함수 func downloadData(_ session: URLSession, completionBlock: @escaping (Result) -> Void) { if let url = URL(string: /*Put URL that you want to downlaod some data.*/) { let task = session.dataTask(with: url, completionHandler: ..
[iOS] TDD(Test Driven Development) Tutorial raywenderlich - Test Driven Development Tutorial for iOS 목차 (눌러서 이동) TDD 의 장점 Test code 는 Production code 의 작성과 함께 계속 수정되므로 개발 내용을 계속해서 따라간다. 그래서 작성한 Test 자체가 앱의 동작 방식에 대해 기술한 개발 문서가 된다. TDD 방식으로 개발할 때 Test code 의 Code coverage 가 당연히 더 좋고, 추후에 중대한 update 를 하게 될 경우 훨씬 쉽다. 한 명이 Test code 를 작성, 다른 한 명이 Production code 를 작성하며 Pair-programming 을 적용하기 쉽고, 이로 인해 개발 속도는 빠르지만 튼튼한 앱을 만들게 된다. Red - Green -..
[iOS] WWDC 2019 Testing in Xcode WWDC2019 Testing in Xcode Introduction to XCTest Test Pyramid 피라미드 형태의 Test plan 을 통해 효율적이고 철저하게 검사하면서도 속도를 놓치지 않도록 균형을 잡을 수 있다. Unit test 는 Test 의 기본 단위이다. 단일한 코드 조각 (보통은 function) 에 대해 특정 입력을 넣고 기대하는 출력이 나오는지 확인한다. Unit test 짧고 단순하며 빠르다. 또한, 모든 Test 의 기반이 되므로 최대한 대부분의 functions 이 Test 될 수 있도록 하는 것이 좋다. Integration test 는 좀 더 넓은 범위에 적용된다. 앱의 여러 부분들 혹은 class 들이 모여 서로 올바르게 상호작용하고 동작하는지 확인한다. Unit..
[iOS] Unit & UI Testing raywenderlich - iOS Unit Testing and UI Testing Tutorial 테스트는 앱이 거대하고 복잡해짐에 따라 버그를 숨기지 않고 안전하게 확장되도록 하는 중요한 장치이다. 이번 튜토리얼을 통해 다음 사항들을 테스트 해본다. 1. 앱의 Model 즉, 중심이 되는 논리나 기능. 2. Asynchronous methods (비동기적으로 진행되는 작업). 3. 라이브러리나 시스템 객체와의 상호작용을 가짜로 흉내내서 테스트하기 (Stubs and mocks). 4. UI Test. 5. Performance Test. 6. Code coverage tool (테스트를 거치는 실제 코드들을 확인하기). 어떤 것을 테스트할지 파악하기 테스트가 무엇을 위해, 그에 따라 어떤 부분에 필..
[iOS] MVC 구조의 앱을 MVVM 으로 바꾸기 raywenderlich - iOS MVVM Tutorial: Refactoring from MVC MVVM 으로 바꿀 때 장점 ViewController 가 단순해진다. Business logic 을 더 잘 표현 할 수 있다. ViewModel 이 ViewController 보다 테스트하기 쉽다. ViewModel? ViewController? MVVM 구조에서 ViewController 는 View 를 바꾸고 View 에서 받은 입력을 ViewModel 로 전달하는 일만 한다. 이 이외에 MVC 구조의 ViewController 가 하던 모든 일을 ViewModel 에게 전달할 것! ViewModel 은 View 입력을 받아 Model 갱신, Model 의 정보를 ViewController 에게 전달..