Co get-task-allow robi w Xcode?

95

Kiedy więc konfiguruję uprawnienia w projekcie aplikacji na iPhone'a, tworzę nową Entitlements.plist i ustawiam wartość get-task-allow na false. Ale dlaczego? Co reprezentuje ten klucz?

EDYTOWAĆ

Zwróć uwagę, że jest to związane z tym pytaniem - stwierdziłem, że zmiana wartości tego klucza na true pozwoliła mi zainstalować aplikację na moim urządzeniu)

Codebeef
źródło

Odpowiedzi:

165

Z tego wątku na ADC :

get-task-allow, po zalogowaniu się do aplikacji, umożliwia innym procesom (takim jak debugger) dołączenie do twojej aplikacji. Profile dystrybucji wymagają wyłączenia tej wartości, podczas gdy profile programistyczne wymagają włączenia tej wartości (w przeciwnym razie Xcode nigdy nie będzie w stanie uruchomić i dołączyć do Twojej aplikacji).

Codebeef
źródło
2
Czy więc projekty muszą mieć dwa pliki Entitlements.plist, jeden, w którym ta wartość jest ustawiona na TAK, który jest przeznaczony dla profili debugowania, a drugi, który określa NIE, ukierunkowany na profile dystrybucji?
Greg Maletic,
2
Nieważne, rozwiązałem własne pytanie. Jeśli pominiesz Entitlements.plist w ustawieniach kompilacji debugowania, nie będzie problemu.
Greg Maletic,
1
Ale mogłem debugować nawet wtedy, gdy Entitlements.plist nie został dołączony do projektu w trybie debugowania z profilem programisty. Czy ktoś mógłby mi to wyjaśnić?
spd
1
Domyślnie dla debugowania jest prawda, domyślnie dla wydania jest fałsz. Ustawienie wartości false wyłączy debugowanie.
The Lazy Coder
1
Ale konfiguracje dystrybucji zwykle pochodzą od „wydania”. Czy nie powinno to oznaczać, że nie musisz określać FALSE dla AdHoc? (a może w ogóle masz plik uprawnień?)
Nicolas Miari,
13

Możliwość debugowania aplikacji na iPhonie.

cdespinosa
źródło
1
Ciekawy! Jeśli to wszystko, to zastanawiam się, dlaczego zmiana wartości na false uniemożliwia mi zainstalowanie aplikacji na moim urządzeniu? (Powiązane pytanie SO: stackoverflow.com/questions/997884/… )
Codebeef
To właśnie robi ... ale co NAPRAWDĘ robi, co ci na to pozwala?
Ryan Detzel
1
Ta odpowiedź mogłaby być znacznie ulepszona, gdyby zawierała więcej informacji, takich jak Codebeef.
Jadar
@Codebeef Uważam, że jest to ograniczenie, które nakłada Xcode, a nie nieodłączne.
saagarjha
9

Twoja odpowiedź jest prawidłowa, ale chcę być bardziej szczegółowy, aby ludzie, którzy chcą wiedzieć, co dokładnie get_task_allowoznacza, mogli.

get_task_allowto uprawnienie, które umożliwia innym aplikacjom uzyskiwanie portu zadań Twojej aplikacji. Oznacza to, że jeśli jakakolwiek inna aplikacja działa task_for_pid()z Twoim identyfikatorem procesu aplikacji, otrzymają port zadań Twojej aplikacji, aby mogli na przykład pisać i czytać rzeczy w pamięci, dzięki czemu będą mogli łatać rzeczy i modyfikować zachowanie Twoja aplikacja.

Jeśli spojrzysz na to, jak działa jailbreak, zauważysz, że jedną z pierwszych rzeczy, które robią, jest task_for_pid(mach_task_self(),0,&kernel_task);to, że kernel_taskjest to mach_port_tz wartością 0, dzięki czemu są w stanie dotknąć pamięci jądra.

Ponieważ uprawnienia jądra nie mają get_task_allowuprawnień, a firma Apple usunęła nawet możliwość wykonywania tfp0( task_for_pid 0), potrzebna jest poprawka.

Zasadniczo, ponieważ Xcode musi dotknąć pamięci Twojej aplikacji i pracować z nią, aby ją debugować, musisz włączyć to do debugowania, ale musisz to wyłączyć, aby rozpowszechniać swoją aplikację, w przeciwnym razie każda aplikacja byłaby w stanie uzyskać port zadań.

iAlex11
źródło
-7

Dla xcode 4: musisz utworzyć plik Entitlements.plist z nowego pliku. i Cele-> Ustawienia kompilacji-> Uprawnienia do podpisywania kodu musisz wpisać tutaj "Entitlements.plist"

Zrobiłem to i xcode nie ma już błędów

Yiğit
źródło