Xcode 빌드

동그라미·2024년 11월 18일
8
post-thumbnail

빌드하기 전 기초 개념


컴파일 & 빌드

💡 - 컴파일(Compile)

- 컴파일이란 어떤 언어의 코드 전체를 다른 언어로 바꿔주는 과정이다.

즉, Swift에서 컴파일이란,
사람이 이해하기 쉬운 High Level 언어인 Swift로 작성한 코드를
컴퓨터가 이해하기 쉬운 바이너리 파일로 변환하는 과정.

💡 - 빌드 (Build)

소스 코드 파일을 실행 가능한 소프트웨어 산출물로 변환하는 과정이다.
컴파일만 해서는 실행 가능한 결과가 나오지 않는다.
프로젝트에 포함한 리소스(이미지, 컬러 등 Swift 코드가 아닌 것들)까지 모두 말아서
실행 가능한 결과를 만든다.


앱 생명주기 (App Lifecycle)

▪️ Unattached (= Not Running)

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

▪️ Foreground Inactive

앱을 실행했지만 사용자로부터 이벤트를 받을 수 없는 상태.

앱을 완전히 활성화하기 이전 단계.

▪️ Foregound Active

앱을 실행했고 사용자로부터 이벤트를 받을 수 있는 상태.

가장 일반적인 앱을 사용하고 있는 상태.

▪️ Background

앱을 실행한 뒤 백그라운드로 넘어간 상태.

홈버튼을 눌러 밖으로 나갔을 때의 상태.

그래도 메모리에 올라가있는 상태이다.

ex) 멜론 앱이 홈 화면에서도 음악을 계속 재생하는 상태

▪️ Suspend

백그라운드 상태에서 앱이 특별한 작업을 필요로 하지 않을 경우 접어드는 상태

OS 가 판단하여 Background → Suspend 상태로 변환시킨다.

ex) 게임 앱을 동시에 30개 켜면 (기기 메모리에 부담스러운 상황을 연출하면), 비교적 초반에 실행한 앱들은 백그라운드에서 Suspend 상태로 넘어가, 돌아갔을 때 앱이 재실행되는 경우가 있다.


AppDelegate & SceneDelegate


AppDelegate

  • 프로젝트를 생성하면 자동으로 생성되는 클래스.
  • 앱의 생명주기와 관련된 다양한 메서드들을 제공하는 클래스.

ex 1) didFinishLaunchingWithOptions (위 캡처화면에서 보이는 메서드)

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    return true
}

이 메서드는 앱이 실행할 준비를 마친 초기 상황에 실행된다.

따라서 앱을 실행한 극 초반에 세팅해야 할 코드들을 이곳에 작성하면 된다.

ex 2) didBecomeActive

이 메서드는 앱의 상태가 inActive에서 Active로 변하기 직전에 실행된다.

따라서 앱이 Active한 상태가 되기 전에 작성하고 싶은 코드들을 작성한다.

예를 들어 앱이 백그라운드에 갔다가 돌아올 때마다 화면에 보이는 정보들을 업데이트하고 싶다. 이런 경우에 이 메서드를 활용할 수 있다.


SceneDelegate

  • 프로젝트를 생성하면 자동으로 생성되는 클래스.
  • Scene 을 다루는 클래스. iOS13부터 등장.
  • 멀티 윈도우 환경에서 다중 Scene의 개념이 생겨났다.
  • 아이패드에서 가로 모드, 화면 분할을 하면 각 분할된 화면이 Scene 을 의미.
  • 그전에는 AppDelegate가 SceneDelgate의 역할까지 모두 수행했다.

퍼스트파티 & 서드파티

▪️ 퍼스트 파티 (제1자)

iOS 개발은 애플이 주관하기 때문에, 애플이 제공하는 툴들을 퍼스트 파티라고 한다.

ex) UIKit, URLSession 등

▪️ 서드 파티 (제3자)

애플이 오피셜 하게 만든 것이 아닌, 제3자가 제공하는 툴들을 서드 파티라고 한다.

ex) SnapKit (UI를 편하게 짜도록 돕는 라이브러리)

Alamofire (URLSession 을 편하게 사용하도록 돕는 라이브러리)

KingFisher (이미지 로드를 편하게 하도록 돕는 라이브러리)

Swinject (DI 및 ServiceLocating 을 편하게 하도록 돕는 라이브러리)

CocoaPods, SPM(Swift Package Manager), Carthage 등을 이용해서 서드파티 라이브러리를 프로젝트에 받아올 수 있다.


디버깅, llldb 개념


디버깅

디버깅이란?

디버깅(Debugging)이란 소프트웨어에서 발생하는 오류(bug)를 찾아내고 수정하는 과정.
프로그램이 예상대로 작동하지 않을 때 그 이유를 찾아내고, 그 문제를 해결하는 작업.


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)
    }
}


OSLog 로그 찍기

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)
    }
}


브레이크포인트 찍기

  • 16 번 라인 숫자를 클릭해서 파란색 브레이크 포인트 생성.
  • 브레이크 포인트를 삭제하려면 드래그해서 밖에다가 버리면 됨.
  • 아래 디버그 영역에 randomNumber = (Int) 75 출력된 것 확인.
  • 아래 디버그 영역에서 재생 버튼 누르면 브레이크가 풀리며 다시 원래 흐름대로 이어서 실행됨.

lldb

💡- 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
맨날 최선을 다하지는 마러라. 피곤해서 못산다.

2개의 댓글

comment-user-thumbnail
2024년 11월 19일

동글님 썸네일 만드는데 얼마나 걸리세요?

1개의 답글