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 日)
- 支援新的 Objective-C 語言功能,包括輕量型泛型和 Null 功能,如 Xcode 7 中介紹
- 支援最新的 iOS 和 Mac SDK。
- Xcode 專案建置和剖析支援! 您現在可以將完整的 Xcode 項目傳遞至 Objective Sharpie,它會盡最大努力找出正確的動作(例如
sharpie bind Project.xcodeproj -sdk ios
)。 - CocoaPods 支援! 您現在可以直接從 Objective Sharpie 設定、建置及系結 CocoaPods(例如
sharpie pod init ios AFNetworking && sharpie pod bind
)。 - 系結架構時,如果架構支援 Clang 模組,則會啟用 Clang 模組,因而產生架構最正確的剖析,因為架構的結構是由其
module.modulemap
所定義。 - 針對建置架構產品的 Xcode 專案,剖析該產品,而不是將中繼產品目標剖析為 Xcode 專案中的非架構目標,可能仍有無法自動解析的模棱兩可。
2.1.6 (2015 年 3 月 17 日)
- 修正二元運算符表達式系結:表達式的左側未正確交換右手(例如
1 << 0
未正確地系結為0 << 1
)。 感謝亞當·坎普注意到這一點! - 已修正和
NSInteger
NSUInteger
系結為int
和uint
而非nuint
nint
i386的問題;-DNS_BUILD_32_LIKE_64
現在會傳遞至Clang,讓剖析objc/NSObjCRuntime.h
在i386上如預期般運作。 - Mac OS X SDK 的預設架構現在
-sdk macosx10.10
x86_64而不是 i386,因此除非需要覆寫預設值,否則-arch
可以省略。
2.1.0 (2015 年 3 月 15 日)
sizeof
C 表達式的自變數類型不會對應至 C# 基本類型,會在 Clang 中評估,並系結為整數常值,以避免產生無效的 C# 。- 修正 Objective-C 類型為區塊的屬性語法(Objective-C 程序代碼會出現在系結宣告上方的批注中)。
- 系結衰變型別作為其原始類型(
int[]
在 Clang 中的語意分析期間會衰變int*
,但改為系結為原始撰寫int[]
類型)。
感謝 Dave Dunkin 回報此點版本中修正的許多 Bug!
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.Action
或System.Func
委派,而具名區塊則會系結為強名稱delegate
型別。匿名列舉的命名啟發學習法已改善,其前面
typedef
緊接解析為 內建整數類型,例如long
或int
。C 指標現在會系結為 C#
unsafe
指標,System.IntPtr
而不是 。 當您想要將指標參數out
轉換成 或ref
參數時,這會產生更清楚的系結。 無法一律推斷參數是否應為out
或ref
,因此指標會保留在系結中,以方便稽核。上述指標系結的例外狀況是當物件以參數的形式遇到 2 級指標 Objective-C 時。 在這些情況下,慣例佔主導地位,參數會系結為
out
(例如NSError **error
→out NSError error
)。
Verify 屬性
您通常會發現 Objective Sharpie 所產生的系結現在會加上 [Verify]
屬性的批注。 這些屬性表示您應該藉由比較系結與原始 C/Objective-C 宣告來驗證 Objective Sharpie 執行正確的動作(將在系結宣告上方的批注中提供)。
建議對所有系結宣告進行驗證,但最可能需要以 屬性標註的[Verify]
宣告。 這是因為在許多情況下,原始原生原始程式碼中沒有足夠的元數據來推斷如何最好地產生系結。 您可能需要參考頭檔中的檔或程序代碼批註,才能做出最佳的系結決策。
如需詳細資訊,請參閱驗證屬性檔。
其他值得注意的改進
using
語句現在會根據系結的類型產生。 例如,如果NSURL
已系結,using Foundation;
也會產生 語句。struct
和union
宣告現在將會系結,使用聯集的[FieldOffset]
訣竅。具有常數表達式初始化表達式的列舉值現在將會正確系結;完整表示式會轉譯為 C# 。
Variadic 方法和區塊現在已繫結。
現在可透過
-framework
選項支持架構。 如需詳細資訊,請參閱系 結原生架構 的檔。Objective-C 原始碼現在會自動偵測,這應該不需要手動傳遞
-ObjC
或-xobjective-c
傳送至Clang。Clang 模組使用方式 (
@import
) 現在會自動偵測到,這應該不需要針對 Clang 中使用新模組支援的連結庫手動傳遞-fmodules
至 Clang。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 是在 Xamarin 1.5 年內部使用和開發 1.5 年後的第一個主要版本,在 2013 年 4 月首次預覽 Objective Sharpie 之後。 此版本是第一個一般被視為穩定且適用於各種原生連結庫,其特色是新的 Clang 後端。