Приложение отклонено: странный журнал сбоев iPhone

#iphone #objective-c #crash #crash-reports

#iPhone #objective-c #сбой #отчеты о сбоях

Вопрос:

Apple дважды отклоняла мое приложение из-за сбоя при запуске. Я много раз тестировал его на разных устройствах (iPhone 4, iPhone3GS, Simulator, iPad2), и он никогда не зависал.

РЕДАКТИРОВАТЬ: это часть журнала сбоев с символикой.

Спасибо!

     Incident Identifier: DD9A5C38-DFE5-4CB5-A15B-8C55967FFFD1
        CrashReporter Key:   bf318d2d968114ff69d458c2f8cbdc6b869e1ec7
        Hardware Model:      iPhone3,1
        Process:         iMetroRoma [2788]
        Path:            /var/mobile/Applications/8EC59E9D-D070-4CAD-892E-91BCE94AA58C/iMetroRoma.app/iMetroRoma
        Identifier:      iMetroRoma
        Version:         ??? (???)
        Code Type:       ARM (Native)
        Parent Process:  launchd [1]

    Date/Time:       2011-10-24 13:23:22.895 -0700
    OS Version:      iPhone OS 5.0 (9A334)
    Report Version:  104

    Exception Type:  EXC_CRASH (SIGABRT)
    Exception Codes: 0x00000000, 0x00000000
    Crashed Thread:  0

    Last Exception Backtrace:
    0   CoreFoundation                  0x30d828bf __exceptionPreprocess   163
    1   libobjc.A.dylib                 0x37f271e5 objc_exception_throw   33
    2   CoreFoundation                  0x30ccbb6b -[__NSArrayM objectAtIndex:]   271
    3   iMetroRoma                      0x0000426f 0x1000   12911
    4   CoreLocation                    0x34fbc5df -[CLLocationManager onClientEventLocation:]   1171
    5   CoreLocation                    0x34fbbf81 -[CLLocationManager onClientEvent:supportInfo:]   201
    6   CoreLocation                    0x34fb662f __CLClientInvokeCallback_block_invoke_0   55
    7   CoreFoundation                  0x30d56b31 __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__   13
    8   CoreFoundation                  0x30d5615f __CFRunLoopDoBlocks   159
    9   CoreFoundation                  0x30d55381 __CFRunLoopRun   1433
    10  CoreFoundation                  0x30cd84dd CFRunLoopRunSpecific   301
    11  CoreFoundation                  0x30cd83a5 CFRunLoopRunInMode   105
    12  GraphicsServices                0x33906fed GSEventRunModal   157
    13  UIKit                           0x32d4a743 UIApplicationMain   1091
    14  iMetroRoma                      0x000024e3 0x1000   5347
    15  iMetroRoma                      0x0000249c 0x1000   5276


    Thread 0 name:  Dispatch queue: com.apple.main-thread
    Thread 0 Crashed:
    0   libsystem_kernel.dylib          0x3206732c __pthread_kill   8
    1   libsystem_c.dylib               0x3655df54 pthread_kill   48
    2   libsystem_c.dylib               0x36556fe4 abort   88
    3   libc  abi.dylib                 0x31a1ff64 abort_message   40
    4   libc  abi.dylib                 0x31a1d346 _ZL17default_terminatev   18
    5   libobjc.A.dylib                 0x37f272dc _objc_terminate   140
    6   libc  abi.dylib                 0x31a1d3be _ZL19safe_handler_callerPFvvE   70
    7   libc  abi.dylib                 0x31a1d44a std::terminate()   14
    8   libc  abi.dylib                 0x31a1e81e __cxa_rethrow   82
    9   libobjc.A.dylib                 0x37f2722e objc_exception_rethrow   6
    10  CoreFoundation                  0x30cd853e CFRunLoopRunSpecific   398
    11  CoreFoundation                  0x30cd839e CFRunLoopRunInMode   98
    12  GraphicsServices                0x33906fe6 GSEventRunModal   150
    13  UIKit                           0x32d4a73c UIApplicationMain   1084
    14  iMetroRoma                      0x000024dc 0x1000   5340
    15  iMetroRoma                      0x00002494 0x1000   5268
  ...

    Thread 0 crashed with ARM Thread State:
        r0: 0x00000000    r1: 0x00000000      r2: 0x00000001      r3: 0x00000000
        r4: 0x00000006    r5: 0x3f54dce8      r6: 0x00000002      r7: 0x2fdffa6c
        r8: 0x001a1c20    r9: 0x31a20a4a     r10: 0x0000d224     r11: 0x0000cbfc
        ip: 0x00000148    sp: 0x2fdffa60      lr: 0x3655df5b      pc: 0x3206732c
      cpsr: 0x00000010

...
  

Комментарии:

1. пока вы не обозначите журнал, никто не сможет помочь. Импортируйте его в Xcode / Organizer / Devices / Device Logs

2. вы пробовали проверять наличие зомби?

Ответ №1:

Хорошо, вы «собирали и архивировали» при отправке в appstore?

Если вы этого не сделали, вам не повезло. Сейчас вы мало что можете сделать. Даже если вы выполнили сборку и архивирование и потеряли архив, вам не повезло.

Однако, если вы это сделали, сохраните архивный файл сборки дистрибутива, очень хорошо!

Вы пробовали открыть это в XCode Organizer (перетащите файл в органайзер, он должен символизировать журнал сбоев). Если нет, сделайте это.

Когда вы это сделаете, есть две возможности: либо iMetroRoma функции будут обозначены символами (что означает, что вы увидите, какая строка приводит к сбою), либо это не произойдет.

X *: Если это так, вы знаете, где происходит сбой приложения. Публикация подробной информации об этом поможет нам решить проблему для вас.

Если это не так, то автоматическая символизация в XCode не работает. Выполните следующие действия (при условии, что вы сделали все это из XCode 4):

  1. Из /Users/your_username/Library/Developer/Xcode/DerivedData удалите все папки.
  2. Из /Users/your_username/ Library/ Application Support/ iPhone Simulator удалите все папки.
  3. Очистите корзину.

А затем попробуйте удалить этот журнал сбоев из XCode Organizer и снова перетащите его туда. Возможно, это может символизировать это сейчас. Если он выполняет шаг X *, если нет, читайте дальше.

Теперь вам нужно будет выполнить действия, описанные в этом блоге. (Очень полезная и хорошо документированная статья).

Надеюсь, сейчас это будет символизировать, а затем перейти к шагу X *. Если это не так, я прошу прощения за то, что не смог помочь 🙂

Комментарии:

1. Привет, спасибо за помощь. Я попытался запустить symbolicatecrash с терминала, но получил это предупреждение: ## Предупреждение: невозможно использовать символы из требуемого двоичного файла: /Developer/Platforms/iPhoneOS.platform/DeviceSupport/5.0 (9A334)/Symbols/System/Library/Frameworks/MapKit.framework/MapKit

2. У вас еще нет iOS SDK 5.0?

3. У меня есть XCode 4.2 с iOS SDK 5.0

4. Вы уверены, что это релизная версия, а не предварительная бета-версия xcode / ios SDK?

5. Я скачал его из MacAppStore. ps: Apple отправила мне 2 журнала сбоев, и я успешно обозначил один из них (я скопировал его в ветке вопросов). Это может быть полезно?

Ответ №2:

Согласно журналу сбоев, это выглядит как исключение из массива. Это означает, что вы получили доступ к массиву с индексом, который не существует. К сожалению, самая важная строка ( 3 iMetroRoma 0x0000426f 0x1000 12911
) не обозначена символом, что означает, что вам нужно искать все ваши вызовы objectAtIndex: и думать о том, есть ли вероятность, что может быть использован недопустимый индекс.

Комментарии:

1. Что вы имеете в виду под «обоснованием этого»? Смотрите трассировку стека исключений, кадры с 3 по 1. Поток вызовов таков: Кадр 3: метод его приложения (по адресу 0x1000 12911 ), вызываемый кадром 2: objectAtIndex: для объекта типа __NSArrayM , который является внутренним NSArray подклассом. И objectAtIndex: , в свою очередь, вызвал кадр 1 : objc_exception_throw . Итак, приложение вызвало [someArray objectAtIndex:something] и objectAtIndex: выдало исключение. Обычно этот метод выдает исключение только тогда, когда индекс выходит за пределы.