Historial de versiones de Objective Sharpie

3.4 (11 de octubre de 2017)

Descargar v3.4.0

  • Compatibilidad con Xcode 9: iOS 11, macOS 10.13, tvOS 11 y watchOS 4
  • Los problemas con SIMD y tgmath ahora deben corregirse
  • La telemetría se ha quitado completamente

3.3 (3 de agosto de 2016)

  • Compatibilidad con Xcode 8 Beta 4, iOS 10, macOS 10.12, tvOS 10 y watchOS 3.
  • Actualizado a la última compilación maestra de Clang (2016-08-02)
  • Conservar las opciones de envío de telemetría de sharpie pod bind a sharpie bind.

3.2 (14 de junio de 2016)

  • Compatibilidad con Xcode 8 Beta 1, iOS 10, macOS 10.12, tvOS 10 y watchOS 3.

3.1 (31 de mayo de 2016)

  • Compatibilidad con CocoaPods 1.0
  • Se ha mejorado la confiabilidad del enlace de CocoaPods mediante la creación de un nativo .framework y, a continuación, el enlace que
  • Copia de CocoaPods .framework y definición de enlace en un Binding directorio para facilitar la integración con proyectos de enlace de Xamarin.iOS y Xamarin.Mac

3.0 (5 de octubre de 2015)

  • Compatibilidad con nuevas Objective-C características de lenguaje, incluidos genéricos ligeros y nulabilidad, como se introdujo en Xcode 7
  • Compatibilidad con los SDK de iOS y Mac más recientes.
  • Compatibilidad con la compilación y el análisis de proyectos de Xcode. Ahora puede pasar un proyecto Xcode completo a Objective Sharpie y hará lo mejor para averiguar lo correcto (por ejemplo, sharpie bind Project.xcodeproj -sdk ios).
  • ¡Soporte de CocoaPods ! Ahora puede configurar, compilar y enlazar CocoaPods directamente desde Objective Sharpie (por ejemplo, sharpie pod init ios AFNetworking && sharpie pod bind).
  • Al enlazar marcos, los módulos clang se habilitarán si el marco los admite, lo que da como resultado el análisis más correcto de un marco, ya que la estructura del marco se define mediante su module.modulemap.
  • En el caso de los proyectos de Xcode que crean un producto de marco, analice ese producto en lugar de destinos intermedios como destinos que no sean marcos en un proyecto de Xcode todavía puede tener ambigüedades que no se pueden resolver automáticamente.

2.1.6 (17 de marzo de 2015)

  • Se ha corregido el enlace de expresiones de operador binario: el lado izquierdo de la expresión se intercambiaba incorrectamente con la mano derecha (por ejemplo, 1 << 0 estaba enlazado incorrectamente como 0 << 1). Gracias a Adam Kemp por notar esto!
  • Se ha corregido un problema con NSInteger y NSUInteger que se enlazaba como int y uint en lugar de nint y nuint en i386; -DNS_BUILD_32_LIKE_64 ahora se pasa a Clang para que el análisis objc/NSObjCRuntime.h funcione según lo previsto en i386.
  • La arquitectura predeterminada para los SDK de Mac OS X (por ejemplo -sdk macosx10.10, ) ahora es x86_64 en lugar de i386, por lo que -arch se puede omitir a menos que se invalide el valor predeterminado.

2.1.0 (15 de marzo de 2015)

  • sizeof Las expresiones de C cuyo tipo de argumento no se asigna a un tipo primitivo de C# se evaluarán en Clang y se enlazarán como un literal entero para evitar generar C#no válido.
  • Se ha corregido Objective-C la sintaxis de las propiedades cuyo tipo es un bloque (Objective-C el código aparece en los comentarios sobre declaraciones enlazadas).
  • Enlazar tipos descaídos como su tipo original (int[] se desintegra durante int* el análisis semántico en Clang, pero enlazarlo como original como escrito int[] en su lugar).

¡Muchas gracias a Dave Dunkin por informar de muchos de los errores corregidos en esta versión puntual!

2.0.0: 9 de marzo de 2015

Objective Sharpie 2.0 es una versión principal que incluye un controlador y analizador basado en Clang mejorado y un nuevo motor de enlace basado en NRefactory. Estos componentes mejorados proporcionan enlaces mucho mejores, especialmente en torno al enlace de tipos. Se han realizado muchas otras mejoras que son internas para Objective Sharpie, lo que producirá muchas características visibles para el usuario en futuras versiones.

Objective Sharpie 2.0 se basa en Clang 3.6.1.

Mejoras en el enlace de tipos

  • Objective-C ahora se admiten bloques. Esto incluye bloques y bloques anónimos o insertados denominados a través de typedef. Los bloques anónimos se enlazarán como System.Action o System.Func delegados, mientras que los bloques con nombre se enlazarán como tipos con nombre delegate seguro.

  • Hay una heurística de nomenclatura mejorada para enumeraciones anónimas que van precedidas inmediatamente por una typedef resolución de un tipo entero integrado como long o int.

  • Los punteros de C ahora están enlazados como punteros de C# unsafe en lugar de System.IntPtr. Esto da como resultado una mayor claridad en el enlace para cuando puede que desee convertir los parámetros de puntero en out parámetros o ref . No es posible deducir siempre si un parámetro debe ser out o ref, por lo que el puntero se conserva en el enlace para permitir una auditoría más sencilla.

  • Una excepción al enlace de puntero anterior es cuando se encuentra un puntero de 2 rangos a un Objective-C objeto como parámetro. En estos casos, la convención es predominante y el parámetro se enlazará como out (por ejemplo NSError **error , → out NSError error).

Comprobar atributo

A menudo encontrará que los enlaces generados por Objective Sharpie ahora se anotarán con el [Verify] atributo . Estos atributos indican que debe comprobar que Objective Sharpie hizo lo correcto comparando el enlace con la declaración C/Objective-C original (que se proporcionará en un comentario encima de la declaración enlazada).

Se recomienda la comprobación para todas las declaraciones enlazadas, pero es más probable que sea necesaria para las declaraciones anotadas con el [Verify] atributo . Esto se debe a que, en muchas situaciones, no hay suficientes metadatos en el código fuente nativo original para deducir cómo generar mejor un enlace. Es posible que tenga que hacer referencia a documentación o comentarios de código dentro de los archivos de encabezado para tomar la mejor decisión de enlace.

Consulte la documentación De comprobación de atributos para obtener más detalles.

Otras mejoras importantes

  • using Las instrucciones ahora se generan en función de los tipos enlazados. Por ejemplo, si se NSURL ha enlazado , también se generará una using Foundation; instrucción .

  • struct y union las declaraciones ahora estarán enlazadas, usando el [FieldOffset] truco para los sindicatos.

  • Los valores de enumeración con inicializadores de expresiones constantes ahora se enlazarán correctamente; la expresión completa se traduce a C#.

  • Ahora se enlazan los métodos y bloques variádicos.

  • Ahora se admiten marcos a través de la -framework opción . Consulte la documentación sobre Binding Native Frameworks para obtener más información.

  • Objective-C el código fuente se detectará automáticamente ahora, lo que debería eliminar la necesidad de pasar -ObjC o -xobjective-c a Clang manualmente.

  • El uso del módulo Clang (@import) ahora se detecta automáticamente, lo que debería eliminar la necesidad de pasar -fmodules manualmente a Clang para las bibliotecas que usan la nueva compatibilidad con módulos en Clang.

  • La API unificada de Xamarin es ahora el destino de enlace predeterminado; use la opción de tener como -classic destino la API clásica de 32 bits.

Correcciones de errores importantes

  • Corrección instancetype del enlace cuando se usa en una Objective-C categoría
  • Categorías de nombres Objective-C completos
  • Protocolos de prefijo Objective-C con I (por ejemplo INSCopying , en lugar de NSCopying)

1.1.35: 21 de diciembre de 2014

Correcciones de errores leves.

1.1.1: 15 de diciembre de 2014

1.1.1 fue la primera versión principal después de 1,5 años de uso interno y desarrollo en Xamarin después de la versión preliminar inicial de Objective Sharpie en abril de 2013. Esta versión es la primera que generalmente se considera estable y utilizable para una amplia variedad de bibliotecas nativas, con un nuevo back-end de Clang.