
Preferences 는 서브뷰가 자신을 감싸는 컨테이너에게 configuration 정보를 알려줄 수 있는 방법이다. 많은 built-in modifier 에서 이 방식을 사용하고 있다. (ex. navigationTitle, colorScheme) 쉽게 말하면.. 뷰 하이어러키에서 하위 뷰가 상위뷰로 데이터를 간편하게 전달할 수 있는 방식이고앱의 전역적인 설정을 전달할 때 주로 사용한다. 예를들어 앱 설정 페이지의 깊숙한 곳에 앱 전체의 key color 를 세팅하는 뷰가 있다고 해보자 1) PreferenceKey 를 정의한다2) 하위뷰에서 preference(key:value:) 를 호출해서 preference 에 대한 value 를 세팅한다.3) 상위뷰는 해당 키를 알면, onPrefe..

# Swift Pacakge Plugin - Xcode 14 부터 Swift Package 를 만드는 것과 유사한 방식으로 Swift Package Plugin 을 만들 수 있다. - 이 플러그인은 Swift 스크립트로 Swift 패키지나 Xcode 프로젝트에서 사용할 수 있다. - 빌드 전이나 빌드 중에 실행되는 사용자 정의 명령 (ex. 소스코드 생성) 을 실행할 수 있다 . 이전에는 shell script 나 makefile 로 이런 작업을 했으나 이젠 플러그인을 만들어서 할 수 있는 것이다. 자동화, 공유 의 이점을 가져갈 수 있다. - Xcode 는 플러그인을 컴파일하고 실행한다. 플러그인은 실행 파일과 입력 파일에 대한 정보를 사용해서 명령을 구성한다. 그리고 필요에 따라 ..

[1] Linker Option > release vs debug 다음과 같이 프로젝트를 세팅했을 때 debug랑 release 의 빌드로그 차이점 몇가지를 살펴 보자. 1) debug 빌드일때만 링커에 -export_dynamic, -no_deduplicate 옵션을 넘긴다 우선 해당 옵션을 하나씩 보자 # -no_depulicate 중복 제거 최적화 (사이즈 최적화) 를 하지 말라는 옵션이다. debug 빌드는 빠른 속도가 중요하기 때문에 사이즈 최적화 단계를 거치지 않도록 해당 옵션을 넘긴다. # -export_dynamic 공유 라이브러리의 symbol을 외부로 노출시키고, 다른 모듈에서 해당 기호를 사용할 수 있도록 하는 옵션이다. (출처 GPT) debug 에서는 중복제거를 안하므로 dupli..

[1] 바닐라 Static Framework 에서는 프리뷰를 볼 수 없다. https://forums.developer.apple.com/forums/thread/704910 Getting error in previews when are… | Apple Developer ForumsPreviews don't work when are inside of a static framework. Has anyone experimented it also? MessageSendFailure: Message send failure for update ================================== | RemoteHumanReadableError: Unknown preview provider "Prov..

Tuist 4.7.0 기반 [ 문서 ]Tuist Docs 를 보면 다음과 같이 나와있다. 1) Cache Warming Tuist가 종속성 그래프의 각 대상에 대해 해시를 효율적으로 활용하여 변경 사항을 감지합니다. 이 데이터를 활용하여 Tuist는 이러한 대상에서 파생된 이진 파일에 고유한 식별자를 빌드하고 할당합니다. 그런 다음 Tuist는 그래프 생성 시에 원래의 대상을 그에 해당하는 이진 버전으로 원활하게 대체합니다.이 작업은 "캐시 워밍"이라고 불리며, 로컬 사용이나 Tuist Cloud를 통해 팀원 및 CI 환경과 공유하기 위한 이진 파일을 생성합니다. 캐시를 워밍하는 과정은 간단하며 다음 명령으로 시작할 수 있습니다.# re-using binaries from previous builds..

[1] 궁금증 dylib 를 iOS 에서는 직접 못만드는 걸로 알고 있다. 그래서 맥 OS 와 달리 'Static' Library 라고 템플릿 이름이 명시되어있는 것이고 iOS 에서는 오직 System 라이브러리만 다이나믹 가능한 것으로 알고 있다. (예전 관련 글) 하지만 Tuist 를 보다보니.. Product Type 중 Dynamic Library 를 iOS 에서도 쓸 수 있다. Linking 도 잘들어가있고 앱에 embed 할때도 dylib 으로 잘나온다. 이게 어떻게 가능한 것일까 ??? ㄴ Tuist Github 을 뒤져봐도 잘모르겠음 ;;; ㄴ 애플 문서 > Creating Dynamic Libraries 를 봐도 모르겠음 ;;; [2] 추측 세가지 가능성이 있..

Tuist 튜토리얼 이 major version 3 기준이라서초기 만들어지는 파일이나 폴더가 major version 4 랑 많이 다르다. 동료분과 Tuist 팀의 도움으로 겨우 4.7.0 기반 프로젝트 만들기 성공함 🥹3과 달리 4는 한땀한땀 직접 추가해야하는 경우가 많아서 기록해둠 [1] Tuist 4 버전대 설치Installation 가이드 보고 mise 설치 후, tuist 설치 해주면 된다. 나는 옛날에 mise 말고 다른 툴로 tuist 3 버전대를 설치했어서 이 이슈로 시간 많이 잡아먹음 ;; (tuist install 명령어를 통해 외부 의존성을 설치하겠다는 건데 명령어가 충돌나서 tuist 자체를 설치하려고 했던 기억) 답변에 있는 것 처럼 uninstall 하고 mise 로 다시..
☑️ dynamic-callable 간단 설명 @dynamicCallable 은 객체가 함수처럼 동작할 수 있도록 만들어준다. 쉽게 말하면, 해당 객체에 대해 함수 호출 연산자 ()를 사용할 수 있게 해준다. 이를 통해 동적으로 호출되는 동작을 구현할 수 있다.어떤 객체의 호출을 일반화하거나, 다양한 유형의 인자를 처리하는 등의 상황에서 유용하다. [1] 수학연산 @dynamicCallablestruct DynamicMultiplier { func dynamicallyCall(withArguments args: [Int]) -> Int { return args.reduce(1, *) }}let multiplier = DynamicMultiplier()multiplier(1,..

Swift Concurrency 관련 Instruments 는 총 두가지가 있다. 이 중, Swift Tasks 를 활용하는 법을 기록! WWDC 23 > Analyze hanges with Instruments 와 비슷한 예제를 만들어서 진행해보자. # 1. import SwiftUI struct ContentView: View { var body: some View { ScrollView(.horizontal) { LazyHStack { ForEach(0.. Profile > Swift Concurrency 를 열어준다. (혹은 다른 툴을 열고 Instruments Library 에서 Swift Tasks 를 추가해도 무방하다) 레코딩을 해준 후, App > Thread > Graph Display ..

WWDC 23 > Analyze hanges with Instruments 를 기반하고 있습니다. (40분 쯤 되는데 너무 재밌고 유용함. 강추) # Hang hang 은 delay 를 의미한다고 생각하면 됩니다. Xcode Instruments 에서 녹화버튼을 꾹 누르고 Recording Options 에 가보면 Hang, MicroHang 등 애플이 몇초 기반으로 정의해뒀는 지 볼 수 있고 프로파일링할때 어디까지 리포트되게 할 건지 설정가능합니다. # Hang 만들어보기 Hang 을 유발할 코드를 만들어봅시다. struct ContentView: View { @State private var showImagePicker = false var body: some View { Button(action: ..
- Total
- Today
- Yesterday
- Dart Factory
- 플러터 얼럿
- 장고 Custom Management Command
- Flutter Text Gradient
- ipad multitasking
- DRF APIException
- 플러터 싱글톤
- Sketch 누끼
- PencilKit
- ribs
- 구글 Geocoding API
- flutter dynamic link
- drf custom error
- Watch App for iOS App vs Watch App
- Flutter 로딩
- Flutter getter setter
- Python Type Hint
- flutter build mode
- Flutter Clipboard
- Django FCM
- 장고 URL querystring
- flutter 앱 출시
- Django Firebase Cloud Messaging
- flutter deep link
- github actions
- METAL
- cocoapod
- Django Heroku Scheduler
- SerializerMethodField
- Flutter Spacer
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |