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는 하나뿐이였다.