ios

· Swift/UIKit
모바일 앱을 개발하다보면 여러 데이터를 목록 형태로 보여줘야하는 경우가 있습니다.Apple의 UIKit에는 이렇게 데이터를 목록 형태로 보여주는 방법으로 UITableView(이하 테이블 뷰)나 UICollectionView(이하 콜렉션 뷰) 등을 사용할 수 있는데, 이번 시간에는 테이블 뷰와 콜렉션 뷰의 공통점과 차이점, 그리고 어떤 경우에 어떤 뷰를 사용하는 것이 더 좋은지에 대해 알아보겠습니다. 공통점테이블 뷰와 콜렉션 뷰는 UIKit에서 목록을 표시하는 UI 컴포넌트로, 두 뷰에는 몇 가지 공통점이 있습니다. 1. 데이터를 목록 형태로 보여주기 위한 UI 컴포넌트앞서 설명했듯 테이블 뷰와 콜렉션 뷰는 데이터를 목록 형태로 보여주는데 사용할 수 있습니다. 2. Cell 단위 데이터 표시테이블 뷰와 ..
· 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/iOS
최근 개인 앱을 하나 출시 했는데요. 이제 막 출시 해서 얼마 되지 않겠지만, 국가별 다운로드 수가 궁금해서 확인해 보니 한국보다는 해외에서 다운받은 경우가 더 많았습니다. 하지만, 제가 출시한 앱은 해외 유저를 전혀 생각하지 않은 앱이기 때문에 외국어를 지원하지 않고 있었는데요. 그래서 "최소한 영어라도 지원을 해보자" 하고 급하게 부랴부랴 언어에 영어를 추가했습니다. 그런데, 영어를 지원하기 위해 이전에 사용하던 Strings File을 사용하려고 보니 이름이 Strings File (Legacy)로 바뀌어 있었습니다. 이때, 뭔가 이상함을 감지하고 찾아보니 Xcode 15부터는 String Catalog라는 새로운 파일 형식이 생겨 Localization에 이 형식을 사용하게 된 것이었습니다. 그래..
· Swift/iOS
지난 시간에 UISlider를 다루면서 슬라이더의 트랙 이미지에는 이미지의 너비를 자연스럽게 늘리거나 줄이기 위해 Stretchable Image를 사용할 수 있다고 했는데요. Stretchable Image라는 이름을 웹이나 안드로이드 앱 분야에서는 들어본 적이 없는 것 같아서 이게 무엇인지 찾아보았습니다. 이번 시간에는 이 Stretchable Image에 대해 공부한 내용을 정리해 보려 합니다. Stretchable Image 우선 이 Stretchable Image가 무엇인지 알아보기 위해 공식 문서를 살펴보기로 했습니다만, Stretchable Image만 별도로 다룬 문서는 따로 없는 것 같고, 그 대신 stretchableImage(withLeftCapWidth:topCapHeight:)라는..
· Swift/UIKit
저번 시간에 이어 이번 시간에도 미디어 플레이어에서 현재 재생 중인 구간을 보여주고, 다른 구간으로 넘어갈 수 있게 하는 재생바 부분을 어떻게 구현하면 좋을지 고민하며 공부한 내용을 정리해 보려 합니다. 이번 시간에는 UISlider에 대해서 알아보겠습니다. UISlider 앞서 본 UIProgressView는 미디어 플레이어에서 재생바의 현재 진행 중인 부분을 표시할 수는 있지만, 기본적으로 제공하는 방법으로는 내가 원하는 구간으로 넘어가는 기능을 구현할 수 없어 UIResponder의 touch event 관련 메서드를 재정의하여 구현해야 했습니다. UIKit에서는 특정 동작 등을 전달하기 위한 UIControl들이 존재하는데요. 이러한 UIControl 중에는 UIProgressView와 유사하게 ..
· Swift/UIKit
개인적으로 미디어 플레이에 관심이 많아서 개인 프로젝트로 뮤직 플레이어나 비디오 플레이어 등을 몇 번 만들어봤는데요. 미디어 플레이어에서 현재 재생 중인 구간을 보여주고, 또 다른 구간으로 넘어갈 수 있게 하는 재생바 부분을 어떻게 구현하면 좋을지 고민하며 공부한 내용들을 정리해 보려 합니다. 그중에서도 이번 시간에는 처음에 찾아봤던 UIProgressView에 대해서 알아보겠습니다. UIProgressView 많은 미디어 플레이어에서 현재 재생 구간을 보여주는 재생바는 단순히 재생 구간을 보여주는 것만이 아니라 내가 원하는 구간으로 재생 구간을 변경하는 기능도 함께 하는 경우가 많습니다. 이러한 재생바를 영어권에서는 주로 Progress Bar라는 명칭으로 부르는데요. UIKit에도 비슷한 명칭의 UI..
· Swift/UIKit
기존에 UIKit에서 UIButton을 사용할 때마다, 버튼의 구성 방법이나 버튼에 클릭 이벤트 등을 주기 위해 selector를 이용하여 @objc 메서드를 사용해야하는 등 약간 불편하기도 하고, 부자연스러운 느낌을 지울 수가 없었는데요. 이번 시간에는 iOS 15 이후에 UIButton의 새로운 구성 방법과 버튼에 이벤트를 주는 방법에 대하여 알아보겠습니다. UIButton 사용자가 앱과 상호 작용할 수 있는 방법 중 하나인 버튼은 앱에서 매우 중요한 UI 요소인데요. UIButton은 사용자의 상호작용에 대한 응답으로 사용자 지정 코드를 실행하는 컨트롤 입니다. UIButton에는 텍스트 레이블, 이미지, 혹은 이 둘을 모두 사용하여 버튼의 목적을 전달할 수 있고, 모양을 구성하여 앱의 디자인에 맞..
· Swift/iOS
이번 시간에는 iOS 면접을 준비하면서 공부한 내용을 정리해보려고 합니다. 질문은 https://github.com/JeaSungLEE/iOSInterviewquestions에서 참고했습니다. 원 질문의 내용은 "실제 디바이스가 없을 경우 개발 환경에서 할 수 있는 것과 없는 것을 설명하시오." 입니다. 개요 iOS 앱을 개발할 때, 실제 모바일 기기를 사용하여 테스트를 하곤 하는데, 이런 모바일 기기가 없을 때 Xcode의 Simulator(이하 '시뮬레이터')를 사용할 수 있습니다. 실제 디바이스가 없는 경우의 개발 환경 위에서 시뮬레이터를 사용하면 실제 디바이스를 대신하여 테스트를 할 수 있다고 했는데요. 시뮬레이터가 실제 디바이스를 흉내내서 유사한 환경에서 실행해준다고 생각하면 됩니다. 이런 실제..