[英]iPhone device vs. iPhone simulator
我聽說應用程序在模擬器上無法正常工作,但在實際的iPhone設備上正常工作。 有沒有人經歷過在模擬器中完美運行但在實際iPhone設備上沒有運行的應用程序?
文件名在iPhone上區分大小寫,但在模擬器中不區分大小寫。
因此,例如,如果您嘗試使用UIImage *iconImage = [UIImage imageNamed:"MyIcon.png"]
加載圖像,但您的資源實際上名為“myicon.png”,那么它將在模擬器上運行,但不會在設備上。
如果您的應用程序是圖形密集型的,比如說游戲,那么模擬器的性能並不像硬件那樣。 您的應用程序可能會很平滑並且在模擬器上運行良好,但在硬件上它可能會爬行,除非您知道自己在做什么。 您可以輕松地在模擬器和硬件之間從60fps到3fps。
評估函數/構造函數參數的順序是不同的:
int i = 0;
int f() { return ++i; }
int a, b;
int test(int p1, int p2) {
a = p1;
b = p2;
}
test( f(), f() );
//simulator: a = 2, b = 1
//device: a = 1, b = 2
三角函數可能會返回不同的結果:
float a = cosf( 0.108271248639 );
printf("%.12f", a);
//simulator: 0.994144439697
//device: 0.994144380093
我知道設備和模擬器之間的OpenGL ES實現存在一些差異。 據我所知,這主要是因為iPhone(PowerVR MBX)上的圖形芯片具有與其他mac機器截然不同的功能。 許多硬件限制沒有在模擬器中強制執行,因此完全可以在模擬器中運行一些在設備上完全崩潰的東西。
iPhone硬件也支持一些OpenGL ES擴展,模擬器不支持這些擴展。 我相信主要的是PowerVR紋理壓縮(PVRTC)。
另一個問題區域可能是內存占用。 有趣的是,我還沒有看到模擬器自動強制執行設備的內存限制。 因此,有可能在模擬器中運行一些正常的東西,愉快地消耗大量的RAM,並且從不打擾任何它只是在設備上運行時短暫持續這種行為后迅速終止。
指尖大於鼠標光標的1像素端點。 要進行適當的,甚至是最小的可用性測試,您應該將應用程序部署到設備上。
有些代碼在模擬器上不起作用(例如,使用iPhone Keychain),但對於幾乎所有應用程序,模擬器的工作方式與iPhone完全相同。
也就是說,在真實設備上進行測試絕對沒有替代品。
我在運行一個相對簡單的1/30秒計時器時遇到了問題,無法為游戲做更新。 它在模擬器中運行良好,並凍結設備上的輸入。
另請注意,在為模擬器構建時,您將針對OS X框架(如果適用)進行編譯,以便您可以使用框架的iPhone版本上不可用的方法和類。
我能想到的一個例子就是NSPredicate。 我能夠在模擬器中使用NSPredicate編譯和運行應用程序,但由於該類不可用,因此無法為設備編譯。
如果啟用GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS,您的應用程序將在模擬器中的所有位置崩潰,但在iPhone上工作。
iPhone模擬器中的Quartz圖形調用比同一台計算機上的Java2D調用更快 - 邪惡快速。
我在內存飢渴的應用程序中遇到了一些問題,模擬器可以正常工作(因為它會假設iPhone / iPod Touch的內存全部都是你玩的),而設備會崩潰(因為其他應用程序泄露了和蘋果背景服務占用了一些內存)我沒有實現適當的內存管理或對didReceiveMemoryWarning
選擇器的響應。
花了一段時間才發現的一件大事是模擬器不支持設備令牌,因此任何涉及這些令牌的代碼都不會在模擬器上運行。
我有一個錯誤,應用程序可以在模擬器上正常工作,但是當我在設備上運行它時會崩潰,因為設備令牌代碼中存在錯誤。 我想不出來的時間最長!
有許多瑣碎的例子。 例如,您可以在模擬器上分配比在真實手機上更多的內存。 如果您沒有視網膜Mac,則無法在模擬器上接收推送通知,顯示點距不同。
在更基礎的層面上,模擬器就是這樣,它使用Mac OS X模擬iPhone OS X.這可以通過以下事實得到證明:模擬器上的文件系統可能不區分大小寫,但在手機上它將是。 更巧妙的是,它不會模擬硬件,因此像位置這樣的東西將不會起作用,3D會有很大的不同 - 特別是如果你使用的是Metal。
您應該始終在真實硬件上進行測試。
電影文件(m4v類型),因為我的經驗是第一次正常播放
但第二次它閃爍模擬器的屏幕......
而在iPhone設備中,它的工作原理...
如果應用程序的狀態欄被隱藏,在模擬器的情況下它仍然消耗觸摸事件。 但在設備中它表現得很完美。
在沒有考慮兩者之間的性能差異的情況下,曾經存在模擬器沒有正確執行的一些事情 - 即在某些情況下它會混亂音頻(請參閱此問題 )。 但是,自2.2 SDK以來,這個問題已得到解決,聲音似乎在模擬器中很好。 這並不是說潛伏在那里的其他不兼容性! (我沒遇到過)
我有一些聲音效果在模擬器中播放得很好,但在設備上沒有。 我不得不將格式更改為設備可以處理的內容。
是的 - 前幾天發生在我身上。 我是iphone的新用戶,因此刪除了MainWindow.xib,認為它未被使用。 該應用程序在模擬器上完美運行 - 但在手機上安裝時崩潰了。
我們遇到的另一個問題是我們的three20依賴項,它們被設置為ios 3.2而不是4.1。 在模擬器中完美地工作,但在設備上被轟炸(因為文件被編譯為錯誤的拱門)。
在模擬器中無法訪問iphone視頻庫,但代碼在實際設備上工作正常
關於聲音,我遇到了同樣的問題。 問題是模擬器支持的聲音編碼是與設備不同的一組聲音。 我希望有所幫助。
從模擬器移動到設備時,我遇到了很多庫和框架的問題。 尤其是它們似乎有不同的架構!
我已經看到對象的定位,比如工具欄在模擬器上的不同,而不是在手機上。 很煩人。
是啊....
為2.x編譯的應用程序將在3.0設備上正常工作,但它將在3.0Simulator上崩潰
注意:1。如果您編譯為3.0,應用程序將在3.0模擬器上正常工作... 2. a)編譯2.x並在模擬器中啟動應用程序。 b)現在將iPhone模擬器硬件更改為“3.0”。 c)然后啟動我們之前在步驟a)中安裝的應用程序。 崩潰!!!!!!!!
當試圖訪問UIDevice.currentDevice()時,它返回iOS模擬器而不是您正在測試的實際設備。 這很糟糕,因為你無法在模擬器上做某些事情。
模擬器中的資源加載比設備中的加載速度快很多。 例如,加載和顯示一系列全屏UIImages
(如基本視頻)在模擬器中看起來非常流暢,並且在設備上看起來不穩定。
實際上,請記住不同設備之間存在巨大的速度差異。 最初的iPhone和iPhone 3G比iPod touch第二代慢,后者也比iPhone 3GS慢得多,依此類推。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.