所以我今天一直在玩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)来修复这个问题。