Apa yang dilakukan get-task-allow di Xcode?

95

Jadi, ketika saya menyiapkan hak saya di proyek aplikasi iPhone, saya membuat Entitlements.plist baru, dan menyetel nilai get-task-allow ke false. Tapi kenapa? Apa yang diwakili oleh kunci ini?

EDIT

Perhatikan ini terkait dengan pertanyaan ini - Saya menemukan bahwa membalik nilai kunci ini ke true memungkinkan saya untuk menginstal aplikasi di perangkat saya)

Codebeef
sumber

Jawaban:

165

Dari utas ini di ADC :

get-task-allow, saat masuk ke aplikasi, mengizinkan proses lain (seperti debugger) untuk dilampirkan ke aplikasi Anda. Profil distribusi mengharuskan nilai ini dinonaktifkan, sedangkan profil pengembangan mengharuskan nilai ini diaktifkan (jika tidak, Xcode tidak akan pernah bisa diluncurkan dan dilampirkan ke aplikasi Anda).

Codebeef
sumber
2
Jadi, apakah project diharuskan memiliki dua file Entitlements.plist, satu di mana nilai ini disetel ke YES yang menargetkan profil Debug, dan satu lagi yang menentukan NO, menargetkan profil Distribusi?
Greg Maletic
2
Nevermind, memecahkan pertanyaan saya sendiri. Jika Anda tidak menyertakan Entitlements.plist dari setelan build Debug, Anda tidak akan menemui masalah.
Greg Maletic
1
Namun, saya dapat men-debug bahkan setelah Entitlements.plist tidak disertakan ke proyek dalam mode Debug dengan profil Pengembang. Bisakah seseorang menjelaskan ini padaku?
spd
1
default untuk debug adalah benar, default untuk rilis adalah salah. Mengubahnya menjadi false akan menonaktifkan debug.
The Lazy Coder
1
Tetapi konfigurasi distribusi biasanya berasal dari 'rilis'. Bukankah itu berarti Anda tidak perlu menentukan FALSE untuk AdHoc? (atau dalam hal ini, punya file Hak sama sekali?)
Nicolas Miari
13

Kemampuan untuk men-debug aplikasi Anda di iPhone.

cdespinosa.dll
sumber
1
Menarik! Jika hanya itu yang dilakukannya, maka saya bertanya-tanya mengapa membalik nilai menjadi false mencegah saya menginstal aplikasi di perangkat saya? (Pertanyaan SO Terkait: stackoverflow.com/questions/997884/… )
Codebeef
Itulah yang dilakukannya ... tetapi apa yang SEBENARNYA dilakukannya yang memungkinkan Anda melakukan itu?
Ryan Detzel
1
Jawaban ini bisa sangat ditingkatkan jika menyertakan lebih banyak informasi seperti Codebeef's.
Jadar
@Codebeef Saya percaya ini adalah batasan yang diberlakukan Xcode daripada yang melekat.
saagarjha
7

Meskipun jawaban Anda benar, saya hanya ingin lebih spesifik tentang ini supaya orang yang ingin tahu apa sebenarnya get_task_allowartinya bisa.

get_task_allowadalah hak yang memungkinkan aplikasi lain mendapatkan port tugas aplikasi Anda. Ini berarti bahwa jika ada aplikasi lain yang berjalan task_for_pid()dengan ID proses aplikasi Anda, mereka akan mendapatkan port tugas aplikasi Anda sehingga mereka dapat melakukan hal-hal seperti misalnya menulis dan membaca hal-hal di memori, oleh karena itu dapat menambal dan mengubah perilaku aplikasi Anda.

Jika anda melihat bagaimana sebuah karya jailbreak, Anda akan melihat salah satu hal pertama yang mereka lakukan adalah mendapatkan task_for_pid(mach_task_self(),0,&kernel_task);adalah bahwa kernel_taskadalah mach_port_tdengan nilai 0, sehingga mereka mampu menyentuh memori kernel.

Karena hak kernel tidak memiliki get_task_allowhak, dan Apple bahkan telah menghapus kemungkinan melakukan tfp0( task_for_pid 0), mereka membutuhkan tambalan.

Jadi pada dasarnya karena Xcode perlu menyentuh memori aplikasi Anda dan bekerja dengannya untuk men-debugnya, Anda harus mengaktifkan ini untuk debugging, tetapi Anda harus menonaktifkan ini untuk mendistribusikan aplikasi Anda atau aplikasi apa pun bisa mendapatkan port tugas.

iAlex11
sumber
-7

Untuk xcode 4: Anda harus membuat file Entitlements.plist dari file baru. dan Target-> membangun Pengaturan-> Penandatanganan Kode Hak Anda harus menulis di sini "Entitlements.plist"

Saya melakukan ini dan xcode tidak mendapatkan kesalahan lagi

Yiğit
sumber