본문 바로가기
IOS 기초

[IOS 기초] 7주 Xcode로 간단한 앱 개발

by heeaeeeee 2024. 10. 17.

첫번째 iOS 앱을 만들며 Xcode 기능 익히기

 

새로운 앱 만들기

[File]-[New]-[Project]-[iOS]-[App]

 

번들 아이디 : 앱의 유일한 식별자(중복X)

 

프로젝트 생성 후 Xcode 초기 화면

물구나무 서기는 안한다. 왜냐 전화나 문자가 올 때 당황한다.

실행 단축키 : commed+ R

 

Navigator 영역

 

 

단축키 : shift+cmd+l

 

Simulator에서 Text Field에 이름 입력하여 키보드 사용

단축키 : commed + K

 

ViewController.swift 소스

// UIKit 프레임워크를 가져옵니다. UIKit은 iOS 앱 개발에 필요한 사용자 인터페이스 요소와 이벤트 처리 기능을 제공합니다.
import UIKit

// ViewController라는 새로운 클래스를 정의합니다. 이 클래스는 UIViewController를 상속받습니다.
// UIViewController는 iOS 앱에서 화면의 콘텐츠를 관리하는 기본 클래스입니다.
class ViewController: UIViewController {

    // viewDidLoad() 메서드를 오버라이드합니다.
    // 이 메서드는 뷰 컨트롤러의 뷰가 메모리에 로드된 후에 호출됩니다.
    override func viewDidLoad() {
        // 부모 클래스(UIViewController)의 viewDidLoad() 메서드를 호출합니다.
        // 이는 기본 설정을 유지하기 위해 중요합니다.
        super.viewDidLoad()
        
        // 이 주석은 개발자가 뷰가 로드된 후 추가적인 설정이나 초기화 코드를 여기에 작성할 수 있음을 나타냅니다.
        // 예를 들어, UI 요소 추가, 데이터 로딩, 네트워크 요청 등의 작업을 수행할 수 있습니다.
        // Do any additional setup after loading the view.
    }

    // 클래스의 끝을 나타냅니다. 추가적인 메서드나 프로퍼티는 이 괄호 안에 정의될 수 있습니다.
}

 

Assistant editor로 storyboard와 소스 연결

단축키 : ctrl+alt+command+enter

 

Label에 outlet변수 추가하기

 

Label에 대한 outlet 연결 후 바뀐 소스

//  ViewController.swift

import UIKit
class ViewController: UIViewController {
    @IBOutlet weak var lblHello: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
}

 

Text Field 변수 이름 지정하고 소스 확인

//  ViewController.swift

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var lblHello: UILabel!
    @IBOutlet weak var txtName: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
}

 

Button에 액션 함수 추가하고 소스 확인

//  ViewController.swift

// UIKit 프레임워크를 가져옵니다. iOS 앱 개발에 필요한 UI 요소들을 제공합니다.
import UIKit

// ViewController 클래스를 정의합니다. UIViewController를 상속받아 화면을 관리합니다.
class ViewController: UIViewController {
    
    // @IBOutlet은 Interface Builder와 코드를 연결하는 어노테이션입니다.
    // weak 키워드는 약한 참조를 나타내며, 메모리 관리에 도움을 줍니다.
    // UILabel 타입의 lblHello 변수를 선언합니다. 이는 스토리보드의 레이블과 연결됩니다.
    @IBOutlet weak var lblHello: UILabel!
    
    // UITextField 타입의 txtName 변수를 선언합니다. 이는 스토리보드의 텍스트 필드와 연결됩니다.
    @IBOutlet weak var txtName: UITextField!
    
    // @IBAction은 Interface Builder의 액션(예: 버튼 탭)과 연결되는 메서드임을 나타냅니다.
    // btnSend 메서드는 버튼이 탭될 때 호출됩니다.
    @IBAction func btnSend(_ sender: UIButton) {
        // 텍스트 필드의 텍스트를 레이블의 텍스트로 설정합니다.
        lblHello.text = txtName.text
    }
    
    // viewDidLoad() 메서드를 오버라이드합니다. 뷰가 메모리에 로드된 후 호출됩니다.
    override func viewDidLoad() {
        // 부모 클래스의 viewDidLoad() 메서드를 호출합니다.
        super.viewDidLoad()
        // 추가적인 설정이 필요한 경우 이 곳에 코드를 작성할 수 있습니다.
        // Do any additional setup after loading the view.
    }

    // 클래스의 끝을 나타냅니다.
}

 

실행 결과

 

Connections Inspector

 

최종 코드

//  ViewController.swift

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var lblHello: UILabel!
    @IBOutlet weak var txtName: UITextField!
    @IBAction func btnSend(_ sender: UIButton) {
        lblHello.text = "Hello, " + txtName.text!
        //느낌표는 옵셔널 값을 강제로 언래핑하는데 사용되지만, 항상 안전한 방법은 아니므로 주의해서 사용해야 합니다.
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
}

실행 결과

 

Assets.xcassets의 AppIcon에 1024 아이콘 추가

 

Debug area console에서 결과 확인하기

 

hello.zip
0.11MB