Xcode 在 iOS 13 以下手機 build 出現黑畫面
目錄
Xcode 在 iOS 13 以下手機 build 出現黑畫面
目錄
⦿ AppDelegate、SceneDelegate
⦿ 黑畫面、var window: UIWindow?
AppDelegate、SceneDelegate
在 Xcode 11 開始,我們可以看到新建專案裡頭除了原先的 AppDelegate 這個 class,還多了一個 SceneDelegate,這兩個 .swift 的檔案,SceneDelegate 把原先 AppDelegate 在做的部份事情( Scene )攬過來做。
但即便你把下面這兩項都改成 iOS 12 以上。


結果 build 後會出現如下:

跳出無敵多的錯誤,我們看到跟 UIScene 有關的 function,都不適用 iOS 13 以下,在 AppDelegate 裡有兩個,在 SceneDelegate 共有六個(全不能用),於是,我們可以在每條 function 上方加上下面的程式碼:
@available(iOS 13.0, *)
看起來表示 iOS 13.0 以上,下方的 function 才會調用。
這條程式碼也可以直接在 class( 即 AppDelegate、SceneDelegate )上方加上,這樣就不用將程式碼灑得到處都是,如下:
@available(iOS 13.0, *)
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
}
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
}
這也表示,需要在 iOS 13.0 以上的環境調用的 function 才會調用。注意!兩者解釋有些微差別,因為無論如何,在 AppDelegate 中的這個 function:
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
return true
}
總是會被調用,不過加上 @available(iOS 13.0, *),不代表 iOS 12 就不會調用它,所以我們應該解釋為「需要在 iOS 13.0 以上的環境調用的 function 才會調用」。
黑畫面、var window: UIWindows?
然而停掉 iOS 13.0 以下的錯誤後,你 build 專案後竟然呈現黑畫面,所以我們必須回到 AppDelegate 中,在前述的 function 前面加上一個 property,如下:
var window: UIWindow?
你曾經在哪裡看過這個 property?對的,在 SceneDelegate 裡就有這個 property,然而,前面說過,SceneDelegate 把 AppDelegate 中關於 Scene 的事情拿去做,可是 iOS 13 以下的專案並沒有 SceneDelegate。
所以 AppDelegate 繼續做苦工,只要在這個 class 裡面加上程式碼,build 專案後就回到正常狀態了,很棒吧!
메타데이터
- post_id
- df868db7b2a2
- slug
- xcode-在-ios-13-以下手機-build-出現黑畫面-df868db7b2a2
- url
- https://medium.com/@cowton0517/xcode-%E5%9C%A8-ios-13-%E4%BB%A5%E4%B8%8B%E6%89%8B%E6%A9%9F-build-%E5%87%BA%E7%8F%BE%E9%BB%91%E7%95%AB%E9%9D%A2-df868db7b2a2
- canonical_url
- https://medium.com/@cowton0517/xcode-%E5%9C%A8-ios-13-%E4%BB%A5%E4%B8%8B%E6%89%8B%E6%A9%9F-build-%E5%87%BA%E7%8F%BE%E9%BB%91%E7%95%AB%E9%9D%A2-df868db7b2a2
- author_url
- https://medium.com/@cowton0517
- status
- ok
- fetched_at
- 2026-07-26 09:46:03