Partager via


Objective Sharpie Release History

3.4 (11 octobre 2017)

Télécharger v3.4.0

  • 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 vers sharpie 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 un Binding 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 que 0 << 1). Merci à Adam Kemp de noter cela !
  • Correction d’un problème lié et lié NSIntegerNSUInteger comme int et uint non nintnuint sur i386 ; -DNS_BUILD_32_LIKE_64 est maintenant passé à Clang pour faire fonctionner l’analyse objc/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 pendant int* l’analyse sémantique en Clang, mais liez-le comme l’original tel qu’écrit int[] à 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 que System.Action délégués System.Func , tandis que les blocs nommés sont liés comme des types fortement nommés delegate .

  • 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 que long ou int.

  • Les pointeurs C sont désormais liés en tant que pointeurs C# unsafe au lieu de System.IntPtr. Cela donne plus de clarté dans la liaison lorsque vous souhaiterez peut-être transformer les paramètres de pointeur en out paramètres ou ref paramètres. Il n’est pas possible de toujours déduire si un paramètre doit être out ou ref, 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 exemple NSError **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 une NSURL valeur était liée, une using Foundation; instruction sera également générée.

  • struct et union 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 de NSCopyingI )

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.