2011-06-26 38 views
8

我遇到了一個奇怪的問題,讓我在過去的一個小時裏撓了撓頭。xcode 4 + phonegap ...不更新構建時的JS?

我正在使用Xcode 4和PhoneGap的iPad應用程序。它使用jQuery。我把我所有的JS放入了一個scripts.js文件。

事情運轉良好。

我花了大約一個小時做了很多CSS調整。我會更新CSS文件,停止應用程序,重建並推送到iPad模擬器或iPad。這工作正常。每次對CSS文件的更新都反映在新版本中。

然後我需要更新JS文件。我無法讓事情發揮作用,然後我終於意識到我的JS變化實際上沒有被放入構建中。我終於完全清空了我的JS文件,重建了它,但它仍然沒有更新。

我正在更新的文件正在項目文件夾中的查找器中更新(我可以右鍵單擊「在查找器中查看」,該文件確實已更新)。

所以我很難過。 xcode編譯器以某種方式緩存JS文件而不是抓取更新的文件?有沒有辦法強制它抓住更新的JS?

回答

4

好吧,經過一些更多的搜索,這似乎是一個常見的問題。即使在編輯它們之後,Xcode似乎也會緩存文件。

一個選項似乎是在新構建之前運行'clean'命令。我試過了,沒有運氣。

其他解決方案似乎涉及每次重建.plist文件。我不完全明白,(但)在如何自動做到這一點而言,卻沒有找到這個解決辦法:

  • 打開你的.plist文件
  • 改變的東西(在我的情況,我重新命名的一個應用程序圖標每次)
  • 保存和建立

這樣奇蹟般地強迫Xcode中終於抓住所有更新的文件,並做適當的構建文件。

我無法解釋爲什麼Xcode看起來非常高興每次抓取我更新的.css文件,但不會先更新.html或.js文件,而無需先執行.plist文件編輯。

看起來好像蘋果仍然有一些錯誤的工作。我想我們必須耐心等待下一個4gig .x的發佈。 ;)

+0

這隻適用於我(XCode 4.2.1,PhoneGap 1.3.0)。上面提到的「Clean Build Folder ...」不起作用。 現在,後續的JS更改會自動重建。我想知道是否觸摸$ BUILT_PRODUCTS_DIR/$ INFOPLIST_PATH'預操作shell腳本(請參閱http://stackoverflow.com/questions/7944185/how-to-get-xcode-to-add-build-date-time-to -info-plist-file)將會保持正常工作。 –

2

我沒有MAC的權利,但幾件事情嘗試:

  • 嘗試看看在那裏WWW文件夾應該被複制你的項目構建(或預生成或東西)的行動。

  • 嘗試更改index.html並查看它是否有效。

  • 嘗試複製你的所有的JavaScript代碼粘貼到index.html的script標籤

  • 嘗試驗證自己的JavaScript(例如:谷歌關閉編譯器),看看它是否有沒有問題

+0

不Xcode中/ PhoneGap的嘗試,並在編譯之前驗證.js文件,如下圖所示?這可能是。讓我通過JSLint運行它... –

+0

不,它不。它只是複製你寫的任何東西。它只編譯允許iOS運行phonegap的Obj-C包裝器。 Phonegap沒有js編譯/轉換。這有點煩人,尤其是如果你習慣於用螢火蟲和朋友開發環境。 – petraszd

+0

嗯...甚至編輯index.html不會更新時進行構建。很奇怪...... –

10

我發現有必要按住選項按鈕,當點擊將命令從「清潔」轉換爲「清潔生成文件夾...」的菜單命令時,這導致我的資源被刷新。

+0

這解決了我遇到的問題! – seaneshbaugh

+0

這也適用於我。謝謝! – CWSpear

+0

我甚至不知道選項按鈕更改了下拉菜單操作!這應該是被接受的答案。 –

3

只需添加一個新的「運行腳本」 XCode中建立階段目標,並粘貼此:

touch -cm ${SRCROOT}/www 
+0

這工作就像一個魅力。要使用空格支持目錄,應該在最後一個參數周圍添加引號。 – AndiDog

+0

這是現在內置於PhoneGap(至少在2.1.0) – Garrett

0

我只是有這個問題,並在此發佈的構建階段的命令(這實際上是現在所使用的默認的Phonegap項目)不適合我,因爲我正在Visual Studio中的Parallels Windows VM上編輯我的文件。

我所做的,就是用這個來代替,在我的項目的構建階段:

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

那基本上是一個遞歸聯繫。然後,我將Visual Studio設置爲始終重新加載文件(如果已保存)。希望這可以幫助。

0

我不知道該做的,但我做了以下內容:

  1. MyProject-Info.plist
  2. 更改圖標值退出模擬器
  3. Product -> (hold option) -> Clean Build Folder
  4. 運行
1

找到名爲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,它會校驗它們並比較校驗和,即使是最小的變化也可以進行校驗。

我認爲這樣做效果最好,因爲它不是解決方法,它實際上可以修復問題的原因。

2

這些都不爲我工作:(

的唯一途徑,我可以去更新它的HTML和JS的東西是在命令行中運行「corodova運行IOS」。

0

我有同樣的問題與iPhone模擬器,我想大多數的上述建議沒有成功,它不會接受我的更改。 後來又出現了另一種可能的解決方案,它確實有效:

從模擬器中刪除應用程序。 (即點擊並按住圖標,然後在開始搖動時點擊X,然後點擊硬件主頁) 然後從xCode重新運行。

(注:「科爾多瓦打造IOS」,也被要求)的上述工作

-1

全無的解決方案終於我看到有兩個index.html文件和.js文件在項目中使用科爾多瓦命令行工具創建

所以要改變下暫存文件夾 enter image description here