iOS 11

Github Actions를 통한 다국어 자동화 (2) | Submodule 최신화, Slack Webhook

다국어가 지원되는 프로젝트를 개발하는 것에 있어서 개발자의 노동이 최소화되고 휴먼에러를 축소시킬 수 있도록 하기 위해 어떻게 다국어 리소스 관리를 자동화해야 할 것인가에 대해 알아보고 있다. 앞선 내용까지는 1편 을 참고! Git Submodule과 Github Actions를 통한 다국어 자동화 (1)  이제 localization에 대한 작업을 마친 PR을 자동으로 base branch에 머지하고 & 업데이트된 서브모듈 레포지토리에 대해 메인 레포지토리에 최신화 시켜주는 과정(서브모듈이 최신 커밋을 바라보도록)까지 하면 개발자가 손 델 일 없는 완전한 자동화 완성! 개발자는 UI에 넣을 텍스트에 대해 다국어 key값 혹은 swiftGen을 통해 변환된 static 프로퍼티 이름만 알고 있으면 끝! 추..

iOS 2025.02.24

GitHub Actions를 통한 다국어 자동화 (1) | Git Submodule, Lokalise

최근 스레드를 통해 정말 많은 자극을 받고 있는 딜라이트룸 iOS 개발자 리디님. 다양한 개발 스토리를 들으면서 나도 나중에 내실 있는 나만의 앱을 만들고 싶다는 꿈이 점점 커지고 있다. 이 글에서는 리디님이 연사로서 SwiftRise 컨퍼런스에서도 소개해주셨고 내 프로젝트에도 적용해 볼 만한 것이어서 공부해 보면서 구현했던 부분을 공유해보려 한다. 사실 컨퍼런스에서는 도입한 도구나 구체적 구현 방법을 자세히 설명해 주셨다기보다 왜 이런 자동화 시스템을 구축했었어야 했는지에 대해 사고의 변화와 점진적인 디벨롭 과정에 대해 충분히 납득할 수 있게 설명해 주셔서 더 기억에 남았던 듯싶다! 결과적으로 우리는 iOS 개발자이기 이전에 product developer이기에 이런 자동화 도구나 AI를 잘 활용해서 ..

iOS 2025.02.18

ETag 기반 이미지 캐싱 & instruments로 로딩 속도 분석 |OSLog, os_signpost

메모리 캐싱에 대한 내용을 작성하고 거의 반년만에 쓰는 이미지 캐싱에 대한 내용입니다.. :) 틀린 내용이 있을 수도 있으니 언제든 피드백 주세요! [Swift] iOS의 메모리 캐시 NSCache | NSMutableDictionary객체와의 차이점, NSCopying, 깊은복사/얕은복사 캐싱에 대한 내용을 늦게 다시 쓰는 만큼 디스크 캐싱 & Etag기반으로 서버와 리소스 동기화 체크 & instruments로 로딩 속도 분석에 내용까지 함께 작성해보려 한다. 이번을 계기로 OSLog의 os_signpost를 사용해서 instruments를 통해 성능을 테스트해 보았고 실제 이미지 로드 속도가 얼마나 나아질 수 있는지에 대한 실질적인 지표를 보아서 의미 있었다.그리고 앞으로는 이렇게 정량적 지표를 근..

iOS 2025.01.13

[iOS] App Thinning 앱 씨닝과 Slicing, On-Demand Resource, Bitcode

에셋 카탈로그에 등록하는 1X, 2X, 3X 이미지 크기에 대해 정리하며앱 씨닝에 대한 글도 곧 쓰겠다고 한지 어언 3주가 되어 가는ㅎㅎ  ((1x, 2x, 3x에 대해서도 궁금하다면 이 글을 보고오기로 해욤))[iOS] image asset의 크기 1x ,2x, 3x 사용하는 이유 | scale factor, 해상도(Resolution), pixel, point  귀찮은 거 아니고 bitcode란 아이를 이해하느라 쫌 늦었습니다.. (( 근데 이제 공부를 다 하고 나서 Xcode14부터는 애플에서 bitcode에 대한 지원을 하지 않기로 했다고 한 것을 봐버렸는데요조금은 허무한 결과를 맞이했지만 그래도 좋은 공부였따.. ))  여튼 오늘은 App Thinning에 대해 이야기를 해볼 거고 어떤 어떤 기..

iOS 2024.06.08

[iOS] image asset의 크기 1x ,2x, 3x 사용하는 이유 | scale factor, 해상도(Resolution), pixel, point

image asset의 크기가 1X, 2X, 3X 세 가지로 나누어져 있는데 이것들이 필요한 이유..다들 알고 계셨나요?    일단 저는 몰라왔습니다.. (자랑이다)그래서 이번 계기로 한번 정리해보려고 해요. 이 개념이 또 앱시닝(App Thinning)에서의 슬라이싱(Slicing) 기술과 연결되기 때문에 이어서 블로그를 써볼게요!    📌 iOS의 다양한 디스플레이 아이폰 기기는 정말 많죠. 그리고 이러한 핸드폰 기기마다  탑재하는 다양한 디스플레이가 있습니다.최신 기종일수록 디스플레이가 좋겠죠?  특히 아이폰 4이후 부터는 레티나 디스플레이라는 디스플레이를 탑재했는데요.레니타 디스플레이가 탑재되지 않은 것보다 탑재된 게 더 좋은 디스플레이라는 건 맥락상 알겠는데.. 레티나 디스플레이가 뭐길래? 레..

iOS 2024.05.22

[iOS] 앱의 시작지점 @main

프로젝트를 하나 생성하는 순간 우리는 @main이라는 것을 찾아볼 수 있다. 기본적으로 생성되어 있는 UIResponder와 UIApplicationDelegate를 상속한 AppDelegate라는 클래스 위에 @main이라는 키워드가 붙어 있는 것을 볼 수 있다. (SwiftUI에서는 App을 상속받은 구조체 위에 @main이라는 키워드가 붙어 있다) 그렇담, @main이라는 것이 무엇이며 어떤 역할을 하는지 천천히 알아보자 iOS 애플리케이션의 Entry Point Entry Point란 프로그램이 시작하는 지점, 즉, 진입점을 뜻하는데 Swift 컴파일러는 class나 struct에 명시된 @main이라는 annotation을 통해 전역범위에 있는 코드를 자동으로 인식하게 되고 프로젝트 내부에 숨겨..

iOS 2024.02.11

[iOS] Core Data (3) | codegen(generating code) 이해해보자!

저번 Core Data (1) 글에서 Core Data Model을 생성할 때 .xcdatamodeld 파일을 만들고 Entity를 추가, 각 엔터티에 attribute 추가하는 등의 작업을 했다. 그때 Entity에 대해 다양한 설정을 해주는 부분에서 codegen 항목에 있는 category/extension, manual/none, class definition 각 옵션이 어떤걸 의미하는지 정확히 이해하지 못해서 나중에 다시 설명하는 글을 쓰겠다고 넘겼는데 이번 글에서 이 부분을 설명해 보겠다. [iOS] Core Data (1) | Persistence [iOS] Core Data (2) | CRUD [iOS] Core Data (3) | codegen(generating code) 이해해보자! ..

iOS 2023.12.17

[iOS] Core Data (2) | CRUD

1편에서 작성한 core data 내용을 바탕으로 실제 뷰에 반영되도록 하는 예시를 만들어보려 한다. 추가로 CRUD를 해줄 수 있는 코어데이터 매니저를 만드는 방법까지!! 하다 보니 뭔가 아주 잘 맞는 케이스는 아니지만 최대한 단순하게 CoreData의 활용을 테스트해보고 싶었기에 소개한다. [iOS] Core Data (1) | Persistence [iOS] Core Data (2) | CRUD [iOS] Core Data (3) | codegen(generating code) 이해해보자! # 🥨 뷰 생성 table 뷰 만들어주고 row 추가, coredata에 저장된 데이터 확인, coredata에 저장된 데이터 삭제 할 수 있는 버튼 총 3개를 만들어준다. 여기까지는 뷰에 대한 영역이니까 이 글..

iOS 2023.12.10

[iOS] Core Data (1) | Persistence

우리는 앱이 종료되고 실행되고 상관없이 저장되어 있으면 하는 데이터가 있을 것이다. 물론 서버에 저장해 놓고 매번 호출해서 데이터를 받을 수 있겠지만 앱 자체에서 데이터를 저장해 놓는 방법도 당연히 있지 않을까? ㅇㅇ 당연히 있다. 이부분이 바로 Persistence(영구성)에 대한 개념이다. 영구 없다 그 영구 말고 ^^ 대표적으로 많이 언급되고 접할 수 있는건 UserDefaults와 Core Data이다. 하지만 사용방법과 진입장벽은 좀 차이가 있어서 일단 비교적 쉽게 가벼운 데이터를 저장해 놓을 수 있는 UserDefaults를 알아보고 비교적 진입장벽이 높지만 무거운 데이터를 효율적으로 저장해 놓을 수 있는 Core Data에 대해 알아보겠다. [iOS] Core Data (1) | Persis..

iOS 2023.12.09

[iOS] handoff가 도대체 뭐야 | (feat. TaskManagement, NSUserActivity)

어떤 글에서 개발환경에서는 handoff 기능을 테스트할 수 없다고 해서 궁금해졌다.. handoff 는 무엇이며.. 시뮬레이터에서는 왜 테스트해보지 못하는 걸까? 아직 명확하게 알진 못했지만 계속 테스트를 하다 보니 짐작이 가는 이유는 있었는데 그게 맞는지는 확실하지 않다.. 누군가 잘 아는 사람 있으면 같이 이야기해보고 싶네 ㅎㅎ 일단 handoff라는 용어는 처음 들어봤는데 알고 보니 친숙한 기능이었다. 우리가 아이폰 크롬에서 뭘 검색하고 있는데 맥북 dock에서 이런 표시가 뜨는 것을 본 적이 있을 것이다. 이런 기능이 바로 handoff이다. 아이폰에서도 이 앱을 사용하고 있다는 것을 디바이스를 초월하여 알려주고 있다. 앱 아이콘을 누르면 내가 크롬에서 검색하고 작업하고 있었던 것을 그대로 가져..

iOS 2023.12.02