2010-01-30 61 views
3

據我所知,蘋果禁止在iPhone上運行Flash,因爲蘋果公司不希望蘋果通過自己的工具提供的運行環境。根據蘋果的說法,允許Flash運行時將允許開發人員規避蘋果已實施的應用更新策略和其他控制措施。而目前,Adobe並未選擇構建工具來靜態編譯在Flash中創建的應用程序。爲什麼Apple允許在iPhone上使用.NET,但不能使用Flash?

我的進一步理解是,通過MonoTouch創建的.NET應用程序是靜態預編譯的,並以本機代碼的形式運行iPhone,而在.NET公共語言運行時(CLR)內運行,Apple肯定不允許這樣做。由於.NET代碼不是在微軟的運行時執行,而是在iPhone CPU本身執行,Apple並不抱怨。

我的問題是:

  1. 我是正確,爲什麼蘋果允許在iPhone上的.NET開發的應用程序?

  2. 是否有一家供應商的預編譯的本機代碼在iPhone上(或者我認爲的任何平臺)與其他任何平臺區分開來?換句話說,MonoTouch生成的本地代碼與編譯後的Objective C代碼生成的本地代碼沒有什麼區別?本地代碼的來源是完全不透明的?

+2

這裏有一個相當不錯的博客文章,爲什麼閃光燈也不會在它的「正常」的化身上的iPhone/iPod/iPad的出現:http://daringfireball.net/2010/01/apple_adobe_flash – JBRWilkinson 2010-01-31 10:55:55

+0

從什麼我明白,它開始和結束電池壽命。 – Dested 2010-03-10 11:35:00

+0

可能值得注意的是,蘋果公司提出了改變其開發協議的建議,以扭轉這個問題的答案。這個改變將要求所有的應用程序都應該在obj-C/C/C++中「最初編寫」。 http://bit.ly/akvgRL所以技術上你仍然可以在.NET或Flash中開發應用程序,但是Apple會拒絕它們。 – fenomas 2010-04-11 05:16:53

回答

19

正如你剛纔所說,蘋果是不是「允許」 .NET來在iPhone上運行 - 應用程序是否在MonoTouch的開發或寫在可可或COBOL或什麼都無所謂;它只是它編譯的內容。它可以用JavaScript編寫,並不重要。

如果我用英文寫一些東西然後翻譯成法文,法文讀者可以告訴原文是用英文寫的嗎?也許,可能不是,這完全取決於翻譯的特點,而不是讀者。所有蘋果公司要求的版本是是用法語編寫的。到那時,它沒有區別。

這是一個邏輯擴展,理論上你可以編寫Flash文件的編譯器來創建自包含的iPhone二進制文件。如果在Flash中開發對您來說很重要。 ( 這可能已經或可能不會完成 This has already been done.

+0

我相信Apple *不允許在iPhone上使用.NET應用程序。 – Emilio 2010-01-30 23:33:39

+2

@Emilio不,他們沒有。請仔細閱讀我的答案。 – 2010-01-30 23:35:03

+0

@Emilio - 問題的第二段解釋了爲什麼Apple *不允許.NET應用程序。一旦編譯爲本地代碼,應用程序就不再是「.NET」了,因爲它不需要預先安裝的.NET運行時和庫。 – 2010-01-30 23:36:31

1

蘋果不關心虛擬機在iPhone上運行。它關心的是允許在iPhone上運行外部非AppStore代碼。

這就是爲什麼蘋果不會在乎Adobe提出的「Flash Compiler」,它可以製作獨立的Flash應用程序。這就是爲什麼Apple不關心編譯後的.NET項目。

回想一下C64仿真器的問題。 Apple只關心捆綁內部BASIC,而模擬器則是虛擬機的完美例子。所有由該VM執行的C64代碼都是6502機器碼。但是仿真器沒有能力從網絡下載任意代碼並執行它。

這就是Apple所關心的。

+0

<< Apple不關心VM在iPhone上運行。它關心的是允許在iPhone上運行外部非AppStore代碼。 >>但爲什麼Adobe不能編寫iPhone Flash虛擬機,並讓Flash開發人員通過appstore推出他們的應用程序? – Emilio 2010-01-30 23:43:34

+3

Apple *確實非常關心iPhone上運行的虛擬機。仿真器和虛擬機受到最嚴格的審查,幾乎總是被拒絕。 – 2010-01-30 23:45:59

+0

我想威爾試圖說的是,只要所有運行的代碼都包含在應用程序包中,並且以後不再添加代碼,就允許VM。只要不從互聯網上下載內容並渲染它,Adobe就可以免費爲iPhone製作一個Flash虛擬機 - 這就是他們已經完成的工作,現在正在與開發人員進行beta測試,這些開發人員將他們的內容捆綁在一起運行時的副本。 – rpetrich 2010-01-31 00:05:04

4

所有MonoTouch所做的都是將Mono代碼轉化爲目標C並將其編譯爲本地代碼,因此一旦編譯完成後即使使用Mono也可以「運行」。它實際上是單聲道代碼的包裝,它被翻譯成與目標C本地代碼和運行時庫等價的代碼。

它們本身並不是真正的.NET運行時代碼。所以根本沒有真正的區別!一旦它被編譯爲本地代碼就是了。

+0

@Emilio,這可能是最清楚的答案。 tommieb75提到的這個音譯是爲什麼你仍然需要安裝整個iPhone SDK,因爲MonoTouch需要訪問Objective-C編譯器,在將.Net轉換爲本地Objective-C之後,它只是流程的最後階段。 Apple不允許將.Net安裝到iPhone中,並且他們已經基本上建立了一個禁止安裝任何可以獨立執行運行時代碼到本機API的系統,例如,這只是Flash被排除的原因之一。 – 2010-02-02 02:56:51

+4

這是不正確的,沒有Objective-C音譯。 MonoTouch將IL預編譯爲JIT將生成的本機彙編代碼。它將它鏈接到一個本地二進制文件,它也嵌入了部分Mono運行時(但不包括JIT)。該運行時的工作方式與普通的Mono運行時相似,不同之處在於它不使用JITing IL代碼,而是使用鏈接的預編譯方法。裝配/鏈接本機二進制文件,代碼簽名,模擬器和Interface Builder需要Apple SDK。 – 2010-02-05 21:36:02

0

1 - 你幾乎是正確的。我不會說蘋果公司在平臺上「允許」MonoTouch應用程序,他們只是沒有公開說任何公開的內容,並且應用程序商店中已經有一些MonoTouch應用程序。這並不意味着他們明天不會阻止他們。

2 - 我對Mono Touch的內部知識不太瞭解,但我會想象一下,MT應用程序必須具備一些共同特徵(它擴大了二進制大小的方式,在某處必須具有一些共同特性),蘋果公司可以用它來把它們分開。當然,這可能需要花費大量精力才能帶來好處,而且他們可能寧願花時間在3.2以上。

我認爲你對用於開發原生應用的工具與蘋果希望在Safari中支持哪種瀏覽器插件之間的區別感到困惑。完全不同的概念。我認爲你應該閱讀John Gruber's recent piece,以獲取關於爲什麼Flash可能永遠不會在iPhone或iPad上的非常全面的理論。

0

看來,很快你就可以直接從閃存製作原生的iPhone應用程序。

http://labs.adobe.com/technologies/flashcs5/appsfor_iphone/

這將是有趣知道這些應用程序的性能,但對於一般媒體/市場/業務領域,我覺得這是一個很大的應用程序究竟是如何會去。

相關問題