iOS 79

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

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

[Xcode] Placeholder가 있는 Code Snippet 작성 방법

Code Snippet Code Snippet은 미리 정한 짧은 키워드로 긴 코드를 자동 완성해주는 기능입니다. 아무리 긴 코드라도 미리 등록한 단축어를 입력하면 끝이니 생산성에 큰 도움을 줍니다. (전 Attributes, Constraints처럼 오타가 많이 나는 단어도 애용합니다 ㅎㅎ;) Code Snippet은 많이들 아시지만, placeholder가 포함된 code snippet은 잘 모르기도 합니다. Placeholder가 있다면 무엇을 넣어야 할지 파악하기 쉽고, Tab을 이용하여 입력 부분으로 바로 이동할 수도 있습니다. (중요) Placeholder를 포함한 Code Snippet 생성 Placeholder는 를 작성하면 됩니다. Code Snippet이 아니더라도 코드 입력창에서 을 작..

iOS/Xcode 2024.04.03

[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

[Xcode] XCTest 성능 측정 (Command Line 환경)

서론 최근 XCTest를 이용해 성능 측정을 해보았습니다. 직접 해보기 전에는 그저 결과를 보여주는 용도구나~ 생각했었는데 직접 사용해보니 훨씬 더 자세한 내용을 제공해주었습니다. 이번 포스팅에서는 XCTest를 이용해 성능 측정하는 방법을 간단하게 알아보겠습니다. Command Line에서 XCTest 사용 먼저 Command Line에서 XCTest를 사용하는 법을 알아보겠습니다. Xcdoe 14.3 기준입니다. 1. 프로젝트 파일을 열어줍니다. 2. 하단의 + 버튼을 누릅니다. 3. Unit Testing Bundle을 선택합니다. 4. Product Name을 입력하여 생성합니다. 참고로 Product Name은 프로젝트 이름Tests 가 일반적입니다. 5. 생성 완료 (git 표시는 무시해주세요..

iOS/Xcode 2023.08.02
반응형