Не удалось выполнить команду из-за сигнала: Ловушка прерывания: 6
Начиная с Xcode 7 и Swift 2.0, я получаю ошибку выше, как на скриншоте, показанном здесь:
![screenshot of error log]()
Я понятия не имею, откуда это, очистка и удаление производных данных не работали.
Кто-нибудь еще испытывает эту проблему?
Настройки проекта:
![project settings]()
Настройки цели:
![target settings]()
Ответы
Ответ 1
У меня такая же проблема со всеми проектами Xcode 6.3, я открываю в Xcode 7.0.
Я создал новый проект, скопировал все мои исходные файлы и ресурсы, и все работало без этой ошибки компилятора.
Я думал, что это имеет какое-то отношение к настройкам проекта.
Я отключил оптимизацию Swift для "none", и Trap 6 исчез. Возможно, есть и другие настройки, которые также создают проблемы, но для меня это было.
Ответ 2
Перейти к проекту Build settings -> Swift Compiler - code generation -> Optimization Level
→ Для опции выбора отладки и выпуска "Быстрая, однофайловая оптимизация [-O]
![введите описание изображения здесь]()
Ответ 3
В моем случае
Ошибка
override func observeValueForKeyPath(keyPath: (String!)?, ofObject object: (AnyObject!)?, change: ([NSObject : AnyObject]!)?, context: UnsafeMutablePointer<Void>)
ОК
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [NSObject : AnyObject]?, context: UnsafeMutablePointer<Void>)
Ответ 4
Я тоже получил эту ошибку на XCode 7 Beta 5. После того, как я очистил сборку, у меня появилась еще одна ошибка, говорящая о том, что один из моих классов не соответствует протоколу, который я только что изменил. После того, как я исправлю проблему, она строит. Изменения протокола, которые я сделал, это изменить два типа параметра метода от Int
до Int32
Ответ 5
В моем случае
Компилятор даст мне сообщение:
Incorrect number of arguments passed to called function!
%4 = call %swift.type* @_T015SimplifiedCoder6StructVMa() #1, !dbg !3112
<unknown>:0: error: fatal error encountered during compilation; please
file a bug report with your project and the crash log
<unknown>:0: note: Broken function found, compilation aborted!
но я понял, что я пропустил стандартный параметр по умолчанию:
class Class<K> {
init<T: Protocol>(_ value: T) where T.Key == K {}
}
protocol Protocol {
associatedtype Key
static func getClass<NewKey>(_: NewKey.Type) -> Class<NewKey>
}
struct Struct<K>: Protocol {
typealias Key = K
static func getClass<NewKey>(_: NewKey.Type) -> Class<NewKey> {
let _self = Struct<NewKey>()
return Class(_self)
}
}
protocol CanGetClass {
associatedtype StructType: Protocol
}
extension CanGetClass {
func getClass<Key>(_: Key.Type) -> Class<Key> {
return StructType.getClass(Key.self)
}
}
struct R: CanGetClass {
typealias StructType = Struct
}
изменено:
typealias StructType = Struct
to:
typealias StructType = Struct<Int>
расширение CanGetClass пыталось вызвать getClass на неполном типе.
Ответ 6
Я получил это, когда сделал это:
protocol ProtocolA {
associatedtype BType: ProtocolB
}
protocol ProtocolB {
associatedtype AType: ProtocolA
}
Ответ 7
Это сработало для меня, так что просто попробуйте. я получил эту ошибку при преобразовании кода из swift 3 в swift 4.
Просто зайдите в Project> Target> Build Setting и найдите "Swift Compiler - Generation" и установите для уровня оптимизации "Без оптимизации" [-Onone].
Ответ 8
Убедитесь, что вы не внедрили частный протокол в расширение класса. Большую часть времени было бы довольно странно иметь закрытый протокол, но не обязательно, в зависимости от того, что вы хотите инкапсулировать.
Что-то вроде того же файла:
class C: ... {
}
extension C: P {
}
private protocol P: class {
}
Сделайте это, и вы наверняка получите Command failed due to signal: Abort trap: 6
Вместо этого удалите private
модификатор из протокола, и ошибка исправлена.
Ответ 9
В моем случае это было с установкой значения в параметр, равный нулю, который вызывал ошибку.
До:
public func comparableValidator<T: Comparable>(minValue : T? = nil, maxValue : T? = nil, value: T) -> Void {
if let min = minValue {
_assertFunc(min <= value, "\(value) must be at least \(min)")
}
if let max = maxValue {
_assertFunc(max >= value, "\(value) must be at most \(max)")
}
}
После:
public func comparableValidator<T: Comparable>(minValue : T?, maxValue : T?, value: T) -> Void {
if let min = minValue {
_assertFunc(min <= value, "\(value) must be at least \(min)")
}
if let max = maxValue {
_assertFunc(max >= value, "\(value) must be at most \(max)")
}
}
Ответ 10
Я могу воспроизвести это просто и последовательно с совершенно новым проектом, созданным в Xcode 7.0 beta (7A120f). Обратите внимание, что проблема, вероятно, более широка, чем пример, но это на 100% воспроизводимо для меня, добавив только одну строку в новый проект. Эта проблема также относится исключительно к iOS, а не к OS X, по крайней мере для этого примера. Отправил отчет Apple об ошибке # 21376523.
-
Создайте совершенно новый проект в Xcode 7.0 (7A120f). Тип "Игра", язык "Swift", игровая технология - "SceneKit".
-
Создайте и запустите с настройками по умолчанию. Проект строит и работает отлично в симуляторе (вы увидите модель вращающегося 3D-корабля по умолчанию).
-
Добавьте одно свойство SCNVector3 в GameViewController.swift, например:
class GameViewController: UIViewController {
var p = SCNVector3Zero
- > Производит "Ловушку прерывания: 6". Проект больше не будет компилироваться.
-
Измените константу на пустой инициализатор.
class GameViewController: UIViewController {
var p = SCNVector3()
- > Такая же проблема, "Ловушка прерывания: 6"
- Удалить свойство, восстанавливая состояние чистого проекта.
- > "Ловушка прерывания: 6" исчезла, проект снова компилируется и запускается.
-
Измените "var" на "let".
class GameViewController: UIViewController {
let p = SCNVector3Zero
- > Скомпилируется и запускается.
-
Измените тип свойства на SCNVector4 вместо SCNVector3.
class GameViewController: UIViewController {
var p = SCNVector4Zero
- > Скомпилируется и запускается.
EDIT: эта проблема исправлена в Xcode 7.0 beta-2 (7A121l), если вы получаете "Abort trap: 6" из-за использования векторного типа float 3 (например, SCNVector3). Из примечаний к выпуску:
• Сбой компилятора при вызове C или Objective-C функций, которые принимают Параметры SIMD float3 исправлены. (21294916)
Ответ 11
Хорошо, в моем случае это было потому, что у меня было перечисление, вложенное в общий класс. Теперь, странно, это то, что когда я изолировал проблему (в BaseDao2), компилятор сказал мне правильную ошибку, но в моей реальной реализации BaseDao (которая имеет больше вещей), она бросает "ловушку 6".
Type 'DaoError2' nested in generic type 'BaseDao2' is not allowed
Когда у меня было это:
class BaseDao2<T>: InjectRestSession{
enum DaoError2: ErrorType{
case FAILED_RESPONSE(String)
case INVALID_RESULT(String)
case FAIL_TO_LIST, FAIL_TO_GET
}
func get() -> T?{
return nil
}
}
В любом случае, в моем случае я перемещаю DaoError из BaseDao и все скомпилированное. Во всяком случае, я чувствую, что "ловушка 6" - это то, что что-то не может скомпилировать, а компилятор запутался. Исходя из простого случая, и добавление обратно того, что, по вашему мнению, может вызвать проблему, может помочь решить проблему, получив правильную ошибку компиляции. Другими словами, вы должны быть осторожны с быстрым компилятором.
Ответ 12
Вот что вызвало ошибку для меня.
До:
for (key,value) in hash{
count += value.count
}
После:
for (_,value) in hash{
count += value.count
}
Не понравилось, что ключ никогда не использовался нигде. Я не уверен, почему это должно привести к сбою сборки.
Ответ 13
Мне удалось создать мой проект, установив уровень оптимизации на "Нет" в меню "Swift Compiler - Code Generation" в целевых (а не на проект) настройках. Смотрите снимок экрана ниже...
![enter image description here]()
Это не должно быть постоянным решением, потому что оно более чем удваивает размер ipa. Должна быть возможность включить оптимизацию, когда Xcode 7 выходит из бета-версии.
Ответ 14
В моем случае у меня был протокол @objc с дополнительными методами, и когда я назвал его методы также в классе swift, я получил эту ошибку, после удаления необязательного ключевого слова из функций в протоколе ошибка исчезла.
до (с ошибкой):
@objc protocol SomeDelegate:NSObjectProtocol{
optional func someDelegateMethod()
}
class MySwiftClass{
func notifyMyDelegate(){
mydelegate?.someDelegateMethod?() //this line caused the error
}
}
после
@objc protocol SomeDelegate:NSObjectProtocol{
func someDelegateMethod()
}
class MySwiftClass{
func notifyMyDelegate(){
mydelegate?.someDelegateMethod()
}
}
Ответ 15
для меня.. Я изменил содержимое функции @objc следующим образом:
перед:
@objc func didConnectWithSession() {
context!.stream.disconnectAfterSending()
}
после
@objc func didConnectWithSession() {
//context!.stream.disconnectAfterSending()
}
Это вызвало ошибку. Я решил удалить всю функцию.
Ответ 16
Я получил это сообщение при использовании do-try-catch в Failable initializer:
public init?() {
do {
...
super.init(superParam: try getParamForSuper())
...
} catch {
...
}
}
Компиляция прошла успешно при перемещении вызова try к его собственной локальной переменной:
public init?() {
do {
...
let superParam = try getParamForSuper()
super.init(superParam: superParam)
...
} catch {
...
}
}
Ответ 17
В моем случае у меня был private struct Constants
, объявленный как в class A
, так и extension A
.
Вероятно, это должно быть ошибка, но это не так.
Ответ 18
Для меня причиной этой ошибки было:
Я создал файл для создания расширений в UIView. Внутри этого файла я создал частный протокол с именем Foo
.
Затем я сделал:
extension UIView: Foo
Удаление частного из протокола заставило ошибку уйти.
Я думаю, это, вероятно, ошибка. Компилятор должен предупредить нас о проблеме. Точно так же мы предупреждаем, что мы не можем добавлять частные соответствия типам, они должны сообщать нам, что соответствие должно использовать протокол "общедоступный/внутренний".
Ответ 19
Я решил эту проблему с помощью этих шагов:
-
побежал "стручок"
-
Создайте подфайл следующим образом: platform: ios, '8.0' use_frameworks!
-
побежал "pod install"
Ответ 20
В моем случае, переименование нескольких параметров методов init, который является протоколом, не позволяет выполнить компиляцию. Я решаю это, делая это один за другим, компилирую снова после каждого изменения.
Ответ 21
У меня возникла та же проблема, и я обнаружил, что проблема в том, что я изменил систему сборки на "Новая система сборки" после прочтения статьи о том, "как ускорить сборку" (эта статья, кстати, здесь)
Итак, чтобы вернуться к стандартной системе сборки:
- Чтобы включить новую систему сборки, выберите "Файл" → "Настройки проекта" (или "Настройки рабочего пространства").
- Изменить систему сборки на стандартную систему сборки.
![enter image description here]()
Надеюсь, это поможет кому-то и не тратьте часы, пытаясь выяснить, почему это не работает!
Ответ 22
Я не пробовал другие решения. Я получил эту проблему для этой установки:
func speacialAdd(_ num1: Int, to num2: Int){
func specialMultiply(_ digit1: Int, with digit2: Int = num2){ // SOURCE OF PROBLEM
print(digit2)
print(digit1)
}
specialMultiply(5)
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print(speacialAdd(5, to: 6))
}
}
Эта линия является источником проблемы. По умолчанию это аргумент не работает для вложенной функции
func specialMultiply(_ digit1: Int, with digit2: Int = num2) // ERROR
Решения:
func specialMultiply(_ digit1: Int, with digit2: Int) // OK
func specialMultiply(_ digit1: Int, with digit2: Int = 6) // OK
Я действительно впервые написал это на детской площадке и получил другую ошибку:
Не удалось выполнить игровую площадку:
ошибка: не удалось найти символы:
__T013__lldb_expr_111speacialAddySi_Si2totF4num2L_Sifau
Ответ 23
В Xcode 9.3 я переустановил конкретный модуль, в котором появлялись предупреждения, и снова очищал полученные данные n. У меня это сработало :)
Ответ 24
Я получил эту ошибку при попытке запустить тесты. Чтобы решить эту проблему, я поместил этот скрипт в терминал:
rm -rf ~/Library/Developer/Xcode/DerivedData
Удаление производных данных решило проблему
Ответ 25
Я исправил это, перейдя в Xcode → Preferences → Locations → Установить Relative
опцию в Derived Data.
![Setting Derived Data]()
Ответ 26
Для меня это был вопрос MD5.swift
Что вам нужно сделать, это поиск в вашем проекте по имени файла "MD5.swift", даже в модулях
и замените все содержимое этого файла здесь
https://github.com/onmyway133/SwiftHash/blob/master/Sources/MD5.swift
Ответ 27
Эта проблема все еще присутствует в Xcode 10.2.1. После очистки папки сборки ошибка ушла.
Ответ 28
Я смог решить эту проблему, внеся изменения в заголовок моста. В моем случае достаточно было добавить разрыв строки. Очень странная ошибка.
Ответ 29
Для меня приведенное ниже утверждение вызывает ошибку.
let dict = mainDict as [String:String]
Исправить проблему с помощью force unwraps
let dict = mainDict as! [String:String]
Нет ничего общего с компилятором. Это просто проблема приведения типов, Apple должна дать правильное описание вместо выдачи ошибки компилятора
Ответ 30
Мой случай, Swift 5.1, Xcode 10.3 (10G8)
В коде произошел сбой Swift, когда вложенная функция использовала аргумент внешней функции в качестве параметра по умолчанию.
например,
func foo(duration: TimeInterval) {
func bar(duration: TimeInterval = duration) {
}
}
Надеюсь, это поможет.