Objective Sharpie リリース履歴
3.4 (2017 年 10 月 11 日)
- Xcode 9 のサポート: iOS 11、macOS 10.13、tvOS 11、watchOS 4
- SIMD と tgmath に関する問題を修正する必要がある
- テレメトリが完全に削除されました
3.3 (2016 年 8 月 3 日)
- Xcode 8 Beta 4、iOS 10、macOS 10.12、tvOS 10、watchOS 3 のサポート。
- 最新の Clang マスター ビルドに更新されました (2016-08-02)
- テレメトリの送信オプション を次の場所に
sharpie pod bind
保持しますsharpie bind
。
3.2 (2016 年 6 月 14 日)
- Xcode 8 Beta 1、iOS 10、macOS 10.12、tvOS 10、watchOS 3 のサポート。
3.1 (2016 年 5 月 31 日)
- CocoaPods 1.0 のサポート
- 最初にネイティブ
.framework
を構築し、次にそれをバインドすることで CocoaPods バインドの信頼性が向上しました - CocoaPods
.framework
とバインド定義をBinding
ディレクトリにコピーして、Xamarin.iOS および Xamarin.Mac バインド プロジェクトとの統合を容易にする
3.0 (2015 年 10 月 5 日)
- Xcode 7 で導入された、軽量ジェネリックや null 許容を含む新しい Objective-C 言語機能のサポート
- 最新の iOS および Mac SDK のサポート。
- Xcode プロジェクトのビルドと解析のサポート! これで、完全な Xcode プロジェクトを Objective Sharpie に渡すことができるようになります。これにより、適切な処理 (例: )を把握するために最善を尽くします。
sharpie bind Project.xcodeproj -sdk ios
- CocoaPods の サポート! これで、Objective Sharpie (例: Objective Sharpie) から CocoaPods を直接構成、ビルド、バインドできるようになりました。
sharpie pod init ios AFNetworking && sharpie pod bind
- フレームワークをバインドする場合、フレームワークがサポートしている場合は Clang モジュールが有効になり、フレームワークの構造はフレームワークによって
module.modulemap
定義されるため、フレームワークの最も正しい解析が行われます。 - フレームワーク製品をビルドする Xcode プロジェクトの場合、Xcode プロジェクトの非フレームワーク ターゲットとして中間製品ターゲットではなくその製品を解析しても、自動的に解決できないあいまいさが残っている可能性があります。
2.1.6 (2015 年 3 月 17 日)
- 二項演算子式のバインドを修正しました。式の左側が右側と誤ってスワップされました (たとえば
1 << 0
、正しくバインド0 << 1
されていません)。 この点に気付き、Adam Kemp に感謝します。 - i386 の代わりに
nuint
nint
バインドされるuint
int
問題NSInteger
NSUInteger
を修正しました。i386-DNS_BUILD_32_LIKE_64
で解析objc/NSObjCRuntime.h
が期待どおりに動作するように Clang に渡されるようになりました。 - Mac OS X SDK の既定のアーキテクチャ (例:
-sdk macosx10.10
i386) が i386 ではなくx86_64になったため-arch
、既定値をオーバーライドする必要がない限り省略できます。
2.1.0 (2015 年 3 月 15 日)
sizeof
引数の型が C# プリミティブ型にマップされない C 式は Clang で評価され、無効な C# が生成されないように整数リテラルとしてバインドされます。- 型がブロックであるプロパティの構文を修正 Objective-C しました (Objective-C バインドされた宣言の上のコメントにコードが表示されます)。
- 減衰した型を元の型としてバインドします (
int[]
Clang のセマンティック分析中にint*
減衰しますが、代わりに元の書き込みint[]
としてバインドします)。
このポイントリリースで修正されたバグの多くを報告していただきありがとうございます!
2.0.0: 2015 年 3 月 9 日
Objective Sharpie 2.0 は、改善された Clang ベースのドライバーとパーサーと新しい NRefactory ベースのバインド エンジンを備えたメジャー リリースです。 これらの改善されたコンポーネントは、特に型バインディングに関して、はるかに優れたバインディングを提供します。 Objective Sharpie の内部にある他の多くの機能強化が行われ、将来のリリースでユーザーに表示される多くの機能が提供されます。
Objective Sharpie 2.0 は Clang 3.6.1 に基づいています。
型バインドの機能強化
Objective-C ブロックがサポートされるようになりました。 これには、匿名/インラインブロックと、> を使用して
typedef
名前が付けられたブロックが含まれます。 匿名ブロックは名前付きブロックまたはSystem.Func
デリゲートとしてSystem.Action
バインドされ、名前付きブロックは厳密な名前付きdelegate
型としてバインドされます。匿名列挙型の名前付けヒューリスティックが改善され、その直前
typedef
に組み込みの整数型 (例:long
.int
C ポインターは、次の代わりに
System.IntPtr
C#unsafe
ポインターとしてバインドされるようになりました。 これにより、ポインター パラメーターout
ref
をパラメーターに変換するタイミングについて、バインディングがより明確になります。 パラメーターout
ref
の有無を常に推測できないので、監査を容易にするためにポインターがバインディングに保持されます。上記のポインター バインディングの例外は、オブジェクトへの Objective-C 2 ランク ポインターがパラメーターとして検出された場合です。 このような場合、規則が優勢であり、パラメーターは (例: →
out NSError error
) としてout
バインドされます。NSError **error
属性の確認
多くの場合、Objective Sharpie によって生成されたバインドには、属性で注釈が [Verify]
付けられます。 これらの属性は、バインディングと元の C/Objective-C 宣言 (バインドされた宣言の上のコメントで提供されます) を比較することで、Objective Sharpie が正しいことを確認する必要があることを示します。
検証はすべてのバインドされた宣言に対して推奨されますが、属性で注釈が付けられた宣言に必要になる可能性が[Verify]
最も高くなります。 これは、多くの状況で、バインディングを最適に生成する方法を推測するのに十分なメタデータが元のネイティブ ソース コードにないためです。 最適なバインドの決定を行うには、ヘッダー ファイル内のドキュメントまたはコード コメントを参照する必要がある場合があります。
詳細については、属性の 検証に関する ドキュメントを参照してください。
その他の主な改善点
using
バインドされた型に基づいてステートメントが生成されるようになりました。 たとえば、バインドされた場合NSURL
、using Foundation;
ステートメントも生成されます。struct
そしてunion
宣言が結合され、共用体のトリックが[FieldOffset]
使用されます。定数式初期化子を持つ列挙値が適切にバインドされるようになりました。完全な式は C# に変換されます。
可変個引数のメソッドとブロックがバインドされるようになりました。
このオプションを使用してフレームワークが
-framework
サポートされるようになりました。 詳細については、ネイティブ フレームワークのバインドに関 する ドキュメントを参照してください。Objective-C ソース コードが自動検出され、Clang に手動で渡
-ObjC
す-xobjective-c
必要がなくなります。Clang モジュールの使用状況 (
@import
) が自動検出されました。これにより、Clang の新しいモジュール サポートを使用するライブラリに対して Clang に手動で渡す-fmodules
必要がなくなります。Xamarin Unified API が既定のバインド ターゲットになりました。オプションを
-classic
使用して、32 ビットのみのクラシック API をターゲットにします。
注目すべきバグの修正
- カテゴリで使用する場合のバインドを修正
instancetype
するObjective-C - 完全な名前 Objective-C のカテゴリ
- プレフィックス Objective-C プロトコル
I
(例:INSCopying
代わりにNSCopying
)
1.1.35: 2014 年 12 月 21 日
軽微なバグの修正。
1.1.1: 2014 年 12 月 15 日
1.1.1 は、2013 年 4 月の Objective Sharpie の初期プレビューに続き、Xamarin での 1.5 年間の内部使用と開発の後の最初のメジャー リリースでした。 このリリースは、一般的に安定と見なされ、新しい Clang バックエンドを備えたさまざまなネイティブ ライブラリで使用できる最初のリリースです。