การดีบักแอปเมื่อเปิดตัวโดยการแจ้งเตือนแบบพุช


135

ฉันกำลังพัฒนาแอพที่ได้รับการแจ้งเตือนแบบพุช ฉันมีทั้งหมดนี้ทำงานได้ 100% ผ่านหน้า PHP มีหลายประเภทของการแจ้งเตือนแบบพุชที่แอปของฉันสามารถรับได้ PHP จัดการสิ่งนี้และส่งแพ็กเก็ตข้อมูลที่แตกต่างกันไปยังแอพของฉันซึ่งทั้งหมดได้รับดี

อย่างไรก็ตามเมื่อผู้ใช้ "ดู" การแจ้งเตือนและแอปของฉันเปิดขึ้นเห็นได้ชัดว่าฉันต้องการดำเนินการที่แตกต่างจากที่ฉันทำหากผู้ใช้เพิ่งเปิดแอปด้วยตนเองและยิ่งไปกว่านั้นการดำเนินการที่แตกต่างกันขึ้นอยู่กับประเภทการแจ้งเตือนแบบพุช ฉันทำงานได้ดี ...

หนึ่งในประเภทการกดของฉันควรจะเปิด UIView ที่เชื่อมต่อหลาย ๆ เซิร์ฟเวอร์ไปยังเซิร์ฟเวอร์ต่างๆและต่อรองข้อมูลไปมา UIView นี้ใช้งานได้ดีเมื่อถูกเรียกใช้จากเมนูหลักอย่างไรก็ตามเมื่อการแจ้งเตือนแบบพุชของฉันเรียกให้ UIView นี้ปรากฏการเชื่อมต่อซ็อกเก็ตจะไม่ทำงานตามที่คาดไว้

ตอนนี้คำถามของฉันไม่ได้เกี่ยวกับซ็อกเก็ต แต่มีมากกว่านั้น - คุณจะแก้ปัญหาดังกล่าวได้อย่างไร ?? จากสิ่งที่ฉันบอกได้ (ฉันค่อนข้างใหม่) เมื่อแอปเปิดตัวจากการแจ้งเตือนแบบพุชไม่มีวิธีใดที่จะเชื่อมโยงการดำเนินการนั้นกับดีบักเกอร์ / คอนโซล / ฯลฯ ... ฉันมีช่วงเวลาที่ยากลำบากในการพยายามดีบักโค้ดโดยใช้ UIAlertViews เนื่องจากมีการสื่อสารกลับไปกลับมาระหว่างเซิร์ฟเวอร์ต่างๆ

คำแนะนำใด ๆ ที่คุณมีสำหรับฉันจะได้รับการชื่นชมอย่างมาก

คำตอบ:


147

ใน XCode <4.0 (สำหรับ XCode> = 4 โปรดดูคำตอบโดย delirus ด้านล่าง) ตอนนี้คุณสามารถกำหนดค่า Xcode ให้แนบดีบักเกอร์กับแอปหลังจากที่คุณเปิดใช้งานแทนที่จะเปิดแอปผ่านตัวดีบัก วิธีนี้ช่วยให้คุณแก้ไขข้อบกพร่องที่แตกต่างกันไปตามสถานะการเปิดตัวแอปพลิเคชันของคุณเช่นโครงร่าง URL แผ่นแปะและการแจ้งเตือนแบบพุช

  1. ใน Xcode ให้ดูในแถบ Source และด้านล่าง Targets จะมี Executables
  2. เรียกตัวตรวจสอบสำหรับแอปของคุณในไฟล์ปฏิบัติการ
  3. คลิกที่แท็บการดีบักในตัวตรวจสอบ
  4. ยกเลิกการเลือก "เริ่มปฏิบัติการได้หลังจากเริ่มโปรแกรมแก้ไขข้อบกพร่อง"
  5. ตรวจสอบ "รอการเปิดตัวครั้งต่อไป / การแจ้งเตือนแบบพุช"

ตอนนี้เมื่อคุณคลิก debug จาก Xcode แทนที่จะเปิดแอพหน้าต่างจะแสดงขึ้นมาเพื่อบอกว่ากำลังรอให้แอพเปิดตัว จากนั้นคุณเปิดแอปตามปกติบนโทรศัพท์และ Xcode จะแนบ


37
ฉันรู้ว่าสิ่งนี้อาจไม่เหมาะสม แต่ฉันรักคุณ :)
Dutchie432

17
เมื่อคุณเปิดใช้วิธีนี้ stdin, stdout, stderr ของแอปพลิเคชันของคุณจะไม่ถูกส่งไปยังคอนโซลของ GDB ระบบจะชี้ตำแหน่งที่อยู่ในการเปิดใช้แอปตามปกติ คุณสามารถดู NSLog () ในคอนโซลระบบของอุปกรณ์ได้โดยดูที่อุปกรณ์ในตัวจัดระเบียบ
Louis Gerbarg

1
คุณสอนจุดที่มีค่ามากที่นี่ให้ฉัน ขอบคุณ. ฉันใช้เวลา 2 วันที่ผ่านมาในการพยายามแก้ไขข้อบกพร่องบางอย่างที่สามารถแก้ไขได้ภายใน 20 นาทีหลังจากโพสต์ของคุณ
Dutchie432

1
@stigi ทำงานในโปรแกรมจำลองสำหรับฉันเพื่อทดสอบโครงร่าง URL ฉันใช้ xcode 4.5 ถ้าเป็นเช่นนั้น
dreyln

1
@dreyln ความคิดเห็นของฉันมาจากปี 2009 :) มีการเปลี่ยนแปลงมากมายตั้งแต่กว่า แต่ขอบคุณที่แจ้งให้ทราบ!
stigi

124

สำหรับ Xcode 4 คุณต้อง:

  1. แก้ไขโครงร่างที่ใช้งานของคุณผ่านเมนูแบบเลื่อนลง "แบบแผน" ( + <)
  2. กว่าเลือกผลิตภัณฑ์ของคุณ - 'เรียกใช้ MyApp.app' ทางด้านซ้าย
  3. เลือกแท็บ "ข้อมูล" ทางด้านขวา
  4. และสุดท้ายเลือกตัวเลือก "รอให้ MyApp.app เปิดตัว"

ดูข้อมูลเพิ่มเติมได้ที่ส่วน "กำหนดค่าการปฏิบัติการใน Scheme Editor"

แก้ไข:
ในกรณีที่คุณพลาดบันทึกใน GDB โปรดดูความคิดเห็นของ Louis Gerbarg ต่อคำตอบของเขา


1
ฉันใช้ Xcode 4.2 สำหรับ Lion และแม้ว่าแอปจะเปิดตัวจากโครงร่าง URL อย่างถูกต้องและการดำเนินการดีบักเกอร์ไม่หยุด แต่คอนโซลก็ไม่แสดงอะไรเลย ฉันพลาดอะไรไปรึเปล่า?
LoDani

@ LoDani เหมือนกันที่นี่คุณเคยคิดว่าทำไม?
davis

3
@ โลดานีเดวิสจี: คุณเห็นความคิดเห็นของหลุยส์ในคำตอบที่ยอมรับหรือไม่? stackoverflow.com/questions/1239000/…เมื่อเปิดตัวด้วยวิธีนี้ stdin / out / err จะไม่ถูกเปลี่ยนเส้นทางไปยังคอนโซล
Ivan Vučica

ขอบคุณคุณบันทึกวันของฉัน! พยายามตอกตะปูจุดบกพร่องที่เกิดขึ้นเมื่อแอปของฉันเริ่มต้นโดยตัวจัดการ URL เท่านั้น
Eliot

@delirus - ขอบคุณสำหรับการอัปเดตสิ่งนี้สำหรับ XCode 4
Dutchie432

112

สำหรับ XCode 10, 9, 8, 7 และ 6:

  1. เลือก Schemeบนแถบเครื่องมือ (ทางด้านซ้ายของอุปกรณ์ที่คุณกำลังแก้ไขข้อบกพร่อง)
  2. เลือกแก้ไขโครงการ
  3. เลือกเรียกใช้ในแผงด้านซ้าย
  4. สำหรับตัวเลือกเปิดใช้งานให้เลือกรอให้เรียกใช้งานได้
  5. ปิด Scheme Editor และรันโปรเจ็กต์ XCode ของคุณ

ตอนนี้คุณสามารถแก้ไขข้อบกพร่องเมื่อเปิดใช้งานจากการแจ้งเตือน URL ที่กำหนดเองหรือโดยการแตะไอคอนแอป


9
คำตอบนี้ทำให้ฉันมีปัญหามากแม้ว่าโดยทั่วไปแล้วมันจะทำให้ฉันไปถูกทาง ขั้นตอนที่ 3 นั้นทำให้เข้าใจผิดเล็กน้อย คุณต้องทำได้แน่นอน เลือกเรียกใช้ในแผงด้านซ้าย แต่ควรมีขั้นตอนที่ 5 ที่มีข้อความเชิงแนวคิดคล้ายกันมาก: คลิกปุ่ม Run ของ xcode ก่อนที่จะคาดหวังผลลัพธ์ ... เนื่องจากในตอนแรกมันไม่ได้ผลสำหรับฉันฉันจึงขอคำแนะนำจากเพื่อนร่วมงานคนอื่น ๆ ... พวกเขาถาม ฉันถ้าฉันทำสิ่งที่วิ่งซึ่งฉันตอบว่าใช่โดยคิดถึงตัวเลือกที่ไม่ใช่ 3 ... ควรมีขั้นตอนที่ 5 สำหรับสิ่งนี้จริงๆ ...
Florin Odagiu

@FlorinOdagiu ดีโทร. เพิ่มขั้นตอนที่ 5 แล้วขอบคุณ!
bgolson

ในกรณีที่ Xcode เรียกคืนแท็บแบบแผนอื่นตัวเลือกการเปิดตัวจะอยู่ใต้แท็บข้อมูล
Nate Whittaker

3
ฉันไม่ได้รับผลลัพธ์ใด ๆ ในหน้าต่างดีบักเกอร์เมื่อฉันเปิดแอปด้วยตนเอง
dvdblk

3

ฉันไม่ได้ทำงานกับการแจ้งเตือนแบบพุชดังนั้นฉันจึงไม่รู้ว่าการแจ้งเตือนแบบพุชทำงานอย่างไร อย่างไรก็ตามฉันจะลองเลียนแบบการรับการแจ้งเตือนแบบพุชโดยให้เมธอดหลักของโปรแกรมของคุณแสร้งทำเป็นว่ามีการโพสต์การแจ้งเตือนหากเป็นไปได้หรือเรียกแอปพลิเคชัน: didFinishLaunchingWithOptions: UIApplicationDelegate เมธอดจากภายใน applicationDidFinishLaunching: method

HTH - ไชโย Daan


เป็นความคิดที่ดีเช่นกัน แต่การเลียนแบบเป็นสิ่งที่ดีที่สุดอันดับ 2 ในการแก้จุดบกพร่องของจริง! Happy Coding!
Dutchie432

3

ใน Xcode 6:

  1. เชื่อมต่อ iPhone กับ Macbook ด้วย USB
  2. เปิดแอปบน iPhone โดยแตะที่ไอคอน
  3. ในเมนู Xcode, Debug> Attach to Process> เลือก App ของคุณ

1
คุณจะไม่สามารถดีบักเส้นทางการเปิดตัวที่สำคัญด้วยวิธีนี้
Zorayr

2

สำหรับ XCode 11 และ 10 คุณสามารถทำสิ่งต่อไปนี้:

  1. เลือกตัวเลือก Scheme
  2. เลือกแก้ไขโครงการ

  3. เลือกตัวเลือกเรียกใช้จากแผงด้านซ้าย

  4. ในส่วนการเรียกใช้งานให้เลือกรอให้เรียกใช้งานได้จากนั้นปิดกล่องโต้ตอบ

  5. สร้างและดำเนินโครงการ ตอนนี้คุณสามารถเปิดแอพได้โดยแตะที่ไอคอนแอพหรือแตะที่ข้อความแจ้งเตือน

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