Ho problemi a collegare il mio framework con il codice che sfrutta tale framework. In particolare, il linker non è in grado di trovare i simboli per le estensioni per le strutture generiche.Swift Framework non include i simboli dalle estensioni alle strutture generiche
Questo è ciò che una delle estensioni assomiglia per facoltativo:
extension Optional {
/// Unwrap the value returning 'defaultValue' if the value is currently nil
func or(defaultValue: T) -> T {
switch(self) {
case .None:
return defaultValue
case .Some(let value):
return value
}
}
}
Questo metodo funziona alla grande in un parco giochi o in un app se il codice viene compilato all'interno della parte principale della app. Tuttavia, quando provo a compilare questo in un quadro, applicazioni (e anche i test per il quadro) producono il seguente errore di linker:
Undefined symbols for architecture i386: "__TFSq2orU__fGSqQ__FQQ", referenced from: __TFC18SwiftPlusPlusTests27Optional_SwiftPlusPlusTests13testOrWithNilfS0_FT_T_ in Optional+SwiftPlusPlusTests.o
metodi simili come quello seguente, collegano bene (avviso, non è su un generico)
extension String {
/// Returns a string by repeating it 'times' times
func repeat(times: Int) -> String {
var result = ""
for i in 0..times {
result += self
}
return result
}
}
ci sono altre due estensioni all'interno della mia repository su GitHub: SwiftPlusPlus che anche non collegare (entrambi su strucs generici). Si riprodurranno gli errori se si estrae l'ultimo commit, si costruisce il framework e quindi si tenta di eseguire i test unitari.
Finora ho provato a eseguire "stringhe" sul framework emesso e sui file intermedi e non vedo i simboli per queste estensioni ma vedo i simboli per l'estensione del metodo repeat
su String
. Quindi non sembra nemmeno che li stia compilando nella libreria.
Qualcuno sa perché i simboli non sono definiti nel framework?
Modifica
- Here è un link al mio estensione opzionale
- Here è un collegamento al file di test che causa l'errore di linker quando si cerca di compilare il target di test
proposito, si parla di generici al posto di modello nella Swift –
@BryanChen oh buona chiamata, aggiornerò la mia domanda, grazie – drewag
è possibile collegare alla classe definita in la tua struttura? e potresti aver bisogno di 'import YourFramworkModuleName' –