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.
quelle
Antworten:
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
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.
quelle
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. :) :)
quelle
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.
quelle