【问题标题】:Crash on libswiftCore impossible to reproducelibswiftCore 崩溃无法重现
【发布时间】:2017-06-01 12:03:07
【问题描述】:

我遇到了一个问题,我们的一小部分(少数 %)用户在我们的应用程序上崩溃并出现以下跟踪:

Crashed: com.apple.main-thread
0  libswiftCore.dylib             0x100ae3740 _TTSfq4n_s_n_n_n___TFs17_assertionFailureFTVs12StaticStringSS4fileS_4lineSu5flagsVs6UInt32_Os5Never + 164
1  OMGRedesign                    0x100171f88 specialized DataManager.userLoggingState() -> DataManager.LoggingUserState (DataManager.swift)
2  OMGRedesign                    0x10011e59c specialized APIManager.(login(String, password : String, success : () -> ()?, failure : (Error?) -> ()?) -> ()).(closure #1) (APIManager.swift)
3  OMGRedesign                    0x10012b0d0 partial apply for APIManager.(loginUsingStoredTokens(String, success : () -> ()?, failure : (Error?) -> ()?) -> ()).(closure #1) + 4295897296
4  p2_OAuth2                      0x1008ea38c _TMaC9p2_OAuth210OAuth2Base + 720
5  p2_OAuth2                      0x1008ea1e0 _TMaC9p2_OAuth210OAuth2Base + 292
6  libdispatch.dylib              0x18ebb29a0 _dispatch_client_callout + 16
7  libdispatch.dylib              0x18ebc37a8 _dispatch_barrier_sync_f_slow_invoke + 304
8  libdispatch.dylib              0x18ebb29a0 _dispatch_client_callout + 16
9  libdispatch.dylib              0x18ebb75e8 _dispatch_main_queue_callback_4CF + 996
10 CoreFoundation                 0x18fca90c0 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
11 CoreFoundation                 0x18fca6cdc __CFRunLoopRun + 1572
12 CoreFoundation                 0x18fbd6d94 CFRunLoopRunSpecific + 424
13 GraphicsServices               0x191640074 GSEventRunModal + 100
14 UIKit                          0x195e8f130 UIApplicationMain + 208
15 OMGRedesign                    0x1000d3ab8 main (Item.swift:129)
16 libdyld.dylib                  0x18ebe559c start + 4

下面的代码就是这个

func userLoggingState() -> LoggingUserState {

    let userDefault = UserDefaults.standard as UserDefaults

    let isRegularUserLogged = userDefault.bool(forKey:"regular-user-logged")
    let regularUserName = userDefault.string(forKey: "regular-user-username")
    let dummyDefaultUser = userDefault.string(forKey: "default-dummy-user")

    if isRegularUserLogged == false &&
       (regularUserName == nil || regularUserName?.isEmpty == true) &&
       (dummyDefaultUser == nil || dummyDefaultUser?.isEmpty == true) {
        return .None
    }
    else if isRegularUserLogged == true &&
        (regularUserName != nil && regularUserName?.isEmpty == false) &&
        (dummyDefaultUser == nil || dummyDefaultUser?.isEmpty == true) {
        return .Regular
    }
    else if isRegularUserLogged == false &&
        (regularUserName == nil || regularUserName?.isEmpty == true) &&
        (dummyDefaultUser != nil && dummyDefaultUser?.isEmpty == false) {
        return .Dummy
    }
    else {
        PLogWarning("userLogging is in an invalid state, returning None")
        return .None
    }
}

我不明白为什么这会崩溃,因为我无法重现它,所以很难弄清楚。

崩溃报告中的一个非常奇怪的事情是这一行:

15 OMGRedesign                    0x1000d3ab8 main (Item.swift:129)

Item.swift 是一个 CoreData NSManagedObject 派生类。为什么提到那里?

谢谢

【问题讨论】:

  • 您是否有任何以前版本的应用程序在“regular-user-logged”中存储了一个字符串而不是布尔值?
  • 没有这个标志从未在以前的版本中使用过
  • 我从一些用户那里得到了同样的错误,并且也无法重现它。你有什么发现吗?
  • @FerranMaylinch 是的,我刚刚回答了我自己的问题

标签: ios swift core-data crash crash-reports


【解决方案1】:

事实证明,我们代码中的这个错误是由“fatalError”命令触发的。

【讨论】:

  • 您好,谢谢!你能详细说明这个答案吗?你是从DataManager.userLoggingState() 打给fatalError("some message") 的吗?我在类中有一些fatalError 调用给了我错误,但它不在堆栈跟踪显示的方法内,所以我很困惑。
  • 是的,在一个 do-catch 块中,我触发了一些不应该发生的核心数据状态的致命错误。所以如果你在某个地方没有这个,只需检查你的代码。
  • 我发现了一个触发 fatalError() 调用的情况(由于我犯了一个错误),所以在我的情况下,错误很可能也是由调用 faltalError() 引起的.谢谢! (顺便说一句,Apple 可能会更有帮助,我想在堆栈跟踪上看到我的 fatalError 消息!):(
猜你喜欢
  • 2013-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多