【问题标题】:XCode Build not updating JS and HTMLXCode Build 不更新 JS 和 HTML
【发布时间】:2014-04-09 12:27:00
【问题描述】:

我正在使用 XCode 5.0.2Cordova 3.4.0-0.1.3 - 我发现是在使用 Cordova CLI 并在 XCode 中打开,index.html 文件和 index.js 文件的任何更改都不会转移到模拟器中我点击运行。 我必须打开终端并发出 Cordova 构建命令,然后运行模拟器,它就可以工作了

我按照这里的所有说明进行操作:

Phonegap - developing and launching app on simulator

xcode 4 + phonegap ... not update JS upon build?

而且这些都不起作用!任何人都可以解决这个问题,因为不得不来回切换是一种痛苦。

【问题讨论】:

    标签: javascript ios xcode cordova


    【解决方案1】:

    在构建阶段运行“cordova prepare ios”:

    1. 打开 Xcode。
    2. 选择您的项目。
    3. 转到“构建阶段”。
    4. 继续“+”以添加“新运行脚本阶段”。
    5. 将此部分移到“复制 www 目录”之前。
    6. 添加以下行(对于 Mac):
      • cd /Users/*/YOUR_PROJECT_FOLDER(更改您的项目文件夹)
      • /Users/*/.nvm/versions/node/v?.?.?/bin/node node_modules/cordova/bin/cordova prepare ios(更改节点版本的路径)

    “播放”后 www 文件夹会自动刷新!

    【讨论】:

      【解决方案2】:

      如果您是直接从 Xcode 更改 html,那么您应该更改暂存文件夹的 code/html,而不是主文件夹

      在暂存文件夹中,您将获得与主文件夹中相同的结构,但它会直接反映在 xcode (iOS) 构建中

      暂存文件夹

      注意:当您从 cordova 构建/运行再次构建时,您在 xcode 中所做的更改将被替换,因此请在执行 cordova 命令之前将您的更改复制到主文件夹中

      您可以从此答案获得更多信息:PhoneGap 3.4 中暂存文件夹的用途?仅识别此文件夹中对 index.html 的更改吗?

      这是取自以下的正确解决方案:

      Cordova + Xcode 7.3 (html + Javascript) not changed or updated when build and emulate

      【讨论】:

        【解决方案3】:

        当您在 XCode 中单击“运行”按钮时,自动将源文件从 www 源目录复制到平台/ios/www 目录:

        在 XCode 中,选择 Product->Scheme->Edit Scheme...
        展开 Build->Pre-actions
        的三角形 点击“+”创建一个新的 Pre-action

        您可以将“Shell”设置留空。
        将“提供构建设置来自”设置为您正在构建的项目。这很重要。

        在脚本区输入:

        cd ${PROJECT_DIR}/../..
        echo "--- Start ---" > xcode-prepare-ios-results.txt
        echo "Running cordova prepare ios command..."
        pwd >> xcode-prepare-ios-results.txt
        cordova prepare ios --verbose >> xcode-prepare-ios-results.txt
        echo "--- Finished ---"  >> xcode-prepare-ios-results.txt
        

        这适用于 XCode 8.2 和 Apache Cordova 6.x

        【讨论】:

          【解决方案4】:

          对我来说,我的代码中有一个错误。我只需要运行npm start 即可找到它。

          【讨论】:

            【解决方案5】:

            每次我使用cordova build 时,它都会覆盖我的平台特定www 文件中的内容。所以我改用cordova compile

            来自帮助:

            compile 编译平台项目而不准备它

            重要的是只编译更改而不是构建整个项目,特别是如果您为许多平台创建移动应用程序并且您必须进行一些特定于平台的改进。

            【讨论】:

              【解决方案6】:

              简单的解决方案是使用 cordova 构建应用程序:

              sudo cordova build ios
              

              然后转到 xcode > 产品 > 清洁

              然后转到 xcode > 运行(播放按钮)

              【讨论】:

              • 不确定是否还有 copy-www-build-step.sh 只是 .js
              【解决方案7】:

              只需输入:

              cordova prepare
              

              在您的终端上并在 Xcode 中再次运行您的项目

              【讨论】:

              • 这一直对我有用,直到最近。我认为这是因为尝试将 Windows 添加为平台并放弃它的拙劣尝试。
              【解决方案8】:

              此线程中的其他答案要么对我不起作用,要么搞砸了科尔多瓦插件,例如InAppBrowser,所以我终于想出了这个:

              编辑文件copy-www-build-step.sh并在开头添加以下行:

              cp -fR ../../www/ www/

              所以它应该看起来像:

              ...
              cp -fR ../../www/ www/ # new code
              
              SRC_DIR="www/"
              ...
              

              这样您的代码将正确更新并且您的插件将正常工作

              【讨论】:

              • 这导致我的应用卡在加载屏幕中。使用 Cordova 5.0.0。
              • 我很难相信这是导致它的原因,因为这个脚本确实做了 xcode 应该做的事情
              【解决方案9】:

              我还编辑了 copy-www-build-step.sh 文件,但是您不想使用用户文件夹中的绝对路径。如果您正在与其他开发人员合作,则每次签出代码时都必须更改它。

              没什么大不了的,改一下就好了:

              SRC_DIR="www/"
              

              收件人:

              SRC_DIR="../../www/"
              

              更新 在 Cordova 和 Phonegap 上为我工作。

              【讨论】:

              【解决方案10】:

              我所要做的就是为我的项目包含完整的绝对 src 路径。例如:

              1. 从您的项目目录中,vim 平台/ios/cordova/lib/copy-www-build-step.sh
              2. 将 SRC_DIR 更改为 www 的绝对路径,SRC_DIR="/Users/michael/Documents/Development/SampleMobileApp/www/"
              3. 保存、构建,然后一切顺利。

              【讨论】:

                【解决方案11】:

                @Ksliman 我修改了您的代码以在我的系统上工作并使其更加通用。

                文件顶部复制-www-build-step.sh

                ## New Code Begin ###
                
                cd ../../
                PATH=${PATH}:/usr/local/bin
                cordova prepare ios
                
                ## New Code End ###
                
                SRC_DIR="www/"
                

                【讨论】:

                • 太好了,很高兴它对你有用。从那以后我离开 Cordova 开始使用本地工具,它的学习曲线要​​陡峭得多。
                • 不要使用我上面所说的解决方案!!!!它们都引起了很多奇怪的问题。就我而言,它会导致 inappbrowser 插件未正确部署到模拟器或真实设备上。我认为我们应该坚持使用cordova build
                【解决方案12】:

                我发现有时 Cordova 会感到困惑......你需要做一个“cordova platform rm ios”(不要管你的插件),然后做一个“cordova platform add iOS”,这会将你所有的插件重新安装到您的平台...然后再次尝试您的构建。

                【讨论】:

                  【解决方案13】:

                  所以经过大量搜索后,我似乎找到了一个可行的解决方案,这就是我所做的。在查看了其他 Stackoverflow 问题后,我发现有人说这对他们有用。

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

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

                  在该文件中,找到以 rsync -a "...

                  开头的行

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

                  嗯,我试过了,但它本身不起作用。我也尝试了 Ville 的答案,结果拉得更近了,但没有雪茄。最后我把 Ville 的命令放到了 copy-www-build-step.sh 文件中

                  所以我的第一行现在是

                  cd /path/to/your/cordova/project/
                  cordova prepare
                  
                  SRC_DIR="www/"
                  DST_DIR="$BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME/www"
                  COPY_HIDDEN=
                  ORIG_IFS=$IFS
                  IFS=$(echo -en "\n\b")
                  .....
                  .....
                  .....etc etc 
                  

                  现在我进行更改,然后单击运行,bam 全部更新。我希望这对其他人有帮助。

                  【讨论】:

                  • 对我来说,只需添加一个 'cd $SRCROOT/../..' 行即可。我希望cordova可以默认添加它。
                  • 不要使用我上面所说的解决方案!!!!它们都引起了很多奇怪的问题。就我而言,它会导致 inappbrowser 插件未正确部署到模拟器或真实设备上。我认为我们应该坚持cordova build
                  • @GordonSun 你是对的。虽然它确实使代码保持最新,但它无法正确部署cordova 插件。你是怎么解决的?
                  • 这是一个很好的修复!在 Cordova 的 V 6.2 中,修复编码有点不同,因为它现在通过节点运行。在这种情况下,解决方法是在定义 shell 变量后添加以下代码行:shell.cd('~/Documents/GitHub/Cognitive-Adviser/iscaa'); shell.exec('cordova prepare');
                  【解决方案14】:

                  我建议您在构建您的 xcode 项目之前进行清理。还有一件事,请确保您使用 cordova build 再次构建您的项目,而不是在 xcode 中,因为它完全不同。

                  cordova build yourproject
                  

                  【讨论】:

                  • 是的,我明白这一点,但是为什么要加倍努力,我认为添加运行脚本会处理必须去终端并输入“cordova build yourproject”但使用ville's answer我尝试添加prepare 命令和 build 似乎都没有做任何事情。现在,每次我想在 sim 或设备上运行我的项目时,我都必须切换到终端窗口并为我的项目键入 CLI 构建命令,否则不会将任何更改发送到设备或模拟器
                  • 是的,你完全正确。在进入 xcode 之前,您需要切换 CLI 以再次构建项目。这就是科尔多瓦的工作原理。
                  【解决方案15】:

                  您可以将预操作脚本添加到您的 XCode 项目的构建中。为此:

                  1. 从菜单中选择产品 > 方案 > 编辑方案(或键盘上的 ⌘
                  2. 从左侧选择 Build > Pre-actions
                  3. 单击 + 并选择“新建运行脚本操作”
                  4. 添加这样的脚本:

                    cd /path/to/your/cordova/project/
                    cordova prepare ios > xcode-prepare-results.txt
                    

                  现在 XCode 应该始终在构建项目之前运行cordova prepare,这样您就不必跳转到终端。您可以在文件 xcode-prepare-results.txt 中看到 prepare 的输出。

                  请注意,根据您的cordova 可执行文件的设置方式以及您使用的shell,您可能必须更改shell 或修改您的PATH 以便脚本找到cordova。

                  【讨论】:

                  • 不行,这也没用!它创建 xcode-prepare-results.txt 文件,但文件中没有任何内容。我想知道这是 xcode 问题还是 PhoneGap/Cordova 问题。
                  • 为我工作。更通用; cd ${SRCROOT} cd .. cordova 准备 ios
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-11-10
                  • 1970-01-01
                  相关资源
                  最近更新 更多