GHUnit работает в симуляторе, но не на iPhone - PullRequest
2 голосов
/ 19 июля 2011

Итак, я сегодня играл с GHUnit и у меня есть несколько хороших тестов, которые прекрасно работают в симуляторе в XCode4. Когда я запускаю их на самом iPhone, я получаю следующую ошибку:

'Unable to instantiate the UIApplication delegate instance.
No class named GHUnitIPhoneAppDelegate is loaded.'

Перед тем, как спросить, да, у меня установлены параметры компоновщика -ObjC и -all_load, и, как я уже сказал, он отлично работает в симуляторе, так почему бы не сам iPhone?

Недоумение!

Ответы [ 3 ]

3 голосов
/ 11 августа 2011

У меня нет уверенности, что у меня есть реальная причина этой проблемы, но я нашел обходной путь.

По какой-то причине я все еще не совсем понимаю, что заменить:

int retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIPhoneAppDelegate");

по

int retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIOSAppDelegate");

в основном файле исправит проблему.

Класс GHUnitIPhoneAppDelegate наследуется от GHUnitIOSAppDelegate, но он не включен в окончательный двоичный файл (я запустил nm -a GHUnitIPhoneAppDelegate|grep IPhoneApp без результата).

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

Надеюсь, это поможет, по крайней мере, у меня сработало.

1 голос
/ 07 сентября 2011

Просто чтобы уточнить, GHUnitIOS-0.4.32, загруженный 8/11/2011 в https://github.com/gabriel/gh-unit/downloads бросков

NSInternalInconsistencyException', reason: 'Unable to instantiate the UIApplication delegate instance. No class named GHUnitIPhoneAppDelegate is loaded.'

, если int main(int argc, char *argv[]) содержит:

int retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIPhoneAppDelegate");

Это работает для:

int retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIOSAppDelegate");

Поскольку GHUnitIOSAppDelegate отсутствует в библиотеках armv6 и armv7.Обратите внимание, что GHUnitIPhoneAppDelegate находится в симуляторе lib ...

GHUnitIOS.framework$ nm -a -arch i386 GHUnitIOS | grep GHUnitIPhoneAppDelegate
nm: no name list
GHUnitIOS(GHUnitIPhoneAppDelegate.o):
00000084 S _OBJC_CLASS_$_GHUnitIPhoneAppDelegate
00000070 S _OBJC_METACLASS_$_GHUnitIPhoneAppDelegate
00000048 s l_OBJC_CLASS_RO_$_GHUnitIPhoneAppDelegate
00000020 s l_OBJC_METACLASS_RO_$_GHUnitIPhoneAppDelegate
GHUnitIOS.framework$

Но не в одном из двух библиотек устройств ...

GHUnitIOS.framework$ nm -a -arch armv6 GHUnitIOS | grep GHUnitIPhoneAppDelegate
nm: no name list
GHUnitIOS.framework$

GHUnitIOS.framework$ nm -a -arch armv7 GHUnitIOS | grep GHUnitIPhoneAppDelegate
nm: no name list
GHUnitIOS.framework$
0 голосов
/ 12 августа 2011

Я оставлю ответ @ apouche как принятый, так как это решило мою проблему и помогло мне.

Однако получил сообщение от gabriel, разработчика GHUnit, в котором говорится, что это ошибкачто он выпустил новую версию (0.4.32), которая исправляет эту проблему.

...