Cronologia delle versioni di Objective Sharpie
3.4 (11 ottobre 2017)
- Supporto per Xcode 9: iOS 11, macOS 10.13, tvOS 11 e watchOS 4
- I problemi relativi a SIMD e tgmath dovrebbero ora essere risolti
- La telemetria è stata rimossa completamente
3.3 (3 agosto 2016)
- Supporto per Xcode 8 Beta 4, iOS 10, macOS 10.12, tvOS 10 e watchOS 3.
- Aggiornamento alla build master Clang più recente (2016-08-02)
- Rendere persistenti le opzioni di invio dei dati di telemetria da
sharpie pod bind
asharpie bind
.
3.2 (14 giugno 2016)
- Supporto per Xcode 8 Beta 1, iOS 10, macOS 10.12, tvOS 10 e watchOS 3.
3.1 (31 maggio 2016)
- Supporto per CocoaPods 1.0
- Miglioramento dell'affidabilità dell'associazione CocoaPods creando prima un elemento nativo
.framework
e quindi associandolo - Copiare CocoaPods
.framework
e la definizione di associazione in unaBinding
directory per semplificare l'integrazione con i progetti di associazione Xamarin.iOS e Xamarin.Mac
3.0 (5 ottobre 2015)
- Supporto per le nuove Objective-C funzionalità del linguaggio, inclusi generics leggeri e nullbility, come introdotto in Xcode 7
- Supporto per gli SDK iOS e Mac più recenti.
- Supporto per la compilazione e l'analisi del progetto Xcode. È ora possibile passare un progetto Xcode completo a Objective Sharpie e farà del suo meglio per capire la cosa giusta da fare (ad esempio
sharpie bind Project.xcodeproj -sdk ios
). - Supporto cocoaPods ! È ora possibile configurare, compilare e associare CocoaPods direttamente da Objective Sharpie (ad esempio
sharpie pod init ios AFNetworking && sharpie pod bind
). - Quando si associano framework, i moduli Clang verranno abilitati se il framework li supporta, determinando l'analisi più corretta di un framework, poiché la struttura del framework è definita dal relativo
module.modulemap
. - Per i progetti Xcode che compilano un prodotto framework, analizzare il prodotto anziché le destinazioni di prodotto intermedie come destinazioni non framework in un progetto Xcode possono avere ancora ambiguità che non possono essere risolte automaticamente.
2.1.6 (17 marzo 2015)
- Binding dell'espressione dell'operatore binario fisso: il lato sinistro dell'espressione è stato scambiato in modo non corretto con la mano destra( ad esempio
1 << 0
, è stato associato erroneamente come0 << 1
). Grazie ad Adam Kemp per aver notato questo! - È stato risolto un problema relativo
NSInteger
a eNSUInteger
associato comeint
euint
invece dinint
enuint
su i386.-DNS_BUILD_32_LIKE_64
Ora viene passato a Clang per eseguire l'analisiobjc/NSObjCRuntime.h
come previsto in i386. - L'architettura predefinita per gli SDK mac OS X (ad esempio
-sdk macosx10.10
) è ora x86_64 anziché i386, quindi-arch
può essere omessa a meno che non si desideri eseguire l'override del valore predefinito.
2.1.0 (15 marzo 2015)
sizeof
Le espressioni C il cui tipo di argomento non esegue il mapping a un tipo primitivo C# verranno valutate in Clang e associate come valore letterale integer per evitare di generare C#.- Correzione Objective-C della sintassi per le proprietà il cui tipo è un blocco (Objective-C il codice viene visualizzato nei commenti sopra le dichiarazioni associate).
- Associare i tipi decaditi come tipo originale (
int[]
decadi duranteint*
l'analisi semantica in Clang, ma associarlo come originale come scritto come scrittoint[]
).
Grazie molto a Dave Dunkin per la segnalazione di molti dei bug risolti in questa versione punto!
2.0.0: 9 marzo 2015
Objective Sharpie 2.0 è una versione principale che include un driver e un parser basati su Clang migliorati e un nuovo motore di associazione basato su NRefactory. Questi componenti migliorati offrono associazioni molto migliori, in particolare per l'associazione di tipi. Sono stati apportati molti altri miglioramenti interni a Objective Sharpie, che produrranno molte funzionalità visibili dall'utente nelle versioni future.
Objective Sharpie 2.0 si basa su Clang 3.6.1.
Miglioramenti dell'associazione dei tipi
Objective-C i blocchi sono ora supportati. Sono inclusi blocchi anonimi/inline e blocchi denominati tramite
typedef
. I blocchi anonimi verranno associati comeSystem.Action
delegati oSystem.Func
, mentre i blocchi denominati verranno associati come tipi con nomedelegate
sicuro.Esiste un'euristica dei nomi migliorata per le enumerazioni anonime che sono immediatamente precedute da una
typedef
risoluzione in un tipo integrale predefinito, adlong
esempio oint
.I puntatori C sono ora associati come puntatori C#
unsafe
anzichéSystem.IntPtr
. Ciò consente di ottenere maggiore chiarezza nell'associazione per quando è possibile trasformare i parametri del puntatore inout
parametri oref
. Non è sempre possibile dedurre se un parametro deve essereout
oref
, quindi il puntatore viene mantenuto nell'associazione per consentire un controllo più semplice.Un'eccezione all'associazione del puntatore precedente è quando viene rilevato un puntatore a 2 rango a un Objective-C oggetto come parametro. In questi casi, la convenzione è predominante e il parametro verrà associato come
out
(ad esempioNSError **error
, →out NSError error
).
Verificare l'attributo
Spesso si nota che le associazioni prodotte da Objective Sharpie verranno ora annotate con l'attributo [Verify]
. Questi attributi indicano che è necessario verificare che Objective Sharpie abbia fatto la cosa corretta confrontando l'associazione con la dichiarazione C/Objective-C originale (che verrà fornita in un commento sopra la dichiarazione associata).
La verifica è consigliata per tutte le dichiarazioni associate, ma è molto probabile che sia necessaria per le dichiarazioni annotate con l'attributo [Verify]
. Ciò è dovuto al fatto che in molte situazioni non sono presenti metadati sufficienti nel codice sorgente nativo originale per dedurre come produrre al meglio un'associazione. Potrebbe essere necessario fare riferimento alla documentazione o ai commenti di codice all'interno dei file di intestazione per prendere una decisione di associazione ottimale.
Per altri dettagli, vedere la documentazione relativa agli attributi di verifica.
Altri miglioramenti rilevanti
using
Le istruzioni vengono ora generate in base ai tipi associati. Ad esempio, se un oggettoNSURL
è stato associato, verrà generata anche un'istruzioneusing Foundation;
.struct
eunion
le dichiarazioni verranno ora associate, usando il[FieldOffset]
trucco per le unioni.I valori di enumerazione con inizializzatori di espressioni costanti verranno ora associati correttamente; l'espressione completa viene convertita in C#.
I metodi e i blocchi variadic sono ora associati.
I framework sono ora supportati tramite l'opzione
-framework
. Per altri dettagli, vedere la documentazione su Binding Native Frameworks (Binding Native Frameworks ).Objective-C il codice sorgente verrà rilevato automaticamente ora, eliminando la necessità di passare
-ObjC
o-xobjective-c
a Clang manualmente.L'utilizzo del modulo Clang (
@import
) viene ora rilevato automaticamente, eliminando la necessità di passare-fmodules
manualmente a Clang per le librerie che usano il nuovo supporto del modulo in Clang.L'API unificata di Xamarin è ora la destinazione di associazione predefinita; usare l'opzione
-classic
per specificare come destinazione l'API classica solo a 32 bit.
Correzioni di bug rilevanti
- Correzione dell'associazione
instancetype
quando viene usata in una Objective-C categoria - Categorie di nomi Objective-C completi
- Prefissi Objective-C protocolli con
I
(ad esempioINSCopying
, anzichéNSCopying
)
1.1.35: 21 dicembre 2014
Correzione di bug di minore entità.
1.1.1: 15 dicembre 2014
1.1.1 è stata la prima versione principale dopo 1,5 anni di uso interno e sviluppo a Xamarin dopo l'anteprima iniziale di Objective Sharpie nell'aprile 2013. Questa versione è la prima a essere generalmente considerata stabile e utilizzabile per un'ampia gamma di librerie native, con un nuovo back-end Clang.