Objective Sharpie Release History
3.4 (11 octobre 2017)
- Prise en charge de Xcode 9 : iOS 11, macOS 10.13, tvOS 11 et watchOS 4
- Les problèmes avec SIMD et tgmath doivent maintenant être résolus
- La télémétrie a été complètement supprimée
3.3 (3 août 2016)
- Prise en charge de Xcode 8 Beta 4, iOS 10, macOS 10.12, tvOS 10 et watchOS 3.
- Mise à jour vers la dernière build principale Clang (2016-08-02)
- Conserver les options de soumission de télémétrie de
sharpie pod bind
verssharpie bind
.
3.2 (14 juin 2016)
- Prise en charge de Xcode 8 Beta 1, iOS 10, macOS 10.12, tvOS 10 et watchOS 3.
3.1 (31 mai 2016)
- Prise en charge de CocoaPods 1.0
- Amélioration de la fiabilité des liaisons CocoaPods en créant d’abord une liaison native
.framework
, puis en liant celle-ci - Copier cocoaPods
.framework
et définition de liaison dans unBinding
répertoire pour faciliter l’intégration avec les projets de liaison Xamarin.iOS et Xamarin.Mac
3.0 (5 octobre 2015)
- Prise en charge des nouvelles Objective-C fonctionnalités de langage, notamment les génériques légers et la nullabilité, comme introduit dans Xcode 7
- Prise en charge des kits SDK iOS et Mac les plus récents.
- Prise en charge de la création et de l’analyse de projets Xcode ! Vous pouvez maintenant passer un projet Xcode complet à Objective Sharpie et il fera de son mieux pour déterminer la bonne chose à faire (par exemple
sharpie bind Project.xcodeproj -sdk ios
). - Prise en charge de CocoaPods ! Vous pouvez maintenant configurer, générer et lier CocoaPods directement à partir d’Objective Sharpie (par exemple
sharpie pod init ios AFNetworking && sharpie pod bind
). - Lors de la liaison d’infrastructures, les modules Clang sont activés si le framework les prend en charge, ce qui entraîne l’analyse la plus correcte d’une infrastructure, car la structure de l’infrastructure est définie par son
module.modulemap
. - Pour les projets Xcode qui créent un produit framework, analysez ce produit au lieu de cibles de produit intermédiaires en tant que cibles non-framework dans un projet Xcode peut toujours avoir des ambiguïtés qui ne peuvent pas être résolues automatiquement.
2.1.6 (17 mars 2015)
- Correction de la liaison d’expression d’opérateur binaire : le côté gauche de l’expression a été permuté de manière incorrecte avec la main droite (par exemple,
1 << 0
était incorrectement lié en tant que0 << 1
). Merci à Adam Kemp de noter cela ! - Correction d’un problème lié et lié
NSInteger
NSUInteger
commeint
etuint
nonnint
nuint
sur i386 ;-DNS_BUILD_32_LIKE_64
est maintenant passé à Clang pour faire fonctionner l’analyseobjc/NSObjCRuntime.h
comme prévu sur i386. - L’architecture par défaut pour les kits SDK Mac OS X (par exemple
-sdk macosx10.10
) est désormais x86_64 au lieu d’i386, et peut donc-arch
être omis, sauf si la substitution de la valeur par défaut est souhaitée.
2.1.0 (15 mars 2015)
sizeof
Les expressions C dont le type d’argument ne mappe pas à un type primitif C# sont évaluées en Clang et liées en tant que littéral entier pour éviter de générer un C# non valide.- Correction Objective-C de la syntaxe des propriétés dont le type est un bloc (Objective-C le code apparaît dans les commentaires au-dessus des déclarations liées).
- Liez les types détériorés comme leur type d’origine (
int[]
se décompose pendantint*
l’analyse sémantique en Clang, mais liez-le comme l’original tel qu’écritint[]
à la place).
Merci beaucoup à Dave Dunkin de signaler de nombreux bogues corrigés dans cette version de point !
2.0.0 : 9 mars 2015
Objective Sharpie 2.0 est une version majeure qui propose un pilote et un analyseur Clang améliorés et un nouveau moteur de liaison NRefactory. Ces composants améliorés offrent de meilleures liaisons, en particulier autour de la liaison de type. De nombreuses autres améliorations ont été apportées qui sont internes à Objective Sharpie, ce qui génère de nombreuses fonctionnalités visibles par l’utilisateur dans les versions ultérieures.
Objective Sharpie 2.0 est basé sur Clang 3.6.1.
Améliorations apportées à la liaison de type
Objective-C les blocs sont désormais pris en charge. Cela inclut des blocs anonymes/inline et des blocs nommés via
typedef
. Les blocs anonymes sont liés en tant queSystem.Action
déléguésSystem.Func
, tandis que les blocs nommés sont liés comme des types fortement nommésdelegate
.Il existe une amélioration de l’heuristique de nommage pour les énumérations anonymes qui sont immédiatement précédées d’une
typedef
résolution d’un type intégral intégré intégré tel quelong
ouint
.Les pointeurs C sont désormais liés en tant que pointeurs C#
unsafe
au lieu deSystem.IntPtr
. Cela donne plus de clarté dans la liaison lorsque vous souhaiterez peut-être transformer les paramètres de pointeur enout
paramètres ouref
paramètres. Il n’est pas possible de toujours déduire si un paramètre doit êtreout
ouref
, de sorte que le pointeur est conservé dans la liaison pour faciliter l’audit.Une exception à la liaison de pointeur ci-dessus est lorsqu’un pointeur de 2 rangs vers un Objective-C objet est rencontré en tant que paramètre. Dans ce cas, la convention est prédominante et le paramètre est lié comme
out
(par exempleNSError **error
, →out NSError error
).
Vérifier l’attribut
Vous constaterez souvent que les liaisons produites par Objective Sharpie seront désormais annotées avec l’attribut [Verify]
. Ces attributs indiquent que vous devez vérifier que Objective Sharpie a fait la bonne chose en comparant la liaison à la déclaration C/Objective-C d’origine (qui sera fournie dans un commentaire au-dessus de la déclaration liée).
La vérification est recommandée pour toutes les déclarations liées, mais est probablement requise pour les déclarations annotées avec l’attribut [Verify]
. Cela est dû au fait que, dans de nombreuses situations, il n’y a pas suffisamment de métadonnées dans le code source natif d’origine pour déduire comment produire au mieux une liaison. Vous devrez peut-être référencer la documentation ou les commentaires de code dans les fichiers d’en-tête pour prendre la meilleure décision de liaison.
Pour plus d’informations, consultez la documentation Vérifier les attributs .
Autres améliorations notables
using
les instructions sont désormais générées en fonction des types liés. Par exemple, si uneNSURL
valeur était liée, uneusing Foundation;
instruction sera également générée.struct
etunion
les déclarations seront maintenant liées, à l’aide de l’astuce[FieldOffset]
pour les syndicats.Les valeurs d’énumération avec des initialiseurs d’expression constante seront désormais correctement liées ; l’expression complète est traduite en C#.
Les méthodes et blocs variadiques sont désormais liés.
Les frameworks sont désormais pris en charge via l’option
-framework
. Pour plus d’informations, consultez la documentation sur Binding Native Frameworks .Objective-C Le code source est détecté automatiquement maintenant, ce qui doit éliminer la nécessité de passer
-ObjC
ou-xobjective-c
de passer manuellement à Clang.L’utilisation du module Clang (
@import
) est désormais détectée automatiquement, ce qui doit éliminer la nécessité de passer-fmodules
manuellement à Clang pour les bibliothèques qui utilisent la prise en charge du nouveau module dans Clang.L’API unifiée Xamarin est désormais la cible de liaison par défaut ; utilisez l’option
-classic
pour cibler l’API classique 32 bits uniquement.
Correctifs de bogues notables
- Correction
instancetype
de la liaison lorsqu’elle est utilisée dans une Objective-C catégorie - Catégories de noms Objective-C complètes
- Protocoles de préfixe Objective-C avec (par exemple,
INSCopying
au lieu deNSCopying
I
)
1.1.35 : 21 décembre 2014
Correctifs de bogues mineurs.
1.1.1 : 15 décembre 2014
1.1.1 a été la première version majeure après 1,5 ans d’utilisation interne et de développement chez Xamarin après la préversion initiale de Objective Sharpie en avril 2013. Cette version est la première à être généralement considérée comme stable et utilisable pour une grande variété de bibliothèques natives, avec un nouveau back-end Clang.