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
В моем случае я деинтегрировал блоки, удалил подфайл и снова инициализировал блоки и установил их. И это сработало для меня.