小编MiK*_*iKL的帖子

如何运行和调试iPhone应用程序的单元测试

注意:现在单元测试更容易设置.本教程与Xcode版本5及更高版本无关.

我花了很长时间,但我终于设法使它适用于我的项目.为了创建"逻辑"测试,我遵循Apple关于创建逻辑测试的指导原则.一旦您了解在构建期间运行逻辑测试,这就可以正常工作.

为了能够调试这些测试,需要创建一个可以调用这些测试的自定义可执行文件.本文通过对所著的Grokking可可博客肖恩·米塞利提供的所有信息来做到这一点.然而,它并没有立即取得成功,需要进行一些调整.

我将介绍Sean教程中提供的主要步骤,提供一些"for dummies"大纲,这花了我一些时间来弄清楚:

  1. 设置包含单元测试的目标但不运行它们
  2. 设置otest可执行文件以运行测试
  3. 设置otest环境变量,以便otest可以找到您的单元测试

使用XCode 3.2.5执行以下操作

XCode 4的注意事项

在XCode 4中,可以直接调试单元测试.只需编写测试,将其作为测试之一添加到目标并在其中设置断点.就这样.会有更多.

第1步 - 设置目标

  1. 复制位于项目目标下的单元测试目标.这也将创建单元测试产品(.octest文件)的副本.在下图中,"LogicTest"是原始目标.
  2. 将单元测试目标和单元测试产品(.octest文件)重命名为相同的名称.在下图中,"LogicTestsDebug"是重复的目标.
  3. 删除新目标的RunScript阶段

两者的名字可以是任何东西,但我会避免空格.

在此输入图像描述

第2步 - 设置otest

这里最重要的一点是获得正确的otest,即适用于您当前的iOS而不是默认的Mac版本.这在Sean的教程中有详细描述.以下是一些帮助我做好准备的细节:

  1. Go Project-> New Custom Executable.这将弹出一个窗口,提示您输入可执行文件名和可执行文件路径.
  2. 输入您想要的任何名称.
  3. 复制粘贴路径到您的iOS otest可执行文件.在我的例子中,这是/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/Developer/usr/bin/otest
  4. 按enter键.这将带您进入可执行文件的配置页面.
  5. 此时唯一要改变的是选择"路径类型:相对于当前SDK".不要输入路径,这是在步骤3完成的. 在此输入图像描述

第3步 - 设置otest参数和环境变量

讽刺的论点很容易设置......但事实证明这是我最大的问题.我最初将我的逻辑测试目标命名为"LogicTests Debug".使用此名称和"LogicTests Debug.octest"(带引号)作为otest的参数我保持otest终止与退出代码1并且永远不会停止到我的代码...

解决方案:目标名称中没有空格!

otest的论据是:

  1. -SenTest Self(或全部或测试名称 - 在终端中键入man otest以获取列表)
  2. {LogicTestsDebug} .octest - 需要用逻辑测试包名称替换{LogicTestsDebug}.

以下是复制/粘贴的环境变量列表:

  • DYLD_ROOT_PATH:$ SDKROOT
  • DYLD_FRAMEWORK_PATH:"$ {BUILD_PRODUCTS_DIR}:$ {SDK_ROOT}:$ {DYLD_FRAMEWORK_PATH}"
  • IPHONE_SIMULATOR_ROOT:$ SDKROOT
  • CFFIXED_USER_HOME:"$ {HOME} /图书馆/应用程序支持/ iPhone模拟器/用户"
  • DYLD_LIBRARY_PATH:$ {BUILD_PRODUCTS_DIR}:$ {DYLD_LIBRARY_PATH}
  • DYLD_NEW_LOCAL_SHARED_REGIONS:是的
  • DYLD_NO_FIX_PREBINDING:是的

请注意,我也尝试过DYLD_FORCE_FLAT_NAMESPACE,但这只是造成了骚乱.

在此输入图像描述

第4步 - …

iphone xcode unit-testing ocunit ios

16
推荐指数
1
解决办法
6597
查看次数

使用UINavigationController时,不调用我的控制器的viewWillAppear或viewDidAppear方法

这是球场.

  • 我有一个UIViewController子类,它在viewWillAppear和viewDidAppear方法中做了一些事情.
  • 我想将此视图控制器嵌套在UINavigationViewController中.
  • 根据视图层次结构的复杂性,可能不会调用两个方法viewWillAppearviewDidAppear我的控制器.

那么我应该怎么做以确保无论我的视图层次结构如何都始终调用这两个方法?

"复杂"视图层次结构的示例:

UIViewController subclass containing a UITabBarController
     |_ Each tab containing a UINavigationViewController
         |_ Each UINavigationController controller containing a custom UIViewController
Run Code Online (Sandbox Code Playgroud)

当您将TabBarController作为模态视图呈现时,将调用TabBarController的方法viewWillAppearviewDidAppear方法,而不是嵌套在UINavigationViewControllers下的自定义UIViewControllers的方法.

iphone uiviewcontroller uinavigationcontroller ios

13
推荐指数
2
解决办法
2万
查看次数

将GDAL/OGR合并到iOS项目中 - 快速指南

问题在于: GDAL是一个非常棒的开源库,用于管理复杂的GIS数据,包括栅格和矢量.它完全针对Mac OS(由William Kyngesburye提供)和其他平台编译,但不适用于iOS.

浏览网络,您可以找到关于创建iOS库主题的一些(相对较旧的)信息,首先是3年前编写的来自pseudogreen的着名脚本.堆栈溢出上还有一些碎片,例如iPhone上的GDAL/OGR,它们提供了额外的信息.

本文旨在涵盖我采取的所有步骤,这使我在使用iOS6和XCode 4.5.5的简单iOS应用程序中实现GDAL/OGR的全功能集成

gdal ios ogr

9
推荐指数
1
解决办法
5430
查看次数

如何解决Mercurial案例折叠碰撞?

我使用Mercurial作为源代码控制,在KILN上管理主存储库.在某个时间点,我将iOS项目名称从WeatherTimeMachine更改为weathertimemachine.这导致了几个文件和文件夹的大小写更改:

  • WeatherTimeMachine.xcode
  • WeatherTimeMachine_Prefix.pch
  • WeatherTimeMachine-的Info.plist

与此同时,我在KILN的修订版中添加了一个标签...所以我现在有:

  • 在KILN的头
  • 在我的本地仓库中改变一个案例

尝试合并时,我收到以下错误消息:"Mercurial case-folding collision"

我怎样才能解决这个问题?

macos mercurial kiln

5
推荐指数
3
解决办法
6731
查看次数