TIL 22
오늘 배운 것
-
공식 문서를 보자!!
-
Mac Catalyst
- iPad용 코드로 Mac 앱을 만들 수 있는 기능?이다. 맥 앱은 AppKit을 사용하는데 AppKit API 안에 Mac Catalyst용 API만 사용 가능하다.
-
Cocoa Touch Framework
- iOS에서 사용하는 Foundation, UIKit을 포함한 프레임워크다.
- Foundation = Foundation은 root class인 NSObject를 구현하고 기본 데이터 형식(ex: String, Int), 컬렉션(ex: Array, dictionaries), 파일 관리, XML 처리, 객체 지속성, internationalization, 네트워크 기능을 제공한다. 또한 포트, 스레드, 프로세스에 엑세스 할 수 있다. 그리고 Core Foundation를 기반으로 하고 있다.
-
Xcode Snippet
- 자주 사용하는 코드를 저장해놓고 재사용 할 수 있다.
-
전처리문 = 컴파일 전에 미리 처리하는 문장
- #if … #endif ```swift #if DEBUG import SwiftUI …. #endif
#if os(iOS) print(“iOS”) #elseif os(MacOS) print(“MacOS”) #endif
#if TAGET_OS_IOS // TAGET_OS 같은 경우 Objective-C에서 사용하는데 스위프트에서 사용해도 돌아간다. print(“iOS”) #endif
<br>
- ## iOS 13 미만에서 빌드할 때 에러 해결 방법
- 어제 알아봤을 때는 SceneDelegate파일을 삭제하고 Info.plist에서 항목을 삭제 했는데 오늘 더 좋은 방법을 배웠다.
- @availabel(iOS 13.0, *)는 iOS 13 이상에서만 가능하다는 뜻이다. 그래서 굳이 삭제 해주지 않아도 빌드가 된다.
<br>
- ## AutoLayout 코드로 구현
- 스토리보드로 할 때랑 원리는 같다. 단지 코드로 구현한다고 생각하면 된다.
- 오토레이아웃 핵심 = x,y 위치 그리고 가로,세로 크기
```swift
// translatesAutoresizingMaskIntoConstraints 프로퍼티는 꼭 false로 해야한다
// true일 경우 autoresizing mask로 constraint를 뷰의 위치와 크기를 잡는다는 뜻이다 = 내가 원하는 constraint를 할 수 없다
randomButton.translatesAutoresizingMaskIntoConstraints = false
// 위치지정
randomButton.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
randomButton.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 20).isActive = true
randomButton.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -20).isActive = true
randomButton.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -20).isActive = true
// 크기지정
randomButton.heightAnchor.constraint(equalToConstant: 40).isActive = true
- Scene이란? 기능은?
- 쉽게 생각하면 앱에 보여지는 화면이다.
- scene은 window와 view controllers를 포함하고 있고, 각 scene은 UIWindowSceneDelegate를 가지고 있다. 그리고 같은 메로리, 앱 프로세스를 공유하면서 동시에 실행한다.
- iOS 13 이상 부터는 window가 Scene으로 대체되었다.
- window = View의 컨테이너 역할을 하고 이벤트 처리를 한다.
- window와 scene의 차이점은 scene은 앱 하나에 여러개의 scene이 들어가 있을 수 있다. 하지만 window는 하나뿐이였다.