프로젝트 생성
Xcode를 실행하고 "Create a new Xcode project"**를 선택합니다.
App 템플릿을 선택하고, 프로젝트 이름을 "NightLight"로 설정합니다.
Interface를 Storyboard로, Language를 Swift로 선택합니다.
Storyboard에 UI 구성
Main.storyboard 파일을 열고 UI를 디자인합니다.
조명 스타일 선택 버튼
색상 및 밝기 조절 슬라이더
타이머 설정 버튼
사운드 재생 버튼
Auto Layout을 사용하여 다양한 기기에서 UI가 잘 보이도록 합니다.
UI와 코드 연결
ViewController.swift 파일을 열고, Storyboard의 UI 요소를 코드와 연결합니다.
@IBOutlet으로 UI 요소를 변수로 연결하고, @IBAction으로 이벤트를 처리합니다.
기능 구현
조명 기능: UIView를 사용하여 조명 효과를 시뮬레이션하고, 슬라이더 값에 따라 배경색과 밝기를 조절합니다.
타이머 기능: Timer 클래스를 사용하여 설정한 시간 후에 조명을 끕니다.
사운드 기능: AVFoundation 프레임워크를 사용하여 배경 음악을 재생합니다.
테스트 및 디버깅
Xcode의 시뮬레이터를 사용하여 앱을 실행하고 UI 및 기능을 테스트합니다.
버그가 발견되면 디버깅 도구를 사용하여 문제를 해결합니다.
App Store 출시 준비
App Store Connect에 앱을 등록합니다.
앱 아이콘, 스크린샷, 설명 등을 작성하여 제출합니다.
Bundle ID 는 애플리케이션에 고유 이름이며 중복되게 만들 수 없다.
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("viewDidLoad1")
}
override func viewDidAppear(_ animated: Bool) {
print("viewDidLoad2")
}
override func viewWillAppear(_ animated: Bool) {
print("viewDidLoad3")
}
}
//출력값
viewDidLoad1
viewDidLoad3
viewDidLoad2
순서대로 했지만 출력은 1 -> 3 -> 2 로 출력되는 것이 Life cycle(생애 주기)가 다르기 때문에 발생하는 현상이다.
- iOS 에서 life cycle은 app, view 두가지 생애주기가 존재한다.
viewDidLoad : 뷰 컨트롤러 클래스가 생성될 때, 가장 먼저
실행. 딱 한 번 실행되기 때문에 초기화 할 때 사용
viewWillAppear : 뷰가 생성되기 직전에 매번 실행이 되기
때문에 뷰가 나타나기 전에 실행해야 하는 작업들을 여기서 함
viewDidAppear : 뷰가 생성되고 난 뒤에 실행한다. 데이터를 받아서 화면에 뿌려주거나 애니메이션 등의 작업을 하는 로직을 작성
ViewWillAppear에서 로직을 넣었다가 뷰에 반영이 안되는 경우가
있기 때문이다.
ViewWillDisappear : 뷰가 사라지기 직전에 실행
ViewDidDisappear : 뷰가 사라지고 난 뒤에 실행
전체적인 틀을 보여주는 것을 Window라고 한다.
- 제약조건이 추가된 모습 , 기기를 돌려도 정중앙에 위치하게 된다.

