GHUnit在模拟器上运行,但不能在iPhone上运行



所以我今天一直在玩GHUnit,并且有一些很好的测试,在XCode4的模拟器中运行得很好。当我在iPhone上运行它们时,我得到以下错误:

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

在你问之前,是的,我有链接器选项-ObjC-all_load设置,就像我说的,它在模拟器中工作得很好,那么为什么不是iPhone本身?

困惑!

我不确定这个问题的真正原因,但我确实找到了一个解决方法。

出于某种原因,我仍然不太确定如何理解替换:

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

int retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIOSAppDelegate");
主文件中的

将解决这个问题。

GHUnitIPhoneAppDelegate类继承自GHUnitIOSAppDelegate但它不包括在最终二进制(我运行nm -a GHUnitIPhoneAppDelegate|grep IPhoneApp没有结果)。

一个疯狂的猜测是,因为类只从它继承(没有额外的方法或属性),因为在框架中没有任何地方实例化该类(只通过字符串提到),编译器,为了节省空间,在iOS模式下从二进制信息中删除它。

希望这对你有帮助,至少对我有用。

澄清一下,2011年8月11日上传到https://github.com/gabriel/gh-unit/downloads的ghunios -0.4.32抛出

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中缺失&v7填词。注意GHUnitIPhoneAppDelegate在模拟器库中…

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$

我将把@apouche的答案作为公认的答案,因为它回答了我的问题并帮助了我。

然而,有一个消息从加布里埃尔,GHUnit的开发人员-说这是一个错误,他已经做了一个新的版本(0.4.32)来修复这个问题。

相关内容

  • 没有找到相关文章

最新更新