Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在测试目标中添加/打开捆绑文件_Ios_Objective C_Xcode_Nsbundle - Fatal编程技术网

Ios 如何在测试目标中添加/打开捆绑文件

Ios 如何在测试目标中添加/打开捆绑文件,ios,objective-c,xcode,nsbundle,Ios,Objective C,Xcode,Nsbundle,我有一个由应用程序链接到的静态库。库代码打开应用程序捆绑包中捆绑包中的文件,打开过程如下: NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"]; 这很好用 但是,我想向库中添加一些单元测试代码,因此我有一个逻辑测试目标。由于文件位于应用程序的捆绑包中,而不是静态库的捆绑包中,我复制了Config.plist文件,并通过Copy bundle Resources将其添加到测

我有一个由应用程序链接到的静态库。库代码打开应用程序捆绑包中捆绑包中的文件,打开过程如下:

NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"];
这很好用

但是,我想向库中添加一些单元测试代码,因此我有一个逻辑测试目标。由于文件位于应用程序的捆绑包中,而不是静态库的捆绑包中,我复制了
Config.plist
文件,并通过
Copy bundle Resources
将其添加到测试代码目标中。但是,当我执行测试代码时,找不到该文件。为什么呢

由于上述内容令人困惑,下面是工作区结构的摘要

Workspace contains:
    Application Project with application target, which contains (X)
        Config.plist (a)
    Library project which contains:
        Library target, which contains:
            the code opening the file in the bundle (b)
        Test library target, which contains: (Y)
            A Copy of the Config.plist (c)

所以如果我构建X,那么当b运行时,它可以找到a。但当我在运行时生成Y时,b找不到c。

您可以在项目库中创建一个应用程序目标,将该文件复制到该目标,然后创建一个应用程序测试目标(在同一项目中),在其中测试库代码。

问题是静态库没有捆绑资源。一旦编译,它将只包含在已编译的代码和头文件中。因此,没有要复制的静态库plist资源

因此,您需要另一个进程来复制库包,以便它最终位于构建目录中

我发现的最有效的方法是在使用库链接二进制文件阶段之前的运行脚本阶段使用脚本。我附上了我的一个项目的截图,在那里我不得不做一些类似的事情。您应该能够通过调整脚本第一行上的文件名来实现所需的功能。所有环境变量都预定义为标准,因此我认为除了此脚本之外,不需要任何其他配置

不过,我还没有测试环境变量是否与默认的xCode 4构建位置以外的任何其他位置一起工作


我发现,如果我将[Bundle mainBundle]更改为[NSBundle bundleForClass:[self class]],那么它在这两种情况下都可以工作

静态库没有捆绑包,但是静态库的逻辑测试目标有。但是库项目有。在上面的配置中,您声明您拥有库项目。再次查看您的配置,我发现我提供的内容不适用于您的it设置方式。话虽如此,如果您的库测试目标需要config plist,您最好将库所需数据的一个副本存储在库项目的config.plist中。然后,您可以使用上述技术将plist数据从库复制到主项目中。总体结果应该是一个更模块化的构建过程。我说我有一个逻辑测试库,在结构中有一个库项目和一个测试库项目,plist显示为测试库的一部分。不想争论-我感谢你的回答。谢谢,太好了。这正是我所需要的。两个小时的搜寻和偶然的发现。干杯