Що робить get-task-allow в Xcode?


95

Отже, коли я встановлюю свої права в своєму проекті програми для iPhone, я створюю новий Entitlements.plist і встановлюю значення get-task-allow на false. Але чому? Що являє собою цей ключ?

РЕДАГУВАТИ

Зверніть увагу, що це пов’язано з цим запитанням - я виявив, що перевертання значення цього ключа в значення true дозволило мені встановити програму на свій пристрій)

Відповіді:


165

З цієї теми на АЦП :

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


2
Тож чи потрібно проектам мати два файли Entitlements.plist, один з яких для цього значення встановлено ТА, який націлений на профілі налагодження, а інший, який вказує НІ, націлений на профілі розподілу?
Greg Maletic

2
Нічого, вирішив власне питання. Якщо ви виключите Entitlements.plist з налаштувань збірки налагодження, у вас не виникне проблем.
Greg Maletic

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

7

Хоча ваша відповідь правильна, я просто хочу бути більш конкретним щодо цього, щоб люди, які хочуть знати, що саме 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 з нового файлу. і Цілі-> Налаштування побудови-> Права підпису коду, які ви повинні написати тут "Entitlements.plist"

Я зробив це, і xcode більше не отримує помилки

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.