Xcode Beta2でコンパイルして正常に動作するiOS Swiftプログラムがあります。beta4をダウンロードすると、新しいSwift言語の構文エラーが発生しました修正しましたが、今このエラーが出ます:
<unknown>:0: error: unable to execute command: Segmentation fault: 11
<unknown>:0: error: Swift frontend command failed due to signal (use -v to see invocation)
問題は、このエラーの場所がわからないため、さらにトラブルシューティングできることです。 「呼び出しを確認」してさらにトラブルシューティングするために、-vと入力できますか?これがなければ、問題を解決する方法は絶対にありません。前もって感謝します。
問題が何であるかを知ることができた方法は次のとおりです。
1. While emitting IR SIL function @_TToZFC4Down8Resource12getInstancesfMS0_U__FTSS6paramsGVSs10DictionarySSPSs9AnyObject__9onSuccessGSqFGSaQ__T__7onErrorGSqFT5errorCSo7NSError8responseGSqCSo17NSHTTPURLResponse__T___T_ for 'getInstances' at /path/to/file.Swift:112:5
getInstances
のfile.Swiftの112行目)。これについて実際に直接的な解決策を提供することはできません(Appleバグ)と確信していますが、ちょうど同じエラーメッセージに遭遇し、たまたま解決しました。した:
一般的に
私の例
私の場合(Objective-Cで記述された XMPPFramework を使用していました)、失敗したコードは次のようになりました。
_for roomMessage: XMPPRoomMessage in self.messages {
let slices = split(roomMessage.nickname(), { $0 == "_" }, allowEmptySlices: false)
}
_
roomMessage.nickname()
を_"0_test"
_に置き換えたら、コードはもう失敗しませんでした。そこで、コマンドnickname()
(2回)をクリックしましたが、次のようになりました。
私の推測では、Swift 1.1コンパイラーは、オブジェクトの正確なタイプが明確でない場合にどのメソッドを呼び出すかを判断するのに問題があるため、roomMessage
明示的なタイプで、nickname()
メソッド呼び出しの後ろにある中括弧を削除することで修正した別のエラーが発生しましたこれにより、アプリが再びビルドされました。動作するコードは次のとおりです。
_for roomMessage: XMPPRoomMessageCoreDataStorageObject in self.messages {
let slices = split(roomMessage.nickname, { $0 == "_" }, allowEmptySlices: false)
}
_
これにより、私よりも迅速に問題を調査できるようになることを願っています。
私も同じ問題を抱えていました
Xcode
を停止し、再起動してビルドをクリーンにします今すぐ修正する必要があります。
私の場合、変数にクラス名を使用しているため、このエラー
var MYClass : MYClass {
get {
return.....
}
}
そして、これは私の問題を修正します
var myClass : MYClass {
get {
return.....
}
}
私の問題は、いわゆるモジュールアプローチ(モジュールデザインパターン)で静的変数を模倣しようとしたことです。だから、私はそのようなものを持っていました(Swiftファイル)のレベルで宣言された操作キューへの単純な静的参照のみ:
let globalQueue: NSOperationQueue = {
let queue = NSOperationQueue()
queue.suspended = false
queue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount
return queue
}()
そのため、Xcode 6.x.xでは正常に機能しましたが、Xcode 7betaでのコンパイルは終了しました。皆さんに知ってもらいたいだけです。追伸一般に、logsから何が間違っていたかを見つけることができました(添付のスクリーンショットを参照)。 これで時間を節約できることを願っています。
プロトコル機能を同じプロトコル拡張と呼んだときにセグメンテーション違反が発生しました。
私はこれと一緒に何かのコードを持っていました:
protocol Rotatable {
func rotate() -> Self
}
extension Rotatable {
func rotate(steps: Int) {
for _ 0..<steps { self.rotate() }
}
}
後でオブジェクトを作成し、それが回転可能なプロトコルに従うと宣言したとき、セグメンテーションフォールト11が発生し、プログラムがクラッシュしました。
例:これにより、セグメンテーションエラーが発生し、Xcodeがクラッシュします
struct SomeStruct : Rotatable {
}
ただし、SomeStructで関数rotate()を最初に実装し、その後、問題のない場所でRotatableに準拠していると宣言した場合。
愚かな間違いのため、このエラーが発生します!!
私が定義したクラスで
var url: String!?
:)
だから、この説明は多くの理由で複数の一般的なエラーだと思われます!!
今日も同様のことがあり、最近変更したファイルの削除など、ここで説明する手順を試しました。何も機能していないようです。 SourcecodeがXcodeでクラッシュするときに提案されたものを試しました。
派生データディレクトリに移動し、すべてを削除したとき。場所は「設定->場所->派生データ」の下にリストされています。パスのすぐ横に矢印アイコンがあり、そのディレクトリが選択された状態でFinderが開きます。内部のすべてのディレクトリを選択して削除します。 Xcodeを閉じて再度開きます。それは私にとって問題をなくしました。
中間ファイルの一部が破損しており、コンパイラがその処理方法を認識していないと思います。
私にとっては、@ LuisCienがこの回答で説明したものと似ていました https://stackoverflow.com/a/42803582/4075379
ジェネリックまたは@objc
タグが、セグメンテーション違反を引き起こしたのは次のコード行です。
public extension CGFloat {
/// Whether this number is between `other - tolerance` and `other + tolerance`
func isEqual(to other: CGFloat, tolerance: CGFloat) -> Bool {
return (other - tolerance...other + tolerance).contains(self)
}
}
つまり、主にObjective-Cプライマリタイプの拡張機能ですか?幸運なことに、プロジェクトがもう使用していないため、これらの行を削除できました。これで問題が修正されました。
私の場合、それは関数パラメーターの不適切なinout
が原因でした。そのため、同様にそれを探すことをお勧めします。
私にとっては、問題はGenerics
、Extensions
、および@objc
。
Xcodeは@objc
ジェネリッククラスの拡張内:
class FaultyClass<T: TypeValidator>: UIControl where T.ItemType == String {
}
extension FaultyClass: UITextFieldDelegate {
func textFieldDidEndEditing(_ textField: UITextField) {
}
}
上記のコードは、エラー@objc is not supported within extensions of generic classes
。そのため、メソッドをクラス自体に移動しましたが、空の拡張機能は削除しませんでした。これはエラーを取り除きましたが、プロジェクトをコンパイルしたときにセグメンテーションエラーが発生しました。
解決策は、UITextFieldDelegate
をクラス宣言に移動することでした。
class GoodClass: <T: TypeValidator>: UIControl, UITextFieldDelegate where T.ItemType == String {
// MARK: - TextFieldDelegate
func textFieldDidEndEditing(_ textField: UITextField) {
}
}
「 構築時のSwiftコンパイラセグメンテーションフォールト 」で答えました
私もこのエラーがありました、私はこのように修正しました:
プロジェクトをチェックして、どのファイルが2回使用されているかを調べて1つを削除するか、すべて削除してから再度追加します。
XCodeのエラー
:0:エラー:ファイル名 "AttributedString.Swift"が2回使用されています: '/Users/.../CNJOB/CNJOB/AttributedString.Swift'および '/Users/.../CNJOB/CNJOB/AttributedString.Swift'
:0:注:ファイル名は、同じ名前のプライベート宣言を区別するために使用されます
:0:エラー:ファイル名「APIClient.Swift」が2回使用されています:「/Users/.../CNJOB/CNJOB/APIClient.Swift」および「/Users/.../CNJOB/CNJOB/APIClient.Swift」
:0:注:ファイル名は、同じ名前のプライベート宣言を区別するために使用されます
コマンド/ Applications/Xcode 3.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftcは、終了コード1で失敗しました
1つ追加するのを忘れた@end
の後@implementation
の.m
複数のclasses
を含むファイル。何かのようなもの:
@implementation Adjust
@end
@implementation Data //@end For this class was missing
@implementation Create
@end
私にとっては、Swiftファイルを別のターゲット(私の場合は今日の拡張子)に追加することによって引き起こされます。
私の問題はメソッド署名にありました:
func setCategory(categoryId: Int?, subcategoryId: Int?) -> FilterSettings {
func changeCategory(categoryId: Int?, subcategoryId: Int?, handler: @escaping (Int) -> ()) {
コンパイラがそのような宣言を処理できない理由はわかりません。