ビルド時のSwiftコンパイラセグメンテーションエラー


100

(便利な)計算の追加heightに財産をUIView自分の中にUIViewExtension.swiftセグメンテーション違反にスウィフトコンパイラが原因となっているファイル...おそらくここで間違って何をして行くのだろうか?

0  swift                    0x00000001061e5608 llvm::sys::PrintStackTrace(__sFILE*) + 40
1  swift                    0x00000001061e5af4 SignalHandler(int) + 452
2  libsystem_platform.dylib 0x00007fff894da5aa _sigtramp + 26
3  libsystem_platform.dylib 0xb03939841e997c88 _sigtramp + 2504775416
4  swift                    0x00000001064c8bb9 swift::NominalTypeDecl::getMembers(bool) const + 41
5  swift                    0x00000001055efab9 swift::irgen::ClassMetadataLayout<(anonymous namespace)::FindClassMethodIndex>::addClassMembers(swift::ClassDecl*) + 329
6  swift                    0x00000001055e97b2 swift::irgen::emitVirtualMethodValue(swift::irgen::IRGenFunction&, llvm::Value*, swift::SILType, swift::SILDeclRef, swift::CanTypeWrapper<swift::SILFunctionType>, swift::ResilienceExpansion) + 434
7  swift                    0x00000001056550d3 swift::SILVisitor<(anonymous namespace)::IRGenSILFunction, void>::visit(swift::ValueBase*) + 42611
8  swift                    0x000000010564a266 swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 8678
9  swift                    0x00000001055cb6f8 swift::irgen::IRGenModule::emitGlobalTopLevel() + 184
10 swift                    0x00000001056376e3 performIRGeneration(swift::IRGenOptions&, swift::Module*, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, swift::SourceFile*, unsigned int) + 1859
11 swift                    0x0000000105638033 swift::performIRGeneration(swift::IRGenOptions&, swift::SourceFile&, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, unsigned int) + 51
12 swift                    0x00000001055aa65a frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 4842
13 swift                    0x00000001055a935d main + 1533
14 libdyld.dylib            0x00007fff8a82e5fd start + 1

 

1.  While emitting IR SIL function @_TFCSo6UIViewg6heightSd for 'anonname=0x7ff422892fd0' at <path redacted>/UIViewExtension.swift:60:5
<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)
Command /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254

これを解読するためにさらに情報が必要な場合は、コメントしてください。ありがとう!

編集:

この質問のコンパイラエラーを返す関連.xcodeprojを次に示します。ここからダウンロード


7
コンパイラはsegfaultすべきではありません。これが新しい問題である場合は、バグレポートを提出してください。
Karoly Horvath、2014年

3
コンパイラのバグのようです。整理できるように、アップルに報告する必要があります。
チャック

11
Objective-CプロジェクトをSwiftに移行しているときに、コンパイラーが左右にセグメンテーション違反を起こしています。控えめに言っても失望しています。
aleclarson 2014年

1
@aleclarsonリリースバージョンの方がうまくいくと思いますが、バグを発見した場合は、それがリリース前に修正される唯一の方法であるため、報告します。
Joachim Isaksson

6
Swiftはすぐに使える状態になると思っていたのですが。待って吸う!:)
aleclarson 2014年

回答:


74

私がこれをしていたので、私はこのエラーがありました:

if(currentMeal?.State == .Deleted){

}

の代わりに

if(currentMeal!.State == .Deleted){

}

したがって、条件がこのエラーを引き起こす可能性がある場合は、オプションでラップされていないと思います


3
それも私が原因でした。しかし、それは正しいはずだったのでしょうか?それはコンパイラのバグだけです
DeFrenZ '19

同じ。オプションの列挙型チェック。彼らがそれを修正することを願っています
メンテ14

正しいコードは次のようになります。if(currentMeal.State == .Deleted){} Swiftは、2つのオプションが等しい場合、==を便利にオーバーロードします。Fjohnの投稿は非常に危険です。
mattyohe 2015年

1
これはコンパイルエラーに関するものです。変数が以前に検証されていない場合、過去のコードは危険です。currentMealがnilの場合、コードはどうなりますか?同じですよね?私のコードがあなたのコードよりも危険な理由を教えてください。「?」を使用せずにオプションを迅速に利用する ?
Fjohn

ありがとう、これも私の場合です。Swiftはずっと不愉快な驚きを与えてくれましたが、これは限界をはるかに超えています。
CodeBrew、2015

26

Swiftでコンパイラのsegfaultに遭遇しても、便利な行番号とエラーメッセージは表示されません。問題を追跡する方法は次のとおりです。

  1. SegFaultDebugger.swiftプロジェクトで呼び出される新しいファイルを作成します。
  2. この新しいファイルで、問題を引き起こしているクラスの拡張を定義します。
  3. メソッドのグループをメインファイルからに移動しますSegFaultDebugger.swift
  4. コンパイル。

この時点で、次の3つのいずれかが発生します。

  • 元のファイルで引き続きsegfaultを取得します。メソッドをSegFaultDebugger.swift元のファイルに戻し、別のメソッドのセットをに移動しSegFaultDebugger.swiftます。繰り返す
  • 次の場所でセグメンテーション違反が発生しましたSegFaultDebugger.swift:すごい!次に、バイナリ検索を使用して、segfaultを特定のメソッドにピン留めし、その原因となっている構造を突き止めます。
  • 意味のあるコンパイラエラーが発生します。エラーを修正します。すべてがコンパイルされたら、メソッドを元のファイルに戻します。

1
ありがとう!これは何時間も頭を掻いた後に助けになりました。
dejavu89 2017年

1
これはとても役に立ちました!私の場合、拡張機能にNSFetchedResultsControllerDelegateがあり、それをメインクラスブロックにマージするだけで十分です。
MikaelGrön2017年

@MikaelGrön-あなたはそれを拡張できますか?拡張機能には正確に何がありましたか?
RyanJM 2017

しかし、どのクラスが問題を引き起こしているのかをどうやって知るのですか?
牧師、

@theReverendわからない場合は、問題のファイルの各クラスを試す必要があります。しかし、swiftcは実際には数年でセグメンテーション違反の問題を抱えていませんでした。私の回答がもう適切であるかどうかはわかりません。
ビル、

12

私のプロトコルの1つを拡張しているときにこのエラーが発生し、タイプ引数が間違っていてオプションの型引数がありました。

protocol SomeProtocolName: class {
    var someProtocolVariable: String { get set }

    func someProtocolFunction(someProtocolVariable: String)
}

// MARK:
extension SomeProtocolName {
    func someProtocolFunction(someProtocolVariable: String?) {
        self.someProtocolVariable = someProtocolVariable
    }
}

StringプロトタイプとString?拡張機能の引数の違いにより、セグメンテーション違反が発生しました11


3
私もこれを手に入れました。Appleはオプションのタイピングに問題があるようです。大きな問題の1つは、変数型の中で使用されます。デフォルトではオプションではありませんが、コンパイラは混乱します。
user1122069

@ user1122069同意、プロトコルにはいくつかの問題が残っています。次のバージョンでこの問題が修正されることを願っています。
victor.vasilica 2016

一般的には、プロトコルについては話していませんでした。何を学んだんだ!は変数内で行われますが、IDEとコンパイラは!の正確なエラーを取得できないことがよくあります。
user1122069

@ user1122069すみません。
victor.vasilica 2016

配列内のアイテムの多くを追加するとき、これは私に起こった
aguilarpgc

9

私にもこのエラーがあり、次のように修正しました:

プロジェクトをチェックして、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 failed with exit code 1


8

Xcode 7では、デバッグナビゲーターでエラーをクリックすると、クラッシュの展開ビューが表示されます。右側のハンバーガーボタンをクリックするとエラーが拡大し、展開したエラーメッセージの一番下までスクロールすると、エラーの原因がわかります。

ここに画像の説明を入力してください

私には、これらのセグメンテーションフォールトエラーが2つありました。上の画像では、1つ目は折りたたんだときの様子、2つ目はハンバーガーボタンを開いたときの様子です。展開された灰色のボックスの一番下に、コンパイラがクラッシュした場所を示すメッセージが表示されます。

ただし、エラーメッセージは十分な情報を得られない場合があるので、クラッシュした場所は通知されますが、その理由と修正方法が常に示されるとは限りません。このエラーを取り除くことは、依然として推測作業の問題です。


1
ナビゲーターからエラーを追跡することができました。おかげで、これは私のエラーを修正するのに役立ちました!
Vishal Chandran

5

問題が将来のXcode / Swiftビルドで修正されるまで、簡単な回避策を発見しました。

  • 問題の原因となっているすべての拡張子を、.swift使用しているファイルに配置するだけです。

あなたが提供するサンプルプロジェクトでは、内容を配置 UIViewExtension.swift し、 CALayerExtension.swift 上記 AppDelegate.swift

うまくいけば、これにより、問題が解決するまで、動作する Swiftコードを書くことができます。


4

私に関しては、private静的変数に修正されたclangクラッシュを追加します:

private static var taskId = 0

2

次のようなステートメントでコンパイラセグメンテーションエラーが発生しました。

someFunction(isFlagged ? "String1" : "String2")

代わりにif-elseステートメントを実行しただけで機能します。


1
スウィフト3:この答えは、多くのプロジェクトでセグメンテーションの障害11を解決します。
Alessandro Ornano 2016

うわー、信じられない。Swiftコンパイラーは、これらすべての問題のあるアルファ版のように感じます。これありがとう。
TGO

2

プロパティとしてラップされていないBoolを使用して条件を宣言した場合にも、この問題が発生する可能性があります


1

私の場合、文字列の補間中にコロンの位置を間違えたため、壊れました(XCode 6.1.1)。

例:

println("\(value1:value2)") 

私がやろうとしたとき:

println("\(value1) : \(value2)")

1

このエラーは、親クラスの弱い変数をオーバーライドしようとしたときに発生しました。

基本クラスでは:

weak var stripeViewDelegate : StripeViewDelegate? = nil    

派生クラス:

override weak var stripeViewDelegate : StripeViewDelegate? = nil {
    didSet {
        self.stripeView.delegate = stripeViewDelegate

    }

=nil派生クラスから削除するとエラーが消えました。


1

今日は例外をキャッチします

class func createByAny(instance: Any?) -> ApiCollectionResponse { ... }

そしてこれはそれを解決しました:

class func createByAny(instance: Any) -> ApiCollectionResponse { ... }

「Any」タイプは、任意のタイプのイベント「nil」、「AnyObject」、オプション、...なので、これはオプションにすることはできません。すでにオプションです。

typealias Any = protocol<>

私の場合も「すべて」の問題でした
Adriano Spadoni

1

このエラーは、型と名前が一致する変数を誤って宣言した場合にも発生します。

    var sectionGroup: sectionGroup? { ... }

これは、Appleの命名規則に従って、型に最初の大文字を使用した場合は問題にはなりませんでした。これが、Appleがつまずかなかった理由です。さらに、あなたの答えは@aminhotobのそれと同じように見えます
qwerty_so

1

演算子関数に無関係なジェネリック型があるため、このエラーに遭遇しました、例えば

func ==<T>(lhs: Foo, rhs: Foo) -> Bool {
  return lhs.bar == rhs.bar
}

私の場合、削除<T>すると問題が解決しました。


ここでも同じ問題が発生しますが、一般的に、実際に使用されていないジェネリックを定義すると、このエラーが発生するようです。
Kevin R

1

私の場合、struct内部を宣言しましたfunc。の移動structをクラスレベルにと、問題は解決しました。

これを書いている今、以前にstruct内部で問題があったことを覚えていますfunc。これは、セグメンテーション違反(Swift 1.2ベータで悪名高くなるようです)以外の何かでした。OMG Apple、そこで何をしてるの?


私は構造体に3つの変数があり、それはうまくいきました、4番目を追加するとセグメンテーション違反の問題が発生し始めました。構造体をクラスに変更すると解決しました
Ehab Amer

1

私の場合、変数にクラス名を使用しているため、このエラーが発生します

var MYClass : MYClass {
    get {
        return.....
    }
}

そして、これは私の問題を修正します

var myClass : MYClass {
    get {
        return.....
    }
}

1

私の場合、これはプロトコルで誤った静的初期化を行ったときに発生しました。私は回避する方法を見つけましたが、ビルド中にコンパイラがセグメンテーション違反を生成することはありません

関係するファイルは3つあります。NamedSegues.swiftというプロトコル。特に、コールバックを含むプロトコルを実装するカスタムTableViewController、コールバックを呼び出すためにこのプロトコルへの参照を保持するカスタムTableViewCell。

//file1
import Foundation
protocol NamedSegues {
    func  executeSegueWithId(id: String) -> Void
    static func getDefault() -> NamedSegues  // This was required because of init requirement in CustomCellView
}


//file2
class CustomController: UITableViewController, NamedSegues {
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCellWithIdentifier("CustomCellID", forIndexPath: indexPath ) as! CustomCellView

        // Configure the cell...
       //App logic...

        cell.parent = self
}

 //Mark: NamedSegues
     func executeSegueWithId(id: String) ->() {
        NSLog("Received callback to execute segue: \(id)")
        //
    }

    static func getDefault() -> NamedSegues { // I think this must be where it threw up.
        return self as! NamedSegues
    }

}


//file3

import UIKit

class CustomCellView: UITableViewCell {

    var id: String = "NoName"
    var parent: NamedSegues = NamedSegues.getDefault() // This is where it was needed.


override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        NSLog("Touched id: \(id)")


             parent.executeSegueWithId(id) // This is where parent was used.
     }
}

私はそれを使ってそれを回避しましたか?

プロトコルファイルで、file1:getDefault()の宣言を削除します。CustomControllerでfile2:getDefaultの実装を削除します。CustomCellViewで、file3:

    var parent: NamedSegues?
    ...
    parent?.executeSegueWithId(id)

コンパイラーはこれをキャッチし、ビルド中にセグメンテーション違反をスローする代わりに、いくつかのエラーメッセージを表示するはずです!


1

Swift 2コンパイラーはプライムタイムの準備ができていなかったようです。これが誰かに役立つ場合、セグメンテーション違反が発生していました。11は、クロージャーヘッダーの変数の型、特にParseメソッドの変数の型との不一致が原因PFQuery.query.findObjectsInBackgroundWithBlockです。

この問題の詳細は、https//github.com/ParsePlatform/Parse-SDK-iOS-OSX/issues/280で確認できます


1

同様@Fjohnは(Xcodeの7.0ベータ6とXcode 7の両方で破った)、これは私のためのオプションをアンラップに関連する問題だった、と述べました。私の場合、記述子に??私をひっくり返した二重だったか、オプション(別売のアンラップされなかった。使用レットがあれば問題を解決しました

二重オプションが原因でセグメンテーション違反


1

他の人が上で書いたように、私はプロトコルで拡張機能を使用しているときにこれが起こりましたが、プロトコルのメソッドのシグネチャが拡張機能の実装と一致しません。

私の場合、実装に(拡張機能で)新しいパラメーターを追加しましたが、プロトコルのメソッドのシグニチャーにも追加するのを忘れていました。


1

私の場合、可変パラメーターの後に関数パラメーターを追加しようとしました。

パラメータシーケンスを逆にして、可変パラメータをパラメータリストの最後のパラメータにすることで修正しました。


1

これは通常、ステートメントまたはステートメント内の変数の状態を保証/判別するのに十分な情報(コンパイラーがあなたの考えにかかわらず)を持っていない場合に発生します。

たとえば、都市名をキーとして入力するタイプ[文字列:文字列]の辞書と、対応する郵便番号/郵便番号のコンマ区切りのリストがあるとします。

コードのどこかに、対応するコードのリストを更新したいとします。

myDict[town] += newZipCode + ","

この場合、コンパイラはtownディクショナリにない可能性があるため、セグメンテーションエラーで応答するため、上記のステートメントが有効な値を持つことは保証できません。

これを解決するには、の現在の状態をmyDict[town]別の変数に格納して、のケースを処理してからkey not in dict、指定されたキーの値を更新できるようにする必要があります。

myDict[town] = guaranteedValue + "," newZipCode + ","

残念ながら、根本的な原因を特定するのは必ずしも簡単ではないので、この簡単な例が役立つことを願っています。


1

Swift 3.0(Xcode 8.1)では、プロトコルがオプションの変数を宣言し、実装者がその変数を遅延初期化変数として実装すると、この問題が発生します。

バグはここで報告されています:https : //bugs.swift.org/browse/SR-1825


1

Xcode 8.2。

@nonobjc拡張機能にプロトコル実装を追加すると、セグメンテーションエラーが発生します。@nonobjcプロトコル実装をクラス実装に移動します。


1

私の場合、犯人は誤って配列引数を期待する関数を可変引数を持つものでオーバーロードしていました:

public required init(_ args: Node...) {
}

スーパークラスで配列として定義されている場合:

public required init(_ args: [Node]) {
}

0

私にとっては、次がsegfaultを引き起こしましたtypeが、はオプションです:

switch type {
    case .aType:
        // Do Something
    default:
        break
}

そしてこれはそれを解決しました:

switch type {
    case .Some(.aType):
        // Do Something
    default:
        break
}

0

カスタムUITableViewControllerの次のメソッドシグネチャでこのエラーが発生しました。

func filterContentForSearchText(searchText: String)

に変更:

func filterContentForSearchText(searchText: String!)

問題を修正しました。


0

拡張機能でも同じ問題が発生しました。私の拡張機能には2つの便利な初期化子がありました。

convenience init(context: NSManagedObjectContext) {
    let entityDescription = NSEntityDescription.entityForName("PropertyEntity", inManagedObjectContext: context)!
    self.init(entity: entityDescription, insertIntoManagedObjectContext: context)
}

convenience init(dictionary: NSDictionary, context: NSManagedObjectContext) {
    self.init(context: context)
    property1 = (dictionary["key"] as? String) ?? ""
    // More properties...
}

エラーを取り除くために、インスタンスメソッドマップ(dictionary:NSDictionary)を追加すると、セグメンテーションエラーが表示されなくなりました。

convenience init(dictionary: NSDictionary, context: NSManagedObjectContext) {
    self.init(context: context)
    map(dictionary)
}

0

私にとっての問題は、アーキテクチャが標準に設定されていないことでした。私はi386か何かを追加しましたが、それをデフォルトのxcodeprojectアーチに戻すだけで問題なくコンパイルされました。


0

私は迅速なプロジェクトで同じ問題を抱えていました。問題は、オブジェクトを返すはずの関数でしたが、その中には戻りませんでした。この種のエラーは、Obj-Cでの編集中に通知されていました。Swiftではそうではないようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.