簡體   English   中英

Xamarin在使用iOS構建主機時實際上在做什么?

[英]What Xamarin is actually doing when using an iOS build host?

我注意到Xamarin有可能將Visual Studio連接到iOS構建主機。

什么是構建主機,是否有關於其架構的文檔? Xamarin.iOS向此構建主機發送了什么代碼?

[編輯]

作為個人項目,我希望在Windows中構建iOS構建主機。 我知道這可以實現,而且我確信從技術上講,我擁有重新創建一個所需的工具。 我關心的是原始iOS構建主機的架構。 我想知道Xamarin和iOS構建主機之間的通信是什么,以及構建流程是什么。 這沒有記錄。

這里有一個很好的解釋。

Xamarin.iOS針對單聲道框架的特殊子集編譯c#源代碼。 單聲道框架的這個簡化版本包括允許訪問iOS平台特定功能的附加庫。 Xamarin.iOS編譯器smsc獲取源代碼並將其編譯為中間語言ECMA CIL(通用中間語言),但它不會生成ECMA ABI兼容的二進制文件,這與普通的單編譯器,gmcs或dmsc不同。 這意味着您希望包含在應用程序中的任何第三方.Net庫都需要使用smsc針對單聲道框架的Xamarin.iOS子集進行重新編譯。

將Xamarin.iOS應用程序編譯成CIL后,需要將其再次編譯為可在iOS設備上運行的本機機器代碼。 此過程由SDK工具“mtouch”執行,其結果是可以部署到iOS模擬器或實際iOS設備(如iPhone或iPad)的應用程序包。

由於Apple的限制,iOS內核不允許程序在運行時生成代碼。 此限制對使用即時編譯在虛擬機內運行的軟件系統具有嚴重影響。 即時編譯采用中間代碼,例如單聲道CIL,並在運行時將其編譯為機器代碼。 此機器代碼與執行時運行的設備兼容。

要解決此限制,mtouch工具會提前編譯CIL。 單聲道團隊描述為AOT的過程,提前編譯。

在此輸入圖像描述

來自Xamarin文檔的一些引用:

Xamarin iOS for Visual Studio實現了驚人的壯舉:它允許您使用Visual Studio IDE在Windows計算機上創建,構建和調試iOS應用程序。 然而,它不能單獨執行此操作 - 如果沒有Apple的編譯器,則無法創建iOS應用程序,並且如果沒有Apple的證書和代碼簽名工具,則無法部署它們。 這意味着您的Xamarin iOS for Visual Studio安裝需要連接到聯網的Mac OS-X計算機才能為您執行這些任務。 配置完成后,Xamarin的工具將使流程盡可能無縫。

從Xamarin.iOS 4.0開始,Xamarin.iOS有兩個代碼生成后端。 常規的Mono代碼生成引擎和基於LLVM優化編譯器的引擎。 每個引擎都有其優缺點。

通常,在開發過程中,您可能會使用Mono代碼生成引擎,因為它可以讓您快速迭代。 對於發布版本和AppStore部署,您需要切換到LLVM代碼生成引擎。

結論

因此,正如你所說,沒有辦法在Windows中構建iOS構建主機。

我猜Xamarin向構建主機發送.Net程序集文件(圖片中的橙色部分),使用Apple llvm編譯成本機ARM代碼,以及xcode-build等其他工具來簽名,鏈接和構建應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM