我正在使用Xcode在Objective-C中编写一个iPhone应用程序,并且我在设备上运行了一些Lua脚本.
我遇到一个问题,如果我编辑Lua脚本,保存,轻弹到Xcode和构建并运行(⌘Y),该Lua脚本的最新版本将被复制到应用程序包中,但不会复制到设备中.
脚本不在Xcode项目中,我在Textmate中编辑它们.我有一个构建步骤,将脚本复制到应用程序包中并触摸文件,运行正常,最新的脚本版本在我运行应用程序时在应用程序包中.这些文件都已被触摸,但由于某些原因,当将软件包复制到设备时,Xcode决定不复制最新的文件.
如果我停止应用程序然后再次构建并运行(⌘Y),则会复制最新版本.
我的解决方法是保存Lua文件,然后在Xcode中执行构建(⌘B),然后构建并运行(⌘Y),以便构建应用程序两次.这似乎总是将最新版本复制到设备.
更新:
正如许多人所指出的,一种解决方案是清理目标并重建.你可以做到这一点,你也可以建立两次,如上所述.这个问题很容易重现(在我的设置中,每次都会发生这种情况,无论最近目标是如何清理的).我希望有一个更可靠/永久的解决方案
Ken*_*and 14
您一定要将这些文件添加到XCode项目中.您仍然可以在其他编辑器中编辑它们,但如果将其添加到项目中,XCode会自动将它们包含在您的包中.如果在构建时没有复制它们,我就是这样解决的:
右键单击XCode中的文件,然后选择"触摸",更新文件上的时间戳,使其看起来"新".
在模拟器上,从"文件"菜单中选择"重置内容和设置".
在XCode中,执行Build Clean
当你在之后构建并运行它应该安装文件就好了.
编辑:
要将项目中包含的外部文件夹添加到捆绑包中并保持文件夹结构不变,您只需执行以下操作:
单击左侧文件列表顶部的项目图标.
单击项目菜单,然后单击添加到项目.
选择要包含的文件夹,然后单击"添加".
取消选中"复制"复选框,然后将"为任何添加的文件夹递归创建组"更改为"为任何添加的文件夹创建文件夹参考".
构建目标时,打开捆绑包,您的目录结构将完全存在于内部.
Mar*_*ark 13
首先:我感受到你的痛苦.如果你想使用自定义脚本做一些有趣的(甚至只是简单的)数据流水线操作,我还没有找到任何关于卷起袖子和深入iOS构建管道的好文档.
第二个:我不同意你需要,甚至应该把你所有的资产放在你的xcode项目中.这真的是个人偏好的问题,如果你有一个足够复杂的项目,XCode就会成为一个独立导航你的代码的野兽,更不用说你所有的艺术资产和数据文件了.
第三:清理是一种解决方法,就像接触一个单独的源代码文件一样(XCode会接受这个并为你做签名/触摸主目录,而不需要进行干净的构建 - 一个干净的构建如果你有一个大型项目或重要资产,这是非常耗时的),但这些只是在没有解决根本问题的情况下让事情发挥作用:你需要找到正确的依赖关系来启动复制步骤.
我有同样的问题,你在这里描述的有以下不同之处:我正在使用gnu make脚本来处理艺术资源(音频,数据文件,图像),通过做一些基本的操作(压缩,剥离不需要的东西,建立字体等).我正在使用gnu make,因为1.)我知道它2.)我发现将所有规则放到一个脚本中更容易3.)我喜欢保持我的数据文件夹很好和heirarchical和4.)XCode并不总是您希望如何界面/组织/管理所有数据!(虽然我认为在一个不太复杂的项目中代码甚至少量数据都做得很好)
无论如何,我发现我真的有两个问题:1.)代码签名和2.)复制.复制很简单,您只需触摸build products文件夹即可.在我的情况下,我将以下内容添加到我的make文件中:"touch $(DIR_CONTENTS)"我在执行xcode时使用xcode为shell提供的现有env parms定义了"$(DIR_CONTENTS)":"DIR_CONTENTS = $( BUILT_PRODUCTS_DIR)/ $(CONTENTS_FOLDER_PATH)"(如果单击输出日志中的3条水平线,则可以看到env parms的完整列表).在您的情况下,您需要在lua脚本中执行等效操作.不确定是什么,我多年来故意躲避lua,但我无法想象它太疯狂了.
接下来的一点比较棘手,因为我发现只是因为你已经更新了,并不意味着代码签名的东西很好用.在我的情况下,我需要添加一个ResourceRules.plist文件,并将我的艺术目录(art /.*)添加为字典,省略一行和一个权重.我无法在任何地方找到文档,因此我将ResourceRules.plist文件从生成的文件夹复制到我的源文件夹中,将其添加到项目中,然后将代码签名的内容指向它.(这将在代码签名下的构建规则中:它将是您的"代码签名资源规则路径")
这不是我理想的解决方案,顺便说一句.如果我的数据发生变化,我宁愿能够通过我的脚本触发代码签名步骤,但正如我之前所说的,我没有在苹果开发人员库中找到任何有用的文档来了解如何真正深入了解自定义构建.您可以手动进行代码签名,但我不喜欢它.
希望有所帮助.
更新:
我想我会添加一些示例代码....这里有一些来自我的makefile的相关摘录:
# Near the beginning, where I do my variables n' such, I define the
# directory in a variable. Note that BUILD_PRODUCTS_DIR and CONTENTS_FOLDER_PATH
# are environment variables set by XCode and will be filled with the corresponding
# paths
DIR_CONTENTS = $(BUILT_PRODUCTS_DIR)/$(CONTENTS_FOLDER_PATH)
DIR_DEST_ART = $(DIR_CONTENTS)/art
DIR_DEST_FONTS = $(DIR_DEST_ART)/fonts
# ... more folders defined here...
DIR_SRC_FONTS = $(SRCROOT)/source-art/fonts
# ... more folders defined here...
# ... do some useful build stuff ...
# This is an example of my rule that takes the .png's built by my font script
# and compresses them to .pvrs (note: this isn't final, so YMMV). The thing to
# note here is that if this rule kicks off, the last thing that will happen is
# that I will touch my DIR_CONTENTS folder, which will kick off the copy to the
# device. I find having to touch the folder really annoying, I prefer the way xcopy
# and similar copy methods recursively travel & update if required.
$(DIR_DEST_FONTS)/%.pvr : $(DIR_SRC_FONTS)/%.png
@echo == Compress $(subst $(SRCROOT),src,$<) to $(subst $(DIR_DEST_ART),dest,$@) ===
@mkdir -p $(dir $@)
@xcrun -sdk iphoneos texturetool -e PVRTC -o $@ -f PVR $<
@touch $(DIR_CONTENTS)
Run Code Online (Sandbox Code Playgroud)
然后,为了处理代码签名问题,我编辑了我的ResourceRules.plist,如下所示.要注意的领域是以"art /.*"开头的关键
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>rules</key>
<dict>
<key>.*</key>
<true/>
<key>art/.*</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<integer>0</integer>
</dict>
<key>Info.plist</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>10</real>
</dict>
<key>ResourceRules.plist</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>100</real>
</dict>
</dict>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)