Swift не удалось с кодом выхода 1 при компиляции в Xcode - возможно, связанным с Bridging-Headers

У меня есть проект Obj-C, который я пытаюсь перенести в Swift. Я преуспел с различными классами, но недавно столкнулся с проблемой, в которой я не могу разобраться. Когда я пытаюсь скомпилировать мою текущую кодовую базу, я получаю следующее (СУПЕР НЕПРАВИЛЬНОЕ СООБЩЕНИЕ ОШИБКИ)

Команда /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc завершилась неудачно с кодом выхода 1

enter image description here

Мое единственное предположение - это как-то связано с моими мостовыми заголовками, но Xcode не дает мне достаточно информации, чтобы выяснить, действительно ли это так.

Я использую Cocoapods для добавления CorePlot в свой проект. Я пытаюсь перенести следующий класс в Swift:

Класс Obj-C (ScatterPlotContainer.h)

#import <Foundation/Foundation.h>

@class CPTScatterPlot;

@interface ScatterPlotContainer : NSObject
@property (nonatomic, strong) CPTScatterPlot *ahrsAlt;
@property (nonatomic, strong) CPTScatterPlot *calibration;
@property (nonatomic, strong) CPTScatterPlot *coreAlt;
@property (nonatomic, strong) CPTScatterPlot *pitch;
@property (nonatomic, strong) CPTScatterPlot *roll;
@property (nonatomic, strong) CPTScatterPlot *slip;
@end

Класс Obj-c (ScatterPlotContainer.m)

#import <CorePlot/CPTScatterPlot.h>
#import "ScatterPlotContainer.h"


@implementation ScatterPlotContainer {

}
@end

Быстрое преобразование

import Foundation

 class ScatterPlotContainer : NSObject {
    public var ahrsAlt : CPTScatterPlot;
    public var calibration : CPTScatterPlot;
    public var coreAlt : CPTScatterPlot;
    public var pitch : CPTScatterPlot;
    public var roll : CPTScatterPlot;
    public var slip : CPTScatterPlot;
}

Мой файл заголовков мостов

#import <CorePlot/CPTScatterPlot.h>

Что я пробовал до сих пор

Когда я закомментирую #import <CorePlot/CPTScatterPlot.h> из файла заголовков Bridging - я получаю ошибку в swift, потому что он не знает, что такое CPTScatterPlot

Я также пробовал #import <CPTScatterPlot.h> который тоже не работал.

мысли

Так что единственное, о чем я могу думать, возможно, потому что я использую cocoa-боб, есть какое-то имя модуля, которое мне нужно добавить. Сообщение об ошибке действительно не так полезно. У кого-нибудь есть предложение о какой-то явной ошибке, которую я сделал, или как получить более описательное сообщение об ошибке, чтобы выяснить, что происходит?

Ответ 1

Я сделал то же самое, что и все ответы, но моя проблема не была решена. Я выяснил, что проблема связана с нарушением вызова функции.

Синтаксис функции не был неправильным, но его механизм вызова был неправильным.

Чтобы проверить точную ошибку для этой проблемы, выполните следующие действия:

Выберите навигатор проблем > Нажмите на ошибку, чтобы отобразить журналы для ошибки > В этом разделе выберите вкладку Все сообщения.

Здесь будут показаны все подробные журналы этой ошибки.

enter image description here

Прокрутите вниз, и у вас есть журналы, например, в моем случае

enter image description here

Итак, читая это, я выясню, что что-то не так с вызовом функции. Я просматриваю свой код и разрешаю его, Ниже был правильный и неправильный код.

Неверный путь:

var region = MKCoordinateRegionMake(self.mapView.userLocation.coordinate, span)
// It will not shown error here but when you build project compiler shows error.

Правильный путь:

let region = MKCoordinateRegion(center: self.mapView.userLocation.coordinate, span: span)

Ответ 2

Я столкнулся с этим прошлой ночью, и ничего выше не решало мою проблему. Я собирался сделать что-то очень плохое на своем ноутбуке, когда увидел, все из-за чистой удачи, что один (1) файл был текстовым кодированием, установленным в UTF-16?!?! WTF??

enter image description here

Это был последний файл, над которым я работал, и, возможно, один плохой вырезать/вставить "импортировать" странный персонаж на арену. Я сделал вырез/вставку моего кода в этом файле в текстовый редактор голой кости. Я удалил файл, заново создаю его и вставлю обратно свой код... и вуаля! он работает.

Итак, сделайте это, но также проверьте кодировку вашего файла!:-)

Ответ 3

У меня было такое же сообщение об ошибке. То, что помогло, заключалось в том, чтобы установить уровень оптимизации в быстрых параметрах компилятора равным None. На самом деле это не решение для меня, и я думаю, что это одна из многих ошибок в быстром компиляторе.

Ответ 4

Другим решением этой проблемы является проверка того, что у вас нет двух или более файлов с одинаковыми именами файлов. Он решил проблему для меня.

Ответ 5

Спасибо @Kampai за советы по просмотру сообщения журнала ошибок. Я прочитал, и некоторые файлы отсутствовали:

<unknown>:0: error: no such file or directory:  

Как-то некоторые файлы были удалены во время вытаскивания из GitHub. Файлы находятся в каталоге, но не в проекте Xcode.

Щелкните правой кнопкой мыши на папке и нажмите "Добавить файлы в...", чтобы вручную добавить отсутствующие файлы в Xcode. Это поставило проблему для меня.

Это случилось со мной уже несколько раз, но теперь я знаю, как это исправить\o/

Ответ 6

Я получал ту же ошибку для включения этого кода в блок didSet:

didSet {
  // Test whether this view is currently visible to the user.
  if super.isViewLoaded() && (super.view.window != nil) {
    // (build fails even if this block is empty)
  }
}

Для поиска этой цели потребовалось много проб/ошибок. Удаление super. позволило продолжить сборку.

Ответ 7

имел ужасное время с этой ошибкой более 3 часов, тщательно переходя от файла к файлу и возвращая изменения и видя, есть ли в этом файле проблема. Я попробовал первый ответ, но не дал никаких ответов. Обнаружена проблема, и это произошло из-за того, что у меня было невынужденное свойство, называемое так же, как вычисленное свойство подкласса. Я действительно надеюсь, что отладчик станет более надежным в обработке таких случаев в будущих обновлениях:(

Ответ 8

Простое удаление данных и очистки помогло мне

Ответ 9

1) Определите файл там, где проблема. Вы можете скопировать и вставить команду компиляции в консоль, и последний экран будет содержать описание ошибки. Обратите внимание на номер pid, в котором проблема была идентифицирована. Затем прокрутите вверх и найдите pid и соответствующую инструкцию - будет один файл на pid, так что вы найдете файл, в котором у вас есть проблемы.

2) Просмотрите файл и проверьте все последние изменения. Если у вас есть git initialized, вы можете использовать

git diff <file name>

Ответ 10

Поскольку все остальные показывали свои, я покажу свое:

class Foo : UIView {
    var pathPosition:Double = 0.0 { didSet {
        pathPosition = min(max(0.0, pathPosition), 1.0) // crashes if this line is present
        self.pathPosition = min(max(0.0, pathPosition), 1.0) // but not here
        }}
}

Невероятно, что это не происходит на Playground, но сбой при размещении в коде в каркасе. Хотя это законный синтаксис (используемый для работы, по-прежнему работает на детской площадке), компилятор Swift, похоже, хочет, чтобы свойство pathPosition было квалифицировано с помощью self.. Обратите внимание, что это (относительно) старый код и используется для компиляции, возможно, что-то сломалось в 6.1.

Edit:

Я чувствую, что я схожу с ума, но похоже, что здесь возникает сложная проблема, где окружающий код может повлиять на эту проблему. Вчера я видел, как что-то компилировалось, изменило код и настройки снова, и он снова не удался. Сегодня мне пришлось взломать кучу действительно глупого кода, чтобы заставить его работать:

var pathPosition:Double = 0.0 { didSet {

    // bug: insane!! - have to clobber the value before resetting!
    let bugOldValue = pathPosition
    self.pathPosition = 1.0 // fails without this nonsensical line!
    self.pathPosition = min(max(0.0, bugOldValue), 1.0)
}}

Для чего это стоит, фактическое сообщение об ошибке, которое я получил, в соответствии с полезными инструкциями выше:

PHI node has multiple entries for the same basic block with different incoming values!
%14 = phi double [ 1.000000e+00, %10 ], [ %11, %10 ], [ 1.000000e+00, %9 ], [ 0.000000e+00, %9 ], !dbg !4818
label %10
double 1.000000e+00
%11 = phi double [ %7, %entry ], !dbg !4815
LLVM ERROR: Broken function found, compilation aborted!

Я боюсь завтра.

Ответ 11

Что касается @Kampal, я все еще изо всех сил пытаюсь выяснить, сколько нужно указать в вызове функции. Например, для создания объекта UIColor иногда требуется указать UIColor, а иногда нет.

Эти обе работают:

playButton.backgroundColor = .darkGrayColor()
playButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)

Это приводит к ошибке exit code 1 при компиляции без предупреждения отладчика. # время отсасывания вихря отладки

playButton.setTitleColor(.whiteColor(), forState: UIControlState.Normal)  

Итак, у меня есть новое правило: при использовании функции, которая принимает несколько параметров, будьте явными.

Теперь вернемся к игре swift: AVOID THE VORTEX

Ответ 12

У меня была такая же ошибка, проблема заключалась в том, что я переопределил метод с необязательным параметром и сделал параметр опционным в переопределении. (параметр method ниже)

func logNetworkCallDurationForMethod(method:String, path:String, milliseconds: UInt) {

}

override func logNetworkCallDurationForMethod(method:String?, path:String, milliseconds: UInt) {

}

Ответ 13

В этот день встал вопрос. Был результат недавнего вывода из git проекта, где файл был удален, но он не обновлялся в моем локальном проекте.

Путь к отсутствующему файлу

Нажав на ошибку, вы узнали о местонахождении "пропавшего" файла, отправили и удалили ссылку в Навигаторе проектов. Исправлена ​​ошибка, выполнялась чистая и скомпилирована.

Ответ 14

Это случилось со мной при попытке ссылаться на метод из аргумента inmutable протокола (по ошибке я думал, что элемент был свойством):

Имея интерфейс следующим образом:

public protocol NSValidatedUserInterfaceItem {
  func tag() -> Int
}

Авария компиляции

func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool {
    print(anItem.tag) // oopsie, tag is a function
    return false
}

Успех компиляции

func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool {
  print(anItem.tag()) // this is cool for swift
  return false
}

Ответ 15

Это случилось со мной, и после прочтения журнала входа в навигатор проблем я узнал, что у меня есть два быстрых файла с таким же именем. Это создавало проблему, и я получал ошибку сборки.

Ответ 16

Я получил эту ошибку из-за недостающего файла в моем проекте. Добавлен этот файл снова, и вояла все сработало.

Ответ 17

В моем случае это был неправильный метод переопределения. Базовый класс:

open func send(_ onSuccess: @escaping ((SomeType) -> Void)) -> SomeType { }

Подкласс:

open override func send(_ onSuccess: ((SomeType) -> Void)) -> SomeType { }

Как вы видите, @escaping отсутствует. Преобразователь Swift3 в XCode8 не рассматривает отношения наследования, более того, ошибки этого типа не отмечены как ошибки.

Ответ 18

В моем случае это была ошибка симулятора, просто удалить приложение из симулятора и очистить проект, а затем запустить проект.

Ответ 19

Я случайно перетащил символические ссылки (псевдонимы) в исходные файлы в проект вместо фактических файлов.

Ответ 20

Я дважды генерировал файлы с CoreData (и добавил себя). Проверьте, что файлы не дублируются.

Ответ 21

К сожалению, эта ошибка часто вызвана сбоем внутри компилятора Swift. Причина не всегда легко найти. Если очистка не работает, я хочу попытаться прокомментировать последний код, который вы написали (даже при необходимости весь файл). Обычно комментирование последнего введенного кода восстанавливает компиляцию, и вы получите более значимые ошибки. Оттуда вы должны попытаться расколоть код по частям, пока не получите инструкцию, вызвавшую эту ошибку. Компилятор Swift все еще довольно молод и время от времени сообщает о странных ошибках. Такие ошибки совершенно бесполезны, потому что вместо того, чтобы помогать разработчикам, они только путают их еще больше. Я бы предложил Apple изменить компилятор, чтобы предоставить более подробную информацию и избежать этой досадной ошибки, появляющейся больше.

Ответ 22

NSString const *kGreenColor = @"#00C34E"; 

У меня была строка выше в файле Constant.h. который предназначен только для препроцессоров. Удаление этой линии работало для меня.

Ответ 23

перемещение файла Bridge на уровень проекта разрешает мою проблему.

Ответ 24

В моем случае я переименовал файл. После фиксации я обнаружил, что имя файла по-прежнему не изменилось в проекте XCode (не знаю почему), файл был серым. Смена имени и повторная фиксация сделали свое дело.

Поэтому мы должны следить за этой ошибкой при внесении изменений в файлы с помощью контроля версий.

Ответ 25

В моем случае я деинтегрировал блоки, удалил подфайл и снова инициализировал блоки и установил их. И это сработало для меня.