Приложение Monotouch не будет запускаться на устройстве, но прекрасно работает в симуляторе - PullRequest
1 голос
/ 20 октября 2011

У меня есть приложение для iPad, которое я прекрасно разрабатывал на симуляторе (xcode 4, md 2.8, mt 5).Однако, когда я пытаюсь выполнить развертывание на устройстве, приложение вылетает при запуске.В xcode нет журналов сбоев, и в окне консоли не отображаются ошибки.

Однако, когда я запускаю monotouch из терминала, я получаю следующий вывод:

Rich-MacBook-Pro: ~ rich3 $ / Developer / MonoTouch / usr / bin / mtouch --debugsim =$ / private / var / mobile / Applications / 31A80564-0CEF-4F4B-AE9D-6A1938510393 Указан недопустимый SDK: 3,2 Stacktrace:

в (управляемая оболочкой - управляемая) MonoTouch.ObjCRuntime.Messaging.void_objc_rptbo_bint (int), intptr, intptr, intptr, bool) <0xffffffff> в MonoTouch.Foundation.NSObject.Dispose (bool) <0x0009f> в MonoTouch.Foundation.NSObject.Finalize () <0x00016> в (вызове среды выполнения оболочки) object.roid_v_v_v_time_in1007 * this _ (object, intptr, intptr, intptr) <0xffffffff>

Собственная трассировка стека:

    0   mtouch                              0x000ec183 WriteZStream + 955779 
    1   mtouch                              0x0001bd4f WriteZStream + 102735 
    2   libsystem_c.dylib                   0x9020459b _sigtramp + 43 
    3   ???                                 0xffffffff 0x0 + 4294967295 
    4   Foundation                          0x9a0603de -[NSObject(NSThreadPerformAdditions) performSelectorOnMainThread:withObject:waitUntilDone:] + 160 
    5   ???                                 0x027d5884 0x0 + 41769092 
    6   ???                                 0x027d0e40 0x0 + 41750080 
    7   ???                                 0x027d559f 0x0 + 41768351 
    8   ???                                 0x025e5551 0x0 + 39736657 
    9   mtouch                              0x001a76c4 WriteZStream + 1723076 
    10  mtouch                              0x001a968a WriteZStream + 1731210 
    11  mtouch                              0x001a98c4 WriteZStream + 1731780 
    12  mtouch                              0x002735c1 WriteZStream + 2558401 
    13  mtouch                              0x00273677 WriteZStream + 2558583 
    14  mtouch                              0x002b8b0e WriteZStream + 2842382 
    15  mtouch                              0x002f31d8 WriteZStream + 3081688 
    16  libsystem_c.dylib                   0x901aced9 _pthread_start + 335 
    17  libsystem_c.dylib                   0x901b06de thread_start + 34 

Отладочная информация из gdb:

/tmp/mono-gdb-commands.1eukTW:1: Error in sourced command file: 
unable to debug self 

================================================================= 
Got a SIGSEGV while executing native code. This usually indicates 
a fatal error in the mono runtime or one of the native libraries 
used by your application. 
================================================================= 

Abort trap: 6

ОБНОВЛЕНИЕ: я наконец прибавил свою проблему к двум вещам.

  1. Дженерики и типы значений не сочетаются друг с другом при использовании AOT (и это требуется для выполнения на устройствах iOS),Поэтому мне нужно было изменить запрос: From: 'CSDatabase.RunQuery ("select max (VersionNbr) from schema_version"). FirstOrDefault ();'To: CSDatabase.RunQuery ("выберите max (VersionNbr) из schema_version"). First ();

  2. Далее мне нужно добавить аргумент для батутов (-aot "nimt-trampolines= 2048 ") и только связанный monotouch sdk во время сборки.Это прояснило остальные мои проблемы.

1 Ответ

3 голосов
/ 20 октября 2011

Здесь есть две проблемы.

Второй выглядит следующим образом: Указан неверный SDK: 3.2

Просто у вас не установлен 3.2 SDK (по умолчанию он не поставляется с iOS5 SDK).Попробуйте следующую команду:

/Developer/MonoTouch/usr/bin/mtouch --debugsim=/path/to/your.app --sdk=5.0

, и она должна работать нормально.

Что касается первой проблемы, то здесь не так много подробностей, чтобы помочь вам.Если не создается аварийный дамп (это происходит, например, когда недостаточно памяти), попробуйте следующее:

a) откройте окно терминал на вашем компьютере;

b) выполнить следующую команду

/Developer/MonoTouch/usr/bin/mtouch --logdev

c) запустить приложение на устройстве;

d) вызвать его сбой (в данном случае кажется автоматическим; -)

e) скопируйте / вставьте журнал устройства в свой вопрос (если он маленький) или заполните отчет об ошибке в http://bugzilla.xamarin.com (если он большой)

...