使用 XCode 8 修复 iOS 11 崩溃

Posted

技术标签:

【中文标题】使用 XCode 8 修复 iOS 11 崩溃【英文标题】:Fixing an iOS 11 crash using XCode 8 【发布时间】:2017-12-02 16:50:13 【问题描述】:

我的应用程序走红了(耶!),对于所有运行 ios 11 的用户来说,它在启动时都很难崩溃(嘘!)。但是,当我使用 XCode 9 beta(1 和 2)构建和运行它时,它在模拟器和手机上都可以正常工作。

由于 XCode 8(产生损坏的构建)无法调试 iOS 11 设备,并且 XCode 9 无法复制崩溃,似乎没有办法测试潜在的修复,除非将它们放在 TestFlight 上。即使我这样做了,也无法将它连接到 XCode 8 调试器。有没有更简单的方法在 XCode 8 上调试 iOS 11?谢谢!

(出于好奇,崩溃发生在UITableView._endCellAnimation - 关于__exceptionPreprocess。这是sn-p:

    let task = ItemSource.sharedSource.getRandomItems(10)
    task.continueWith(
        Executor.mainThread,
        continuation: 
            (task: Task<[Item]>) in
            let nouns: [Item] = task.result!
            self.controller.tableView.beginUpdates()
            var indexPaths = [IndexPath]()
            for noun in nouns 
                indexPaths.append(self.append(noun))
            
            self.controller.tableView.insertRows(at: indexPaths, with: .none)
            self.controller.tableView.endUpdates() <-- Crashes here
        
    )

【问题讨论】:

iOS11 目前是Beta;此崩溃可能会误导您。 我知道,但是很多人安装了测试版,我收到了很多关于它的投诉。我可以告诉他们,他们不应该在他们的主要手机上安装测试版操作系统,但用户不喜欢听太多。 用户不应该安装任何beta,但他们确实不喜欢听到,所以他们会安装beta 这还不错,但他们忘记了这样一个事实,即开发人员无法修复不是开发人员错误的错误(而且他们没有 SDK 来修复它)。就像 1-2-3 一样简单。 即使崩溃不是我的错,如果有办法,我想修复它。因此问题。 我不太明白你的 fixing-something-which-is-outside-of-my-scope 的概念,这不是你的范围——你 无法修复它。 【参考方案1】:

由于 XCode 8(生成损坏的构建)无法调试 iOS 11 设备,

将 DeviceSupport 从 Xcode9-beta 复制到 Xcode8 将解决这个问题

终端命令:

cp -a /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/11.0* /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/

【讨论】:

以上是关于使用 XCode 8 修复 iOS 11 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Xcode10打包引起iOS9.0-9.2系统的用户启动App随机崩溃的问题修复记录

Xcode6 正在破坏我的代码。有修复还是我应该重新安装它?

Fabric Answer 在从 Xcode 10 和 iOS 12 开始时崩溃 iOS 应用程序

Xcode 11,使用 Main.storyboard 修复的主界面 [重复]

如何修复 Firebase SIGABRT 崩溃 iOS

如何在 iOS9.2 上修复 Xcode 错误“找不到开发者磁盘映像”