无法将脚本生成的文件作为项目资源找到

时间:2014-11-18 09:17:32

标签: ios objective-c xcode bash shell

所以,我有shell script生成两个JSON文件。该脚本在build Phase中以“Xcode”运行。我希望能够以编程方式访问这些生成的文件,但在代码中却无法找到它们。

以下是生成文件的代码(我没有指定任何路径 - Script位于项目的根目录中):

echo $booksJSON >> defaultBooks.json
echo $dateJSON >> defaultBooksDate.json`

然后我尝试从这样的代码中访问这些文件:

NSString *bookFilePath = [[NSBundle mainBundle] pathForResource:@"defaultBooks" ofType:@"json"];
NSString *dateFilePath = [[NSBundle mainBundle] pathForResource:@"defaultBooksDate" ofType:@"json"];

显然,我看不到'Copy Bundle Resources'build phase步骤中列出的这两个文件,因为它们是在编译时生成的,所以我假设这些文件根本没有复制到{ {1}}档案。

我缺少一步吗?如何告诉.ipa在“Xcode”步骤中添加JSON个文件?

非常感谢

1 个答案:

答案 0 :(得分:0)

您需要开始使用environment variables provided by Xcode。您也可以直接将JSON写入输出应用程序包中(除非您有特殊原因将它们生成为" source"并使用Xcode复制它们,那么?如果是,请参阅下文。)

所以我把这些脚本放到一个名为tools的子目录中,如果这个脚本被称为generate_json.sh,那么它的绝对路径就是$(PROJECT_DIR)/tools/generate_json.sh

在此sctipt文件中,您可以将Xcode输出目录(Xcode正在构建应用程序包)引用为$TARGET_BUILD_DIR

因此,像这样:

#!/bin/sh

cat << EOF > "$TARGET_BUILD_DIR/MyApp.app/somefile.json" 

your json goes here.

EOF
  • 此方法的替代方法是将.json文件生成到源树中,并将其作为正确的源文件添加到Xcode,并安排将其以正常方式复制到应用程序包中。这通常仅在从另一个源文件(想想yacclex源文件)生成时才有用。如果它为每个构建更改,那么使用我在这里给出的方法。如果它永远不会改变那么你就不应该做任何这些事情,因为你可以在Xcode之外手动运行脚本。