[Swift][내배캠] iOS 주특기 입문 강의 (2)

팔랑이·2024년 6월 19일
0

iOS/Swift

목록 보기
33/71
post-thumbnail

1-1, 1-2를 다룬 주특기 입문 강의 (1) 게시글은 여기로!


1-3. Xcode 빌드

1) 기초 개념

컴파일 vs 빌드

  • 컴파일: Swift 코드와 같은 High level 언어를 Low level 코드인 Binary Code로 변환하는 것
  • 빌드: 컴파일 과정을 포함, 실행에 필요한 리소스들을 함께 말아 실행 가능한 결과를 만드는 것

앱 생명주기

Unattached (= Not Running)

  • 앱을 실행 중이지 않은 상태

Foreground Inactive

  • 앱을 실행했지만 사용자로부터 이벤트를 받을 수 없는 상태.
  • 앱을 완전히 활성화하기 이전 단계.
  • 런치스크린 단계

Foregound Active

  • 앱을 실행했고 사용자로부터 이벤트를 받을 수 있는 상태.
  • 가장 일반적인 앱을 사용하고 있는 상태.

Background

  • 앱을 실행한 뒤 홈버튼을 눌러 밖으로 나갔을 때의 상태.
  • 그래도 메모리에 올라가 있다.
    ex) 멜론 앱이 홈 화면에서도 음악을 계속 재생하는 상태.

Suspend

  • 백그라운드 상태에서 앱이 특별한 작업을 필요로 하지 않을 경우 접어드는 상태
  • OS 가 판단하여 Background → Suspend 상태로 변환시킨다.
    ex) 게임 앱을 동시에 30개 켜면 (기기 메모리에 부담스러운 상황을 연출하면), 비교적 초반에 실행한 앱들은 백그라운드에서 Suspend 상태로 넘어가, 돌아갔을 때 앱이 재실행되는 경우가 있다.

Appdelegate & Scenedelegate

둘다 프로젝트 생성시 자동으로 생성되는 클래스로, 앱의 생명주기나 화면에 관련한 여러 메소드를 제공한다.

Appdelegate

주요 메서드 2개

1) didFinishLaunchingWithOptions

  • 앱이 실행될 준비를 마친 초기 상황에 실행
  • 앱을 실행한 극초반에 세팅될 코드 작성

2) applicationDidBecomeActive

Scenedelegate

  • iOS 13부터 생성됨, 이전에는 Appdelegate에서 모든 역할을 수행
  • 멀티 윈도우 환경, 다중 Scene 이곳에서 관리 가능 (아이패드 가로 -> 화면 2개)

2) 디버깅

디버깅이란? 말 그대로 소프트웨어에서 발생하는 오류(bug)를 찾아내고 수정하는 과정이다.
개인적으로 이번 강의 중 가장 궁금했고 기대했던 내용...

디버그 관련 웃긴 밈 봤던게 있는데 다시 찾으려니 못찾겠다 ㅜ

1️⃣ print문 디버깅

// ViewController.swift

import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let randomNumber = getRandomNumber()
        print("randomNumber = \(randomNumber)")
    }
    
    // 0 부터 100 중 랜덤한 수를 리턴하는 함수
    func getRandomNumber() -> Int {
        return Int.random(in: 0...100)
    }
}
  • print문을 사용하여 실행중인 프로그램의 변수나 상태를 콘솔 로그에 출력

참고: viewDidLoad()에는 뷰컨트롤러가 실행되는 극초반에 실행되는 코드들을 작성

2️⃣ Oslog 디버깅

: swift가 지원하는 log 찍는 도구

import UIKit
import OSLog

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()

        os_log(.default, "(default) randomNumber = \(self.getRandomNumber())")
        os_log(.debug, "(debug) randomNumber = \(self.getRandomNumber())")
        os_log(.info, "(info) randomNumber = \(self.getRandomNumber())")
        os_log(.error, "(error) randomNumber = \(self.getRandomNumber())")
        os_log(.fault, "(fault) randomNumber = \(self.getRandomNumber())")
    }
    
    // 0 부터 100 중 랜덤한 수를 리턴하는 함수
    func getRandomNumber() -> Int {
        return Int.random(in: 0...100)
    }
}

  • 로그의 레벨 다섯가지: default, debug, info, error, fault

3️⃣ breakpoint

  • 브레이크 포인트를 삭제하려면 드래그해서 밖에다가 버리면 됨.
  • 디버그 영역 좌상단 재생 버튼 누르면 브레이크가 풀리며 다시 원래 흐름대로 이어서 실행됨.

4️⃣ lldb

: Low Level Debuger의 줄임말로, 디버그 영역 중 오른쪽 영역에 lldb를 사용해서 디버깅을 할 수 있다. 브레이크 포인트와 함께 사용하면 효과가 좋음

  • po 명령어: print object의 줄임말로, 객체에 대한 값을 출력한다. 가장 많이 사용하게 될 명령어. 위 캡처 사진처럼 맥락 안에서 어느 정도 자동완성도 지원을 해준다. po randomNumber > 100처럼 계산식을 입력해서 그에 대한 결과값도 받을 수 있다.
  • cmd + K를 눌러서 디버그 창을 깨끗하게 비울 수 있다.
  • expression 명령어: 변수를 선언할 수 있게 해준다. expression let $x = 100 : x = 100 선언. expression randomNumber : lldb 영역 내에서 randomNumber를 $R0 이라는 변수로 선언.
    새롭게 선언할 때마다 $R1, $R2 로 자동 선언. po $R0 + $x : 두 값을 더한 값 출력.
profile
정체되지 않는 성장

0개의 댓글