1. 개요mobile 에서는 CI-CD 로 TeamCity 를 사용하고 있었음. TeamCity 는 EC2에 띄워져 있고 로컬 빌드머신에서 커맨드를 수행하고 있었고, fastlane 으로 빌드/배포 작업이 진행되었음.그런데 가끔 TeamCity 가 고장날때가 있었는데.. 히스토리 인프라쪽을 건드려야 하기 때문에 서버팀의 도움을 받아 고쳤었는데, 가끔 이렇게 유지보수에 신경 써야하기도 하고, mobile 팀에서 자체적으로 유지보수가 어렵다는 점에서 다른 방안이 필요하다고 팀원들과 공감대를 형성해왔고 그 대안은 Github Action 이 유력했음!iOS, Android 모두 Github 을 잘 활용하고 있었음관련 자료들도 많음EC2 필요없음그런데 Github Action 은 기본적으로 원격에서 돌아가는데,..
1. 개요예전에 TCA 를 사용해본적이 있는데 내가 느끼기에 장단점이 뚜렷하다고 생각이 들었다.장점단방향 플로우로 디버깅과 사이드 이펙트 처리가 편했음MVVM 이나 MVP 같은 패턴은 사용하는 사람이나 회사 따라 사실상 구조가 다 다른데 TCA 는 모두가 비슷한 구조의 코드를 강제(?)할 수 있음단점러닝커브가 있음외부 라이브러리에 의존해야 함컴파일러가 일을 잘 못하는 포인트가 있는듯새로운 바닐라 프로젝트에서 시작했기 때문에 적용에 크게 애를 먹지는 않았고, 개발할때의 경험도 나쁘지 않았다. 특히 단방향 플로우의 아키텍쳐를 처음 경험해봐서 그런지 모르겠지만, 유저의 액션을 통합해 관리하고 결과 혹은 사이드이펙트로 처리하는 플로우가 잘 읽힌다고 느꼇었다.하지만 아키텍쳐를 외부 라이브러리에 의존해야 한다는 부..
1. 개요사이드프로젝트에서 채팅을 구현했었다. 양방향 통신, 즉 웹소켓은 처음 사용해봐서 구현하기 전에 설렛던 기능이다. 어려울줄 알았는데, STOMP 프로토콜을 사용해서 어렵지 않게 구현할 수 있었다.2. STOMP 란?WebSocket 이 양방향 통신을 열어주고, 각 프레임이 전송된다고 했을 때, STOMP 는 그 프레임에 대한 프로토콜이다. 마치 Http 통신과 그 위에 있는 REST 의 개념이랄까.WebSocket 만을 사용한다면, 어떤 메시지를 누구에게 보내고 어떻게 구독할지? 서버-클라이언트간의 프로토콜을 직접 만들어 소통해야 되는데, STOMP 는 메시징을 위해 약속을 미리 정해주었고, 그 약속에 맞춰 서버와 클라이언트가 통신을 하도록 되어있다.특별히 Connect, Subscribe, Me..
이번에 개인 앱 하나를 출시했다. 개발 하면서 Localization 작업을 했는데Xcode 15 에서 새로 나온 String Catalog 를 활용해 보다 편하게 현지화 기능을 적용했다. 사용해본 경험이 나쁘지 않아서 블로그로 정리해보려고 한다. 앱 내에 적용해보기우선, 사용법은 굉장히 간단한데, String Catalog 파일을 일단 추가하고, Xcode Project 의 Localizations 설정에서 사용할 언어를 입력해주면 준비는 끝난다. 이후 SwiftUI 와 UIKit 과 String.LocalizationValue 를 통해 쉽게 통합할 수 있다.String(localized: LocalizedStringResource) 를 활용해 Localization 키를 등록할수도 있고, 적용한 ..
사이드 프로젝트를 하면서 채팅 뷰를 만드는 중인데 onTapGesture 가 동작하지 않는 이슈가 있었다. 그런데 이게 어떨때는 되고, 어떨때는 안되고, 여러 메시지들 중 안되는 것도 랜덤이고 .. 도무지 파악하기가 어려웠다. 뷰 구조는 이러했다. Vstack - List - VStack - HStack - ZStack 인데, 가장 하위에 있는 ZStack 의 TapGesture 가 말썽이였다. 뭔가 상위 혹은 다른 뷰에서 제스처를 뺏어가는 느낌이긴 한데, 그럴만한 것은 List 밖에 존재하지 않아서 버그인가? 싶었다.위 gif 에서는 가운데 카드가 탭이 안되지만, 이게 골치아픈게 빌드할 때 마다 안되는 것들이 달랐다. 몇일동안 이것저것 많은 시도를 해봤지만, 상위의 List 에 있는 스크롤 제스처로 ..
구매한 변명(이유)2021년도부터 개인 컴퓨터로는 맥북에어 M1 을 사용하고 있었다. (16g, 256) 벌써 4년전...이지만 그 당시에는 정말 혁신적인 머신이였다..! 성능이 부족하지 않냐고 생각이 들지 모르지만, 회사 업무는 회사 맥북을 이용하다보니 개인 컴퓨터는 공부나 사이드프로젝트 돌리는 용도로 사용하기 때문에 큰 프로젝트를 돌릴 일이 별로 없어 부족함을 느끼지는 못했다. 카페에서 공부나 작업하는 일이 많은데 컴팩트하여 휴대성이 너무 좋았다. 그런데 Xcode 16 으로 올리고 나서부터인가? 컴퓨터가 힘들어했다. Xcode로 돌리는 프로젝트가 큰 작업이 아님에도 버벅였고 뜨거워졌고 나는 더워지고 .. 아마 Apple Inteligence 가 들어간 것이라고 추측한다. 그렇다고 이걸 빼기에는 서운..
최근 주변을 통해 App 에서 사운드 관련 작업의 논의를 했었다. 나는 예전에 사운드 디자인과 엔지니어링을 했었는데 Swift 로는 작업을 해본적이 없어 이번 기회에 조금 공부해보았다. 이전에 Max MSP 와 Sonic Pi 에서 작업해본적이 있긴 한데, 그때처럼 play(); 하면 되는게 아닌가? 하는 쉬운 생각이 들었다. 그래서 AVFoundation의 오디오 파트를 훑어봤는다. EQ와 input, output 채널 등을 사용할 수 있게 되어 있었으나 내가 필요한 오실레이터(OSC, Oscillator)는 Swift 에 기본제공되지 않는다. 오실레이터를 직접 구현해야 하고, 버퍼 등을 직접 만들어야 한다. 물론 이것도 재미있겠지만 오디오 작업에는 AudioKit 이라는 라이브러리를 많이 사용하는 것..
2024년도가 벌써 지나갔다. 바쁘고 바쁜 현대사회를 살아가다 보니 어느덧 2025년도가 되어있었다. 2024년도는 겨울이 늦게와서 가을이 길었다. 가을의 선선한 날씨를 참 좋아하는데 이곳저곳 많이 다니지는 못했어서 좀 아쉽긴 하다. 많은 일이 있었던 24년도를 돌아보는 시간을 가지려고 한다.1. 건강해짐24년도는 다이어트의 해 라고 불러도 될것같다. 얼굴이 안좋아보인다는 얘기에 2월달에 내 인생 처음으로 헬스장을 등록해봤고, 운동을 시작했고 재미가 들렸다. 건강해지기 위해 시작한 운동이지만 근육이 붙는걸 보는것도 즐겁고 무게가 올라가는것도 재미있었다.8개월 동안 12kg 정도를 감량했고 체지방 28% 로 시작했는데 지금은 17% 유지중이다.다이어트는 끝났지만 헬스와 가끔 러닝, 풋살 등을 하면서 유..
Open API Generator 를 초기 세팅 이후 사용하면서 점차 적응해보고 있다. Open API Generator 에 미들웨어를 적용해 네트워크 레이어에 필요한 여러 기능을 사용했다.우선, 내가 필요했던 기능은 다음과 같다. - 로깅 - 엑세스 토큰 주입 - 401 에러 캐치, 리프레시 토큰 갱신 후 재시도 (retry) 주로 사용했던 Alamofire 에서는 Interceptor 와 Event Monitor 로 사용했던 기능들인데,다행스럽게도 미들웨어의 example 이 잘 되어 있고, Swift Concurrency 를 활용해 간결하게 되어 있어어렵지 않게 적용할 수 있었다. 우선 미들웨어는 결국 인터셉터다. 프로토콜로 되어있는데, public protocol ClientMiddlewar..
개인 앱 Easy Cue 를 개발해 출시한지도 10개월 정도가 흘렀다. Easy Cue 란?전 세계의 뮤지컬, 공연 등에서 멀티미디어 컨트롤을 위해 표준적으로 활용하는 QLAB이라는 소프트웨어가 있습니다. 공연의 감독, 프로듀서, 오퍼레이터는 미리 작성해둔 큐시트를 QLAB으로 옮겨 각 큐마다 필요한 음악, 조명, 무대효과 등을 재생시킵니다.Easy Cue는 UDP 통신 방식인 OSC 프로토콜을 활용하여 QLAB과 통신합니다. 이제 더이상 컴퓨터에 앉아서 큐를 재생하는 것이 아닌, 무선 환경에서 큐를 재생시킬 수 있습니다.간단하지만 유저 친화적인 UI를 통해 신호를 보낼 IP와 각 큐를 입력할 수 있으며, 각 큐의 이름과 메시지 옵션 등 강력한 커스터마이징 기능을 제공합니다. 작년에 1주일만에 만들어서 ..
- Total
- Today
- Yesterday
- self-hosted-runner
- audiokit
- Xcode15
- string catalog
- onTapGesture
- easy cue
- 맥북에어 m4
- swift audio
- openapi-generator
- Github action
- ios 다국어
- open-api-generator
- watch connectivity
- keyboardtype
- swiftui 탭
- DateFormatter
- AVFoundation
- demical
- highprioritygesture
- avplayer
- audio kit
- Swift
- IOS
- ios채팅
- 애플워치 데이터 전송
- SwiftUI
- ios웹소켓
- swiftui 제스처
- flo
- swift날짜
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |