ios - Xcode 8.0 Swift 3.0慢速索引和構建




indexing swift3 (11)

我已經安裝了Xcode 8.0,並將Swift 2.2轉換為3.0(該過程也花費了很多時間,我只是讓Mac整夜運行)。 我沒有什麼大項目(大約20個文件)。 我也在使用 Pods 。 以前的Xcode版本(<8.0)的索引編制工作很快,但是現在,升級後,進度條卡在一個位置上(我已經等了一個小時)。

我嘗試過的事情沒有幫助我:

  • 清理 DerivedData 文件夾並重新啟動Xcode
  • 清理項目並重新啟動Xcode
  • 使用 <project>.xcworkspace 刪除 Pods 目錄,然後再次安裝
  • 重新啟動Mac
  • 嘗試了沒有Pod的構建項目
  • 重新安裝了Xcode
  • 在另一台具有克隆項目的Mac上試用

當開發人員不得不花數小時來解決這些荒謬的問題時,發布這樣的軟件確實不是很酷。 這是非常令人失望的。 任何想法如何解決這一問題?


並不是說我認為這與OP的問題有關,但是對我而言,XCode 8最近變得停滯了。 最終,我發現這是我的錯誤(並且我記得不經意間做了)-我添加了XCode.app作為Framework引用。 這實際上使XCode可以搜索並索引整個XCode.app文件夾。 一旦我看到錯誤並刪除了Framework,它就會再次變得不錯:)


備份您的項目後,請刪除備份後的最後一個更新項目,然後重新啟動Xcode simple :-)


我嘗試了上述解決方案,但問題仍然存在。 調試也很奇怪。 經過幾天的研究,我找到了以下解決方案。

選擇主要目標>構建設置。 配置如下圖所示。


我有一個需要花一分鐘時間才能編譯的函數,經過一番調查,我發現罪魁禍首正在檢查從存儲的日期起是否經過了足夠的時間:

let myStoredDate: Double = // Double representing a time in the past

// if at least one week (60 * 60 * 24 * 7 seconds) has passed since myStoredDate
if Date().timeIntervalSince1970 - myStoredDate > (60 * 60 * 24 * 7){
    // do stuff
}

編譯該代碼將花費10秒以上的時間-再加上此代碼以不同的編號重複多次,這導致編譯花費的時間太長。 我能夠通過預先計算間隔來解決此問題

let myStoredDate = // Double representing a time in the past

//it is important to explicitly specify that the variable is a Double
let interval: Double = 60 * 60 * 24 * 7

if Date().timeIntervalSince1970 - myStoredDate > interval{
    // do stuff
}

經過大約10次的檢查,編譯時間從一分鐘以上縮短到了幾毫秒。

在其他地方,類型推斷和數學的結合也極有可能出現此問題,因此請確保在代碼的其他任何地方都不會發生這種情況。


我通過註釋所有文件然後逐個刪除註釋來解決了該問題。 我發現問題仍然存在於 here 描述的數組聲明中。

我有這樣的代碼,項目沒有索引:

class {
    var first: String!
    var second: String!
    var third: String!
    var fourth: String!
    var fifth: String!

    func abc() -> [String] {
        var array = [first, second, third, fourth, fifth]
    }
}

我將其更改為此,索引開始工作:

class {
    var first: String!
    var second: String!
    var third: String!
    var fourth: String!
    var fifth: String!

    func abc() -> [String] {
        var array = [first]

        array.append(second)
        array.append(third)
        array.append(fourth)
        array.append(fifth)
    }
}

我遇到了同樣的問題,並通過逐行仔細地檢查代碼來解決了這個問題,事實證明,Swift 3更喜歡字符串插值而不是使用+符號,即

let url = "http://yahoo.com" + "someWebPage" + "whereItsInteresting" 

如果您一直在使用上述樣式的代碼,請替換為;

let url = "http://yahoo.com\(someWebPage)\(whereItsInteresting)"

您的構建時間將立即恢復正常。



添加設置後,

SWIFT_WHOLE_MODULE_OPTIMIZATION = YES

我們的項目對650個swift文件的編譯生成時間從1200s到180s。 但這會導致增加編譯失敗。 每次更改只需要60秒就可以編譯180秒


當“索引”卡住時,這在Xcode 8.2.1和Swift 3中對我有用:

我總是打開兩個項目,一個虛擬項目和我正在處理的項目。 我還連接了運行我的項目的iPad Air設備。 當我的項目卡在“索引”上時,我切換到虛擬項目並在連接的iPad Air設備上運行我的項目。 然後,我停止該項目,然後切換回我正在處理的項目,並且“索引”神奇地完成了。 如果您沒有連接物理設備,這也應該僅適用於模擬器。


自升級到Swift 3 / XCode 8以來,我一直遇到相同的問題,這似乎是由大型數組文字引起的。

我可以通過將類型註釋添加到分配給數組文字的變量來解決此問題,例如

let array: Array<String> = ["1", "2", "3", "4", "5", "6", "7", "8"]

代替

let array = ["1", "2", "3", "4", "5", "6", "7", "8"]

這是一個Xcode錯誤(Xcode 8.2.1),當您擁有較大的字典文字或嵌套的字典文字時,就會發生此錯誤。 您必須將字典分解成較小的部分,並使用append方法添加它們,直到Apple修復該錯誤為止。





xcode8