get-task-allow ทำอะไรใน Xcode?


96

เมื่อฉันตั้งค่าสิทธิ์ในโปรเจ็กต์แอพ iPhone ฉันจะสร้าง Entitlements.plist ใหม่และตั้งค่าของ get-task-allow เป็น false แต่ทำไม? คีย์นี้แสดงถึงอะไร?

โปรดทราบว่าสิ่งนี้เกี่ยวข้องกับข้อผิดพลาดที่ไม่สามารถตรวจสอบแอปพลิเคชันเมื่อสร้างแอปสำหรับอุปกรณ์ iPhone - ฉันพบว่าการพลิกค่าของคีย์นี้เป็นจริงทำให้ฉันสามารถติดตั้งแอปบนอุปกรณ์ได้)

คำตอบ:


165

จากหัวข้อนี้ใน ADC :

get-task-allow เมื่อลงชื่อเข้าใช้แอปพลิเคชันจะอนุญาตให้กระบวนการอื่น ๆ (เช่นดีบักเกอร์) แนบกับแอปของคุณ โปรไฟล์การแจกจ่ายต้องการให้ปิดค่านี้ในขณะที่โปรไฟล์การพัฒนากำหนดให้ต้องเปิดใช้ค่านี้ (มิฉะนั้น Xcode จะไม่สามารถเปิดและแนบกับแอปของคุณได้)


2
โปรเจ็กต์จำเป็นต้องมีไฟล์ Entitlements.plist สองไฟล์โดยที่ค่านี้ถูกตั้งค่าเป็น YES ที่กำหนดเป้าหมายโปรไฟล์ดีบักและอีกโปรเจ็กต์ที่ระบุ NO ซึ่งกำหนดเป้าหมายโปรไฟล์การแจกจ่ายหรือไม่
Greg Maletic

2
ไม่เป็นไรแก้ไขคำถามของตัวเอง หากคุณละทิ้ง Entitlements.plist ออกจากการตั้งค่าการสร้าง Debug ของคุณคุณก็ไม่มีปัญหา
Greg Maletic

1
แต่ฉันสามารถดีบักได้แม้ว่า Entitlements.plist จะไม่รวมอยู่ในโปรเจ็กต์ในโหมดดีบักที่มีโปรไฟล์นักพัฒนา มีใครช่วยอธิบายฉันได้ไหม
spd

1
ค่าเริ่มต้นสำหรับการดีบักเป็นจริงค่าเริ่มต้นสำหรับรีลีสคือเท็จ การเปลี่ยนเป็นเท็จจะปิดใช้งานการดีบัก
The Lazy Coder

1
แต่การกำหนดค่าการกระจายมักได้มาจาก "การปล่อย" นั่นไม่ควรหมายความว่าคุณไม่จำเป็นต้องระบุ FALSE สำหรับ AdHoc ใช่หรือไม่ (หรือสำหรับเรื่องนั้นมีไฟล์สิทธิเลย?)
Nicolas Miari

13

ความสามารถในการดีบักแอปพลิเคชันของคุณบน iPhone


1
น่าสนใจ! หากเป็นเช่นนั้นฉันสงสัยว่าเหตุใดการพลิกค่าเป็นเท็จจึงป้องกันไม่ให้ฉันติดตั้งแอปบนอุปกรณ์ของฉัน (คำถาม SO ที่เกี่ยวข้อง: stackoverflow.com/questions/997884/… )
Codebeef

นั่นคือสิ่งที่ทำ ... แต่มันทำอะไรได้บ้างที่ช่วยให้คุณทำเช่นนั้น?
Ryan Detzel

1
คำตอบนี้สามารถปรับปรุงได้อย่างมากหากมีข้อมูลเพิ่มเติมเช่น Codebeef's
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-> Code Signing Entitlements คุณต้องเขียนที่นี่ "Entitlements.plist"

ฉันทำสิ่งนี้และ xcode ไม่ได้รับข้อผิดพลาดอีกต่อไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.