Start Developing iOS Apps (Swift) – Day 1

4 답변 글타래를 보이고 있습니다
  • 글쓴이
    • Lena
      참가자
      • 글작성 : 4
      • 답글작성 : 5

      ?오늘은 야곰이 추천해준 ‘Start Developing iOS Apps (Swift)’을 직접해보면서 문서에 나온 내용을 공부하기 시작했습니다:)

      문서에 AppDelegate이 어떤 역할을 하는지 설명하는 부분을 보다가

      사진처럼 해당 문서에 나와있는 설명과 실제 제가 열어본 Xcode 클래스가 조금 다르다는 걸 발견했어요. 문서에 AppDelegate 클래스에 window가 있다고 나와있는데 Xcode에서는 SceneDelegate 클래스에 있더라구요. 그래서 오늘은 iOS 13 이후에 변화된 AppDelegate와 SceneDelegate에 대해서 공부해봤습니다.

      포인트를 정리하자면


      (~iOS12)

      (iOS13)
      1. iOS12까지는 대부분 하나의 앱에 하나의 window였지만 iOS 13부터는 window의 개념이 scene으로 대체되고 아래의 사진처럼 하나의 앱에서 여러개의 scene을 가질 수 있습니다.

      1. AppDelegate의 역할 중 UI의 상태를 알 수 있는 UILifeCycle에 대한 부분을 SceneDelegate가 하게 됐습니다.
      2. 그리고 AppDelegate에 Session Lifecycle에 대한 역할이 추가됐습니다.

      Scene Session이 생성되거나 삭제될 때 AppDelegate에 알리는 두 메소드가 추가됐는데요.
      Scene Session은 앱에서 생성한 모든 scene의 정보를 관리합니다.

      Scene?

      (Scenes – Apple Developer Document에 있는 내용입니다.)

      UIKit는 UIWindowScene 객체를 사용하는 앱 UI의 각 인스턴스를 관리합니다. Scene에는 UI의 하나의 인스턴스를 나타내는 windows와 view controllers가 들어있습니다. 또한 각 scene에 해당하는 UIWindowSceneDelegate 객체를 가지고 있고, 이 객체는 UIKit와 앱 간의 상호 작용을 조정하는 데 사용합니다. Scene들은 같은 메모리와 앱 프로세스 공간을 공유하면서 서로 동시에 실행됩니다. 결과적으로 하나의 앱은 여러 scene과 scene delegate 객체를 동시에 활성화할 수 있습니다.

      Scene Session?

      (UISceneSession – Apple Developer Document에 있는 내용입니다.)

      UISceneSession 객체는 scene의 고유의 런타임 인스턴스를 관리합니다. 사용자가 앱에 새로운 scene을 추가하거나 프로그래밍적으로 scene을 요청하면, 시스탬은 그 scene을 추적하는 session 객체를 생성합니다. 그 session에는 고유한 식별자와 scene의 구성 세부사항(configuration details)가 들어있습니다. UIKit는 session 정보를 그 scene 자체의 생애(life time)동안 유지하고 app switcher에서 사용자가 그 scene을 클로징하는 것에 대응하여 그 session을 파괴합니다. session 객체는 직접 생성하지않고 UIKit가 앱의 사용자 인터페이스에 대응하여 생성합니다. 또한 위 3번에서 소개한 두 메소드를 통해서 UIKit에 새로운 scene과 session을 프로그래밍적 방식으로 생성할 수 있습니다.

      그럼 현재 AppDelegate가 하는 일은?

      (UIApplicationDelegate – Apple Developer Document에 있는 내용입니다.)

      이전에는 앱이 foreground에 들어가거나 background로 이동할 때 앱의 상태를 업데이트하는 등의 앱의 주요 생명 주기 이벤트를 관리했었지만 더이상 하지 않습니다.
      현재 하는 일은
      1. 앱의 가장 중요한 데이터 구조를 초기화하는 것
      2. 앱의 scene을 환경설정하는 것
      3. 앱 밖에서 발생한 알림(배터리 부족, 다운로드 완료 등)에 대응하는 것
      4. 특정한 scenes, views, view controllers에 한정되지 않고 앱 자체를 타겟하는 이벤트에 대응하는 것.
      5. 애플 푸쉬 알림 서브스와 같이 실행시 요구되는 모든 서비스를 등록하는것.
      입니다.

      참고한 자료

      1. ‘DevelopiOSAppsSwift – BuildABasicUI’
        https://developer.apple.com/library/archive/referencelibrary/GettingStarted/DevelopiOSAppsSwift/BuildABasicUI.html#//apple_ref/doc/uid/TP40015214-CH5-SW1
      2. ‘iOS ) AppDelegate.swift의 역할’
        https://zeddios.tistory.com/218
      3. ‘Architecting Your App for Multiple Windows’ – wwdc 2019
        https://developer.apple.com/videos/play/wwdc2019/258/
      4. ‘SceneDelegate (1) – Architecting Your App for Multiple Windows
        https://zeddios.tistory.com/811
      5. ‘SceneDelegate와 AppDelegate part 1 ‘
        https://usinuniverse.bitbucket.io/blog/scenedelegatepart1.html
      6. Scenes – Apple Developer Document
      7. UIscenesession – Apple Developer Document
        https://developer.apple.com/documentation/uikit/uiscenesession
      8. UIApplicationDelegate – Apple Developer Document
        https://developer.apple.com/documentation/uikit/uiapplicationdelegate
    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 579

      WWDC 세션과 애플의 문서는 정말 최고의 선생님이죠!
      제가 전해주지 않은 내용까지 다양하고 확실하게 알아봤네요 🙂
      정말 알찬 하루를 보냈군요! 최곱니다!

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 579

      질문이 있습니다~ !
      Deployment Target이 iOS 13 미만인 상황에서도 UISceneUISceneDelegate를 사용할 수 있나요?
      만약 앱이 iOS 13 미만의 버전도 지원해야 한다면 어떻게 해야하나요?

      • Lena
        참가자
        • 글작성 : 4
        • 답글작성 : 5

        iOS 12 이하는 하나의 앱에 하나의 window를 가지고 있기 때문에(즉, multi window를 사용하지 않기 때문에) iOS 13에서 추가된 부분을 삭제하고 이전 버전(~iOS12)과 설정을 똑같이 바꿔주면 이전 방식대로과 동일하게 할 수 있는 것 같아요!
        Xcode를 새로 열고
        1. iOS13에서 새로 생긴 SceneDelegate.swift 파일 삭제
        2. iOS13에서 AppDelegate에 추가된 UISceneSession과 관련된 두 메소드 삭제
        3. iOS13에서 SceneDelegate로 옮겨진 window 프로퍼티를 AppDelegate로 다시 옮기기
        4. info.plist에서 Scene과 관련된 Manifest인 Application Scene Manifest 삭제
        이후 빌드해보니까 Build Success가 뜨는데, iOS13 미만인 경우 이렇게 하면 될 것 같아요!

    • Lena
      참가자
      • 글작성 : 4
      • 답글작성 : 5

      iOS 12 이하는 하나의 앱에 하나의 window를 가지고 있기 때문에(즉, multi window를 사용하지 않기 때문에) iOS 13에서 추가된 부분을 삭제하고 이전 버전(~iOS12)과 설정을 똑같이 바꿔주면 이전 방식대로과 동일하게 할 수 있는 것 같아요!
      Xcode를 새로 열고
      1. iOS13에서 새로 생긴 SceneDelegate.swift 파일 삭제
      2. iOS13에서 AppDelegate에 추가된 UISceneSession과 관련된 두 메소드 삭제
      3. iOS13에서 SceneDelegate로 옮겨진 window 프로퍼티를 AppDelegate로 다시 옮기기
      4. info.plist에서 Scene과 관련된 Manifest인 Application Scene Manifest 삭제
      이후 빌드해보니까 Build Success가 뜨는데, iOS13 미만인 경우 이렇게 하면 될 것 같아요!

      • 곰튀김
        참가자
        • 글작성 : 0
        • 답글작성 : 4

        이렇게 하면 될까요?

        • 야곰
          키 마스터
          • 글작성 : 37
          • 답글작성 : 579

          오우야, 고퀄 영상이네요.
          선언형 UI만들기!
          브금이 웅장하네요 ㅎㅎ

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 579

      오우야, 고퀄 영상이네요.
      선언형 UI만들기!

      브금이 웅장하네요 ㅎㅎ

4 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom