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


95

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

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

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

Ответы:


165

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

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


2
Итак, должны ли проекты иметь два файла Entitlements.plist, один из которых имеет значение YES, предназначенный для профилей отладки, а другой - NO, предназначенный для профилей распространения?
— Грег Малетик,

2
Неважно, решил свой вопрос. Если вы не укажете Entitlements.plist в настройках сборки отладки, у вас не будет проблем.
— Грег Малетик,

1
Но я мог отлаживать даже после того, как Entitlements.plist не был включен в проект в режиме отладки с профилем разработчика. Может кто-нибудь объяснить мне это?
— spd

1
по умолчанию для отладки - true, по умолчанию для выпуска - false. Установка значения false отключит отладку.
— The Lazy Coder

1
Но конфиги распределения обычно выводятся из "релиза". Разве это не означает, что вам не нужно указывать FALSE для AdHoc? (или, если
— уж на то пошло

13

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


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 должен касаться памяти вашего приложения и работать с ней для отладки, вам нужно включить это для отладки, но вам нужно отключить это, чтобы распространять ваше приложение, иначе любое приложение сможет получить ваш порт задачи.


-7

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.