| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Tuist
- JPG
- 무한스크롤
- TestFlight
- 캐러셀
- .pbxproj
- contentalignmentpoint
- 타뷸레이션
- 함께자라기
- png
- JPEG
- spm 에러
- swift 모듈화
- xcode 엔터 표시
- github 시작하기
- Cocoa Pod
- xcode 공백 표시
- webp
- NSTextStorage
- 코드스쿼드
- NSTextStorageDelegate
- 팀 개발을 위한 git
- Firestore
- swiftdata
- fetchdescriptor
- 테스트 타겟
- 클린 아키텍처
- nidthirdpartylogin
- SwiftUI
- heic
- Today
- Total
목록분류 전체보기 (51)
Sure, Why not?
@State뷰가 소유하는 값(Source of Truth) 을 저장하고, 그 값이 바뀌면 해당 뷰의 body를 다시 계산한다. 문서에 따르면,SwiftUI가 제공하는 저장소 관리 방식과 충돌할 수 있으므로,멤버와이즈 이니셜라이저에서 state를 설정하지 못하도록 state를 private으로 선언하기를 권장한다. 뷰와 그 하위 뷰에만 국한된 로컬 상태를 저장할 때 사용한다.항상 기본값으로 초기화되어야 하며, 선언 시점에 값이 필요하다. struct EditorView: View { @State private var text: String init(initialText: String) { self._text = State(initialValue: initialText) } ..
프로퍼티 래퍼를 직접 만들기 전에,SwiftUI나 이미 Apple의 여러 프레임워크에서 제공되는 프로퍼티 래퍼가 제공되고 있다면이미 검증된 시스템 기능을 다시 구현해서 비효율적인 작업이 될 수 있다. 그래서 먼저 SwiftUI 범위 내에서 Apple이 의도적으로 제공하는 검증된 프로퍼티 래퍼들을 정리한다면이후에 내가 필요한 경우의 커스텀 프로퍼티 래퍼를 설계하는 것이 생산적인 접근이라고 생각해서정리하고자 한다. Property Wrappers Documentation docs.swift.org 프로퍼티의 값이 어떻게 저장되거나 관리되는지에 대한 로직과 프로퍼티의 선언부와 분리해주는 Swift의 언어 기능이다.즉, 보일러플레이트 코드 하나의 타입으로 캡슐화하여서 선언부를 간결하게 만들고 의도를 명확히..
ObservableObject는 주로 뷰모델에서 사용하고,뷰에서 사용할 프로퍼티 변화를 관찰하기 위해 @Published를 자연스럽게 써왔다.그러던 중 프로젝트에서 @Published 프로퍼티가 업데이트되는 과정을 디버깅하다가구독자로 전달되는 값과 실제 프로퍼티 값이 서로 다르게 보이는 상황을 마주했다. 그동안은 단순히 뷰에 반영할 프로퍼티 변화를 알리는 용도라고만 생각하며 사용했지만,이번 경험을 계기로 @Published가 내부에서 어떤 방식으로 값 변경을 알리는지 궁금해졌다.그래서 ObservableObject와 @Published의 퍼블리싱 과정 전반을 정리해 보고자 한다. import Combinefinal class CounterViewModel: ObservableObject { @Pu..
UITextView에서 볼드, 이탤릭과 같은 스타일을 적용하다가영어는 바로바로 스타일적용이 되고, 이탤릭도 바로 적용이 되는 반면,한글만 유독 매끄럽지 않다는 걸 경험했다. 흥미롭게도 기본 애플 메모 앱에서도 스타일 전환 시 영어나 일본어와 다르게내가 생각하는 것과 달리한글 역시 동일하게 매끄럽게 동작하지 않았다 왜 한글은 스타일 적용 후 스페이스 한번을 해야 제대로 적용이 되는걸까... 그 이유를 짚고, 내가 선택한 기준과 구현방법을 정리하고자 한다. 텍스트 스타일 적용첫 번째로 텍스트에 다양한 글꼴, 색상 밑줄 등등 여러 스타일을 적용하기 위해 대표적인 방법들로NSAttributedString, NSMutableAttributedString 그리고 최근에 나온 AttributedString 중심으..
Swift Concurrency는 async/await 문법을 통해 비동기 작업을 직관적으로 표현할 수 있게 해준다.하지만 비동기 작업을 병렬로 실행하는 방법은 여러 가지가 있고,이를 잘못 사용하면 성능 이점을 살리지 못하거나, 관리되지 않는 Task를 남발하는 실수를 저지르기 쉽다.( 내가 실수했었다 ) 다음과 같은 방식을 비교하여 정리하고자 한다.1. Task가 연속 있을 때2. 연속 await 사용할 때3. async let 통한 정적 병렬 처리4. TaskGroup을 통한 동적 병렬 처리 공통 테스트 환경실제 네트워크 대신, 서로 다른 지연 시간을 갖는 비동기 함수를 준비했다. enum Work { static func fetchItemA() async throws -> String { ..
Xcode가 해당 파일이 중복으로 들어가 있다고 경고를 준다.분명 파일은 하나인데 왜일까. How to fix "Skipping duplicate build file" warning in Xcode | SarunwThere might be several reasons that cause this error. Here are the solutions that fix it for me.sarunw.comMerge 충돌이나 설정 변경으로 인해 프로젝트 내부에 같은 파일이 빌드 대상에 두 번 지정된 경우 문제 원인으로 나타낼 수 있다고 한다. 해결 방법1. 추천 설정으로 업데이트Remove Duplicate References in Build Phase 항목을 적용하면 자동으로 중복이 제거됨 2. Xc..
블루투스를 들었을 때, 단순히 무선 이라는 키워드가 떠오른다. 정확한 정의를 찾아보니, 근거리에서 데이터를 무선으로 주고받는 통신이라고 한다. 현재 기준으로 최근 5월에 발표된 6.1버전이 최신이다.별 생각 없이 쓰고 있었지만, 이렇게 꾸준히 업데이트되고 있다는 점이 인상깊다. Delivering on the bi-annual release schedule: Bluetooth® Core 6.1 is here | Bluetooth® Technology WebsiteBlog Blog The Bluetooth® Core Specification recently moved to a bi-annual release schedule. This shift enables more frequent and consiste..
APNs만으로 iOS 푸시 알림을 경험했지만, 실제 서비스에서는안드로이드 지원, 서버 연동, 마케팅 기능 등등 복잡한 요구가 생긴다. 이런 이유로 많은 팀들이 확장성과 편의성을 갖춘 Firebase Cloud Messaging을 선택하는 것 같다. 1. Xcode 프로젝트 설정Signing & Capabilities 탭에서 아래 두 개를 추가한다. 2. Firebase 설정 로그인 - Google 계정이메일 또는 휴대전화accounts.google.com 새 프로젝트를 생성한다. iOS 앱 등록해준다. (Bundle ID 필요함) 그리고 안내되는 과정을 수행한다. (info.plist 이동, SDK 설치 등등 )SDK설치 시, FCM이 목적이니 FirebaseMessaging을 선택하였다. 3..
푸시 알림을 사용하면 앱이 실행 중이 아닐 때에도 앱을 사용하는 기기에 소량의 데이터를 푸시할 수 있음을 설명한다. 푸시 알림 보내는 흐름은서버가 APNs에 요청을 보내면, APNs는 특정 장치에 알림을 보낸다. APNs ( Apple Push Notification Service )Apple이 제공하는 푸시 알림 전용 서비스이다.인증된 서버만 접근이 가능하고, 디바이스 식별은 device token으로 수행한다. APNs는 알림을 전달하기 위해 중간에 반드시 통과해야 메세지가 해당기기에 전달이 된다. Push 사전 준비 1. AuthKey 생성아래 링크로 이동한다. 로그인 - Apple idmsa.apple.com 입력 필드를 채워넣고, 등록하면 .p8 파일을 다운로드 한다.이때 .p8파일..
지난 글에서 match를 이용한 코드 서명 자동화 설정을 했었다.당시에는 app_identifier, team_id, apple_id 등등 fastlane 설정 파일에 직접 하드코딩하는 방식으로 구현했었다. 이번 글에서는 보안성을 생각해서 .env.default를 도입했다. 그래서 fastlane으로 TestFlight 및 App Store 자동 배포 설정하고,Discord 알림까지 연동과 Github Action 활용한 자동배포까지 정리하고자 한다. 루트 디렉토리에서 fastlane init Tuist로 구성된 프로젝트 루트에서 Fastlane 초기 설정 시작한다.fastlane init .env.default보안 노출에 대한 방지도 그렇고, 환경이 바뀔 때마다 직접 수정하는 것보다유지보수를 높..