115

これはベータ版の問題ではありません。私は Xcode 6.0.1 のプロダクション リリースを使用しています。私が抱えている問題は、作業中のコードをビルドまたは実行しようとすると、Xcode が長時間応答しなくなり、SourceKitService が CPU の 400% 以上を消費することです (アクティビティ モニターによると)。この問題はここ数日で新たに発生したものですが、奇妙なことに、9 月 17 日に正式にリリースされて以来、私は Xcode 6.0 を使用していました。この問題の修正が含まれていることを期待して、6.0.1 にアップグレードしました。

問題が何であるかについて何か考えはありますか?

4

26 に答える 26

160

今日の午後、Xcode 6.1.1 でこの問題が発生しました (ベータ版ではなく、公式にリリースされたバージョン)。Playground でいくつかのコードを実行していて、それが原因ではないかと疑っていました。CPU はほぼ 100% に固定され、Xcode はビルドを完了できませんでした。

だからここに私がしたことがあります:

1.「Activity Monitor」を開くと、SourceKitService がメインの CPU ホグとして表示されました。

2.「Activity Monitor」内で、SourceKitService をダブルクリックし、「Open Files and Ports」セクションをクリックすると、/Users/myname/Library/Developer/Xcode/DerivedData/ModuleCache/ ディレクトリの下のファイルを操作していることがわかります。特定のフォルダ用。

3. 指定したフォルダーを削除しました (コマンドラインから rm -rf を使用)。Can I safe delete contents of Xcode Derived data folder? に基づいてキャッシュが再生成されます。.

4. Activity Monitor を再度使用して、SourceKitServer を強制終了します。Xcode 内で、SourceKitService がクラッシュしたことを示すおなじみのサインが見られました (そのため、SourceKitService はおなじみのように聞こえました!)。

5. 手順 3 を繰り返します。

Mac は再び平和です。データが失われることはなく、Xcode を再起動する必要さえありませんでした (これは失敗しました)。要点は、ModuleCache がループ内で SourceKitService を取得しているように見え、フォルダーを削除すると修正されるように見えるということです。これがあなたにとってもうまくいくことを願っています。

ブートノート:

ちなみに、SourceKitService の問題の原因は、私の Swift クラスの配列宣言が長すぎたことです。配列には 200 を超えるエントリがありました。それを 30 に減らすと、エラーはなくなりました。そのため、Apple コードでの何らかのスタック オーバーフローが原因で問題が発生した可能性があります (しゃれが意図されています)。

于 2015-01-28T02:27:40.077 に答える
3

SourceKitService でも同じ問題がありました。

解決しました。FOR ループでサブビューを追加しないでください。

私が使用する問題を検出するには: https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode

于 2017-04-12T04:42:43.007 に答える
2
  1. Xcodeを終了
  2. ターミナルで実行:

rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache/*


LNIの受け入れられた回答とこれの違いに注意してください:

  1. クラッシュするよりもクラッシュしない方が常に良いです。特に、Xcode プロセス/コンポーネントに関しては。
  2. 私は Apple の開発者ではありませんが、キャッシュを部分的に削除すると、キャッシュの整合性が損なわれる可能性があります。すべてのキャッシュを消去した後、大幅な遅延に気付きませんでした。
于 2016-10-12T09:07:56.880 に答える
2

私にとっては、派生データを削除することができました。メニューから「Product」を選択し、Alt キーを押しながら「Clean Build Folder」を選択します。ショートカットキー: Alt + Shift + Command + K

于 2015-05-19T13:39:10.767 に答える
1

同じ問題に直面しましたXcode 7.2 (7C68)

解決策は、私のクラスが定義に持っていたプロトコルのメソッドを実装することでした。

于 2015-12-26T21:32:58.537 に答える
1

これはまだ xcode バージョン 7.3.1 (7D1014) の問題です。LNI が指摘したように、配列が長すぎて、実際にはそれほど長くはありませんでした。次のように、配列をさまざまな配列に分割することで問題を解決しました。

let firstLevel = [
            [1, 0, 1, 0, 1],
            [0, 0, 0, 0, 0],
            [1, 0, 1, 0, 1],
            [0, 0, 0, 0, 0],
            [1, 0, 1, 0, 1],
            [0, 0, 0, 0, 0]
        ]
        let secondLevel = [
            [0, 0, 0, 0, 0],
            [0, 1, 0, 1, 0],
            [0, 0, 0, 0, 0],
            [0, 1, 0, 1, 0],
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0]
        ]
        let thirdLevel =     [
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0],
            [0, 0, 1, 0, 0],
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0]
        ]
        let map = [firstLevel, secondLevel, thirdLevel]
于 2016-08-23T20:10:45.483 に答える
1

XCode 8.2.1 (8C1002) と次のコードで同じ問題が発生しました。

import UIKit
import AVFoundation
import Photos
import CoreMotion
import Foundation


class TestViewController: UIViewController
{
    let movieFileOutput = AVCaptureMovieFileOutput()


var anz_total_frames = 0, anz_total_miss = 0

@IBOutlet weak var tfStatistics: UITextView!


func showVideoStatistics()
{
    let statisticText:String =             "frames: \(self.anz_total_frames)" + String.newLine +

        "frames/s: \(self.anz_total_frames / self.movieFileOutput.recordedDuration.seconds)" + String.newLine +

        "miss: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
    "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine


    self.tfStatistics.text = statisticText
}

func formatText4FramesPercent(_ anz:Int) -> String
    {
        let perc = Double(anz)*100.0/Double(anz_total_frames)
        return String(perc.format(".1") + "%")
    }
}

およびこれらの拡張子:

extension String {
    var localized: String {
        return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
    }

    static var newLine: String {
        return "\r\n"
    }
}

extension Int {
    func format(_ f: String) -> String {
        return String(format: "%\(f)d", self)
    }
}

extension Double {
    func format(_ f: String) -> String {
        return String(format: "%\(f)f", self)
    }
}

TestViewController で次の行にコメントすることで解決しました。

        "frames/s: \(self.anz_total_frames / self.movieFileOutput.recordedDuration.seconds)" + String.newLine +

それを見つけるのに 1 時間以上かかりました。誰かの時間を節約できることを願っています。番号 30103533 で Apple にバグレポートを提出しました

于 2017-01-19T21:44:02.180 に答える
1

SwiftUI @ViewBuilder ブロック内で @dynamicMemberLookup 添え字を呼び出すときに、XCode 11.4.1 で発生しました。

于 2020-04-21T20:30:10.900 に答える