가애야 2024. 7. 12. 15:18

날씨앱 만들기 강의에서 코드베이스로 진행하는데 main 뿐만 아니라 SceneDelegate를 지워주는 걸 봐서 이게 뭐지,, 싶어서 찾아봤다

 

SceneDelgate를 삭제하는 이유

 

프로젝트의 간소화

- 작은 규모의 앱이나 단순한 앱에서는 SceneDelegate가 필요하지 않을 수 있다. SceneDelegate는 다중 창 지원과 같은 고급 기능을 처리하는 데 사용되지만, 많은 앱에서는 이러한 기능이 필요하지 않다.

 

iOS 13 이전 호환성

- SceneDelegate는 iOS 13에서 도입되었다. 만약 앱이 iOS 12 및 이전 버전을 지원해야 한다면, SceneDelegate를 사용하지 않는것이 좋다. (하지만 지금은.. 17.X 시대,,, 이건 이유가 되기엔 불충분해보인다)

 

간단한 앱 구조

- SceneDelegate를 사용하지 않음녀 앱의 구조가 단순해질 수 있다. AppDelegate 하나만 사용하여 앱 생명 주기를 관리할 수 있다.

 

 

SceneDelegate를 사용하는 경우

 

멀티윈도우 지원

- SceneDelegate는 iOS 13부터 도입된 멀티윈도우 지원을 가능하게 한다. 이를 통해 사용자는 iPad에서 앱의 여러 인스턴스를 동시에 실행할 수 있다.

 

더 나은 상태 복구

- SceneDelegate를 사용하면 앱이 여러 장면(윈도우)의 상태를 독립적으로 관리할 수 있어 사용자가 마지막으로 사용한 상태로 더 쉽게 복구할 수 있다.

 

SceneDelegate를 삭제하면 안되는 이유

- SceneDelegate는 iOS 13 이상에서 앱의 라이프사이클을 관리하는 주요 컴포넌트로 사용되며, 이를 삭제하면 앱이 올바르게 동작하지 않거나, 새로운 iOS 기능을 활용할 수 없는 문제가 발생할 수 있습니다.

특히 UIKit을 사용하는 프로젝트에서는 SceneDelegate를 삭제하면 제대로 작동하지 않을 수 있습니다.

 

- AppDelegate와 SceneDelegate의 역할을 분리하여 각각의 역할을 확실히 분명히 하는 것이 좋습니다. AppDelegate는 전역 앱 이벤트를 처리하고, SceneDelegate는 각각의 Scene (UIWindowScene)의 라이프사이클을 관리합니다.

iOS 13부터는 앱의 라이프사이클 관리를 위해 SceneDelegate가 도입되었습니다. 이전에는 AppDelegate가 앱의 전체 라이프사이클을 관리했지만, iOS 13부터는 다중 창, 다중 활동을 지원하기 위해 SceneDelegate가 도입되었습니다.

iOS 13부터는 앱이 다수의 Scene (UIWindowScene)을 가질 수 있습니다. 각 UIWindowScene은 앱의 창과 관련된 상태와 라이프사이클을 관리합니다. 이러한 Scene 객체들은 SceneDelegate를 통해 생성, 설정 및 관리됩니다.

 

- Apple은 iOS의 다음 버전에서도 SceneDelegate를 지원할 것으로 예상됩니다. 따라서 앱의 장기적인 지원을 위해 SceneDelegate를 유지하는 것이 좋습니다.

 

🤓결론

SceneDelegate 유지: 여러 장면과 멀티윈도우 지원이 필요한 경우 SceneDelegate를 유지하는 것이 좋다.

SceneDelegate 제거: 간단한 앱 구조가 필요하고, iOS 12 및 이전 버전 지원이 필요한 경우 SceneDelegate를 제거하는 것이 좋다.

 

 

 

※추가

 

아이폰 개발자 관점

아이폰에서는 다중 창 지원이 없기 때문에 하나의 앱 창만 관리하면 되기 때문에 SceneDelegate를 사용할 필요성이 크게 줄어든다.

따라서 아이폰 앱을 개발할 때는 AppDelegate만으로도 앱의 라이프사이클을 충분히 관리할 수 있다.

더보기

아이폰에서 AppDelegate를 사용하여 다음과 같은 작업을 할 수 있습니다:

  1. 앱의 초기 설정: application(_:didFinishLaunchingWithOptions:) 메서드를 사용하여 앱이 시작될 때 필요한 초기 설정을 수행할 수 있습니다. 예를 들어, 데이터베이스 초기화, 사용자 인증 설정 등을 수행할 수 있습니다.
  2. 화면 전환 관리: AppDelegate는 application(_:didFinishLaunchingWithOptions:) 메서드에서 앱의 초기 화면을 설정하고, 필요할 때 화면 전환을 처리할 수 있습니다. 예를 들어, 앱이 백그라운드로 이동할 때의 처리나, 앱이 활성화 될 때 다시 화면을 보여주는 작업을 처리할 수 있습니다.
  3. 전역 데이터 관리: AppDelegate는 앱의 전역 데이터나 상태를 관리할 수 있습니다. 예를 들어, 사용자의 로그인 상태를 확인하고, 데이터를 전역적으로 공유하는 등의 작업을 수행할 수 있습니다.

따라서 아이폰 앱에서는 SceneDelegate를 사용하지 않고도 AppDelegate만으로 앱의 기본적인 라이프사이클을 관리할 수 있습니다. SceneDelegate는 주로 iPadOS와 같이 다중 창을 지원하는 환경에서 활용되며, 각각의 창이나 Scene에서 독립적인 상태와 UI를 관리할 때 사용됩니다.

 

👩🏻‍💻결론

아이폰에서는 AppDelegate를 사용하여 앱의 라이프사이클을 관리하는 것이 일반적이고, SceneDelegate를 추가적으로 사용할 필요는 크게 없다!

 

하지만.,,. 정확한 답은,, 없는듯

복잡하다 ㅎ 그 이유는 접어두기

더보기

몇 가지 주의사항을 고려해야 한다

  1. Xcode 템플릿: 대부분의 Xcode 템플릿은 SceneDelegate를 포함하고 있으므로, 이를 삭제하면 약간의 설정 변경이 필요할 수 있다.
  2. 미래의 업데이트: Apple의 가이드라인에 따라 SceneDelegate를 사용하는 것이 더 나은 선택일 수 있다. 이는 미래의 iOS 업데이트나 새로운 기능에 더 잘 대응할 수 있게 한다.
  3. 코드 유지보수: SceneDelegate를 사용하는 것이 iOS 생태계에서 더 표준적인 방식이므로, 다른 개발자와 협업할 때 이해하기 쉽고 유지보수가 용이할 수 있다.

결론적으로, 아이폰 개발자는 다음과 같은 경우 SceneDelegate 없이 AppDelegate만으로 개발할 수 있다

  • 단일 창 앱이며, 다중 창 기능이 필요 없는 경우.
  • 앱이 단순하고, 기존의 코드베이스가 SceneDelegate 없이 개발된 경우.

이러한 경우 SceneDelegate를 삭제하고 AppDelegate만으로 개발해도 큰 문제는 없지만, 최신 iOS 기능과 가이드라인을 따르기 위해 SceneDelegate를 사용하는 것이 권장됩니다.

 

그래서 결국 어쩌라는건지 사용해라 마라 정확한 답이 없는듯 하다