2016-09-12 67 views
48

在將Swift + ObjC項目更新爲Xcode 8(Swift 2.3)後,我發現50%或更多時間Xcode執行項目的完全重建而不是增量構建。Xcode 8完成全部項目重建

所作的更改添加了簡單的打印語句。關於什麼時候進行完全重建似乎沒有任何邏輯。

它出現在它決定這一點的「檢查依賴關係」階段。在Xcode 7上,這似乎不成問題。

有沒有其他人遇到過這個?

+0

我有這個問題too-目前在谷歌航行,試圖找出原因和如何解決它,我要讓你知道,如果我看不到任何東西。完全相同的問題。 –

+1

相關的蘋果論壇主題:https://forums.developer.apple.com/thread/62737 –

+1

我有這個問題與Xcode 7和Xcode 8. – Lukas1

回答

32

我發現這個工作一致,但它會編譯swift文件,如果你修改包含在橋接頭中的頭。如果你來回切換git分支,它也會進行完整的編譯。

首先作出調試確保優化級別設置爲無(而不是整個模塊的優化) enter image description here enter image description here

然後,根據https://forums.developer.apple.com/thread/62737蘋果員工(ddunbar):

我們認爲,設置:

HEADERMAP_USES_VFS = YES 

在您的項目(或所有您的目標)中爲true可能b對許多人來說,這是一個有效的解決方法。這不能保證能夠正常工作(這是默認情況下它不是已經啓用的原因),但它應該適用於大多數項目。

這應該通過您的目標生成設置下的「添加用戶定義的設置」添加。

enter image description here

enter image description here

+5

實際上這已經被幾個人(包括我)嘗試過了,雖然最初它可能看起來像是開啓了這個標誌,但實際上並沒有,過了一段時間xcode返回到整個目標重新編譯 – Lukas1

+0

有些情況下,xcode將需要完全重建應用程序。這解決了xc8中隨機xc決定進行完全重建的一個知識問題。正如你上面的評論表明你在xc7和8有這個問題,這意味着你的問題是不同的。你和其他人可能有不同的依賴性結構問題,導致xc決定需要重建所有的東西。 – Vlad

+1

剛剛嘗試過,並且據我所知它對我來說確實有效。謝謝! –

12

好的,這是爲什麼發生的答案,但我不知道解決方案。如果您使用「其他Swift標誌」-driver-show-incremental,Xcode將根據它的依賴性輸出它決定需要編譯的內容。你會看到像:

Queuing EditProfileViewController.swift because of dependencies discovered later 
Queuing ChangePasswordViewController.swift because of dependencies discovered later 
Queuing JoinViewController.swift because of dependencies discovered later 
Queuing JoinProfileViewController.swift because of dependencies discovered later 
Queuing FormViewBuildable.swift because of dependencies discovered later 
Queuing RadioTextFormView.swift because of dependencies discovered later 
Queuing TextFieldFormView.swift because of dependencies discovered later 
Queuing AccountProfileViewController.swift because of dependencies discovered later 

我想知道如果這是一個快捷的3問題,因爲我不是在轉換之前有這個問題。我做了其中

FILEA inclues從FILEB的事情包括從FileC

,甚至增加FileC文件私人的變化,這不是任何地方使用導致FILEA,FILEB和FileC排隊的事情一個小例子項目由於依賴關係編譯。我將在今天晚些時候在Xcode 7中測試這個例子來看看會發生什麼。

所以它看起來像swift 3的依賴關係解析不能很好地工作。我已經在另外兩個快速的3個項目上測試了這一點,同樣的情況也是如此。在任何文件中進行更改,並且編譯每個文件。在你開始使用大約15,000行代碼進行項目之前,它並不感覺慢,這可能就是爲什麼沒有人談論這件事。除非你有一箇中等大小的swift 3應用程序,否則你可能甚至不會注意到增量複雜化並不正確。如果我學到更多東西,我會更新。

+1

看起來像這仍然發生在Xcode 7與swift 2.不是甚至可以確定這些信息是什麼,除了也許答案很簡單,就是swift的增量編譯仍然需要很多工作... –

+0

你能否在bug報告中使你的示例項目可用於蘋果?一位蘋果開發人員正在討論這個討論這個問題的線索,請求一個示例項目:https://forums.developer.apple.com/thread/62737 – rob

+0

我需要這樣做,也許我明天要花點時間在一起。我不確定我是否理解依賴圖應該如何工作。我讀了它上面的寫法https://github.com/apple/swift/blob/master/docs/DependencyAnalysis.rst(現在已經搬家了?),我覺得它比這篇文章中描述的更具侵略性,但它也解釋瞭如果它不完全確定,它會如何傾向於增加依賴關係。 TL; DR我擔心的是,事情現在正在按預期工作,我們將不得不等待未來版本的改進。 –

8

取消勾選「查找隱含相關性」編輯計劃>「計劃」> Build標籤固定爲我的項目文件。 「複製快捷標準庫」仍需要永遠..

+0

嗨庫爾特,這個解決方案已經被多次提及,它可以爲一些人工作(過去似乎爲我工作),但有一些缺點,一個是需要來回切換這個標誌,每當你做一個完整的因爲乾淨的重建將需要這從伊馮看到的。 – Vlad

+0

嗨弗拉德,如果你只使用一個計劃是的,你必須改變它。但是,如果您在多個環境中使用多種方案,這是非常好的答案。例如,我有本地開發,開發,測試,RC,生產計劃。我只在開發計劃中使用它。 – kekkeme

10

蘋果發佈新的測試版本的Xcode昨日(11月14日)

Xcode 8.2 beta 2

而且隨着發行說明解決這個問題已經被標記。

構建系統

•Xcode中不會重建整個目標時,只有很小的變化 發生。 (28892475)

它正在爲我工​​作。構建速度照常恢復。每個遇到這個問題的人都應該試一試!

https://developer.apple.com/download/