카테고리 없음

iOS프로그래밍실무 (03.24)

k0223 2025. 3. 20. 16:41

iOS Nigth Light 앱 제작하기

 

먼저 iOS Nigth Light 앱에 관한 질문을 ai에게 하였습니다.

인기 Night Light 앱 분석
Best Night Light

기능: 사용자의 스마트폰 화면을 이용하여 방을 밝히는 3가지 모드 제공 (Night Light, Mood Light, Lava Lamp) 5.
특징: 다양한 조명 모드로 사용자 맞춤형 경험 제공.
CF.Lumen

기능: 색온도를 조절하고 특정 색상 범위를 비활성화할 수 있는 기능 제공 6.
특징: 사용자에게 맞춤형 조명 환경을 제공하여 눈의 피로를 줄임.
Night Shift

기능: 일몰부터 일출까지 자동으로 화면 색온도를 조절 7.
특징: 블루 라이트 필터링 기능으로 수면 질 향상.
기획서 세부 계획 (2025년 3월 20일 ~ 5월 30일)
1. 시장 조사 및 분석 (3월 20일 ~ 4월 5일)
목표: 경쟁 앱 분석 및 사용자 요구사항 파악.
활동:
인기 Night Light 앱 다운로드 수 및 사용자 리뷰 분석.
사용자 인터뷰 및 설문조사 진행.
2. 기능 정의 및 설계 (4월 6일 ~ 4월 20일)
목표: 앱의 핵심 기능 및 사용자 인터페이스 설계.
활동:
기본 기능: 다양한 조명 모드, 색온도 조절, 자동 모드.
사용자 인터페이스(UI) 프로토타입 제작.
3. 개발 단계 (4월 21일 ~ 5월 15일)
목표: 앱 개발 및 초기 테스트.
활동:
iOS 개발 환경 설정 및 코드 작성.
기능별 모듈 개발 및 통합 테스트.
4. 베타 테스트 및 피드백 수집 (5월 16일 ~ 5월 23일)
목표: 사용자 피드백을 통한 앱 개선.
활동:
베타 버전 배포 및 사용자 피드백 수집.
피드백을 바탕으로 기능 개선 및 버그 수정.
5. 출시 준비 및 마케팅 (5월 24일 ~ 5월 30일)
목표: 앱 스토어 출시 및 마케팅 전략 수립.
활동:
앱 스토어 최적화(ASO) 및 마케팅 자료 준비.
소셜 미디어 및 커뮤니티를 통한 홍보 계획 수립.


결론
이 기획서는 iOS Night Light 앱 개발을 위한 체계적인 접근 방식을 제시합니다. 시장 조사부터 출시까지의 세부 계획을 통해 사용자 요구를 충족시키고, 경쟁력 있는 앱을 개발할 수 있을 것입니다. 성공적인 앱 출시를 위해 각 단계에서 철저한 준비와 실행이 필요합니다.

 

ai는 이와 같이 대답합니다.

 

본격적으로 앱의 제작을 위해 Mac에 있는 Xcode를 실행합니다.

undle Identifier는 iOS 및 macOS 애플리케이션을 고유하게 식별하기 위해 사용되는 문자열입니다. 이 식별자는 애플리케이션의 패키지를 구분하는 데 중요한 역할을 합니다.

 

실행할 시 이런식으로 가상의 아이폰이 나옵니다.

 

ViewController.swift으로 가서

override func viewDidLoad() {

        super.viewDidLoad()

        print("viewDidLoad")

    }

    override func viewDidAppear(_ animated: Bool) {

        print("viewDidAppear")

    }

    override func viewWillAppear(_ animated: Bool) {

        print("viewWillAppear")

    }

을 코딩하고 실행할 시 아래와 같이 나옵니다.

https://developer.apple.com/documentation/uikit/uiviewcontroller

 

UIViewController | Apple Developer Documentation

An object that manages a view hierarchy for your UIKit app.

developer.apple.com

 

//
//  AppDelegate.swift
//  NightLight_B
//
//  Created by comsoft on 2025/03/20.
//

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // 애플리케이션이 시작된 후 사용자 정의를 위한 오버라이드 지점입니다.
        return true
    }

    // MARK: UISceneSession 생명 주기

    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        // 새로운 장면 세션이 생성될 때 호출됩니다.
        // 이 메서드를 사용하여 새 장면을 생성할 구성을 선택합니다.
        return UISceneConfiguration(name: "기본 구성", sessionRole: connectingSceneSession.role)
    }

    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        // 사용자가 장면 세션을 버릴 때 호출됩니다.
        // 애플리케이션이 실행 중이지 않을 때 세션이 버려지면, application:didFinishLaunchingWithOptions가 호출된 직후에 이 메서드가 호출됩니다.
        // 버려진 장면에 특정한 리소스를 해제하는 데 이 메서드를 사용합니다. 이 리소스는 다시 돌아오지 않습니다.
    }
}

 

//
//  SceneDelegate.swift
//  NightLight_B
//
//  Created by comsoft on 2025/03/20.
//

import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow? // 현재 장면에 연결된 UIWindow 객체를 참조하는 속성입니다.

    // 새로운 장면이 연결될 때 호출되는 메서드
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // UIWindowScene으로 변환할 수 있는지 확인합니다.
        guard let _ = (scene as? UIWindowScene) else { return }
    }

    // 장면이 시스템에 의해 해제될 때 호출되는 메서드
    func sceneDidDisconnect(_ scene: UIScene) {
        // 장면이 백그라운드로 들어가거나 세션이 버려질 때 발생합니다.
        // 이곳에서 장면과 관련된 리소스를 해제할 수 있습니다.
    }

    // 장면이 비활성 상태에서 활성 상태로 전환될 때 호출되는 메서드
    func sceneDidBecomeActive(_ scene: UIScene) {
        // 일시 중지된 작업을 재시작할 수 있습니다.
    }

    // 장면이 활성 상태에서 비활성 상태로 전환될 때 호출되는 메서드
    func sceneWillResignActive(_ scene: UIScene) {
        // 전화 통화와 같은 일시적인 방해로 인해 발생할 수 있습니다.
    }

    // 장면이 백그라운드에서 포그라운드로 전환될 때 호출되는 메서드
    func sceneWillEnterForeground(_ scene: UIScene) {
        // 백그라운드로 들어갈 때 변경된 사항을 되돌릴 수 있습니다.
    }

    // 장면이 포그라운드에서 백그라운드로 전환될 때 호출되는 메서드
    func sceneDidEnterBackground(_ scene: UIScene) {
        // 데이터를 저장하고, 공유 리소스를 해제하며,
        // 장면의 현재 상태를 복원하는 데 필요한 정보를 저장할 수 있습니다.
    }
}

 

AppDelegate.swift 와 SceneDelegate.swift 에 대한 간단한 설명입니다.

 

뷰(View) 

https://developer.apple.com/documentation/uikit/uiview 

 

UIView | Apple Developer Documentation

An object that manages the content for a rectangular area on the screen.

developer.apple.com

 

UI의 기본 구성 요소 

모든 뷰는 UIKit의 UIView 클래스의 자식클래스 

뷰는 앱의 UI를 구성하는 방법을 제공하며, 사용자의 터치 이벤트를 처리하고, 뷰의 내용을 그리는 방법을 제어하는 등의 작업을 수행 

뷰 계층(View Hierarchy) 

하나의 뷰는 여러 개의 하위 뷰를 가질 수 있고, 각 하위 뷰는 부모 뷰에 추가됩니다.

뷰 계층을 통해 뷰 간의 위치 관계와 그리기 순서를 결정

보통 부모 뷰에 추가된 뷰는 부모 뷰의 영역 내에서만 그려집니다.

레이블(UILabel),이미지 뷰(UIImageView), 버튼(UIButton), 텍스트 필드(UITextField) 등

 

 

소스를 작성중 궁금한 것이 있다면 Alt를 누른상태에서 단어를 클릭시 위의 사진과 같이 설명이 나옵니다.

 

 

앱 제작시 Constraint 설정 하지 않는다면 화면을 가로로 돌렸을때 레이아웃이 따라오지 못합니다.