
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 에 있는 스크롤 제스처로 ..

최근 주변을 통해 App 에서 사운드 관련 작업의 논의를 했었다. 나는 예전에 사운드 디자인과 엔지니어링을 했었는데 Swift 로는 작업을 해본적이 없어 이번 기회에 조금 공부해보았다. 이전에 Max MSP 와 Sonic Pi 에서 작업해본적이 있긴 한데, 그때처럼 play(); 하면 되는게 아닌가? 하는 쉬운 생각이 들었다. 그래서 AVFoundation의 오디오 파트를 훑어봤는다. EQ와 input, output 채널 등을 사용할 수 있게 되어 있었으나 내가 필요한 오실레이터(OSC, Oscillator)는 Swift 에 기본제공되지 않는다. 오실레이터를 직접 구현해야 하고, 버퍼 등을 직접 만들어야 한다. 물론 이것도 재미있겠지만 오디오 작업에는 AudioKit 이라는 라이브러리를 많이 사용하는 것..
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주일만에 만들어서 ..

이번 사이드 프로젝트에서 서버 개발자분들이 OpenAPI Generator 를 사용해보자고 제안해주셨다. ..그게 뭔가요 ?! OAS (Open API Specification)Restful API 를 정의하기 위한 규격 이라고 생각하면 될 것 같다. 각 요청의 엔드포인트, 인증 등등 API 명세 를 위한 규격 이다. 우리가 서버 개발자에게 받는 스웨거 가 OAS 를 기반으로 만들어진다고 하더라. OAS. 라는 규격이 있고, json 혹은 yaml 형식으로 문서가 만들어지고 스웨거가 만들어진다. 그렇다면 서버와 클라이언트에서 각각 통신하는 코드도 자동화 할 수 있겠다. 그래서 Open API Generator 가 있다. Open API Generator우리가 서버와 통신하는 코드를 만드는 것은 반복적인 ..

사이드 프로젝트 팀에서 신규 프로젝트 기획이 진행중이다.오랜만에 찾아온 신규 프로젝트를 위해 개발 환경 세팅을 진행했다. 사이드 프로젝트인 만큼그동안 못해봤던 기술들을 새로 적용해보고 경험해보고 싶었다. 그중 우선적으로 적용하기로 한 것은 두가지다. 1. Tuist 4 + - 그동안 사용했던 Tuist 는 3.3이였나.. 버전에 머물러 있었다. - 회사에서 사용하는 Tuist 는 메이저 버전을 올리기가 쉽지 않았다. - 4.0 에서 큰 변화가 있었다고 들었는데 아직 못해봤음. - 그러던 사이 벌써 4.29 까지 출시했음. 나 말고 모든게 빠른듯. - tuist test 도 있는데 한번 돌려보기로..2. Github Action - CI/CD로 Xcode Cloud 를 사용했었기 때문에 경험..
- Total
- Today
- Yesterday
- open-api-generator
- swift audio
- 애플워치 데이터 전송
- 맥북에어 m4
- watch connectivity
- ios웹소켓
- ios채팅
- self-hosted-runner
- openapi-generator
- audio kit
- SwiftUI
- swiftui 제스처
- string catalog
- keyboardtype
- ios 다국어
- Xcode15
- easy cue
- IOS
- Github action
- audiokit
- demical
- AVFoundation
- flo
- avplayer
- Swift
- highprioritygesture
- swiftui 탭
- onTapGesture
- DateFormatter
- 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 |