事情的起因是因为手头的Macbook硬盘因S.M.A.R.T损坏,无法安装最新的MacOS,导致无法安装最新的Xcode,导致无法连接手头的iPhone(iOS15),导致无法用真实设备Debug了,所以新作的DoneList无法看到真实效果。
后来拿来一台iPhone5,运行iOS10,看看能否连接,结果也是也是颇费了些周折。
先说下配置
macOS Mojave 10.14.6
Xcode 11.3.1
iPhone5 / iOS 10.4
如果当前的Xcode没有支持iOS10或者需要的iOS文件,在连接设备到Xcode时会出错,需要:
- 从网上下载支持文件
URL: https://github.com/filsv/iPhoneOSDeviceSupport - 找到对应的支持文件,将文件夹解压缩到本机如下目录:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/
这样Xcode就可以正常连接对应版本iOS的设备了。
由于Xcode 11.3已经使用Scene作为界面管理,部署目标(Deployment Target)为 iOS 10.3时,需要对代码进行修改,否则编译报错。
最简单的方法(如果以后不准备在iOS13以上设备运行),就是删除SceneDelegate.swift文件,并从Info.plist中删除Application Scene Manifest包含的内容。
如果还想兼容iOS13以上的版本,则需要做如下修改:
//SceneDelegate.swift文件中,增加如下标记。
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
//AppDelegate.swift中,这两个方法或其他任何Scene相关的方法,都增加如下标记。
@available(iOS 13.0, *)
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
print("application ---> connectingSceneSession")
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
@available(iOS 13.0, *)
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// Called when the user discards a scene session.
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
print("application ---> didDiscardSceneSessions")
}
最后,也是最重要的,在AppDelegate.swift的AppDelegate类中,增加一个UIWindow对象,用于初始化根VC。
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
至此就可以正常连接低版本的iOS,愉快而贫穷的进行真机调试了。
网友评论