iOS/개념 & 개발 69

[iOS] Unit Test를 GitHub Actions로 자동화하며 겪은 에러 해결 과정

Unit Test 자동화GitHub Actions를 활용하면 Xcode에서 작성한 Unit Test를 자동으로 체크할 수 있습니다.PR을 생성할 때, push를 할 때 등의 액션이 발생하면 Unit Test를 수행하는 방식입니다.Test 편의성과 안정성을 동시에 챙길 수 있으므로 꼭 필요한 과정입니다.  GitHub Actions로 자동화하며 겪은 에러저는 GitHub 안에서 개인 프로젝트 사이클을 돌리고 싶었기 때문에 GitHub Actions를 선택하였는데요.쉽게 가능할 줄 알았지만, 많은 에러를 겪었습니다. 고군분투의 흔적 ;;결과론적인 이야기지만, 앞에서부터 차근차근 살펴봤다면 쉽게 해결했을 텐데... 반성합니다 🥲성공한 Workflow는 최하단에 있으니 최종 결과만 필요..

[iOS] DTO의 Optional 속성과 앱의 하위 호환성 고민 (결론 없음 주의)

* 혼자 고민한 과정을 기록 목적으로 적은 포스팅입니다. 읽기 전 참고 부탁드립니다 :) DTO DTO는 서버와 통신하는 API의 데이터를 디코딩, 인코딩하기 위한 객체입니다. { "id": 1000, "name": "다이어트", "continued": 10, "lastChallenged": "2011-04-10T20:09:31Z" } 가령 API로 오는 데이터가 위와 같다면, struct CategoryDTO: Codable { let id: Int let name: String let continued: Int let lastChallenged: Date } CategoryDTO는 id, name, continued, lastChallenged 속성을 가지게 됩니다. 이때 각 속성은 Non-옵셔널이 ..

iOS/개념 & 개발 2024.03.20

[iOS] ProxyMan 설치부터 Response 관찰까지

서론 앱을 개발할 때 서버와 API 통신을 자주 합니다. API 통신 개발 과정에서 문제가 생겼을 때 디버깅을 위해 Postman, Swagger를 사용하기도 합니다. Postman, Swagger도 좋은 방법이지만, 실제 내 앱이 어떤 요청과 응답을 주고 받는지 궁금할 때가 있습니다. if let requestBody = urlRequest.httpBody, let requestBodyString = String(data: requestBody, encoding: .utf8) { print("[요청 데이터]\n\(requestBodyString)") } if let responseBody = try? encoder.encode(body), let responseBodyString = String(dat..

iOS/개념 & 개발 2024.02.21

[iOS] XCTest에서 비동기 테스트하기 (XCTestExpectation)

서론 UnitTest 사용해보기와 XCTest 성능 측정 (Command Line 환경)에서 UnitTest를 하는 방법과 성능 측정 방법을 다뤘습니다. 이전에는 동기 메서드만 테스트만 다뤄서 이번에는 비동기 테스트에 대해 말해보려고 합니다. 대부분의 앱에는 네트워크 통신이 필요합니다. 네트워크 통신은 오래 걸리는 작업이기 때문에 반드시 비동기로 처리해야 합니다. 같은 이유로 네트워크 테스트도 비동기로 테스트해야 하며, 다른 동기 테스트와 분리해야 합니다. 비동기 테스트 비동기 메서드를 동기 테스트 코드와 똑같이 테스트하면 제대로 테스트할 수 없습니다. 비동기 메서드의 결과가 나오기 전에 테스트 함수가 종료되기 때문입니다. 그래서 비동기 메서드가 종료될 때까지 기다리는 작업이 필요한데요. 이를 위해 XC..

iOS/개념 & 개발 2023.11.02

[iOS] Xcode 15 #Preview 사용해보기 (+ 무선 Preview)

서론 Xcode 15.1 Beta에서 IBDesignable이 Deprecated 되었습니다. Xcode 15부터 생긴 #Preview 매크로를 적극 권장하기 위한 처리가 아닐까 생각이 들어서 이번 기회에 #Preview를 사용해 보기로 했습니다. 막상 사용해 보니 생각보다 더 편하고 유용해서 이렇게 포스팅까지 하게 되었네요. 특히 무선 Preview가 상상 이상이라 놀라웠습니다. 하나하나 천천히 살펴봅시다! Preview 관련 WWDC를 다룬 포스팅도 봐주시면 감사하겠습니다 ㅎㅎ #Preview #Preview를 사용하는 방법은 정말 간단합니다. #Preview { 보고 싶은 뷰 } 위 코드만 소스 파일 최상위에 적어주면 됩니다. 그럼 Xcode 화면이 분리돼서 Preview가 보입니다. Xcode가 ..

iOS/개념 & 개발 2023.11.01

[iOS] Delegate에 AnyObject 채택은 필수일까?

서론 언제나 그렇듯 아래와 같이 Delegate를 만들고 있었습니다. protocol OOODelegate: AnyObject { func ... } 근데 아차! 싶었습니다. Delegate에 왜 AnyObject를 붙여야 하지?라는 생각을 따로 안 해봤더라고요. 어렴풋이 알고는 있었지만 따로 생각을 해보거나 글로 정리한 적이 없어서 이렇게 포스팅하기로 결정했습니다. iOS에서는 언제 Delegate를 쓸까? Delegate는 Delegate를 채택하는 누군가에게 나의 행위를 위임합니다. Delegate를 사용하는 곳에서는 메서드를 호출만 하고, Delegate를 채택하는 곳에서 메서드를 구현하는 것입니다. iOS에서는 주로 유저 이벤트에 따른 행위를 구현할 때 Delegate를 사용합니다. 예를 들어,..

iOS/개념 & 개발 2023.10.14

[iOS] FPS 측정하기 - CADisplayLink

CADisplayLink CADisplayLink는 화면의 업데이트 주기(VSYNC 주기)로 동작하는 타이머 객체입니다. CADisplayLink를 사용하면 디스플레이 주사율에 맞춰서 특정 함수를 호출시킬 수 있는데요. 애니메이션과 그래픽 렌더링을 정확한 타이밍에 수행할 수 있어서 더 부드럽고, 최적화할 수 있습니다. 또한, Actual Frame Rates와 Frames Per Second를 측정할 수 있습니다. Actual Frame Rates는 기기가 출력하는 초당 프레임 수를, FPS는 실제로 표시되는 프레임 수를 나타냅니다. 마지막으로 preferredFrameRateRange를 설정하여 프레임 수를 제어할 수 있습니다. OS가 알아서 최적화를 하지만 강제할 필요가 있는 경우 preferredF..

iOS/개념 & 개발 2023.10.01

[iOS] Alert 개선 과정 단계별로 살펴보기

서론UIAlertController는 보일러 플레이트가 생기기 쉽습니다.UIAlertController 생성UIAlertAction 생성present위 세 가지 로직이 반복적으로 사용되기 때문입니다. 메서드로 분리할지라도 UIAlertAction 생성에 중복 코드가 생기고, 그게 아니라면 메서드 파라미터가 많아집니다. 이번에는 Wrapper를 사용해 선언형 구조로 Alert를 깔끔하게 정리해 보겠습니다. 많이 고민하며 진행했지만 잘못된 부분이 있을 수 있습니다. 댓글로 피드백 꼭 부탁드립니다. 전체 코드는 아래 링크에서 확인 가능합니다. https://github.com/jeongju9216/SwiftPractice/tree/main/ExampleAlertWrapper/ExampleAlertWrapper..

iOS/개념 & 개발 2023.08.30

[iOS] iOS 시뮬레이터와 Android 에뮬레이터 차이점

서론 갑작스레 iOS의 시뮬레이터와 안드로이드의 에뮬레이터 차이점이 궁금했습니다. 에뮬레이터는 왜 시뮬레이터보다 느릴까?라는 생각에서 시작된 의문이었습니다. 찾아보니 생각보다 근본적인(?) 이유때문에 차이가 있는 거였습니다. 시뮬레이터(Simulator) 시뮬레이터는 실제 기기의 표면적인 결과만 모방하고, 그 안에서 일어나는 모든 과정을 다 구현하지는 않습니다. 예를 들어, 아이폰의 CPU와 OS의 모든 것을 그대로 구현한 것은 아니지만, 시뮬레이터에 앱을 올렸을 때 실제 기기와 결과가 동작하도록 구현되어 있습니다. 그래서 시뮬레이터와 실제 기기 간의 동작에 차이가 있을 수 있고, 서로를 완전히 대체 가능하지 않습니다. 저는 이 개념을 시뮬레이션 게임과 함께 생각하니 이해가 빠르게 되었습니다. 비행기 시..

iOS/개념 & 개발 2023.06.26

[iOS] 비전 프로(Apple Vision Pro) 시뮬레이터 체험

Xcode 15 beta 2 릴리즈 2023년 6월 22일, Xcode 15 beta 2와 함께 Vision Pro SDK가 릴리즈되었습니다. visionOS 시뮬레이터 SDK 릴리즈 소식 및 다운로드 방법 [IT 소식] visionOS 시뮬레이터 SDK 릴리즈 소식 및 다운로드 방법 visionOS SDK 릴리즈 2023년 6월 22일 드디어 visionOS SDK가 릴리즈 되었습니다. Xcode 15부터 사용할 수 있으며 Preview에서 앱을 실행시킬 수 있다고 합니다. 실내 레이아웃과 조명 환경을 변경할 수 있다는 jeong9216.tistory.com 저도 후다닥 Xcode 15를 다운 받아서 실행해봤습니다. 애플에서 샘플 코드도 올려줘서 체험해보기가 어렵지 않았어요. 전체 개요 : https:..

iOS/개념 & 개발 2023.06.22
반응형