iOS 개발 (28) 썸네일형 리스트형 [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 에게 전달.. [iOS] 최고의 디자인 패턴, MVC 에 대한 오해 https://medium.com/flawless-app-stories/the-only-viable-ios-architecture-c42f7b4c845d The only viable iOS architecture Deep dive into MVC, MVVM, MVP, VIPER as a result of which we’ll understand that for iOS there is only one possible among them. medium.com MVC Model 은 "data", View 는 유저가 보는 것, Controller 는 중개자 역할. Controller 는 Model 에서 데이터를 받아 View 를 통해 User 에게 보여주거나, User 의 동작을 View 에서 받아와 Model.. [iOS/SwiftUI] Alignment Guides, Custom Alignment Alignment guides 부모 View 의 정렬 규칙이 아닌 자식 View 각각의 정렬 규칙을 따르고 싶을 때 사용한다. Stack 에 속한 View 들은 각각의 Alignment guide 를 갖는다. Stack 의 종류에 따라 수평, 수직의 중간 지점에 대한 정보가 계산되는데, 각 View 들은 자신이 속한 Stack의 중간 지점에 자신의 Alignment guide 를 맞춘다. 즉, 기본적으로 Center alignment 가 적용된다. 그런데 Stack 에 속한 일부 View 에 대해 다른 정렬 기준을 적용하고 싶다면 alignmentGuide modifier 를 사용하면 된다. HStack { Text("🌧") .alignmentGuide(VerticalAlignment.center) { .. [iOS/SwiftUI] Lazy Stacks Lazy Stacks Stack View의 일종으로 아이템들이 화면에 렌더링 되는 순간에 생성된다. 미리 생성해 놓지 않아 메모리를 낭비하지 않는다. ScrollView { LazyVStack(alignment: .leading) { ForEach(1...100, id: \.self) { Text("Row \($0)") } } } List Swipe to delete, Reordering, Built-in style (Horizontal divider, Navigation mark) 등의 기능을 가진 Lazy Stack 의 일종이다. 즉, List 를 사용하는 경우 기본적으로 View 가 렌더링 되는 순간 생성되는 것이다. 이전 1 2 3 4 다음