Was macht get-task-allow in Xcode?

95

Wenn ich meine Berechtigungen in meinem iPhone-App-Projekt einrichte, erstelle ich eine neue Entitlements.plist und setze den Wert von get-task-allow auf false. Aber wieso? Was bedeutet dieser Schlüssel?

BEARBEITEN

Beachten Sie, dass dies mit dieser Frage zusammenhängt. Ich habe festgestellt, dass ich durch Umdrehen des Werts dieses Schlüssels auf true die App auf meinem Gerät installieren konnte.

Codebeef
quelle

Antworten:

165

Aus diesem Thread auf ADC :

Wenn get-task-allow in einer Anwendung angemeldet ist, können andere Prozesse (wie der Debugger) eine Verbindung zu Ihrer App herstellen. Für Verteilungsprofile muss dieser Wert deaktiviert sein, für Entwicklungsprofile muss dieser Wert aktiviert sein (andernfalls kann Xcode Ihre App niemals starten und an sie anhängen).

Codebeef
quelle
2
Müssen Projekte also zwei Entitlements.plist-Dateien haben, von denen eine auf YES gesetzt ist, die auf Debug-Profile abzielt, und eine andere, die NO angibt und auf Verteilungsprofile abzielt?
Greg Maletic
2
Egal, habe meine eigene Frage gelöst. Wenn Sie Entitlements.plist in Ihren Debug-Build-Einstellungen weglassen, haben Sie kein Problem.
Greg Maletic
1
Ich konnte jedoch auch dann debuggen, wenn Entitlements.plist im Debug-Modus mit Entwicklerprofil nicht im Projekt enthalten war. Könnte mir das jemand erklären?
spd
1
Standard für Debug ist true, Standard für Release ist false. Wenn Sie den Wert auf false setzen, wird das Debuggen deaktiviert.
Der faule Kodierer
1
Distributionskonfigurationen werden jedoch normalerweise von 'release' abgeleitet. Sollte das nicht bedeuten, dass Sie für AdHoc nicht FALSE angeben müssen? (Oder haben Sie überhaupt eine Berechtigungsdatei?)
Nicolas Miari
13

Die Möglichkeit, Ihre Anwendung auf dem iPhone zu debuggen.

cdespinosa
quelle
1
Interessant! Wenn das alles ist, frage ich mich, warum das Umdrehen des Werts auf false mich daran hindert, die App auf meinem Gerät zu installieren. (Verwandte SO-Frage: stackoverflow.com/questions/997884/… )
Codebeef
Das ist es, was es tut ... aber was macht es WIRKLICH, damit Sie das tun können?
Ryan Detzel
1
Diese Antwort könnte erheblich verbessert werden, wenn sie mehr Informationen wie die von Codebeef enthält.
Jadar
@Codebeef Ich glaube, dies ist eine Einschränkung, die Xcode eher auferlegt als eine inhärente.
Saagarjha
7

Während Ihre Antwort richtig ist, möchte ich nur genauer darauf eingehen, damit Menschen, die wissen wollen, was genau get_task_allowbedeutet, dies können.

get_task_allowist eine Berechtigung, mit der andere Apps den Task-Port Ihrer App abrufen können. Dies bedeutet, dass jede andere App, die task_for_pid()mit Ihrer App-Prozess-ID ausgeführt wird, den Task-Port Ihrer App erhält, sodass sie beispielsweise Dinge in den Speicher schreiben und lesen können, um Dinge zu patchen und das Verhalten von zu ändern Ihre App.

Wenn Sie sich ansehen, wie ein Jailbreak funktioniert, werden Sie feststellen, dass eines der ersten Dinge, die sie tun task_for_pid(mach_task_self(),0,&kernel_task);, kernel_taskein mach_port_tWert ist 0, damit sie den Speicher des Kernels berühren können.

Da Kernel-Berechtigungen keine get_task_allowBerechtigung haben und Apple sogar die Möglichkeit dazu entfernt hat tfp0(task_for_pid 0 ) entfernt hat, benötigen sie einen Patch.

Da Xcode den Speicher Ihrer App berühren und damit arbeiten muss, um sie zu debuggen, müssen Sie dies für das Debuggen aktivieren. Sie müssen dies jedoch deaktivieren, um Ihre App zu verteilen. Andernfalls kann jede App Ihre App abrufen Task-Port.

iAlex11
quelle
-7

Für xcode 4: Sie müssen die Datei Entitlements.plist aus einer neuen Datei erstellen. und Ziele-> Build-Einstellungen-> Codesignatur-Berechtigungen müssen Sie hier schreiben "Entitlements.plist"

Ich habe das gemacht und xcode bekommt keinen Fehler mehr

Yiğit
quelle