새싹 iOS 1주차 - 3

영 yyyng·2022년 7월 6일
0

Sesac

목록 보기
6/32
post-thumbnail



(WWDC 2019 캡쳐)

앱의 생명주기 appdelegate scenedelegate
앱 사용 중 / 사용 x / 백그라운드상태
not running 실행 전
active / inactive = foregorund
active 활성화상태(하나일 수 밖에 없다)
inactive(전화, 알람)
background 화면에 없지만 코드가 실행중인상태
suspend 앱이 곧 종료될 상태
-----------다시정리할것

  • AppDelegate
    iOS 13 이전에는 앱의 상태를 업데이트하는 등의 앱의 주요 생명 주기 이벤트를 관리했었다.

  • SceneDelegate
    ios13부터 scene개념을 사용하며 앱의 생명주기를 담당한다.

  • scene
    ios 13 이전의 window 개념이 확장되면서 여러 scene이 존재할 수 있게 됐다.

iOS 13 이전 버전 대응을 위한 UIWindow (아래 코드)

//AppDelegate.swift
import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow? // iOS 13 이전버전 대응할때 삽입
}

iOS 13 이전 버전 대응을 위한 available (아래 코드)
@available (iOS 13.0, *)

//AppDelegate.swift
    @available (iOS 13.0, *) //두곳 부분 삽입
    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
    }
    @available (iOS 13.0, *)
    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
    }
    
//SceneDelegate.swift
import UIKit

@available (iOS 13.0, *) //scene 전체를 포괄한 삽입
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
}

Appearance
다크모드 iOS 13부터 사용가능

assets -> new color set
any appearance = light/dark에 속하지 않는 나머지 색
light = 다크모드가 아닌 일반의 색
dark = 다크모드시 색

Darkmode 끄기
info plist(property list 줄임말로 소스코드로도 열 수 있다.)로 이동.
Appearance 추가하고 값 Light.
소스코드로 보면 key 값이 UIUserInterfaceStyle로 돼 있다. (Appearance 과거의 이름)

General - Device Orientation 세로모드 / 가로모드 / 뒤집기모드 대응
portrait 세로
landscape left / right 가로
upside down 180도 뒤집기 ipad에만

Build Settings - info.plist values supported interface orientations(iphone)
General의 Device Orientation만 변경해서는 적용이 안되므로 여기도 수정할 것.

하나의 project에 target이 아닌 targets인 이유
target은 app, widget extentions 등 각자 설정 가능하기 때문.

launchscreen sleep()

//AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        sleep(5) // 5초만 launchscreen에 머무르는 것이 아니라 다른 코드가 실행되는 시간 + sleep 5초 시간
        return true
    }

Clean build folder
~/Library/Developer/Xcode/DerivedData/* 내의 작업 관련 캐시 삭제
작업 중 내용이 바로바로 반영이 안 되거나 버그 등이 날 때 해볼 것.

snippets

  • Snippets ( 위 캡쳐 )
    반복해야하거나 자주쓰는 코드를 즐겨찾기처럼 추가해놓을 수 있다.
    소스코드 입력 중인 창에서 Command + Shift + L
    스토리보드에서 똑같은 단축키를 누르면 Snippets가 아닌 object library가 열림.


  • Debug View Hierarchy (위 캡쳐 )
    뷰 계층 디버거(View Hierarchy)'라고 불리는 도구를 통해 뷰 계층의 구조를 살펴볼 수 있다.
    UI가 어긋났는데 찾지 못하거나 구현된 구조가 궁금할 때 사용.

  • UITapGestureRecoginzer ( 위 캡쳐 )
    뷰에 여러개 존재 할 수 있고 구역을 설정하여 제스쳐에 따른 행동을 설정 가능하다. 스토리보드 라이브러리(Shift+Cmd+L)에서 가져 올 수 있다.
    설정 후 스토리보드의 뷰 위에서 확인할 수 있다.

아이디 입력이 됐는지 여부 확인 / 아이디 없이 비밀번호만 적혀있어도 똑같은 경고알람
비밀번호 입력 확인 / 최소 6자리 이상 확인
그리고 가입완료 메세지 출력.

이 조건들 말고도 추천 코드를 숫자로만 받아야해서 키보드타입을 Numpad변경 했으나 캡쳐처럼
붙여넣기가 가능하므로 붙여넣기를 막던지 조건문 설정해야 함..

type(of:)로 타입을 알아내 비교하는 조건문을 구상해 적어 봤지만 맞던, 틀리던 경고문이 뜬다..

조건문을 어떻게 사용하여 처리해야 할지 고민할 때 팀원분들은
나는 전혀 생각지 못한 방법으로 해결들을 하셨다. 역시나 다들 똑똑하시다.
최대한 새싹에서 배운 내용들로 해야하는데, 나는 혼자 삽질해볼때 해본 alert를 썼다.
그 마저도 당시에 복붙했던 내용이라 여전히 내 것이 아니다.

그리고 시뮬레이터 깔끔하게 캡쳐하는 법을 이제야 알았다.
2팀원분들, 3팀원분들, Jack님, Hue님, Bro님 간담회? 를 했다. 어색했지만 재밌었다.

아래 내용은 당일날 완성하지 못한 것을 다음 날 추가한 것

4일차에서 배운 옵셔널과 조건문, 형변환을 이용해 완성했다.
옵셔널, nil 개념이 낯설고 어려웠지만 엄청 중요하고 잘 사용만 할 수 있다면 많이 쓰이고 유용할 것 같다는 생각이 듬.
팀원분들의 성공담들을 듣고 잘 참고하려 노력했다.

if codeTextField.text != "" { // 추천코드 textfield가 비었는지 확인
            let codeNum = Int(codeTextField.text!) // textField의 text를 forced unwrapping, Int형변환
            if codeNum == nil {
                let alert = UIAlertController(title: "!", message: "추천코드는 숫자로만 입력해주세요.", preferredStyle: UIAlertController.Style.alert)
                let cancel = UIAlertAction(title: "cancel", style: UIAlertAction.Style.cancel)
                alert.addAction(cancel)
                self.present(alert, animated: false)
            }
        }
profile
yyyng2.github.io

0개의 댓글