ios - swift falló con el código de salida 1 mientras se compilaba en Xcode, posiblemente relacionado con Bridging-Headers
objective-c core-plot (23)
Tengo un proyecto Obj-C. Estoy intentando migrar a Swift. Tuve éxito con varias clases, pero recientemente me encontré con un problema que parece no tener sentido. Cuando trato de compilar mi base de código actual obtengo lo siguiente (MENSAJE DE ERROR SÚPER INELUDIBLE)
Mi única suposición es que de alguna manera está relacionada con mis encabezados de enlace, pero Xcode no me da suficiente información para averiguar si esto es realmente cierto.
Estoy usando Cocoapods
para agregar CorePlot
a mi proyecto. Intento migrar la siguiente clase para acelerar:
Clase 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
Clase Obj-c (ScatterPlotContainer.m)
#import <CorePlot/CPTScatterPlot.h>
#import "ScatterPlotContainer.h"
@implementation ScatterPlotContainer {
}
@end
Conversión Swift
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;
}
Mi archivo de encabezados de puente
#import <CorePlot/CPTScatterPlot.h>
Lo que he intentado hasta ahora
Cuando comento el #import <CorePlot/CPTScatterPlot.h>
del archivo de encabezados Bridging - recibo un error en swift porque no sabe qué es CPTScatterPlot
También probé #import <CPTScatterPlot.h>
que tampoco funcionó.
Pensamientos
Entonces, lo único en lo que puedo pensar es tal vez porque estoy usando una cápsula de cacao, hay algún tipo de nombre de módulo que necesito agregar. El mensaje de error realmente no es tan útil. ¿Alguien tiene alguna sugerencia sobre algún error grave que haya cometido o cómo obtener un mensaje de error más descriptivo para descubrir qué está pasando?
¡Gracias!
Hice lo mismo, dice toda la respuesta, pero mi problema no se resolvió. Me di cuenta de que el problema estaba relacionado con una llamada de función interrumpida.
Una sintaxis de función no era incorrecta, pero su mecanismo de llamada era incorrecto.
Para verificar el error exacto de este problema, verifique lo siguiente:
Seleccione el navegador de problemas> Hacer clic en error mostrará los registros de error> En esa pestaña seleccione Todos los mensajes.
Esto mostrará todos los registros de detalle para este error.
Desplázate hacia abajo y tienes registros como, en mi caso
Entonces, al leer esto, descubro que hay algo mal con la función de llamada. Busco en mi código y lo resuelvo. A continuación se muestra el código correcto y el código incorrecto.
Sentido Contrario:
var region = MKCoordinateRegionMake(self.mapView.userLocation.coordinate, span)
// It will not shown error here but when you build project compiler shows error.
Manera correcta:
let region = MKCoordinateRegion(center: self.mapView.userLocation.coordinate, span: span)
Otra solución para este problema es verificar que no tenga 2 o más archivos con los mismos nombres de archivo. Me solucionó el problema.
Obtuve el mismo error al incluir este código en un bloque 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)
}
}
Tomó una gran cantidad de prueba / error para cazar esto. Eliminando super.
permitido la construcción para continuar.
Tuve el mismo mensaje de error. Lo que ayudó fue establecer el nivel de optimización en la configuración rápida del compilador en Ninguno. Esta no es realmente una solución para mí y creo que es uno de los muchos errores en el veloz compilador.
Me encontré con esta última noche y nada de lo anterior solucionaba mi problema. Estaba a punto de hacer algo muy malo en mi computadora portátil cuando vi, por pura suerte, que UN (1) archivo era una codificación de texto establecida en UTF-16?!?! ¿WTF?
Este fue el último archivo en el que estaba trabajando, y probablemente, un mal corte / pegar "importar" un personaje extraño en la arena. Hice un corte / pegado de mi código en este archivo a un editor de texto bare bone. Eliminé el archivo, lo recreé y pegué mi código ... y voilà! funciona.
¡Haz lo anterior, pero también verifica la codificación de tu archivo! :-)
1) Identifica el archivo allí el problema. Puede copiar y pegar las instrucciones de compilación en la consola y la última pantalla contendrá la descripción del error. Tenga en cuenta el número pid allí se identificó el problema. A continuación, desplácese hacia arriba y encuentre el pid y las instrucciones relacionadas: habrá un archivo por pid, por lo que encontrará que el archivo tiene problemas.
2) Mira a través del archivo y verifica todos tus últimos cambios. Si tienes git initialized puedes usar
git diff <file name>
Tuvimos un tiempo horrible con este error durante más de 3 horas al ir meticulosamente de un archivo a otro y revertir los cambios y ver si ese archivo tenía el problema. Probé la primera respuesta pero no me dio ninguna respuesta. Encontré el problema y fue porque tenía una propiedad no computada con el mismo nombre que una propiedad calculada de una subclase. Realmente espero que el depurador se vuelva más robusto al manejar este tipo de casos en futuras actualizaciones :(
Como todos los demás han estado mostrando los suyos, mostraré el mío:
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
}}
}
Increíblemente, esto no aparece en Playground, pero falla cuando se coloca en el código en un marco. Aunque es una sintaxis legal (se usa para funcionar, todavía funciona en el patio de recreo), el compilador de Swift parece querer que PathPosition se califique con self.
. Tenga en cuenta que es (relativamente) el código anterior y se utiliza para compilar, tal vez algo se rompió en 6.1.
Editar:
Siento que me estoy volviendo loco, pero parece que aquí hay un problema de complejidad mayor, donde el código circundante puede afectar este problema. Vi cosas compilar anoche, cambié algunos códigos y configuraciones nuevamente hoy, y me falló nuevamente. Hoy, tuve que hackear un montón de código realmente estúpido para que funcione:
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)
}}
Por lo que vale, el mensaje de error real que recibí, según las útiles instrucciones anteriores, fue:
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!
Estoy asustado por el mañana.
En cuanto a @Kampal, todavía estoy luchando por averiguar cuánto especificar en una llamada a función. Por ejemplo, crear un objeto UIColor a veces requiere que se especifique UIColor, y a veces no.
Ambos funcionan:
playButton.backgroundColor = .darkGrayColor()
playButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
Esto produce el error de exit code 1
en la compilación, sin ninguna advertencia de depuración. # time-sucking debug vortex
playButton.setTitleColor(.whiteColor(), forState: UIControlState.Normal)
Entonces tengo una nueva regla: cuando se usa una función que toma más de un parámetro, sea explícito.
Ahora volvemos a jugar swift: AVOID THE VORTEX
Acabo de tener el mismo error, el problema era que había anulado un método con un parámetro no opcional y había hecho que el parámetro fuera opcional en la anulación. (el parámetro del method
continuación)
func logNetworkCallDurationForMethod(method:String, path:String, milliseconds: UInt) {
}
override func logNetworkCallDurationForMethod(method:String?, path:String, milliseconds: UInt) {
}
Se metió en este tema hoy en realidad. Fue el resultado de una extracción reciente de git en un proyecto donde se había eliminado un archivo, pero no se actualizó en mi proyecto local.
Al hacer clic en el error, apareció la ubicación del archivo "faltante", fue y eliminó su referencia en el Navegador del proyecto. Se arregló el error, se limpió y se compiló con éxito.
Esto me sucedió cuando intenté hacer referencia a un método a partir de un argumento de protocolo inmutable (por error, pensé que el miembro era una propiedad):
Tener una interfaz de la siguiente manera:
public protocol NSValidatedUserInterfaceItem {
func tag() -> Int
}
Accidente de compilación
func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool {
print(anItem.tag) // oopsie, tag is a function
return false
}
Rendimiento de compilación
func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool {
print(anItem.tag()) // this is cool for swift
return false
}
Esto me sucedió a mí y después de leer el navegador de problemas de inicio de sesión descubrí que tengo dos archivos rápidos con el mismo nombre. Esto estaba creando el problema y me estaba fallando la compilación.
Recibí este error debido a que faltaba un archivo en mi proyecto. Se agregó este archivo nuevamente y todo funcionó.
Gracias @Kampai por el consejo de revisar el mensaje de error. Lo leí y me faltaron algunos archivos:
<unknown>:0: error: no such file or directory:
De alguna manera, algunos archivos fueron eliminados durante una extracción de GitHub. Los archivos están en el directorio, pero no en el proyecto de Xcode.
Haga clic derecho en una carpeta y haga clic en ''Agregar archivos a ...'' para agregar manualmente los archivos faltantes a Xcode. Eso solucionó el problema para mí.
Esto ya me pasó varias veces, pero ahora sé cómo solucionarlo / o /
En mi caso, fue un método erróneo anulando. Clase base:
open func send(_ onSuccess: @escaping ((SomeType) -> Void)) -> SomeType { }
Subclase:
open override func send(_ onSuccess: ((SomeType) -> Void)) -> SomeType { }
Como ves, falta @escaping
. El convertidor Swift3 en XCode8 no considera las relaciones de herencia, además, ese tipo de errores no están marcados como errores.
En mi caso, fue un error del simulador, simplemente desinstala la aplicación del simulador y limpia el proyecto, luego ejecuta el proyecto.
Había arrastrado accidentalmente enlaces simbólicos (alias) a archivos fuente en el proyecto en lugar de los archivos reales.
Tenía archivos generados por CoreData dos veces (y me agregué). Verifique que los archivos no estén duplicados.
Simplemente eliminar los datos derivados y la limpieza me ayudó
Desafortunadamente, este error a menudo es causado por un error dentro del compilador de Swift. No siempre es fácil encontrar el motivo. Si la limpieza no funciona, mi sugerencia es tratar de comentar el último código que escribió (incluso el archivo completo si es necesario). Por lo general, al comentar el último código que ingresó, se restaurará la compilación y obtendrá errores más significativos. A partir de ahí, debe intentar descomentar el código pieza por pieza hasta que obtenga las instrucciones que causaron este error. El compilador de Swift es todavía bastante joven y de vez en cuando informa errores extraños. Este tipo de errores son completamente inútiles, porque en lugar de ayudar a los desarrolladores, solo los confunden aún más. Sugiero a Apple que cambie el compilador para brindar información más detallada y evitar que este molesto error aparezca más.
NSString const *kGreenColor = @"#00C34E";
Tenía una línea superior en mi archivo Constant.h que estaba destinado solo a los preprocesadores. Eliminar esa línea funcionó para mí.
al mover el archivo Bridge al nivel del proyecto, resuelvo mi problema.