web-dev-qa-db-ja.com

Swift Xcodeインデックスがフリーズまたは遅い

たぶん、これは私がそのような厄介な「機能」を経験しているだけです:

Xcode 6.0.1からXcode 6.1にアップグレードした後、状況は変わりました。 Xcode 6.1は、プロジェクトのインデックス作成やソースファイルのコンパイルを永久に行っています。このプロジェクトは巨大なものではありません。ワークスペースにSwiftファイルとAWS SDK 2.0 Cocoapodの束が含まれているだけです。全体のインデックス作成とコンパイルがスムーズに行われるとは思わない。私はいくつかのaws-sdk-ios-samplesを試してみましたが、Xcode 6.1がそれらでどのように機能するかを確認するだけで、同じように永遠に待機していました。

これまでに試したソリューション:

  1. オーガナイザーで「派生データ」を削除し、ワークスペースを再度開きます。 (修正に失敗)
  2. Xcode 4-パフォーマンスの低下 )のように、.xcodeprojファイルで「パッケージの内容を表示」し、.xcworkspaceを削除します

残念ながら、どれも機能しませんでした。

追伸多分私はプロジェクトを再作成してみるべきですか?コンピューターの設定:MacBook Pro(Retina、13インチ、2014年中頃)、メモリー8 GB 1600 MHz DDR3、Yosemite付き。 (この小さなプロジェクトを実行するにはこれで十分だと思います。)

99
leonard

ファイルの分割、Xcode 6.2ベータ版のインストール、文字列連結ステートメントの破壊など、上記の提案の多くを試しました。最終的には、テストデータに使用していた辞書リテラル宣言の配列を複数の.appendステートメントに分割しました。

// This causes indexing/building to hang...
var test = [ [ "a": false, "b": "c" ],
             [ "a": false, "b": "c" ],
             [ "a": false, "b": "c" ],
             [ "a": false, "b": "c" ],
             [ "a": false, "b": "c" ],
             [ "a": false, "b": "c" ] ]

// This works fine.
var test = [ [ "a": false, "b": "c" ] ]
test.append([ "a": false, "b": "c" ])
test.append([ "a": false, "b": "c" ])
test.append([ "a": false, "b": "c" ])
test.append([ "a": false, "b": "c" ])
test.append([ "a": false, "b": "c" ])

また、価値のあることですが、この配列の6番目のエントリが問題の原因です。 5つの作品で十分です。

72
Zen

私にとって唯一の有効な解決策は、(現在のプロジェクトだけでなく、フォルダ全体をクリーンアップするだけで)すべての派生データを削除してから、Xcodeを再起動することです。

  1. Xcodeでファイル/設定を開く

  2. ポップアップウィンドウの右端にある[場所]をクリックします

  3. 「/ Users/Mac/Library/Developer/Xcode/DerivedData」の横にある小さな矢印アイコンをクリックします。これにより、DerivedDataフォルダー(以前のプロジェクトから派生したすべてのデータを含むXcodeフォルダーが表示されます。 )

  4. DerivedDataフォルダーを削除する

34
Remy Cilia

CocoaPodsを使用していますか?今日、同じ問題に出くわしました。 (xCode 6.1.1を使用)

この問題を解決するために、~/Library/Developer/Xcode/DerivedData、プロジェクトディレクトリのPodsフォルダー、および<project>.xcworkspaceのすべてを削除しました。

次に、ターミナルを開いてプロジェクトディレクトリに移動し、pod installを再度実行しました。

11
Michael Schinis

今日も同じ問題がありました。 Xcode 6.3.2、中規模のSwiftプロジェクト。ある時点で、インデックス作成が開始され、インデックス作成が終了しませんでした。これを引き起こしたコードは、タイプ[String:[String]]の辞書であったため、値として文字列配列を持つ文字列キー辞書です。 AからZのキーを持つこれらの2つがあり、これらの26の各エントリには5〜10個の文字列の文字列配列が含まれています。

派生データをクリアしても解決しませんでした。それらの辞書をコメントアウトするだけで、再び成功しました。

正直なところ、これはばかげています! AppleはXcodeを修正する必要があります! Swiftプロジェクトをコンパイルするとき、すでに恐ろしく遅くなりますが、このようなバグは目を見張るものです。これで自分の仕事をきちんとできない!

8
BadmintonCat

まだこの問題を抱えている人のために、これは私が楽しんでいる回避策であり、オブジェクトを1つずつ入力する必要がなくなります:

// instead of this, which freezes indexing
let keys = [keyQ, keyW, keyE, keyR, keyT, keyY, ... keyM]    

// and instead of this, which is ugly & lengthy
var keys = [KeyboardKey]()
keys.append(keyQ)
keys.append(keyW)
...
keys.append(keyM)

// use this:
var keys = [KeyboardKey]()
keys.appendContentsOf([keyQ, keyW, keyE, keyR, keyT, keyY, ... keyM])
6
Andrew Robinson

私にとっては、上記のすべてを試してみましたが成功しませんでした。しかし、私がしなければならなかったのは、派生データフォルダを削除してから、別のランダムなプロジェクトを開いて、インデックスが作成されるのを待って、元の(機能不全の)プロジェクトが動作することだけです!

開発の世界にAppleを支持し、Swiftコンパイラをオープンソースにします。そのため、私たちはみなさんの無能さに邪魔されません。

4
Gmeister4

Xcodeバージョン7.3(7D175)を使用しています

根本的な問題を見つけたのではないかと思います。インデックス作成フェーズで立ち往生した2つのインスタンス:

  • 変数に割り当てたクロージャーを作成し、タイプシグネチャを省略しました。 Xcodeにはその型推論ステップに問題があると思います。記憶が正しければ、引数の1つはCGPointであり、コンストラクターがオーバーロードされています。私の仮説は、閉包が引数として受け入れる可能性が多すぎる可能性があるということです。

  • 1つの型のインスタンスを返す代わりに、共通の基本クラスを持つ多くの型のインスタンスを返すことができるように、ファクトリメソッドをリファクタリングしました。ファクトリメソッドを使用したところはどこでも、結果のオブジェクトを特定の型にキャストしなければならなかったようです(as?を使用するか、特定の型を受け入れる変数にオブジェクトを割り当てることによって)。

以前の個人が言及した辞書宣言でも同じことが起こっているようです。 Appleにバグレポートを提出しました。

3
DudeOnRock

私は同じ問題に苦しんでいます。上記の2つのソリューション(派生データの削除と.xcworkspaceの削除)を試しましたが、成功しませんでした。また、ほとんどのコードを少しずつコメントアウトし、ほとんど何も残っていない状態でインデックスを作成するまでファイルを削除してみました。

私のために働いた解決策を見つけました、インデックス作成に問題がなかった古いXcodeバージョン6.1(6A1030)でプロジェクトを開いた後、以前使用していた最新のXcodeバージョン6.1(6A1052d)に戻りました修正し、引き続き機能しました。

私の結論は、これはXcodeバージョン6.1(6A1052d)のバグであり、将来のリリースで改善されることを望んでいるということです。

問題は時々戻ってきますが、毎回同じ修正が機能します。別の解決策は、古いXcodeバージョン6.1(6A1030)をそのまま使用することですが、iOS 8.1を実行しているデバイスでは機能せず、最新のバグ修正もありません。

2
Jorge Costa

6.1にアップグレードした後、この同じ問題が発生しました。 Xcodeは、特定のエラーメッセージを生成せずに、コンパイルまたはインデックス作成でスタックします。

この問題は、Swiftファイル内の長い式の一部を複数の短い式に分割することで最終的に解決されました。私のプログラムの一部は、多くの異なる文字列変数を組み合わせて長い文字列を形成します。単一の式でそれらを結合する試みと、加算代入演算子の使用は両方とも失敗しました。次のような(簡略化された)ようなことをすることで、機能させることができました。

var a = "Hello"
var b = " "
var c = "World"
var d = "!"
var partA = a + b
var partB = c + d
var result = partA + partB

Xcodeの以前のバージョンで次のエラーを何度も受け取ったことから、この考えを得ました。

お役に立てれば

2
Adam137

私のXcodeでの解決策は、すべての冗長ウィンドウを閉じることでした。何らかの理由で、開いているウィンドウの多くがXCodeを非常に遅くします。

1
Arik Halperin

通常、コードボードのXcodeインデックス作成は、ストーリーボードでの支援やその逆など、提案やオートコンプリートのために行われます。ただし、Xcodeプロジェクトを高速化するには、ターミナルを使用してオン/オフを切り替えることができます

インデックス作成をオフにする
defaults write com.Apple.dt.XCode IDEIndexDisable 1インデックス作成のデフォルトを有効にするwrite com.Apple.dt.XCode IDEIndexDisable 0

しかし、優れたRAMを備えたスピーディなMacを使用するためのより良いアプローチ。

1
Ballu

Xcode 8.3.3でこれを試しました。私の結果は次のとおりです。

インデックス作成がハングする原因となる完全に細かいSwiftコードを書くことができます。

インデックス作成がハングすると、ハングします。 Swiftコードを、インデックス作成がハングしない原因に戻さないと、ハングします。

そのような状況では、プロジェクトを閉じて再度開くことは役に立ちません。

Xcodeを終了して再起動すると役立ちます。インデックス作成がハングすることはもうありません(つまり、コードがハングしないように変更した場合)。

Macを再起動することも同様に役立ちますが、必ずしも必要ではありません。

ハングは、完全に細かいSwiftコードによって引き起こされます。私が見た例

if let date = function1()
?? function2()
?? function3()
?? function4()
?? function5()
?? function6()
?? function7()
?? function8()
?? function9()
?? function10() {
    return date
}

インデックス作成がハングします。 「??」のほとんどをコメントアウトしました行し、それは大丈夫だった(Xcodeを終了して再起動した後)。 1行ずつコメント解除します。いくつかの行では問題ありませんでしたが、次の行のコメントを外すとハングします。

明らかに役立つ唯一のことは、コードを変更することです。

1
gnasher729

最後に、この問題を「解決」しましたが、これは単なる回避策です。

別のプロジェクトを作成し、ファイルを1つずつ追加しました。次に、「非常に長い」viewcontroller.Swiftファイルを見つけました。次に、コードをモジュールに分割し、繰り返し使用されるコードを別のSwiftファイル内の関数にしました。また、長い表現は短い表現に分解するべきだという提案をオンラインで受けました。次に、インデックス作成が機能し、コンパイルが機能します。

だから、今のところ、私はそれを「解決」しています。

しかし、私はこれが正しいとは思わない。 Xcode IDEは、「非常に長い」Swiftファイルを処理できるだけでなく、1500行のみである必要があります。 Xcode 6.1はすでにXcode 6.0.1からのアップグレードですが、これは間違いなくバグ(長い間存在します)であると思います。

1
leonard

私にとっては、Xcodeアプリを削除し、再度ダウンロードしてインストールしました。これで、少なくとも今は問題が解決しました。

1
Tzegenos

Xcode 6.1.1に更新することをお勧めします

公式にリリースされ、インデックス作成の問題が解決されました。アップデートの説明では、安定性の修正が適用されているため、より安定した方法で動作する可能性が非常に高いと記載されています。

このサガで幸運を祈ります!

0
Angel Naydenov

これはXcode 6.3.2で見ています。リリース後1年で、コンパイラが動作することを望んでいましたが、残念ながら。

上記の解決策のいずれも機能しない場合は、構文エラーがないかコードを確認してください。リファクタリングの過程で、クロージャーを抽出しましたが、パラメーターを修飾するのを忘れていました。

    let hangsInsteadOfError = { l, r in
        return l.nameFirst < r.nameFirst
        || l.nameFirst == r.nameFirst && l.nameLast < r.nameLast }

    let fixingErrorAvoidsHang = { (l:User, r:User) -> Bool in
        return l.nameFirst < r.nameFirst
            || l.nameFirst == r.nameFirst && l.nameLast < r.nameLast }

Swiftでの作業から何かを学んだ場合、問題のあるコードを見つけるために過度に後戻りする必要がないように、段階的に作業することです。

0
Chris Conover

同じ正確なMacBook ProのSwiftファイルでXcode 6.1.1を使用しています。

行を3D文字列配列に追加し続けると、Xcodeが突然使用できなくなり、何もできなくなりました。

6.1に戻ろうとしますが、うまくいけば問題は解決します。

0
gardner888

私もこの問題を抱えており、「+」演算子を使用して式を削除/変更することで解決しました。

私はこれを変えると誓います:

var mainArray = arrayOne + arrayTwo + arrayThree + arrayFour + arrayFive

これに:

var mainArray = arrayOne
mainArray += arrayTwo
mainArray += arrayThree
mainArray += arrayFour
mainArray += arrayFive

問題を解決しました。それはクレイジーに聞こえますが、それは私にとって真実でした。

私のマシンは2013年後半にMBPが上限に達しました

0
Casey Laris

彼らがそれを理解するまで6.0.1に戻すことを気にしないなら、それは私のために働いたものです。 6.1と6.1.1の両方で同じ問題が発生していました。今は元気です。 6.2が出たら試してみます。

公式の開発サイトで以前のバージョンのAppleソフトウェアを見つけることができます: https://developer.Apple.com/downloads/index.action

これを行う場合は、まずXcodeの現在のコピーを削除してください。

0
JeremyGranger

Xcode 6.2ベータ版で問題は解決しました。高速ではありませんが、少なくとも永久にインデックス付けされているわけではありません。ベータ版は通常のXcodeインストールの上にnotインストールを行うため、ベータ版が気に入らない場合は削除するだけです。

ベータ版を含むさまざまなXcodeダウンロード>

0
Warren Whipple

私は同じ問題を抱えていました。私のxCodeは8.2.1です。しかし、私の場合、33のキーと値のペアを持つ辞書の配列を作成したかったのです。私は次の方法で行っていましたが、インデックス付けに固執していました:

  var parameter = [String : AnyObject]()
  var finalArray = [parameter]

  for item in listArray
  {
       parameter = ["A": item.a as AnyObject, "B": item.b as AnyObject, "C": item.c as AnyObject, ... , "Z": item.z as AnyObject]

       finalArray.append(parameter)

  }

以下は私のために働いた:

var parameter = [String : AnyObject]()
var finalArray = [parameter]

for item in listArray

{
        parameter["A"] = listArray.a as AnyObject
        parameter["B"] = listArray.b as AnyObject
        parameter["C"] = listArray.c as AnyObject
        parameter["D"] = listArray.d as AnyObject 
        .
        .
        .
        parameter["Z"] = listArray.z as AnyObject 

        finalArray.append(parameter)

}
0
Trup

私はXcode 8.2を使用し、この問題で終了しました。複雑なTuple変数-Tupleのサブ配列を持つTupleの配列を定義した後に開始しました。 Tupleのサブ配列にプログラムで計算されるプロパティがある場合、事態は本当に遅くなります。

他のいくつかの回答が指摘したように、インデックス作成には永遠に時間がかかり、変数の型を推測しようとしていると思います。

型を含む変数を明確に定義することで、最初に問題を解決しました。プロパティを更新するとき、変数を定義する際に計算する代わりに、最初に計算してからタプルに割り当てます。

コードの例を次に示します。

var sectionTuples: [(section: String, rows: [(name: String, subtitle: String)])] = []
let subtitle1: String = "" // something calculated dynamically
let subtitle2: String = "" // something calculated dynamically
sectionTuples = [(
section: "Section 1", rows: [
(name: "name1", subtitle: subtitle1),
(name: "name2", subtitle: subtitle2)
])]

結論は、Xcodeが複雑な構造を推測させないことです。

0
Q Liu
  1. インデックスのステータスは「インジケータサークル」または「プログレスバー」ですか?
  2. 「インジケータサークル」である場合、それはすでに開始時にスタックしていることを意味します。
  3. 他のプロジェクトを開いて確認します。それらがすべて同じ場合は、システムの問題です。
  4. コンピューターを再起動するだけで、すべてが正常になります。
0
Weidian Huang