iOS-Children-Study / Growth-Study

성장로드맵 체크포인트 기반 스터디 레포입니다.
1 stars 0 forks source link

김주영_0329 #5

Open JooYoung1121 opened 1 year ago

JooYoung1121 commented 1 year ago
JooYoung1121 commented 1 year ago

iOS 앱 사이클

앱 생명 주기

2023-03-23_16-07-27
  1. Not Running -> 앱이 실행되지 않았거나, 종료되어 동작하지 않는 상태
  2. Inactive(Foreground) -> 앱이 실행되면서 foreground에 진입하지만 이벤트는 받지 않는 전환되는 상태
  3. active(Foreground) -> 앱이 실행중인상태 + 이벤트를 받을 수 있음.
  4. Background -> 다른앱으로 전환되거나 홈버튼으로 홈으로 이동한 상태
  5. Suspended -> Background에서 특별한 작업 없이 일정시간이 지난 앱, 메모리상엔 있지만 아무일도 안하기에 배터리는 사용하지 않음.

이러한 상태변화를 AppDelegate에서 감지 가능하며, 각 상황별로 대응이 필요하다면 다음 함수들을 사용해서 구현하면 된다.


 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        BootLoader.runBootLoaderModules(application: application, launchOptions: launchOptions)
        /// 앱이 처음 시작될 떄 실행
        return true
    }

    func applicationWillResignActive(_ application: UIApplication) {
        /// 앱이 active에서 inactive로 이동될 떄 실행
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
       /// 앱이 background 상태일 떄 실행
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        /// 앱이 back -> fore로 이동될 떄 실행(아직 active는 아님)
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        /// 앱이 active상태 되어 실행중일 때
    }

    func applicationWillTerminate(_ application: UIApplication) {
        /// 앱이 종료될 때 실행
    }

해당 함수들이 실제 서비스에서 (제가 관리하는 앱)에선 어떻게 동작하는지 코드로 보여드리겠습니다.

@main struct TestApp: App { @Environment(.scenePhase) var scenePhase

var body: some Scene { 
    WindowGroup {
        ContentView()
    }.onChange(of: scenePhase) { newScenePhase in
        switch newScenePhase {
        case .active:
          print("App is active")
        case .inactive:
          print("App is inactive")
        case .background:
          print("App is in background")
        @unknown default:
          print("Oh - interesting: I received an unexpected new value.")
        }
      }
}

}



레퍼런스 : [iOS) App · ViewController의 생명주기](https://co-dong.tistory.com/62)
[iOS 앱의 생명주기(LifeCycle) AppDelegate : 네이버 블로그](https://blog.naver.com/PostView.naver?blogId=soojin_2604&logNo=222423840595&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView)
[iOS14SwfitUI SwiftUI2 App life cycle 정리](https://huniroom.tistory.com/entry/iOS14SwfitUI-SwiftUI-life-cycle-%EC%97%90%EC%84%9C-%EB%94%A5%EB%A7%81%ED%81%AC-%EC%B2%98%EB%A6%AC)
JooYoung1121 commented 1 year ago

앱시닝

슬라이싱(Slicing)

2023-03-25_13-55-17

비트코드

주문형 리소스(on-demand resource)

2023-03-25_14-03-52

레퍼 : iOS 앱 시닝(app thinning) https://help.apple.com/xcode/mac/current/#/devbbdc5ce4f

JooYoung1121 commented 1 year ago

URL scheme과 universal link

딥링크란 무엇인가.

딥링크란 웹 관점에서 바라본다면 어떤 웹에서 하이퍼링크를 터치에 다른 웹사이트로 이동되는 단순한 기능이라고 생각하면 됩니다. ex) https://naver.com → 네이버로 이동 https://github.com → 깃헙으로 이동 모바일에서도 이런 딥링크를 사용이 가능합니다. 즉, 모바일 유저가 웹사이트 혹은 다른 앱에서 관련된 URL을 클릭할 경우 해당 앱으로 전환되도록 해주는 것입니다. 이러한 딥링크엔 총 3가지 방식이 있습니다. 1 URL 스킴 방식 : 앱에 URL 스킴(scheme) 값을 등록하여 딥링크 사용 2 앱링크(App Link) : Android 제공 - 도메인 주소를 이용한 딥링크 사용 3 유니버셜 링크 (Universal Link) : iOS 제공 - 도메인 주소를 이용한 딥링크 사용 iOS에선 1,3번만 알면 됩니다.

URL스킴방식

2023-03-25_13-45-35
JooYoung1121 commented 1 year ago

개발과 앱스토어배포 분리

레퍼 : Apple iOS 앱 배포시 인증에 관한 개념(코드 사이닝, 프로비저닝 프로필)

JooYoung1121 commented 1 year ago

UIScreen, UIWindowScene, UIWindow, UIView의 차이점

2023-03-25_14-38-04

UIScreen

UIWindowScene

UIWindow

2023-03-25_14-47-54

UIVIew

레퍼 : iOS UIScreen, UIWindowScene, UIWindow, UIView Windows and screens | Apple Developer Documentation

JooYoung1121 commented 1 year ago

추가 내용