2009-08-06 31 views
116

Tôi hiện đang phát triển một ứng dụng nhận Thông báo đẩy. Tôi có tất cả điều này làm việc 100% thông qua một trang PHP. Có một số loại thông báo đẩy khác nhau mà ứng dụng của tôi có thể nhận được. PHP xử lý việc này và gửi các gói thông tin khác nhau đến ứng dụng của tôi, tất cả đều nhận được tốt.Gỡ lỗi ứng dụng Khi được khởi chạy bằng thông báo đẩy

Tuy nhiên, khi người dùng "xem" thông báo và ứng dụng của tôi ra mắt, tôi rõ ràng muốn thực hiện một hành động khác hơn nếu người dùng vừa khởi chạy ứng dụng theo cách thủ công - và trên hết, các hành động khác nhau tùy thuộc vào đẩy loại thông báo. Tôi đã làm việc này tốt ... cấu trúc.

Một trong các loại đẩy của tôi là nghĩa vụ phải mở UIView tạo một số kết nối đến một số máy chủ khác nhau và thương lượng dữ liệu qua lại. UIView này hoạt động tốt khi, ví dụ, được kích hoạt từ menu chính - tuy nhiên khi thông báo đẩy của tôi đang kích hoạt UIView này xuất hiện, các kết nối ổ cắm không hoạt động như mong đợi.

Bây giờ câu hỏi của tôi không phải về ổ cắm, nhưng nhiều hơn thế - Làm thế nào để bạn gỡ lỗi một vấn đề như vậy ?? Từ những gì tôi có thể nói (tôi tương đối mới) khi ứng dụng khởi chạy từ một thông báo đẩy không có cách nào để liên kết việc thực hiện đó với trình gỡ lỗi/bàn điều khiển/v.v ... Tôi đang gặp một thời gian rất khó khăn khi cố gắng gỡ lỗi mã bằng UIAlertViews, vì có nhiều dòng giao tiếp qua lại giữa các máy chủ khác nhau.

Bất kỳ lời khuyên nào dành cho tôi sẽ được đánh giá cao.

Trả lời

138

Trong XCode < 4,0 (đối với XCode> = 4, xem câu trả lời bằng cách delirus dưới đây), bây giờ bạn có thể cấu hình Xcode để đính kèm các trình gỡ lỗi để ứng dụng sau khi bạn khởi động nó, thay vì khởi chạy ứng dụng thông qua trình gỡ lỗi. Điều này cho phép bạn gỡ lỗi những thứ khác nhau dựa trên trạng thái khởi chạy của ứng dụng của bạn, chẳng hạn như lược đồ URL, bảng chữ cái và thông báo đẩy.

  1. Trong Xcode, hãy tìm trong thanh Nguồn và bên dưới Mục tiêu sẽ có Thực thi.
  2. Làm thanh tra cho ứng dụng của bạn trong các tệp thực thi.
  3. Nhấp vào tab tab Gỡ lỗi trong trình kiểm tra.
  4. Bỏ chọn "Bắt đầu thực thi sau khi bắt đầu gỡ rối"
  5. Kiểm tra "Chờ cho ra mắt tiếp theo/đẩy thông báo"

Bây giờ khi bạn nhấp vào debug từ Xcode thay vì tung ra các ứng dụng một cửa sổ sẽ hiển thị nói cho nó là đang chờ ứng dụng khởi chạy. Sau đó bạn khởi động ứng dụng bình thường trên điện thoại và Xcode gắn với nó

+31

Tôi biết điều này có thể không phù hợp, nhưng tôi yêu bạn. :) – Dutchie432

+0

Oh, một câu hỏi mặc dù - NSLog của tôi dường như không được in ...? – Dutchie432

+15

Khi bạn khởi động theo cách này, stdin của ứng dụng, stdout, stderr không được chuyển vào bảng điều khiển của GDB, chúng được chỉ ra nơi chúng đang ở trong một khởi chạy ứng dụng bình thường. Bạn có thể thấy NSLog() s trong bảng điều khiển hệ thống của thiết bị bằng cách nhìn vào thiết bị trong trình tổ chức. –

3

Tôi không làm việc với thông báo đẩy, vì vậy tôi không biết chính xác hoạt động của thông báo đẩy. Tuy nhiên, tôi sẽ thử bắt chước nhận thông báo đẩy bằng cách cho phép phương thức chính của chương trình giả vờ thông báo đã được đăng nếu có thể hoặc gọi ứng dụng: didFinishLaunchingWithOptions: UIApplicationPhương pháp đại diện từ bên trong phương thức applicationDidFinishLaunching :.

HTH - Chúc mừng, Daan

+0

Cũng là một ý tưởng hay, nhưng bắt chước luôn là thứ hai tốt nhất để gỡ lỗi thực tế! Happy Coding! – Dutchie432

114

Đối với Xcode 4 bạn phải:

  1. Chỉnh sửa chương trình hoạt động của bạn qua "Đề án" thả xuống.( + <)
  2. Thân chọn sản phẩm của bạn - 'Run MyApp.app' ở bên trái.
  3. Chọn tab 'Thông tin' ở bên phải.
  4. Và cuối cùng chọn "Chờ cho MyApp.app để khởi chạy" tùy chọn.

Thêm here trong phần "Tùy chỉnh thực thi trong trình chỉnh sửa lược đồ".

EDIT:
Trong trường hợp bạn bỏ lỡ các bản ghi trong GDB, xem Louis Gerbarg của comment vào câu trả lời của mình.

+1

Tôi đang sử dụng Xcode 4.2 cho Lion và mặc dù ứng dụng đang khởi chạy từ lược đồ URL chính xác và việc thực thi trình gỡ lỗi không dừng lại, giao diện điều khiển sẽ không hiển thị gì cả. Tui bỏ lỡ điều gì vậy? – LoDani

+0

@LoDani cùng ở đây, bạn đã bao giờ tìm ra lý do tại sao? – davis

+3

@LoDani, Davis G .: Bạn có thấy nhận xét của Louis về câu trả lời được chấp nhận không? http://stackoverflow.com/questions/1239000/debugging-app-when-launched-by-push-notification/1239555#comment1066462_1239555 Khi khởi chạy theo cách này, stdin/out/err không được chuyển hướng vào bảng điều khiển. –

3

Trong Xcode 6:

  1. kết nối iPhone với MacBook với USB
  2. ra mắt ứng dụng trên iPhone bằng cách bấm vào biểu tượng
  3. Trong menu Xcode, Debug>Attach to Process> Chọn ứng dụng của bạn
+0

Bạn sẽ không thể gỡ lỗi đường dẫn khởi chạy quan trọng bằng cách tiếp cận này. – Zorayr

75

Đối với XCode 9, 8, 7 & 6:

  1. Chọn Scheme trên thanh công cụ (chỉ trái của thiết bị bạn đang gỡ lỗi với)
  2. Chọn Sửa Scheme
  3. Chọn Run trong bảng điều khiển bên trái
  4. Đối với Khởi chạy tùy chọn, chọn Chờ để thực thi được khởi chạy
  5. Đóng Trình chỉnh sửa sơ đồ và Chạy dự án XCode của bạn

Bây giờ bạn có thể gỡ lỗi khi khởi chạy từ thông báo, url tùy chỉnh hoặc bằng cách chạm vào biểu tượng ứng dụng.

+5

Câu trả lời này gây ra cho tôi rất nhiều rắc rối mặc dù nó thường đặt tôi trên con đường bên phải. Bước 3 hơi gây hiểu nhầm. Bạn phải làm điều đó, tất nhiên; chọn Chạy trong bảng điều khiển bên trái. Nhưng, cũng nên có bước 5 với từ ngữ khái niệm rất giống nhau: Nhấp vào nút Chạy của xcode, trước khi mong đợi kết quả ... Vì lúc đầu nó không hoạt động cho tôi, tôi đã xin lời khuyên từ các đồng nghiệp khác .. . Họ hỏi tôi liệu tôi có làm điều Run hay không, tôi trả lời là có, suy nghĩ về lựa chọn không. 3 ... Có thực sự, thực sự, thực sự là một bước 5 này ... –

+0

@ FlorinOdagiu Cuộc gọi tốt. Đã thêm bước 5. Cảm ơn! – bgolson

+1

OMFG !!!!! Im thật ngu ngốc! Và hạnh phúc khi tìm thấy câu trả lời này !!!! THNX !!! – Andrew

Các vấn đề liên quan