xcode 4 + phonegap ...在构建时不更新JS?

Posted

技术标签:

【中文标题】xcode 4 + phonegap ...在构建时不更新JS?【英文标题】:xcode 4 + phonegap ... not update JS upon build? 【发布时间】:2011-06-26 19:17:45 【问题描述】:

在过去的一个小时里,我遇到了一个让我摸不着头脑的奇怪问题。

我正在使用 Xcode 4 和 PhoneGap 开发 iPad 应用程序。它使用 jQuery。我已经把我所有的 JS 放到了一个 scripts.js 文件中。

一切顺利。

我花了大约一个小时进行大量 CSS 调整。我会更新 CSS 文件、停止应用程序、重建并推送到 iPad 模拟器或我的 iPad。这一直很好。对 CSS 文件的每次更新都会反映在新版本中。

然后我需要更新 JS 文件。我无法让事情正常工作,然后我终于意识到我的 JS 更改实际上都没有被放入构建中。我终于彻底清空了我的 JS 文件,重新构建了它,但它仍然没有更新。

我正在更新的文件正在项目文件夹中的 finder 中更新(我可以右键单击“在 finder 中查看”,该文件确实已更新)。

所以我很难过。 xcode 编译器是否以某种方式缓存 JS 文件而不是获取更新的文件?有没有办法强制它抓取更新的 JS?

【问题讨论】:

【参考方案1】:

我发现单击菜单命令时有必要按住选项按钮,该命令会将命令从“清理”变为“清理构建文件夹...”,这导致我的资产被刷新。

【讨论】:

我什至不知道选项按钮更改了下拉菜单操作!这应该是公认的答案。【参考方案2】:

好吧,经过一番谷歌搜索后,这似乎是一个常见问题。 Xcode 似乎会在您编辑文件后缓存它们。

一个选项似乎是在新构建之前运行“清理”命令。我试过了,没有运气。

其他解决方案似乎每次都涉及重建 .plist 文件。我不完全理解(还)如何自动执行此操作,但确实找到了这种解决方法:

打开您的 .plist 文件 改变一些东西(在我的例子中,我每次都重命名一个应用程序图标文件) 保存并构建

这样做会神奇地强制 xcode 最终抓取所有更新的文件并进行正确的构建。

我无法解释为什么 Xcode 似乎每次都非常高兴地获取我更新的 .css 文件,但在没有先进行 .plist 文件编辑之前不会更新 .html 或 .js 文件。

似乎 Apple 仍有一些错误需要解决。我想我们将不得不耐心等待它的下一个 4gig .x 版本。 ;)

【讨论】:

这对我有用(XCode 4.2.1,PhoneGap 1.3.0)。上面提到的“清理构建文件夹...”不起作用。现在,后续的 JS 更改会自动重建。我想知道 touch $BUILT_PRODUCTS_DIR/$INFOPLIST_PATH 动作前 shell 脚本(请参阅 ***.com/questions/7944185/…)是否可以保持正常工作。【参考方案3】:

只需在 XCode 中为您的目标添加一个新的“运行脚本”构建阶段并粘贴:

touch -cm $SRCROOT/www

【讨论】:

这就像一个魅力。要支持带空格的目录,应在最后一个参数周围添加引号。 现在PhoneGap内置(至少在2.1.0中)【参考方案4】:

我现在没有 mac,但可以尝试的东西很少:

尝试查看应该复制 www 文件夹的项目构建(或预构建等)操作。

尝试更改 index.html 看看是否有效。

尝试复制粘贴你所有的javascript代码到index.html脚本标签

尝试验证您的javascript(例如:Google Closure Compiler),看看它是否没有问题

【讨论】:

Xcode/Phonegap 是否在编译前尝试验证 .js 文件?可能就是这样。让我通过 JSLint 运行它... 不,它没有。它只是复制你写的任何东西。它只编译允许 ios 运行 phonegap 的 Obj-C 包装器。 Phonegap 不进行 js 编译/转换。这有点烦人,尤其是如果您习惯了与 firebug 和朋友一起开发环境。【参考方案5】:

这些都不适合我:(

我可以更新其 html 和 js 的唯一方法是在命令行运行“corodova run ios”。

【讨论】:

【参考方案6】:

找到名为copy-www-build-step.sh的文件。

我在[project_folder]/platforms/ios/cordova/lib/copy-www-build-step.sh

在该文件中,找到以 rsync -a "... 开头的行

将 -c 添加到 rsync 行,以便它们准备好 rsync -a -c "...

copy-www-build-step.sh 是将文件从 www/ 复制到应用程序文件中的位置的脚本。 rsync 是他们使用的 unix 文件复制命令。如果没有 -c,rsync 只会比较每个文件和文件夹的文件大小,如果大小发生变化,则将它们复制过来,而几个空格或引号不算作足够的更改。使用 -c,它会校验它们并比较校验和,即使是最小的变化也会被捕获。

我认为这将是最好的,因为它不是一种解决方法,它实际上解决了问题的原因。

【讨论】:

【参考方案7】:

我刚刚遇到了这个问题,此处发布的构建阶段命令(实际上现在由默认的 Phonegap 项目使用)对我不起作用,因为我正在 Visual Studio 中的 Parallels Windows VM 上编辑我的文件。

我所做的是在我的项目的构建阶段使用它:

find "$PROJECT_DIR/www/." -exec touch -cm  \;

这基本上是一种递归方式。然后,我将 Visual Studio 设置为始终重新加载文件(如果已保存)。希望这会有所帮助。

【讨论】:

【参考方案8】:

我不确定是哪个做的,但我做了以下操作:

    更改了我的MyProject-Info.plist 中的图标值 退出模拟器 Product -> (hold option) -> Clean Build Folder 运行

【讨论】:

【参考方案9】:

我在 iOS 模拟器上遇到了同样的问题,我尝试了上面的大部分建议都没有成功,它不会接受我的更改。 后来我想到了另一个可能的解决方案,它确实有效:

从模拟器中删除应用。 (即点击并按住图标,然后在它开始摇晃时点击 X,然后点击 Hardware Home) 然后从 xCode 重新运行。

(注意:“cordova build ios”也是必需的)

【讨论】:

【参考方案10】:

以上工作没有解决方案 最后我看到使用Cordova的命令行工具创建的项目中有两个index.html文件和.js文件

所以在暂存文件夹下进行如下所示的更改

【讨论】:

以上是关于xcode 4 + phonegap ...在构建时不更新JS?的主要内容,如果未能解决你的问题,请参考以下文章

使用 phonegap v 2.9 为 Xcode 4.6 版本构建存档失败

phoneGap 4.2.0 和 Xcode 6.1.1 相机和相册错误

我的 iOS 应用程序可以使用 PhoneGap(构建与 xCode)的大小?

无法构建或编译 phonegap 2.1

iOS 13 SDK 的 Phonegap 构建

ZXing phonegap 插件的 XCode 构建错误:Undefind symbols for architecture i386