所以我要下载我的申请的发布时间.我们计划发布两个版本,一个免费的基于广告的播放解锁版本和一个付费完全解锁版本.我设置了代码,我可以在启动时设置一个标志来启用/禁用广告并锁定/解锁所有功能.因此字面上只有一行代码在这些版本之间执行不同.
为了发布两个单独的应用程序,它们需要不同的包名称,所以我的问题是:是否有一种简单的方法来重构我的应用程序的包名称?Eclipse的重构工具无法解析生成的R文件或布局和清单文件中的任何XML引用.我试图使用原始资源创建一个新项目,但我无法引用资产和资源,我希望避免重复我的任何代码和资产.手动重构它不是一个巨大的痛苦,但我觉得必须有一个更好的方法来做到这一点.有人有一个优雅的解决方案吗?
编辑/回答:
对于我的情况,我发现只使用Project - > Android Tools - > Rename Application Package是完全可以接受的.我不知道这存在,我觉得现在发布这个就是个白痴.感谢大家的回答和评论,请随意投票.
今天我的任务是将单元测试覆盖率分析添加到我们的代码库中.今天也是iOS 7.1与XCode 5.1一起发布的日子.从发行说明:
用于代码覆盖测试的gcov工具已重新实现.新版本使用LLVM项目中的llvm-cov工具.对于所有重要功能,它在功能上等同于旧版本.Xcode中gcov的位置也已移动,使用xcrun来调用它.如果您发现问题,请提交错误报告.对于此版本,您仍然可以使用GCC的旧版gcov,它以gcov-4.2的形式提供.11919694已更新
我只是在遵循几篇教学 博客 文章后才意识到这一点,正确设置我的环境 - 在测试时在模拟器的构建文件夹中生成.gcda/.gcno文件 - 并且在此处生成报告生成工具尝试将它们解析为报告.(这是一个./getcov脚本,它收集您的环境变量以传递给lcov-1.10脚本以生成报告)
第一个障碍是新的捆绑gcov程序不支持-v获取版本的参数,这是lcov初始化的第一步.看起来就像一个非首发,但是阅读上面的发行说明我修改了lcov脚本以使用旧gcov-4.2版本并解决了问题.
但是,lcov在处理我的覆盖数据文件时很早就出错了.这会在我的项目中按字母顺序生成一个可能包含前10个文件的报告.不是特别有用.错误输出是最小的,也是无益的:
geninfo:错误:GCOV(build_artifacts)/(class_that_errored).gcda失败了!
我修改了lcov脚本以打印它所获得的错误(11遗憾的是,它只能在gcov(-io).c代码中找不到任何引用)并继续操作而不是退出,所以我留下了更多报告中的文件,但仍有85%的源文件出错,如上所述.
我能够在报告中成功结束的文件与发生错误的文件之间辨别的唯一模式是任何使用内联块声明的文件都失败了.没有任何传递过的文件以任何方式阻止,我检查过的所有文件都包含块.奇怪.
后来我想通了,我可以在打开单个文件.gcda 封面,其中包括曾在出错的那些lcov脚本.在coverage报告下面的消息窗口中,所有出错的文件都有警告消息:
(class_that_errored).gcno:'__copy_helper_block_'没有行
(class_that_errored).gcno:'__destroy_helper_block_'没有行
在这一点上我最好的假设是新的XCode 5.1生成.gcda文件,旧gcov-4.2程序没有配备有关块声明的处理.
但是我已经筋疲力尽了我想要尝试的一切,所以我在这里询问是否有人知道我错过了什么,或者有什么想法可以进一步调试.或者,如果有人成功测量了今天的XCode 5.1更新后的测试覆盖率gcov,我很想知道你必须做出的任何改变.
我正在尝试更新我的异步单元测试以使用新XCTestExpectation接口而不是手动旋转运行循环.
我的单元测试之前使用的功能waitForBlock,finishBlock以及waitForTimeInterval:这很简单,称为一个方便的方法finishBlock在指定的时间之后.我正在尝试更新此设置以使用期望值.
使用waitForBlock+ finishBlock语义的测试在被替换为waitForExpectationsWithTime:handler:和之后都正常工作fulfill,但我的替换解决方案waitForTimeInterval:似乎不起作用.
- (void)waitForTimeInterval:(NSTimeInterval)delay
{
XCTestExpectation *expectation = [self expectationWithDescription:@"wait"];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[expectation fulfill];
});
[self waitForExpectationsWithTimeout:delay + 1 handler:nil];
}
Run Code Online (Sandbox Code Playgroud)
编辑:
似乎代码实际上确实有效...所以这可能只是Xcode 6今天下午与我联系.
我觉得它应该是相当简单的:创建一个期望,设置一个满足的异步块,然后等待.但是,dispatch_after永远不会调用该块.
我的预感是waitForExpectationsWithTimeout:handler:阻塞它的当前线程,这是主队列,因此运行循环永远不会到达其异步块.这似乎是合理的,但我在提出实现此功能的不同方法时遇到了麻烦.
我正在寻找1)关于XCTestExpectation这可能揭示解决方法的其他信息,或2)实现此功能的不同想法.