Historial de versiones de Objective Sharpie
3.4 (11 de octubre de 2017)
- 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
asharpie 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 unBinding
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 como0 << 1
). Gracias a Adam Kemp por notar esto! - Se ha corregido un problema con
NSInteger
yNSUInteger
que se enlazaba comoint
yuint
en lugar denint
ynuint
en i386;-DNS_BUILD_32_LIKE_64
ahora se pasa a Clang para que el análisisobjc/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 duranteint*
el análisis semántico en Clang, pero enlazarlo como original como escritoint[]
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 comoSystem.Action
oSystem.Func
delegados, mientras que los bloques con nombre se enlazarán como tipos con nombredelegate
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 comolong
oint
.Los punteros de C ahora están enlazados como punteros de C#
unsafe
en lugar deSystem.IntPtr
. Esto da como resultado una mayor claridad en el enlace para cuando puede que desee convertir los parámetros de puntero enout
parámetros oref
. No es posible deducir siempre si un parámetro debe serout
oref
, 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 ejemploNSError **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 seNSURL
ha enlazado , también se generará unausing Foundation;
instrucción .struct
yunion
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 ejemploINSCopying
, en lugar deNSCopying
)
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.