Ошибка компиляции Xcode 7: "Ошибка команды из-за сигнала: Ошибка сегментации: 11"
Вчера я установил официальный Xcode 7, и когда я попытался открыть один из моих проектов Swift, появилось предупреждение о том, что новая версия Xcode хочет обновить мой быстрый код (или что-то вроде этого). Хорошо, я согласился, и после этого появилась ошибка "Command failed due to signal: Segmentation fault: 11"
скомпилировать (если вам нужны подробности об этом, я могу написать весь текст ошибки). У кого-то такая же проблема?
Спасибо
Edited
Я установил обратно Xcode 6.4, и все в порядке, никаких ошибок компиляции.
Ответы
Ответ 1
Omg, это потрясающая ошибка Xcode. Просто прочитайте это. http://blog.bellebethcooper.com/xcode-bug.html
Это заставило меня улыбнуться.
Изменение было обманчиво маленьким, но вот что было (внутри моего клиентского класса API, где я фактически получаю данные JSON от API):
Я изменил это:
`let json = try? NSJSONSerialization.JSONObjectWithData(data, options: [])`
:
`let json = try? NSJSONSerialization.JSONObjectWithData(data, options: []) as! [String: AnyObject]`
Это один из самых неприятных отладочных событий, которые я когда-либо испытывал но я надеюсь, что этот пост может помочь кому-то другому, у кого есть тот же вопрос. И если вы попали сюда через googling ошибку, с которой вы боретесь с, и это вам не помогло, мне очень жаль. Я точно знаю, что вы проходите. Не сдавайтесь!
Ответ 2
Это означает, что в вашем коде отсутствует какой-либо метод /func Required
.
В моем случае я использовал ObjectMapper, и в моем классе я забыл включить метод required init()
, который вызывает этот "Command failed due to signal: Segmentation fault: 11"
required init?(_ map: Map) {
}
Ответ 3
Посмотрите на другое предупреждение, которое вы видите вокруг.
В моем случае я указал на проблему с iOS9 и GoogleAds.
См. Здесь: https://developers.google.com/admob/ios/ios9
Короткий ответ состоял в том, чтобы отключить настройку сборки ENABLE_BITCODE.
Моя ошибка:
ld: '/pp/src/shared_js/libs/GoogleMobileAdsSdkiOS-7.3.1/GoogleMobileAds.framework/GoogleMobileAds(GADGestureIdUtil.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture armv7
clang: error: unable to execute command: Segmentation fault: 11
clang: error: linker command failed due to signal (use -v to see invocation)
Ответ 4
Я сталкиваюсь с этой проблемой много раз, преобразовывая различные проекты в Swift3.0.
Поскольку эта проблема выглядит динамичной, у каждого есть свое собственное решение, кроме любого универсального ответа.
Но в этом вопросе основная проблема заключается в том, чтобы определить место для работы.
Итак, я следую ниже:
![введите описание изображения здесь]()
В моем случае ответственен AppDelegate.
-
Чтобы найти строку ошибки, перейдите к концу длинного описания ошибки. Вы найдете код, как показано ниже:
1. While emitting IR SIL function @_TFC9MyProject11AppDelegate21getNotificationDetailfGSqGVs10DictionaryVs11AnyHashableP___T_ for 'getNotificationDetail' at /Users/ABC/Documents/BitBucket/iOS/2016/Projects/MyProject/AppDelegate/AppDelegate.swift:153:5
Здесь 153
- строка кода в AppDelegate.swift
.
func getNotificationDetail(_ launchOptions : [AnyHashable: Any]?) {
if launchOptions != nil {
let dictLaunch = launchOptions! as NSDictionary
NotificationCenter.default.addObserver(self, selector: #selector(AppDelegate.openRespectiveNotificationScreen), name: NSNotification.Name(rawValue: WebServiceKey.APPMANAGER_SERVICE_CALL_FINISH), object: nil)
inactiveUserInfo = dictLaunch.object(forKey: UIApplicationLaunchOptionsKey.remoteNotification) as? NSDictionary
}
}
Затем прокомментируйте весь код внутри метода и снова создайте его. Затем попробуйте разогнать одну строку, так что вы, наконец, получите строку, которая генерирует ошибку.
После нахождения точной строки кода вы можете легко ее исправить.
В моем коде я обнаружил, что последняя строка этого метода генерирует ошибку.
Итак, я заменяю его на код ниже, и он создается успешно.
inactiveUserInfo = dictLaunch[UIApplicationLaunchOptionsKey.remoteNotification] as? NSDictionary
Итак, главное - отлаживать осторожно.
Попробуйте этот путь, вы обязательно решите ошибку.
Ответ 5
Сначала я рекомендую внимательно просмотреть журнал сборки, чтобы найти файл с проблемами. В моем случае необязательное значение, используемое в цикле for, вызвало ошибку сегментации в процессе сборки.
for i in 0..<hoge?.count {
Я исправил свой код следующим образом:
for i in 0..<hoge!.count {
У меня нет ошибки. \(^ О ^)/
Ответ 6
Внимательно прочитайте отладочное сообщение.
Я столкнулся с этой ошибкой, потому что я использовал одиночный '=' вместо double '=' по ошибке в if-statement.
if aString.characters.count = 2 {...}
Ответ 7
У меня была такая же ошибка из-за:
let stringB: String? = stringA.characters.count = 0 ? nil : stringA
Решение заключалось в том, чтобы изменить его на:
let stringB: String? = stringA.characters.count > 0 ? stringA : nil
Может быть, это помогает кому-то...
Ответ 8
У меня была та же проблема. Xcode 7.2.1. И, выбирая ошибку и расширяя журналы, я мог найти ошибку компиляции, заложенную среди длинных путей.
См. строку после "1." в прикрепленном изображении. Он имеет ссылку на файл и строку. Посмотрев на это, я смог найти ошибку.
В моем случае у меня было неверное назначение перечисления, я переместил некоторую логику из структуры в перечисление и ввел эту ошибку:
У меня было:
return .Success(dict: dict)
Мне нужно:
return .Success(dict)
![Ошибка журнала после выбора его в Навигаторе проблем]()
Ответ 9
Я столкнулся с этой ошибкой компиляции в Xcode версии 7.3 (7D175), быстром проекте. Ниже приведен сценарий:
- Объявлен "протокол @objc" в классе быстрого
- В другом классе, который реализует этот протокол, один из необязательных методов не реализован.
Реализация метода решила проблему для меня. Это может быть одной из причин, по которым люди сталкиваются с этой проблемой. Я надеюсь, что это поможет
Ответ 10
Для меня проблема (XCode 7.3.1) использовала оператор + = для словаря.
например:
func test() {
var myDict:[String:String] = [:]
myDict["key"] = "pig"
myDict["key"] += "dog"
var myArray:[String] = []
myArray.append("pig")
myArray[0] += "dog"
}
Это приведет к сбою сегментации. Удалите + = на myDict, и все в порядке.
Я знаю, что это ошибка (словарные ссылки имеют значение NULL), но компилятор не должен выглядеть так.
Ответ 11
К сожалению, у меня всегда такая же ошибка, как и у вас. Я предлагаю вам лучший способ воссоздать новый проект новым Xcode и пересадить весь код в этот новый проект, проблема будет решена. Кстати, после обновления любого места, такого как framework или xcode, эта ошибка может произойти, яблоко глупо.
Ответ 12
Вы пытались повторно открыть проект и/или повторно добавить свою схему? Я сделал это, и ошибка исчезла.
Ответ 13
У меня была такая же ошибка в моем проекте после обновления до xCode 7. Я решил удалить новую версию xCode и установить xCode 6.4. В конце концов, он отлично работал с использованием xCode 6.4, поэтому я предлагаю вам сделать это для начала. В других руках вы всегда должны быть в курсе событий, но вы также можете иметь как xCode 6.4, так и 7.0:) Надеюсь, это сработает для вас!
Ответ 14
Перезапустить xcode. Чистая сборка (cmd + k, cmd + shift + k и чистая папка сборки → опция + cmd + shift + k) Это должно устранить проблему.
Ответ 15
Я пытался записать NSData в файл как следующий код.
if let currentResumeData = currentUserInfo["NSURLSessionDownloadTaskResumeData"]
{
// the following "do" was giving the above mentioned compile error.
do {
try currentResumeData.writeToFile(fileNameString, options: .DataWritingAtomic)
} catch {}
// the above error code.
}
После прочтения различных ответов на StackOverflow я изменил его как внизу, который удалил ошибку.
if let currentResumeData:NSData = currentUserInfo["NSURLSessionDownloadTaskResumeData"] as? NSData {
{
do {
try currentResumeData.writeToFile(fileNameString, options: .DataWritingAtomic)
} catch {}
}
Как вы можете видеть, компилятор потребовал правильный тип NSData переменной currentResumeData для вызова метода .writeToFile.
Я уверен, что это будет полезно для других.
Ответ 16
Я пытался использовать??? умным способом, когда это случилось со мной.
Я думаю, что swift не нравится, когда вы пытаетесь связать несколько? вместе с тем, хотя синтаксический маркер не вызывает никакой ошибки:
let ageNum = self.ageValue > 0 ?? self.birthday?.ageFromDate() ?? 0
Ответ 17
Для меня проблема заключалась в изменении того, как я проверяю, было ли что-то ложным. Вместо:
if object1.hidden == false {
}
измените на:
if object1.hidden != true {
}
Ответ 18
Для меня это была длинная функция, содержавшая массив тестовых данных.
Ответ 19
Для меня:
Я использую Closure как AnyObject, после использования этой функции Cast закрытия/блоков. Ошибка решена.
typealias UserCallBack = () -> Void
...
if let callBack = callBack as? AnyObject {
request?.userInfo["callBack"] = callBack
}
Ответ 20
Вот как я исправил - сначала, как это предлагается многими здесь, внимательно прочитайте журнал. Фактически это говорит вам точно номер строки, в которой он терпит неудачу, и почему он терпит неудачу. Просто комментируя эту строку, исправлена проблема. В моем случае это была ошибка проверки типа.
Я использую структуры Gloss для синтаксического анализа JSON, и кажется, что по мере того как вы идете глубже в иерархии JSON, иногда встроенный парсер не распознает, что существует проблема времени компиляции. Когда вы строите проект, он терпит неудачу. В идеале ошибка проверки типа должна распознаваться встроенным парсером. Так что это может быть проблемой с Xcode, но это ваш код, который его нарушает.
Когда я читаю много сообщений, мой анализ выглядит следующим образом. Основная причина связана с проверкой типов. Когда вы пытаетесь назначить неверные типы (необязательно или иначе), а встроенный парсер не распознает его в некоторых случаях. Когда вы его создаете, он распознает его и вызывает ошибку сегментации. Его код неправильный, несмотря на ошибку с Xcode, он может быть исправлен, если мы внимательно прочитаем журналы!
Ответ 21
Для меня это было вызвано объявлением структуры в расширении последнего класса:
final class X {
...
}
extension X {
struct Y {
...
}
}
Ответ 22
У меня есть проект, который время от времени происходит в том же файле. Мое обходное решение:
Перейдите к файлу, в котором упомянута ошибка сегментации, закомментируйте все импортные данные, запустите (Build fail явно), раскомментируйте весь импорт → Сборка успешно.
Мой импорт был Firebase и FirebaseAuth, если он кому-то помог.
Ответ 23
Я получил эту ошибку при попытке компиляции с Xcode 8.2.1. Я использую Cocoa Pods и подозреваю, что один из pods был проблемой, так как некоторые файлы pod ссылались на длинный вывод ошибки из компилятора. После завершения Xcode и запуска pod update
в моем каталоге проекта (через Terminal), я смог успешно скомпилировать, когда я снова открыл свой проект.
Ответ 24
В моем случае бросок, который я должен был исправить, был похож на ответ Мурата Ясара (fooobar.com/questions/182378/...), но у меня было две части, чтобы исправить.
Компилятор не работал с оригинальным исправлением, поэтому мне пришлось еще немного настроить мой код:
Плохая версия:
let jsonObject: AnyObject? = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments)
Хорошая версия:
let jsonObject = try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! [String: AnyObject]
Возможно, это может помочь кому-то новому в этих причудах Swift.
Ответ 25
Ошибка исчезла одновременно с следующей версией Xcode. После некоторых исследований на яблочных форумах произошла ошибка с той версией "лучшей" IDE, когда-либо, Xcode. Надеюсь, что все ответы помогли кому-то.