
개요 회사의 iOS 프로젝트들에 따로 존재하지만 같은 목적으로 사용되는 똑같은 코드들이 있었다. 로그를 위한 Logger, 유틸성 객체나 extension들을 모아둔 코드 등인데, 모듈화를 진행하면서 local spm으로 분리해놓은 상태였다. 문제는 이걸 각 프로젝트마다 소스 파일을 복붙해서 가지고 있고 Local Path를 통해 의존성을 추가해서 사용하고 있다는 것이다. 공통으로 관리되어야 함에도 각 프로젝트마다 따로 관리되고 있다는게 불편했다. 레포에 올려두고 사용하고 싶은데 회사 레포이다보니 Private이라 일반적인 방법으로는 불가능하기 때문에 다른 해결 방법을 찾아보았다. 방법 1. (👎) dependencies: [ .package(url: "https://user:password@github..

1. 구글 스프레드 시트 생성 2. 메뉴-확장프로그램-Apps Script 에서 스크립트 파일 추가, 아래 파일 내용 copy & paste, 저장 후 시트 페이지 새로고침 3. 아래와 같은 형식에 맞춰서 string들 작성. 위 3줄 수정 금지, 언어 추가는 가능. 4. Key의 네이밍 규칙은 상황에 맞춰서 작성. (iOS와 Android가 함께 사용하기 위해 적절한 합의점의 네이밍 규칙을 찾기가 꽤나 골치아프다..) 5. 위 스크립트의 코드 중 스프레드 시트가 열리자 마자 실행되는 함수(onOpen())에 의해 상단 메뉴 끝에 추가된 메뉴를 통해 리소스 생성 6. 구글 드라이브 내에 생성된 파일 확인 참고 [iOS] 구글 스프레드 시트로 다양한 언어 Localized.strings 만들고 적용 let..

아무런 상황에서나 원하는 인스턴스를 디버깅 하고 싶었다. 그치만 breakpoint가 걸린 시점에 원하는 인스턴스가 변수로 접근이 불가능한 시점이거나, View Hierarchy Debug 상태라 Variables View에 캡처된 변수가 없는 상태일 때는?? 이럴때 내가 할 수 있었던 건 싱글톤 같은 인스턴스를 po SomeClass.shared.someProperty 현재 보이는 뷰의 description만 찍어보는 것,, 이렇게 할 때 description 밖에 못 봤어서 아쉬웠다 아무튼 이렇게 밖에 못했기 때문에 원하는 인스턴스를 디버깅해보기 위해서는 변수로 접근할 수 있는 시점에 breakpoint를 찍고 들여다 봐야 했다. 이렇게,, 여태 이게 최선인줄 알았는데 그냥 나의 한계였다,, 오늘 이..

UISplitViewController를 사용할 때 Size Class에 따라 2가지 상태를 갖게 된다. Horizontally Compact 환경에서 isCollpased 가 true로 되어 압축이 되거나, Horizontally Regular 환경에서 isCollapsed 가 false로 되어 원래의 형태를 갖추게 될 수 있다. isCollapsed = false // 원래의 형태 isCollapsed = true // 압축된 형태 iPad를 지원하도록 Deployment Info를 설정한 상태라면 아이패드에서 멀티태스킹을 이용할 수 있다(디바이스 설정에서 멀티태스킹을 직접 off한 것이 아니라면) 이 때 현재 앱 화면이 압축된 화면분할을 가능하도록 할지 설정할 수 있는데, 이 설정 값에 따라 UI ..
원문: https://developer.apple.com/documentation/uikit/uisplitviewcontroller HIG: https://developer.apple.com/design/human-interface-guidelines/ios/views/split-views/ UISplitViewController 계층 인터페이스를 구현하는 컨테이너 뷰 컨트롤러입니다. Declaration @MainActor class UISplitViewController : UIViewController Overview SplitViewController는 계층 인터페이스에서 하위 뷰 컨트롤러를 관리하는 컨테이너 뷰 컨트롤러입니다. 이러한 유형의 인터페이스에서는 한 뷰 컨트롤러 드라이브의 변경사항이 ..
원문: https://developer.apple.com/documentation/watchkit/life_cycles WatchKit - Life Cycles Life Cycle notifications 수신 및 응답 Overview 시스템이 SwiftUI 환경 및 extension delegate 객체에 앱 실행 상태의 변경 사항을 보고합니다. 상태 변경은 앱이 실행되거나 백그라운드로 이동하는 등 앱의 lifetime 동안 발생한 주요 이벤트에 해당합니다. 상태 변경 사항을 사용하여 공유 리소스 로드 및 초기 사용자 인터페이스 구성과 같은 관련 task를 trigger합니다. 아래 표는 당신의 앱에 대한 가능한 상태와 시사점을 보여줍니다. State Description Not running watc..
원문: https://developer.apple.com/documentation/watchkit WatchKit 백그라운드 작업, 확장 런타임 세션 및 Digital Crown 액세스와 같은 watchOS 기능을 활용하는 앱을 구축합니다. Overview WatchKit 프레임워크는 백그라운드 작업, 확장 런타임 세션, Siri intent, 운동 세션을 포함한 watchOS 앱을 만들기 위한 인프라를 제공한다. 프레임워크는 또한 앱을 실행하는 Apple Watch에 대한 기기별 정보에 액세스하는 것과 같은 지원 작업도 수행합니다. Create an Effective watchOS Experience 애플워치는 사용자의 손목에 있는 중요한 정보에 쉽게 접근할 수 있게 해줍니다. watchOS 경험은 간..

status bar style을 코드로(programmatically..) 변경하는 방법! 아래와 같은 코드의 뷰컨트롤러가 있을 때 final class MainViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() setUpUI() } private func setUpUI() { view.backgroundColor = .systemBackground } } 라이트모드 다크모드 이렇게 디바이스 디스플레이 모드가 라이트 모드일때 검정색, 다크모드일때 흰색으로 보인다. 단, Info.plist로 statusBarStyle 관련 설정을 해주지 않았을때.. 그리고 여기서 현재 statusBarStyle을 커스텀 지..
Privacy policy We respect your privacy and are committed to protecting it through our compliance with this privacy policy (“Policy”). This Policy describes the types of information we may collect from you or that you may provide (“Personal Information”) in the “HandyOverflow” mobile application (“Mobile Application” or “Service”) and any of its related products and services (collectively, “Servi..
- Total
- Today
- Yesterday
- 프론트엔드 공부
- 냉철
- SplitViewController
- UISplitViewController
- 스토아학파
- Android
- ios
- 읏샷샤 화이팅 앗샷샤 화이팅
- opentutorial
- statusBarStyle
- iPad
- Localizable
- bitbucket
- strings.xml
- spm
- Xcode
- iPadOS
- 클론코딩
- 생활코딩
- 에피쿠로스
- watchOS life cycle
- lldb
- private repository
- watchOS
- 철학의 역사
- 에피큐어
- watchKit
- split view controller
- iOS App Life Cycle
- StatusBar
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |