Histórico de lançamentos do Objective Sharpie
3.4 (11 de outubro de 2017)
- Suporte para Xcode 9: iOS 11, macOS 10.13, tvOS 11 e watchOS 4
- Problemas com SIMD e tgmath agora devem ser corrigidos
- A telemetria foi removida completamente
3.3 (3 de agosto de 2016)
- Suporte para Xcode 8 Beta 4, iOS 10, macOS 10.12, tvOS 10 e watchOS 3.
- Atualizado para a última compilação mestre do Clang (2016-08-02)
- Persista as opções de envio de telemetria de
sharpie pod bind
atésharpie bind
.
3.2 (14 de junho de 2016)
- Suporte para Xcode 8 Beta 1, iOS 10, macOS 10.12, tvOS 10 e watchOS 3.
3.1 (31 de maio de 2016)
- Suporte para CocoaPods 1.0
- Maior confiabilidade de ligação dos CocoaPods criando primeiro um nativo
.framework
e depois ligando isso - Copie os CocoaPods
.framework
e a definição de vinculação em umBinding
diretório para facilitar a integração com os projetos de vinculação Xamarin.iOS e Xamarin.Mac
3.0 (5 de outubro de 2015)
- Suporte para novos Objective-C recursos de linguagem, incluindo genéricos leves e anulabilidade, conforme introduzido no Xcode 7
- Suporte para os SDKs iOS e Mac mais recentes.
- Suporte à criação e análise de projetos Xcode! Agora você pode passar um projeto Xcode completo para o Objective Sharpie e ele fará o seu melhor para descobrir a coisa certa a fazer (por exemplo).
sharpie bind Project.xcodeproj -sdk ios
- Suporte CocoaPods ! Agora você pode configurar, construir e vincular CocoaPods diretamente do Objective Sharpie (por exemplo
sharpie pod init ios AFNetworking && sharpie pod bind
, ). - Ao vincular frameworks, os módulos Clang serão habilitados se o framework os suportar, resultando na análise mais correta de um framework, já que a estrutura do framework é definida por seu
module.modulemap
. - Para projetos Xcode que criam um produto de estrutura, analisar esse produto em vez de destinos de produto intermediário como destinos de não-estrutura em um projeto Xcode ainda pode ter ambiguidades que não podem ser resolvidas automaticamente.
2.1.6 (17 de março de 2015)
- Vinculação de expressão de operador binário fixo: o lado esquerdo da expressão foi trocado incorretamente pelo lado direito (por exemplo,
1 << 0
foi incorretamente ligado como0 << 1
). Obrigado a Adam Kemp por perceber isso! - Corrigido um problema com
NSInteger
eNSUInteger
sendo vinculado comoint
euint
em vez denint
enuint
no i386,-DNS_BUILD_32_LIKE_64
agora é passado para Clang para fazer aobjc/NSObjCRuntime.h
análise funcionar como esperado no i386. - A arquitetura padrão para SDKs do Mac OS X (por exemplo
-sdk macosx10.10
, ) agora é x86_64 em vez de i386, portanto-arch
, pode ser omitida, a menos que a substituição do padrão seja desejada.
2.1.0 (15 de março de 2015)
sizeof
As expressões C cujo tipo de argumento não é mapeado para um tipo primitivo C# serão avaliadas em Clang e vinculadas como um literal inteiro para evitar a geração de C# inválido.- Corrigir Objective-C sintaxe para propriedades cujo tipo é um bloco (Objective-C código aparece nos comentários acima de declarações vinculadas).
- Vincule tipos deteriorados como seu tipo original (
int[]
decai para durante aint*
análise semântica em Clang, mas vincule-o como o original como escritoint[]
em vez disso).
Muito obrigado a Dave Dunkin por relatar muitos dos bugs corrigidos nesta versão pontual!
2.0.0: 9 de março de 2015
O Objective Sharpie 2.0 é uma grande versão que apresenta um driver e analisador aprimorados baseados em Clang e um novo mecanismo de ligação baseado em NRefactory. Esses componentes aprimorados fornecem ligações muito melhores, particularmente em relação à vinculação de tipos. Muitas outras melhorias foram feitas que são internas ao Objective Sharpie, o que renderá muitos recursos visíveis para o usuário em versões futuras.
O Objective Sharpie 2.0 é baseado no Clang 3.6.1.
Aprimoramentos de vinculação de tipo
Objective-C agora há suporte. Isso inclui blocos anônimos/embutidos e blocos nomeados via
typedef
. Os blocos anônimos serão vinculados comoSystem.Action
ouSystem.Func
delegados, enquanto os blocos nomeados serão vinculados como tipos fortemente nomeadosdelegate
.Há uma heurística de nomenclatura aprimorada para enums anônimos que são imediatamente precedidos por uma
typedef
resolução para um tipo integral embutido, comolong
ouint
.Os ponteiros C agora são vinculados como ponteiros C#
unsafe
em vez deSystem.IntPtr
. Isso resulta em mais clareza na vinculação para quando você deseja transformar parâmetros de ponteiro emout
ref
parâmetros. Nem sempre é possível inferir se um parâmetro deve serout
ouref
, portanto, o ponteiro é mantido na associação para permitir uma auditoria mais fácil.Uma exceção à associação de ponteiro acima é quando um ponteiro de 2 classificações para um Objective-C objeto é encontrado como um parâmetro. Nesses casos, a convenção é predominante e o parâmetro será vinculado como
out
(por exemploNSError **error
, →out NSError error
).
Verificar atributo
Você geralmente descobrirá que as ligações produzidas pelo Objective Sharpie agora serão anotadas com o [Verify]
atributo. Esses atributos indicam que você deve verificar se a Objective Sharpie fez a coisa correta, comparando a vinculação com a declaração C/Objective-C original (que será fornecida em um comentário acima da declaração vinculada).
A verificação é recomendada para todas as declarações vinculadas, mas é provavelmente necessária para declarações anotadas com o [Verify]
atributo. Isso ocorre porque, em muitas situações, não há metadados suficientes no código-fonte nativo original para inferir a melhor forma de produzir uma associação. Talvez seja necessário fazer referência à documentação ou aos comentários de código dentro dos arquivos de cabeçalho para tomar a melhor decisão de vinculação.
Consulte a documentação Verificar atributos para obter mais detalhes.
Outras melhorias notáveis
using
As instruções agora são geradas com base em tipos vinculados. Por exemplo, se umNSURL
foi vinculado, umausing Foundation;
instrução também será gerada.struct
eunion
as declarações passarão a ser vinculadas, usando o truque para os[FieldOffset]
sindicatos.Os valores de enum com inicializadores de expressão constante agora serão vinculados corretamente; a expressão completa é traduzida para C#.
Métodos e blocos variádicos agora estão vinculados.
As estruturas agora são suportadas por meio da
-framework
opção. Consulte a documentação sobre Binding Native Frameworks para obter mais detalhes.Objective-C o código-fonte será detectado automaticamente agora, o que deve eliminar a necessidade de passar
-ObjC
ou-xobjective-c
para Clang manualmente.O uso do módulo Clang (
@import
) agora é detectado automaticamente, o que deve eliminar a necessidade de passar-fmodules
para o Clang manualmente para bibliotecas que usam o novo suporte a módulos no Clang.A API unificada do Xamarin agora é o destino de vinculação padrão; use a
-classic
opção para direcionar a API Clássica somente de 32 bits.
Correções de bugs notáveis
- Corrigir
instancetype
vinculação quando usado em uma Objective-C categoria - Categorias de nome Objective-C completo
- Protocolos de prefixo Objective-C com
I
(por exemplo,INSCopying
em vez deNSCopying
)
1.1.35: 21 de dezembro de 2014
Correções de bug secundárias.
1.1.1: 15 de dezembro de 2014
A versão 1.1.1 foi a primeira grande versão após 1,5 anos de uso interno e desenvolvimento no Xamarin após a prévia inicial do Objective Sharpie em abril de 2013. Esta versão é a primeira a ser geralmente considerada estável e utilizável para uma ampla variedade de bibliotecas nativas, apresentando um novo back-end Clang.