소프트웨어개발/iOS, macOS 와 Xcode

[iOS] Xcode 11 에서 iOS 13 미만 지원 프로젝트 만들기

날개 2019. 11. 12. 16:42

Xcode 11 로 업데이트 한 후에 새로운 프로젝트를 생성하면, 기본적으로 iOS의 경우 13.x 버전을 타겟으로 하는 프로젝트가 생성됩니다.


일반적으로 호환성을 높이기 위해 어느정도 하위버전으로 타겟을 변경하게 되는데, 이번 Xcode 11은 Xcode 10과 마찬가지로 iOS 8 이상을 지원합니다.


그런데, 문제가 있습니다. 프로젝트를 생성하고 빌드 타겟을 iOS 13 미만으로 설정하였을때, 에러가 발생하며 빌드되지 않는 문제가 있습니다.


구글을 검색해 보니 역시 같은 문제가 있고 해결할 수 있는 몇 가지 방법이 나오네요.


이 글에서는 그 중 파일을 삭제하지 않고 하는 방법을 남겨둡니다.


아래와 같이 SwiftUI가 아닌 Storyboard를 선택하여 프로젝트를 생성하였음에도 불구하고....

빌드 타겟을 아래와 같이 iOS 12.0으로 변경하니... (이 버전에서는 iOS 13.2가 디폴트였음)

왼쪽 빨간 박스처럼 에러가 마구마구 발생 하네요.


아래는 제대로 설정을 바꿔 정상동작하는지 확인하기 위해 메인 스토리보드의 뷰 색상을 파란색으로 바꾸었습니다.

(본 예제에서 보여주기 위한거니 하실 필요 없습니다.)

(1) SceneDelegate.swift 파일 수정


SceneDelegate.swift 파일을 선택하면, 아래와 같이 에러가 나는 부분들이 있습니다. 13.0 이상의 버전에서만 사용 할 수 있다고 에러가 납니다.

아래 화면과 같이, 


class SceneDelegate: ... 위에, 

@available(iOS 13.0, *) 을 추가해 줍니다.


빨간색 에러 메시지들이 사라진 것을 볼 수 있습니다.


(2) AppDelegate.swift 파일 수정


이번엔, AppDelegate.swift 파일을 선택합니다.


역시, 에러가 나는 부분들을 확인 할 수 있습니다.

이번에는 아래 화면과 같이, 


에러 메시지가 뜨는 두개의 메소드, 


func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration


func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>)


의 각각 메소드 위에 @available(iOS 13.0, *) 을 추가헤 줍니다.


그리고 위 화면에는 포함이 되지 않았는데, class AppDelegate: ... 아래에, 


var window: UIWindow?


도 반드시 추가해 줍니다. 이 코드를 빠뜨리면, iOS 13에서는 정상적으로 화면이 나오지만, 옛 버전의 iOS에서는 화면이 시커멓게 나오고 정상 작동하지 않습니다.



이제 빌드하고 실행해 보면 아래 화면과 같이 정상 실행되는 것을 볼 수 있습니다.


끝.




(C) 2019 WingsNote.com (무단 복제 및 게시 금지, 링크 허용)