Swift

· Swift/UIKit
모바일 앱을 개발하다보면 여러 데이터를 목록 형태로 보여줘야하는 경우가 있습니다.Apple의 UIKit에는 이렇게 데이터를 목록 형태로 보여주는 방법으로 UITableView(이하 테이블 뷰)나 UICollectionView(이하 콜렉션 뷰) 등을 사용할 수 있는데, 이번 시간에는 테이블 뷰와 콜렉션 뷰의 공통점과 차이점, 그리고 어떤 경우에 어떤 뷰를 사용하는 것이 더 좋은지에 대해 알아보겠습니다. 공통점테이블 뷰와 콜렉션 뷰는 UIKit에서 목록을 표시하는 UI 컴포넌트로, 두 뷰에는 몇 가지 공통점이 있습니다. 1. 데이터를 목록 형태로 보여주기 위한 UI 컴포넌트앞서 설명했듯 테이블 뷰와 콜렉션 뷰는 데이터를 목록 형태로 보여주는데 사용할 수 있습니다. 2. Cell 단위 데이터 표시테이블 뷰와 ..
앱을 사용하다보면 다양한 방법으로 메뉴를 표시하는 경우가 있습니다. 이번 시간에는 이 중에서 콘텍스트 메뉴(Context Menu, 컨텍스트 메뉴) 및 SwiftUI에서 콘텍스트 메뉴를 제공하는 방법에 대해 알아보려고 합니다. 콘텍스트 메뉴는 사용자가 클릭한 위치나 선택한 항목에 따라 나타나는 팝업 메뉴로 플랫폼에 따라 콘텍스트 메뉴, 콘텍스쳐 메뉴, 바로 가기 메뉴, 빠른 메뉴 등의 다양한 명칭을 갖고 있습니다.여기서는 Apple 휴먼 인터페이스 가이드라인(HIG)의 한국어 번역을 따라 빠른 메뉴라는 명칭을 사용하겠습니다. 빠른 메뉴빠른 메뉴는 특정 동작을 통해 자주 사용하는 항목에 편리하게 접근할 수 있는 메뉴로, 인터페이스를 어수선하게 만들지 않고 항목과 직접 관련된 기능에 접근할 수 있게 만드는 ..
· Swift/iOS
지난 시간에는 커스텀 환경에서 번역을 제공하는 방법에 대해 알아보기 전, TranslationSession의 간략한 개요와 커스텀 환경에서 번역을 제공하기 위한 준비를 하는 방법을 알아보았습니다.이번, 마지막 3부에서는 지난 시간에 알아본 TranslationSession을 이용해 커스텀 환경에서 번역을 제공하는 방법에 대해 알아보겠습니다. 커스텀 번역 환경의 구성번역할 문자열을 메서드로 보내기만 하면 알아서 화면에 보여줬던 시스템 내장 UI 환경과 다르게 커스텀 환경에서의 번역은 요청과 응답으로 이루어져, 문자열을 이용해 요청을 만들고 이를 메서드를 이용해 번역하고, 메서드에서 반환받은 응답을 직접 처리해야 합니다. 커스텀 번역 요청커스텀 환경에서의 번역 요청은 직접 String을 요청하는 방법과 Re..
· Swift/iOS
지난 시간에는 iOS 앱에서 네트워크 상의 텍스트를 번역하는 방법 중 하나인 Translation의 개요와 시스템 내장 UI 환경에서 번역을 제공하는 방법을 알아봤습니다.Translation은 시스템 내장 UI뿐만 아니라 커스텀 환경에서 번역을 지원하는 방법 또한 제공하고 있는데, 이번 시간부터는 커스텀 환경에서 번역을 제공하는 방법을 알아보겠습니다. 특히, 이번 2부에서는 커스텀 환경에서 번역을 제공하기 위한 방법인 TranslationSession의 개요와 커스텀 환경에서 번역을 제공하기 위한 준비, 그리고 Translation에서 지원하는 언어 및 상태에 대해 알아보겠습니다. TranslationSessioniOS 기본 앱 중에는 iMessage, Safari 등 이미 시스템 UI를 사용하여 번역을..
· Swift
제 블로그에는 iOS 다국어 지원에 대한 글이 2개 있습니다. 하나는 2022년에 작성했던 예전 방식인 Strings File을 사용한 방식에 대한 글이고, 또 하나는 올해 3월에 작성한 String Catalog를 사용한 방식입니다. 글을 작성한 이후 개인적으로 다국어 지원에 대한 질문을 여러 경로로 받았습니다.특히 String Catalog를 사용한 방식인 [iOS] String Catalog - Xcode 15 이후의 iOS 앱에서 다국어 지원하기 (feat. Localization) 작성 이후 앱의 로컬 텍스트가 아닌 네트워크에서 받아온 텍스트를 다국어 지원하는 방법이 있는지에 관한 질문을 몇 번 받았었는데, 당시 제가 알고 있던 지식 수준에서는 iOS로 네트워크 텍스트까지 다국어 지원하는 방법을..
· Swift
프로그래밍을 하다보면 다양한 소프트웨어 디자인 패턴을 접하게 됩니다. 소프트웨어 디자인 패턴은 프로그램 개발에서 자주 발생하는 문제를 해결하기 위한 방법의 하나로, 1995년 GoF라 불리는 4명의 유명한 개발자가 구체화한 GoF 디자인 패턴이 가장 많이 사용되고 있습니다. Apple에서는 디자인 패턴을 Cocoa 환경에서 사용하기 위한 Cocoa Design Patterns을 제시하고 있는데, 이번에는 이 중 GoF 디자인 패턴에서도 많이 사용되는 Singleton(이하 '싱글톤')에 대해 알아보겠습니다. Singleton(싱글톤)이란?싱글톤은 GoF 디자인 패턴 중 생성(Creational) 디자인 패턴에 해당하는 디자인 패턴으로, 프로그램이 시작될 때 객체의 인스턴스를 처음 한 번만 생성하여 사용하..
· Swift/UIKit
그동안 많은 프로젝트를 하면서 여러 뷰를 하나의 뷰로 감쌀 때 UIView를 사용해 왔는데요.뷰를 감싸기 위한 UIStackView가 있는 것을 알면서도 더 자유롭게 뷰를 배치하기 위해 사용하지 않았습니다.또, UIStackView를 사용하면서 여러 제약 조건에 충돌이 생기기도 했고, 이러한 충돌을 어떻게 해결해야 할 지 감이 오지 않아서 빠르게 프로젝트를 진행해야 한다는 핑계로 UIStackView의 사용을 더 피하기도 했습니다. 그러던 중 최근 새로운 프로젝트를 하면서 뷰 간의 일관된 간격을 위해 UIStackView를 사용하게 됐는데요.이번 시간에는 UIStackView를 사용하면서 공부한 내용을 기록하려 합니다. UIStackView@MainActorclass UIStackView: UIView우..
· Swift/iOS
최근 개인 앱을 하나 출시 했는데요. 이제 막 출시 해서 얼마 되지 않겠지만, 국가별 다운로드 수가 궁금해서 확인해 보니 한국보다는 해외에서 다운받은 경우가 더 많았습니다. 하지만, 제가 출시한 앱은 해외 유저를 전혀 생각하지 않은 앱이기 때문에 외국어를 지원하지 않고 있었는데요. 그래서 "최소한 영어라도 지원을 해보자" 하고 급하게 부랴부랴 언어에 영어를 추가했습니다. 그런데, 영어를 지원하기 위해 이전에 사용하던 Strings File을 사용하려고 보니 이름이 Strings File (Legacy)로 바뀌어 있었습니다. 이때, 뭔가 이상함을 감지하고 찾아보니 Xcode 15부터는 String Catalog라는 새로운 파일 형식이 생겨 Localization에 이 형식을 사용하게 된 것이었습니다. 그래..
· Swift/iOS
개인적으로 이미지나 비디오 등의 미디어 플레이, 편집 등 멀티미디어 관련 기술에 관심이 많아 자료를 많이 찾아보는 편인데, 최근 미디어에 여러 필터를 적용하는 방법을 찾아보았습니다. 이번 시간에는 미디어에 다양한 효과를 주는 방법 중 Core Image(이하 '코어 이미지') 프레임워크에서 지원하는 CIFilter를 이용하여 사진에 다양한 효과를 주는 방법에 대해 알아보려고 합니다. Core Image 코어 이미지는 Apple의 퍼스트파티 프레임워크의 하나로, 정지 영상 및 동영상 이미지에 고성능 처리를 제공하는 이미지 처리 및 분석 기술입니다. 코어 이미지를 사용해서 시스템에서 제공하거나 혹은 사용자가 지정한 다양한 필터를 사용하여 이미지를 처리하거나 필터를 연결하여 복잡한 효과를 만들 수 있습니다. ..
· Swift/UIKit
지난 시간에 UIBarAppearance에 대해 찾아보면서 시스템 바에 흐림 효과를 주는 방법에 대해서도 알아보았었는데요. 이번 시간에는 시스템 바가 아닌 뷰에 흐림 효과를 주는 방법에 대해 알아보겠습니다. Apple Design Resource와 Material 우선 지난 시간에 잠시 참고 했던 Apple Design Resource 피그마 파일을 다시 한번 참고해보겠습니다. Apple Design Resource 피그마에서는 다양한 Color 및 Material들을 컴포넌트에 사용할 수 있는데요. 지난 시간에 UIBarAppearance를 살펴보며 피그마에서 iOS의 시스템 바는 chrome으로 채워져 있는 것을 알 수 있었습니다. 하지만, UIColor에는 chrome이라는 색이 존재하지 않는데요...