StoreKit Configuration File 의 기본 priceLocale 는 USD로 되어있다. 이걸 바꾸는 법을 알아보자. 참고로 Setting up StoreKit testing in Xcode 문서에 안나와있어서 이 글을 보고 알게됨! (wwdc 어딘가에 나와있을 것 같음) 파일 내부에 해당 세팅이 없고 다음과 같이 Editor 를 통해 변경한다. StoreKit Configuration File 선택 > Editor > DefaultStorefront 변경 그러면 StoreKit Configuration 아이템들의 price가 원화로 바뀌고 테스트 코드에서도 fetch 해온 product의 priceLocal / price가 원화기준으로 바뀐다. 이제 앱스토어커넥트에서 원화 기준으로 상품 ..
[ 니즈 ] 이렇게 된 구성에서 1. SharedUI 안에 커스텀 폰트를 넣고 프리뷰로 커스텀 폰트를 보고 싶음. 2. SharedUI 를 의존하는 Feature1 타겟의 프리뷰로 커스텀 폰트를 보고 싶음. 3. 앱의 UIKit 기반 코드에서도 SharedUI의 커스텀 폰트를 쓰고 싶음. [ 작업 ] ~~ 귀여운 마루부리 폰트와 함께하는 예제 ~~ # 1. 폰트파일을 넣을 폴더를 원하는 경로에 만들고 Pacakge > resources 추가하기 // swift-tools-version: 5.5 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescript..
Library, Framework, Swift Package 궁금한 것들을 확인해보고 정리합니다. 테스트를 위한 MyApp workspace 를 하나 만들고 시작합니다. [1] Library # 만들기 File > New > Project > Static Library 선택 MyStaticLibrary 라는 이름으로 만들고 아래처럼 경로 / Add to / Group 을 설정해줍니다. # 기본 정보 Target에 가보면 Mach-O Type이 static library 로 세팅 되어있으며 (Project는 Mach-O Type이 명시 안되어있음) 앱에 embed 하면 .a 확장자를 볼 수 있습니다. # 궁금! 만약 Mach-O Type 을 dynamic library 로 바꾸면..?! 다시 import를..
[1] ISA Swizzling Method Swizzling이 런타임에 특정 메서드를 다른 메서드로 바꿔서 실행될 수 있게 하는 것이라면, ISA Swizzling은 런타임에 특정 객체를 다른 객체로 바꿔서 실행될 수 있게 하는 것을 말합니다. (isa 는 포인터를 의미합니다) object_setClass 를 이용해서 isa swizzling을 할 수 있습니다. 예를들어 나의 커스텀 탭바를 사용하고 싶은 상황을 봅시다. TabBarController의 tabBar 프로퍼티는 get only 이고 이를 세팅할 수 없는 이니셜라이저나 메소드가 없습니다. 이 때 isa swizzling을 통해 기본 탭바를 서브클래싱한 커스텀 탭바를 사용할 수 있습니다. private class CustomTabBar: UI..
☑️ 이 글의 제목 - status bar를 hidden한 뷰컨트롤러를 푸쉬했다가 back 했을때 navigation bar가 shrink 되는 현상 - status bar를 hidden한 뷰컨트롤러를 푸쉬했다가 back 했을때 navigation bar 가 status bar 와 overlap 되는 현상 (두가지를 계속 고민하다가 결국 둘다 너무 길어서 찐제목에는 키워드만 적음,,,) ☑️ 주된 테스트 환경 Xcode 13.4.1 / iOS 15 [1] 준비 아래와 같은 상황으로 준비해줍니다 (feat. 노치없는 시뮬레이터!) - A 는 네비게이션의 root 이다. - A 에서 B 를 푸쉬한다 import UIKit class MyNavigationController: UINavigationContro..
[1] RELEASE 플래그 보통 앱을 만들면 DEBUG 컴파일러 플래그는 기본으로 추가되어있고 RELEASE 플래그를 직접 추가합니다. 그리고 앱에서 종종 플래그를 사용해서 분기처리를 합니다. class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() #if RELEASE print("릴리즈") #else print("릴리즈 아님") #endif #if DEBUG ... } } 그럼 Local Swift Package 를 앱에 embed 해서 쓰는 경우, Swift Package 안에서도 앱 빌드세팅의 컴파일러 플래그를 그대로 사용할 수 있을까요? 테스트해보면 #if DEBUG 는 타고 #if REL..
UITableViewDiffableDataSource의 4가지 apply 메서드 글에서 진행한 간단한 예제를 계속 활용해서 헷갈리는 부분을 테스트해보겠습니다. [1] 아이템이나 인덱스 찾을 때, datasource API를 써야할까 vs snapshot API를 써야할까? UITableViewDiffableDataSource 는 아래와 같은 API가 있고 NSDiffableDataSouceSnapshot은 아래와 같은 API가 있습니다. 각각을 활용해서 할 수 있는 것들을 나열해보겠습니다. (iOS 13 기준!!) 어떤 것을 쓰던 상관없지만,, ✔️ Section이 여러개 있는 화면이라면 snapshot API // multiple sections 관련해서 다양한 기능을 제공하니까 ✔️ 제가 작성한 예제..
Diffable Data Source in iOS 15 에서 다룬 내용인데, 헷갈리니까 한번 더 정리! [1] UITableViewDiffableDataSource의 4가지 apply 메서드들 UITableViewDiffableDataSource 에는 Updating Data를 위한 4개의 apply 메서드들이 있습니다. 위에서부터 적어보면 다음과 같습니다. - apply(_:animatingDifferences:) // iOS 15+ - apply(_:animatingDifferences:completion:) // iOS 13+ - applySnapshotUsingReloadData(_:) // iOS 15+ - applySnapshotUsingReloadData(_:completion:) // iO..
[1] 용어정리 text selection 하면 나오는 등장하는 메뉴 팝업 UI를 HIG 에서는 Edit Menus 라고 지칭하고 개발 용어로는 UIMenuController 입니다. 그리고 Edit Menu (UIMenuContoller) 안에 나오는 Cut, Copy.. 이런 것들을 Command, Action, MenuItem 이라는 용어로 혼용해서 부릅니다. [2] UIMenuController 커스터마이징 (1) - System 첫번째로, UIMenuController 에 나오는 system commands 중 원하는 command 만 나오게 커스터마이징 하려면 어떻게 해야할까요? UIMenuController가 표시되기 전에 UIResponder 의 canPerformAction(_:withS..
RxSwift 는 5가지 방법으로 이 라이브러리를 사용할 수 있다고 가이드하고 있습니다. 1. Cocoapod 2. Carthage 3. SPM 4. xcframework 5. git submodule [1] 제공하는 쪽 써드파티 라이브러리를 제공하는 입장에서 각각을 지원할 수 있는 가이드에 대한 링크를 정리해둡니다. (저는 Cocoapod과 SPM은 예전에 해봐서 카르타고, xcframework 를 한번 해봐야겠어요) 1. Cocoapod 지원하기 https://guides.cocoapods.org/making/making-a-cocoapod.html [ static vs dynamic ] 사용하는 쪽에서 podfile에 use_frameworks! 을 안써주느냐 써주느냐 로 static 또는 dyna..
- Total
- Today
- Yesterday
- DRF APIException
- Flutter Clipboard
- Django Heroku Scheduler
- Sketch 누끼
- 구글 Geocoding API
- 플러터 얼럿
- cocoapod
- PencilKit
- 장고 Custom Management Command
- Django Firebase Cloud Messaging
- flutter dynamic link
- flutter build mode
- ipad multitasking
- 플러터 싱글톤
- Flutter Spacer
- Flutter getter setter
- Django FCM
- Watch App for iOS App vs Watch App
- github actions
- METAL
- 장고 URL querystring
- Flutter 로딩
- flutter 앱 출시
- flutter deep link
- Flutter Text Gradient
- ribs
- Dart Factory
- Python Type Hint
- drf custom error
- SerializerMethodField
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |