我有一些麻烦的unit testing一些大的中央调度代码与内置的Xcodeunit testing框架SenTestingKit。 我设法解决了我的问题。 我有一个unit testing,build立一个块,并试图在主线程上执行它。 但是,该块从未实际执行,所以testing挂起,因为它是一个同步调度。 – (void)testSample { dispatch_sync(dispatch_get_main_queue(), ^(void) { NSLog(@"on main thread!"); }); STFail(@"FAIL!"); } testing环境是什么造成这个挂起?
我试图testing使用Xcode上的基本SenTest框架读取和改变钥匙串的代码。 该代码在设备上正常工作,但是当我开始testing时,每当我想用SecItemDelete / SecItemAdd / etc来触碰钥匙串时, SecItemDelete得到这些错误。 The operation couldn't be completed. (OSStatus error -34018 – client has neither application-identifier nor keychain-access-groups entitlements) 对于构build目标和testing目标,我都有匹配的通配符configurationconfiguration文件( iOS Team Provisioning Profile: * )。 这些(未经证实的)堆栈溢出回答: 从keychain中读取errSecItemNotFound 25300 说我需要一个configuration文件匹配我的应用程序标识符每次使用钥匙串,但这不可能是正确的,或者我会得到相同的错误以外的testing目标。 深入挖掘,(未经证实的)答案在这里: SecItemAdd和SecItemCopyMatching返回错误代码-34018(errSecMissingEntitlement) 意味着keychain中可能存在一个bug,更普遍的是Security.framework ,这是坦率的恐怖。 我的问题是 只有当他们在testing目标上时,有没有人碰到OSStatus错误-34018? 这似乎是我所看到的行为。 编辑:添加这个答案 , JorgeDeCorte在他的答案中使用下面。 这个线程似乎包含解决scheme,如果问题退出你的unit testing目标。 https://devforums.apple.com/message/917498#917498 基本上,你必须通过在testing目标中添加以下内容作为运行脚本来对.xcttest文件夹进行编码。 codesign –verify –force –sign "$CODE_SIGN_IDENTITY" "$CODESIGNING_FOLDER_PATH" 在设备上testing我的钥匙串时,我得到了很多-34018错误,并且设法修复了它。 […]