Warum bieten Entwicklungsgeräte mehr Ressourcen als ein typisches Gerät?

9

Ich habe eine App erstellt, die auf meinem iPod Touch der 4. Generation und dem iPod touch der 5. Generation meines Unternehmens funktioniert.

Wir wollten gerade veröffentlichen, als wir einen Absturz fanden, der auftritt, nachdem ein Nicht-Entwicklergerät die App * ausgeführt hat.

Es kam die Idee auf, dass ein Gerät, das als "Entwicklergerät" registriert ist, Ihrer App mehr Ressourcen zur Verfügung stellt. Dies scheint mir nicht richtig zu sein, da ich mir keinen Grund vorstellen konnte, der existieren würde - ich denke, es ist wahrscheinlicher, dass es sich um ein Problem beim Erstellen oder Erstellen von Profilen handelt.

Dies führte jedoch zu einer Diskussion. Warum gibt es überhaupt Geräte wie Game Console Development Kits, Geräte mit mehr Funktionen als die Zielplattform? Natürlich ist es schön, ein Programm einem Stresstest zu unterziehen, aber wäre eine genauere Darstellung der Zielplattform nicht sinnvoller?

TL; DR - Warum verfügen Entwicklungskits über mehr Ressourcen als Zielplattformen?

* Bei einem Gerät, das kein Entwickler ist, handelt es sich um ein Gerät der 3. Generation. iOS-Gerät, das die App von unserem Server herunterlädt, nicht direkt von einem Computer, auf dem App & Xcode installiert sind.

Beachten Sie, dass es eine andere Frage gibt , die ähnlich lautet, aber tatsächlich anders ist, da diese andere Frage den Simulator betrifft, und ich verstehe, dass es massive Unterschiede zwischen der Verwendung eines Simulators und eines tatsächlichen Geräts gibt.

Katamaritaco
quelle
7
@gnat - Dieser Beitrag ist kein Duplikat von Warum es notwendig ist, meine iPhone-App zu testen . Ich verstehe, dass es massive Unterschiede zwischen der Verwendung eines Simulators und eines tatsächlichen Geräts gibt ...
Katamaritaco

Antworten:

8

Die Entwicklungsumgebung (für alles - sei es eine eigenständige Java-Anwendung oder eine mobile Umgebung oder ein eingebettetes Gerät) bietet normalerweise die Möglichkeit, Remote-Debugging, erweiterte Protokollierung und andere Arten der Selbstbeobachtung der Umgebung durchzuführen (was normalerweise nicht gewünscht wird) um alle Hooks für einen Logikanalysator auf einem in die Produktion eingebetteten Gerät hinzuzufügen ).

Diese zusätzlichen Dinge erfordern zusätzliche Ressourcen. Das Öffnen eines Remote-Debuggers für eine VM oder eine andere Remote-Umgebung erfordert einige Ressourcen am anderen Ende. Im stark eingeschränkten Bereich des Mobilfunks ist es möglich, dass diese zusätzlichen Ressourcen das für eine Standardanwendung gewährte Limit überschreiten. Daher werden der Entwicklungsumgebung mehr Ressourcen zugewiesen, damit sie das Ressourcenlimit nicht erreicht, wenn zusätzliche Protokollierung oder Debugging durchgeführt wird.

Dies geht weiter bis zu dem Punkt, dass Sie immer etwas in einem Spiegel der Produktionsumgebung testen müssen. Das Vertrauen, dass es auf den Computern des Entwicklers mit all seinen Optimierungen und verschiedenen Variablen funktioniert, reicht nicht aus, um zu überprüfen, ob es in der Produktion ordnungsgemäß funktioniert.


quelle
1
Ja, die Qualitätssicherung muss immer in einer Endbenutzerumgebung und nicht in einer Entwicklungsumgebung getestet werden.
17 von 26
Vor einigen Jahren war ich an einem Projekt beteiligt, bei dem zwei völlig unterschiedliche CPU-Karten entwickelt werden mussten. Der Hardware-Ingenieur, der das Board erstellt hat, an dem ich stark beteiligt war, hat eine Reihe von Testanschlüssen auf sein Board gesetzt und eine Versicherung für die Debug-Phase abgeschlossen, um sicherzustellen, dass wir alles prüfen können. Er nahm viel Statik für die Verschwendung von Immobilien und Geld. Der andere Mann hat kein solches Geld und keine Immobilien verschwendet. Lustige Sache: Wir haben die Anschlüsse auf unserer Platine nie gebraucht. Die Integration des anderen Boards war angeblich ein absoluter Albtraum, denn NICHTS KÖNNTE GEPRÜFT WERDEN. Denken Sie an "Versicherung".
John R. Strohm
@ JohnR.Strohm Für eine Entwicklung ist das Prüfen gut. Ich versuche nur zu sagen, dass, wenn es für eine Produktionsplatine konzipiert wurde, die sich von der Entwicklungsplatine unterscheidet, man es auch erneut mit der Produktionsplatine testen muss, nachdem man mit der Entwicklungsplatine erfolgreich war (und ggf. prüft).
Dies ist sehr sinnvoll für ein typisches "Entwickler-Kit". Aus Neugier kann bei iOS jedes iDevice als "Entwicklergerät" verwendet werden. Wie kann es einen Unterschied zwischen zwei Teilen derselben Hardware geben?
Katamaritaco
1
@Katamaritaco Nur weil es sich um dasselbe physische Gerät handelt, bedeutet dies nicht, dass die Anwendung innerhalb von iOS über dieselben Berechtigungen verfügt. Die Möglichkeit, Dinge wie Remote-Debugging auszuführen, kann die Ressourcen ändern, auf die eine Anwendung Zugriff hat.
5

Sie können damit einen ressourcenintensiven Proof-of-Concept erstellen, den Sie später optimieren können.

Es macht keinen Sinn, eine App zum Absturz zu bringen, da sie 5 Byte über dem Speicherlimit liegt (was gelöst werden kann, indem der Optimierer so eingestellt wird, dass in der Version Speicherplatz gespart wird, Sie jedoch eine Debug-Version ausführen).

Wenn Sie beim Testen das Verbraucherlimit überschreiten, wird im Protokoll eine Warnung angezeigt.

Ratschenfreak
quelle
1

Es ist teilweise eine Frage des "Vertrauens". Es wird davon ausgegangen, dass Entwickler wissen, was sie tun, und erhalten daher uneingeschränkten Zugriff auf das Gerät und alle seine Ressourcen. Dies kann eine große Hilfe für kleine Unternehmen und Entwicklungsteams sein, bei denen nicht verwendete Ressourcen verschwendete Ressourcen sind.

In einem größeren Unternehmensumfeld oder insbesondere in der Öffentlichkeit wird diese Art des Zugriffs aufgrund von Sicherheitsbedenken und der Notwendigkeit, mit anderen Anwendungen, die ebenfalls Ressourcen benötigen, gut zu spielen, zur Haftung.

Das ist keine wirklich neue Idee. Ich habe zwei Maschinen bei der Arbeit. Auf meinem Entwicklercomputer habe ich Administratorzugriff, dieser ist jedoch vom Internet isoliert. Mein anderer Computer, den ich für E-Mail-, Office- und Internetzugang verwende, bietet mir nicht einmal die Möglichkeit, Programme zu installieren.

Aus diesem Grund müssen Sie Ihre Anwendung vor der Bereitstellung auf einem Gerät testen, das kein Entwickler ist, um sicherzustellen, dass sie sich gut verhält. :) :)

Robert Harvey
quelle
0

Unter iOS können Sie mit einem für die Entwicklung aktivierten Gerät Debug-Builds direkt ausführen, die möglicherweise andere Compiler-Fehler als Release-Builds enthalten, sowie Apps unter einem Debug-Nub ausführen, wodurch sich das Thread-Timing und die Speichernutzung geringfügig ändern können. Dies kann auch verschiedene Threading- und durchgesickerte Speicherfehler anzeigen / verbergen.

Ein Entwicklungsgerät wäre ohne eine Debug-Funktion nicht von großem Nutzen, und ein Benutzergerät mit Debug-Funktion würde ein (schwerwiegenderes) Problem mit der App- und App-Datensicherheit darstellen.

hotpaw2
quelle