У меня есть приложение Monotouch, которое включает в себя статическую библиотеку Objective-C. Приложение корректно работает на симуляторе, но при попытке запустить приложение на моем iPhone 3GS оно вылетает при запуске. Вот шаги, которые я предпринял, чтобы попытаться заставить его работать:
- Скомпилировал статическую библиотеку в Xcode с Указанным устройством и активной архитектурой , установленными на armv6 и на armv7 (я не уверен, что это правильно, но я пробовал и то, и другое не сработало) .
- Под информацией о проекте я устанавливаю идентификатор подписи кода для моего ключа разработчика.
В MonoDevelop я включил статическую библиотеку в параметры проекта приложения, установив дополнительные аргументы monotouch в iPhone build , чтобы иметь следующее значение (это идентично что установлено для iPhoneSimulator):
-v -v -v -gcc_flags "-lstdc ++ -I $ {ProjectDir} / Ultralite / Включить -L $ {ProjectDir} / Ultralite -lUltralite -force_load $ {ProjectDir} /Ultralite/libUltralite.a"
Когда я пытаюсь запустить приложение, оно вылетает при запуске (поэтому экран приложения даже не появляется). В MonoDevelop все, что я вижу, это следующее сообщение об исключении:
Exception of type 'Mono.Debugger.Soft.VMDisconnectedException' was thrown.
Все, что я вижу в журнале устройства в Xcode, выглядит следующим образом:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_PROTECTION_FAILURE at 0x2fd00f24
Если я удаляю опцию -gcc_flags из опций проекта, то приложение запускается, но вылетает при первой попытке доступа к статической библиотеке. Так что это определенно связано со статической библиотекой, которая вызывает сбой приложения при запуске.
Я понятия не имею, с чего начать, и мне действительно нужна помощь в этом. Кто-нибудь получил какие-либо идеи относительно того, что не так со статической библиотекой, которую я включаю, или знаете, где я могу получить больше информации о том, что происходит не так? Сообщение KERN_PROTECTION_FAILURE в отчете о сбое действительно не дает мне много работы.
Обновление:
Я создал простое приложение Hello World, в котором есть одна кнопка, которая при нажатии вызывает метод sayHello в статической библиотеке. Даже с этим основным примером я столкнулся с той же проблемой; а именно, что он работает на симуляторе, но не на реальном устройстве. Я загрузил свой пример helloworld в github. Я был бы очень признателен, если бы кто-нибудь помог мне в этом. Вот пример Hello World:
https://github.com/BruceHill/HelloWorld
Сюда входит папка для основного приложения, папка со статической библиотекой target-c и, наконец, папка для определения btouch. Я вызываю btouch с параметром -outdir =. построить Messaging.g.cs и UltraliteManager.g.cs , которые я затем включу в приложение MonoTouch.