(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/* 내의 작업 관련 캐시 삭제
작업 중 내용이 바로바로 반영이 안 되거나 버그 등이 날 때 해볼 것.
아이디 입력이 됐는지 여부 확인 / 아이디 없이 비밀번호만 적혀있어도 똑같은 경고알람
비밀번호 입력 확인 / 최소 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)
}
}