Xcode 7.3.1を実行しています。私のSwiftベースのプロジェクトをビルドすると、「Swiftソースファイルのコンパイル」でハングアップします。DerivedData
を削除するさまざまな組み合わせを試しましたクリーン、実行、Xcodeの再起動、OS Xの再起動、どれも動作しないようです。
すべてのコメント投稿者の提案に感謝します。削除したプロパティを参照するmap
のクロージャに絞り込みました。例:
var people: [Person] = ...
let foo = people.map { "\($0.name), \($0.age)" }
ここで、Person
は次のようになります。
protocol Person {
var name: String { get }
var age: Int { get }
}
これはすべて正常に動作します。次に、クロージャーを変更せずにage
を削除しました。これにより、Xcodeは絶望的に混乱しました。おそらくSwiftの型推論に関連しています。
クラスを拡張しました。また、Swiftコンパイラーがエラーなしでループでスタックするようになります。
class X: X
ビルド設定の「Swiftコンパイラ最適化レベル」を「モジュール全体の最適化」から「単一ファイルの最適化」に変更します。それはあなたの問題ではないかもしれませんが、それは私が半日立ち往生していた私のものを解決しました。最近のXcodeバージョンの一時的なバグである可能性があります(8.2.1は、これを書いたときに使用していたものです)。
プロジェクトビルドフォルダーをクリーンアップしてみてください
Pod Install
またはPod Update
を実行しますおそらく2が原因だと思います。
コンパイル時間が非常に長くなるには、さまざまな原因が考えられます。コーナーまたはエッジのケースは至る所にあります。したがって、最善の方法は、自分のケースを観察して調査することです。
コメントで他の人から言及されていますが、以下の手順はまだもっと注目に値します:
Build
タスクを選択します。コンパイルに時間がかかっているソースファイルを確認します。私も同じ問題を抱えていました。私の場合、それはあまりにも多くのnil合体アクションを適用した結果のようです。私はjsonアイテムを作成していました:
json = [ "item1": value1 ?? "",
"item2": value2 ?? "",
"item3": value3 ?? "",
...
"item14": value14 ?? "" ]
これはコンパイルされません。すべてのnil合体を削除して次のようにしたところ、問題なくコンパイルされました。
json = [ "item1": value 1,
"item2": value 2,
"item3": value 3,
...
"item14": value 14 ]
スタックする前のアイテム数のカットオフポイントを把握しようとはしませんでした。
私の場合、問題はJSONの解析中に発生しました。 JSON解析中に、オプションの値を辞書パラメーターで送信していました。
レポートナビゲーターを見ると、問題を見つけるのに役立ちました。私の場合、問題は、UITableView
のUITableViewController
のプログラムによって追加されたサブビューに自動レイアウト制約を追加しようとしたことでした。
私の場合、XCodeは大きな辞書リテラルのままです。
requestParameters = [
"asset" : "...",
"user" : "...",
// about 15 additional keys
]
この部分を次のように置き換えた後、問題は修正されました。
var requestParameters = [String : Any]()
requestParameters["asset"] = "..."
requestParameters["user"] = "..."
// about 15 additional keys
だから私はほとんどの場合それはよく知られている辞書リテラル型干渉問題だと思います。
このようなコード:
let params = [
"title": title, "desc": desc, "velikost": velikost,
"cena": cena, "vykon": vykon, "telefon": telefon,
"rokVyroby": rokVyroby, "stkDo": stkDo,
"zemePuvodu": zemePuvodu, "najetoKilometru": najetoKilometru,
"stav": stav, "ZnackaId": znackaId,
"VyrobceId": vyrobceId,
"category": categoryId, "subCategory": subCategoryId,
"modely[]": modelId, "prodejNakup": prodejNakup,
"mena": mena, "isNovy": isNovy, "serviska": serviska,
"abs": abs, "technicak": technicak,
]
常に次のように書いてください:
let params: [String: String] = [
"title": title, "desc": desc, "velikost": velikost,
"cena": cena, "vykon": vykon, "telefon": telefon,
"rokVyroby": rokVyroby, "stkDo": stkDo,
"zemePuvodu": zemePuvodu, "najetoKilometru": najetoKilometru,
"stav": stav, "ZnackaId": znackaId,
"VyrobceId": vyrobceId,
"category": categoryId, "subCategory": subCategoryId,
"modely[]": modelId, "prodejNakup": prodejNakup,
"mena": mena, "isNovy": isNovy, "serviska": serviska,
"abs": abs, "technicak": technicak,
]
しかし、リテラルがもっと短いことも問題であり、ビルドを待つことで時間を節約するには、辞書リテラルの型を常に定義して、コンパイラが自分で見つける必要がないようにすることをお勧めします。 PS:Appleエンジニアは深刻な個人的な問題を抱えています。Jatbrainsから、あるいは多分私でさえ、何人かの人々を雇わなければなりません;)重要なことに集中し、方法についての議論に時間を無駄にしないように= Swift他のものとは異なる必要があります...
私が便利だと思ったのは、RoystonPの https://forums.developer.Apple.com/thread/1153 の投稿でした。
1. Open Activity Monitor.
2. Start your project building.
3. Wait for the the build’s progress to completely stop for several minutes.
4. Locate the Swift processes in Activity Monitor (they should be using nearly 100% CPU) and select one of them.
5. In the menu bar, select “View”, then “Send Signal To Process…”
6. Select “Abort (SIGABRT)” from the drop-down list.
7. Click the “Send” button. This will simulate an assertion failing, so the compiler will print information about what it’s doing and then exit.
8. In Xcode, switch to the Report Navigator (the “speech bubble” button over the left-side pane) and select the build.
9. Scroll down to the now-failed compilation step and click the transcript button (button with five lines, to the right of the “Compile [Filename]” line).
10. Scroll down to see the diagnostic information. It will probably include a list of command-line flags, a few lines saying things like “In pass SimplifyCFG”, and a stack trace.
機能させるには、手順6と7を繰り返す必要がある場合があります。
xcodeには、5つを超える文字列を連結する際に問題があるようです。これを参照してください: これをSwift playground? で実行しようとすると、Xcodeがフリーズします