Objective Sharpie — historia wydania
3.4 (11 października 2017 r.)
- Obsługa programu Xcode 9: iOS 11, macOS 10.13, tvOS 11 i watchOS 4
- Problemy z kartami SIMD i tgmath powinny być teraz rozwiązane
- Dane telemetryczne zostały całkowicie usunięte
3.3 (3 sierpnia 2016 r.)
- Obsługa programu Xcode 8 Beta 4, iOS 10, macOS 10.12, tvOS 10 i watchOS 3.
- Zaktualizowano do najnowszej kompilacji wzorca Clang (2016-08-02)
- Utrwalanie opcji przesyłania danych telemetrycznych z
sharpie pod bind
dosharpie bind
.
3.2 (14 czerwca 2016 r.)
- Obsługa programu Xcode 8 Beta 1, iOS 10, macOS 10.12, tvOS 10 i watchOS 3.
3.1 (31 maja 2016 r.)
- Obsługa platformy CocoaPods 1.0
- Ulepszona niezawodność powiązań CocoaPods przez najpierw utworzenie natywnego
.framework
, a następnie powiązanie - Kopiowanie plików CocoaPods
.framework
i definicji powiązań doBinding
katalogu w celu ułatwienia integracji z projektami powiązań platform Xamarin.iOS i Xamarin.Mac
3.0 (5 października 2015 r.)
- Obsługa nowych Objective-C funkcji językowych, w tym uproszczonych typów ogólnych i dopuszczalności null, jak wprowadzono w programie Xcode 7
- Obsługa najnowszych zestawów SDK systemów iOS i Mac.
- Obsługa kompilowania i analizowania projektu Xcode! Teraz możesz przekazać pełny projekt Xcode do aplikacji Objective Sharpie i zrobi wszystko, co w jego mocy, aby dowiedzieć się, co należy zrobić (np.
sharpie bind Project.xcodeproj -sdk ios
). - Obsługa cocoaPods ! Teraz można skonfigurować, skompilować i powiązać cocoaPods bezpośrednio z aplikacji Objective Sharpie (np.
sharpie pod init ios AFNetworking && sharpie pod bind
). - W przypadku tworzenia powiązań moduły języka Clang zostaną włączone, jeśli platforma je obsługuje, co spowoduje najbardziej poprawne analizowanie struktury, ponieważ struktura struktury jest definiowana przez jej
module.modulemap
element . - W przypadku projektów Xcode, które tworzą produkt platformowy, przeanalizuj ten produkt zamiast celów produktu pośredniego jako cele niezwiązane ze strukturą w projekcie Xcode może nadal mieć niejednoznaczności, których nie można rozwiązać automatycznie.
2.1.6 (17 marca 2015 r.)
- Naprawiono powiązanie wyrażenia operatora binarnego: lewa strona wyrażenia została niepoprawnie zamieniona na prawą stronę (np.
1 << 0
była niepoprawnie powiązana jako0 << 1
). Dzięki Adamowi Kempowi za zauważenie tego! - Rozwiązano problem z elementem i jest powiązany jako
int
i zamiast i w systemie i386.-DNS_BUILD_32_LIKE_64
Teraz został przekazany do języka Clang, aby wykonać analizowanieobjc/NSObjCRuntime.h
zgodnie zNSInteger
oczekiwaniami w systemie i386.nuint
nint
NSUInteger
uint
- Domyślna architektura zestawów SDK systemu Mac OS X (np.
-sdk macosx10.10
) jest teraz x86_64 zamiast i386, więc-arch
można pominąć, chyba że jest wymagane zastąpienie wartości domyślnej.
2.1.0 (15 marca 2015 r.)
sizeof
Wyrażenia języka C, których typ argumentu nie jest mapowany na typ pierwotny języka C#, będą obliczane w języku Clang i powiązane jako literał liczby całkowitej, aby uniknąć generowania nieprawidłowego języka C#.- Poprawiono Objective-C składnię właściwości, których typem jest blok (Objective-C kod pojawia się w komentarzach powyżej deklaracji powiązanych).
- Powiązane typy rozpadają się jako ich oryginalny typ (
int[]
rozkładają się naint*
podczas analizy semantycznej w języku Clang, ale wiążą je jako oryginalne zamiast tego zapisaneint[]
).
Dzięki bardzo Dave Dunkin za raportowanie wielu usterek naprawionych w tym wydaniu punktu!
2.0.0: 9 marca 2015 r.
Objective Sharpie 2.0 jest główną wersją, która oferuje ulepszony sterownik i analizator oparty na języku Clang oraz nowy aparat powiązań oparty na technologii NRefactory. Te ulepszone składniki zapewniają znacznie lepsze powiązania, szczególnie w przypadku powiązania typu. Wprowadzono wiele innych ulepszeń, które są wewnętrzne dla aplikacji Objective Sharpie, co zapewni wiele funkcji widocznych dla użytkownika w przyszłych wersjach.
Język Objective Sharpie 2.0 jest oparty na języku Clang 3.6.1.
Ulepszenia powiązania typu
Objective-C bloki są teraz obsługiwane. Obejmuje to bloki anonimowe/wbudowane i bloki o nazwie za pośrednictwem metody
typedef
. Bloki anonimowe będą powiązane jakoSystem.Action
lubSystem.Func
delegaty, a nazwane bloki będą powiązane jako silnie nazwanedelegate
typy.Istnieje ulepszona heurystyka nazewnictwa dla anonimowych wyliczenia, które są bezpośrednio poprzedzone rozpoznawaniem
typedef
wbudowanego typu całkowitego, takiego jaklong
lubint
.Wskaźniki języka C są teraz powiązane jako wskaźniki języka C#
unsafe
zamiastSystem.IntPtr
. Powoduje to większą przejrzystość powiązania, gdy warto przekształcić parametry wskaźnika wout
parametry lubref
. Nie można zawsze wywnioskować, czy parametr powinien mieć wartośćout
, czyref
, więc wskaźnik jest zachowywany w powiązaniu, aby umożliwić łatwiejsze przeprowadzanie inspekcji.Wyjątkiem od powyższego powiązania wskaźnika jest wystąpienie wskaźnika 2-rangi Objective-C do obiektu jako parametru. W takich przypadkach konwencja jest dominująca, a parametr zostanie powiązany jako
out
(np.NSError **error
→out NSError error
).
Weryfikowanie atrybutu
Często okaże się, że powiązania utworzone przez funkcję Objective Sharpie będą teraz oznaczone atrybutem [Verify]
. Te atrybuty wskazują, że należy sprawdzić , czy objective Sharpie zrobił prawidłową rzecz, porównując powiązanie z oryginalną deklaracją C/Objective-C (która zostanie podana w komentarzu powyżej deklaracji powiązanej).
Weryfikacja jest zalecana dla wszystkich deklaracji powiązanych, ale najprawdopodobniej jest wymagana w przypadku deklaracji z adnotacjami z atrybutem [Verify]
. Wynika to z faktu, że w wielu sytuacjach nie ma wystarczającej ilości metadanych w oryginalnym natywnym kodzie źródłowym, aby wywnioskować, jak najlepiej utworzyć powiązanie. W celu podjęcia najlepszej decyzji dotyczącej powiązania może być konieczne odwołanie się do dokumentacji lub komentarzy kodu w plikach nagłówków.
Aby uzyskać więcej informacji, zobacz dokumentację Weryfikowanie atrybutów .
Inne istotne ulepszenia
using
instrukcje są teraz generowane na podstawie powiązanych typów. Na przykład, jeśliNSURL
element został powiązany,using Foundation;
również zostanie wygenerowana instrukcja.struct
aunion
deklaracje będą teraz powiązane, za pomocą sztuczki[FieldOffset]
dla związków zawodowych.Wartości wyliczenia z inicjatorami wyrażeń stałych będą teraz prawidłowo powiązane; pełne wyrażenie jest tłumaczone na język C#.
Metody i bloki wariadyczne są teraz powiązane.
Struktury są teraz obsługiwane za pośrednictwem
-framework
opcji . Aby uzyskać więcej informacji, zobacz dokumentację dotyczącą powiązań platform natywnych .Objective-C Kod źródłowy zostanie teraz automatycznie wykryty, co powinno wyeliminować konieczność ręcznego przekazania
-ObjC
kodu lub-xobjective-c
do języka Clang.Użycie modułu Clang (
@import
) jest teraz wykrywane automatycznie, co powinno wyeliminować konieczność ręcznego przekazywania-fmodules
do języka Clang dla bibliotek korzystających z obsługi nowego modułu w języku Clang.Interfejs API Ujednolicony platformy Xamarin jest teraz domyślnym elementem docelowym powiązania;
-classic
użyj opcji , aby wybrać 32-bitowy interfejs API tylko klasyczny.
Istotne poprawki błędów
- Naprawianie
instancetype
powiązania w przypadku użycia w Objective-C kategorii - W pełni nazwa Objective-C kategorii
- Protokoły prefiksów Objective-C z
I
(np.INSCopying
zamiastNSCopying
)
1.1.35: 21 grudnia 2014 r.
Drobne poprawki błędów.
1.1.1: 15 grudnia 2014 r.
1.1.1 była pierwszą główną wersją po 1,5 roku użytku wewnętrznego i programowania na platformie Xamarin po wstępnej wersji zapoznawczej aplikacji Objective Sharpie w kwietniu 2013 roku. Ta wersja jest pierwszą wersją, która jest ogólnie uważana za stabilną i używaną dla szerokiej gamy bibliotek natywnych, z nowym zapleczem Clang.