Что делает get-task-allow в Xcode?

95

Поэтому, когда я настраиваю свои права в своем проекте приложения для iPhone, я создаю новый Entitlements.plist и устанавливаю для get-task-allow значение false. Но почему? Что представляет этот ключ?

РЕДАКТИРОВАТЬ

Обратите внимание, что это связано с этим вопросом - я обнаружил, что изменение значения этого ключа на true позволило мне установить приложение на моем устройстве)

Codebeef
источник

Ответы:

165

Из этой темы на ADC :

get-task-allow при входе в приложение позволяет другим процессам (например, отладчику) подключаться к вашему приложению. Профили распространения требуют, чтобы это значение было отключено, в то время как профили разработки требуют, чтобы это значение было включено (в противном случае Xcode никогда не сможет запускаться и подключаться к вашему приложению).

Codebeef
источник
2
Итак, должны ли проекты иметь два файла Entitlements.plist, один из которых имеет значение YES, предназначенный для профилей отладки, а другой - NO, предназначенный для профилей распространения?
Грег Малетик,
2
Неважно, решил свой вопрос. Если вы не укажете Entitlements.plist в настройках сборки отладки, у вас не будет проблем.
Грег Малетик,
1
Но я мог отлаживать даже после того, как Entitlements.plist не был включен в проект в режиме отладки с профилем разработчика. Может кто-нибудь объяснить мне это?
spd
1
по умолчанию для отладки - true, по умолчанию для выпуска - false. Установка значения false отключит отладку.
The Lazy Coder
1
Но конфиги распределения обычно выводятся из "релиза". Разве это не означает, что вам не нужно указывать FALSE для AdHoc? (или, если
уж на то пошло
13

Возможность отлаживать ваше приложение на iPhone.

cdespinosa
источник
1
Интересно! Если это все, что он делает, то мне интересно, почему установка значения false мешает мне установить приложение на моем устройстве? (Связанный вопрос SO: stackoverflow.com/questions/997884/… )
Codebeef
Вот что он делает ... но что он ДЕЙСТВИТЕЛЬНО делает, что позволяет вам это делать?
Райан Децел
1
Этот ответ можно было бы значительно улучшить, если бы он включал больше информации, такой как Codebeef.
Jadar
@Codebeef Я считаю, что это ограничение, которое накладывает Xcode, а не врожденное.
saagarjha
9

Хотя ваш ответ правильный, я просто хочу быть более конкретным, чтобы люди, которые хотят знать, что именно get_task_allowозначает, могли.

get_task_allow- это право, которое позволяет другим приложениям получать порт задачи вашего приложения. Это означает, что если какое-либо другое приложение запускается task_for_pid()с идентификатором процесса вашего приложения, они получат порт задачи вашего приложения, чтобы они могли делать такие вещи, как, например, запись и чтение вещей в памяти, поэтому они могут исправлять вещи и изменять поведение ваше приложение.

Если вы посмотрите на то, как побег из тюрьмы работ, вы увидите одну из первых вещей , которые они делают , это получить в task_for_pid(mach_task_self(),0,&kernel_task);том , что kernel_taskэто mach_port_tсо значением 0, так что они могут прикоснуться к памяти ядра.

Поскольку права на ядро ​​не имеют get_task_allowправ, и Apple даже удалила возможность делать tfp0( task_for_pid 0), им нужен патч.

Итак, в основном, поскольку Xcode должен касаться памяти вашего приложения и работать с ней для отладки, вам нужно включить это для отладки, но вам нужно отключить это, чтобы распространять ваше приложение, иначе любое приложение сможет получить ваш порт задачи.

iAlex11
источник
-7

Для xcode 4: вам нужно создать файл Entitlements.plist из нового файла. и Targets-> build Settings-> Права на подпись кода, вы должны написать здесь "Entitlements.plist"

Я сделал это, и xcode больше не получает ошибку

Yiğit
источник