0

我有一个游戏,里面有 xml 文件。我的游戏可以在 iPad 和 iPhone 上运行,我需要相应地对这些 xml 文件进行一些更改,但是 xml 文件是原始文件,我不希望它们更改,所以我想要的是在编译时自动更改我的 xml 文件. 为此,我有一个 ruby​​ 脚本可以满足我的需要。假设这个脚本是 level_converter.rb 我可以执行(在终端)如下:

for f in Resources/*.xml; do ruby level_converter.rb "$f"; done

所以我将此代码添加到 Build Phases 以这种方式运行脚本,这确实按预期工作,它确实正确更改了所有 xml 文件,但它当然会更改资源文件夹中的原始 xml 文件。所以说如果我运行两次 - 我将这些文件更改两次。我想要的是这些文件保持不变,但只有那些部署的文件应该改变。所以我需要某种 $(PROJECT_DISTRIBUTION_AND_DEVELOPEMENT_TEMP_FOLDER) 或类似的东西,而不是简单的 Resorces/*.xml 例如。

for f in $(PROJ_DISTRIB_AND_DEV_TMP_FLDE)/*.xml; do ruby level_converter.rb "$f"; done

编辑:我的问题一定不是很清楚,所以我改写了

问候,伊戈尔

4

1 回答 1

0

我能够实现我想要的,这是脚本:

PROJ_DIR=${PWD}

echo "Converting xml files..."
for f in "${CODESIGNING_FOLDER_PATH}/"*.xml
do
    cp $PROJ_DIR/Resources/"${f##*/}" "$f"
    ruby level_converter.rb "$f" $PROJ_DIR/key_hash;
done

exit 0;

所以我使用了这个 ${CODESIGNING_FOLDER_PATH} 变量。

解释:

  • for 迭代目标目录中的 *.xml 文件
  • cp $PROJ_DIR/Resources/"${f##*/}" "$f": 至于 xcode 仅在资源被更改时才复制资源,我必须手动复制 xml 文件以防止它们被转换一次以上 - 所以转换器在每个构建中执行,因此它应该有原始文件可以转换
  • ruby level_converter.rb "$f" $PROJ_DIR/key_hash; :这只是执行脚本

这做了我不想要的,但有缺点/疑问:

  • 我不时收到警告,指出已签名的资源已更改或删除(不过这并不让我感到惊讶)。也许有办法抑制这种情况?它确实阻止了应用程序被沙盒化,我必须重新构建,希望下次不会有警告。幸运的是它不经常出现
  • 构建需要更长的时间,如果原始文件发生更改并且仅在必要时执行脚本仍然会很好
  • 我仍然认为应该有一些“正确”的方式来实现我想要的
  • 我不确定我是否正确选择了变量 CODESIGNING_FOLDER_PATH,也许我应该使用另一个

编辑:我在编译源代码之前将运行脚本移动到运行,并且从那时起没有收到任何关于签名资源更改的警告。徘徊如果这是原因

于 2013-01-09T10:09:43.447 回答