2016-04-02 17 views
5

Tôi có một số câu hỏi assert(condition, "message") trong dự án của mình.Các cảnh báo được nhấn trong quá trình xây dựng sản xuất gây ra sự cố

Chúng được sử dụng để kiểm tra các điều kiện bất biến trong quá trình phát triển. Tôi nghĩ rằng họ sẽ bị bỏ qua trong quá trình sản xuất/phát hành (như đã nêu trong this answer). Chúng không. Thay vào đó chúng gây ra sự cố trong khi kiểm tra TestFlight. Khi tôi nhận xét xác nhận ứng dụng không bị lỗi. Một cái gì đó thường bị sai một chút nhưng nó không sụp đổ.

Nó có thể là thứ gì đó với cài đặt bản dựng của tôi không?

Tất cả các chương trình lưu trữ của tôi sử dụng cấu hình phát hành:

enter image description here

Các khẳng định là trong dự án Cocoa Touch Framework, được sử dụng từ phần mở rộng bàn phím tùy chỉnh.

Tất cả các mục tiêu trong tất cả các dự án (Cocoa Touch Framework, và các dự án chính với mục tiêu mở rộng bàn phím) có những Build Cài đặt:

Enable Foundation Assertions 
    Debug YES 
    Release NO 

Disable Safety Checks NO 

Có chuyện gì vậy?


EDIT:

Sulthan's answer cho thấy làm thế nào để vô hiệu hóa khẳng định trên toàn cầu cho cả debug và relase xây dựng. Đó không phải là những gì tôi cần. Tôi muốn nó hoạt động như mong đợi - các xác nhận phải được bật trong gỡ lỗi nhưng bị vô hiệu hóa trong các bản phát hành bản phát hành.

Theo mặc định, nó hoạt động theo cách đó - và nó cũng hoạt động theo cách đó trong dự án chính của tôi. Nhưng nó không hoạt động cho các xác nhận nằm trong dự án khung được liên kết từ dự án chính đó (chi tiết trong this question). Tại sao? Làm thế nào để sửa chữa nó?

+0

Bạn đã thử [answer] (http://stackoverflow.com/a/24038197/669586) của mình chưa? – Sulthan

+0

@Sulthan Không, tôi không có. Tôi nghĩ rằng nó không nên được yêu cầu để thêm bất kỳ cờ tùy chỉnh để đảm bảo nó bỏ qua khẳng định trong phát hành. Tôi sẽ thử nó ngay bây giờ. – drasto

+0

Tôi cũng nghĩ rằng nó không nên được yêu cầu (nó đã được yêu cầu trong một trong các phiên bản beta đầu tiên). – Sulthan

Trả lời

2

Các tùy chọn bạn đã cố gắng:

Enable Foundation Assertions là trong phần tiền xử lý (Macro). Swift không được xử lý trước và không sử dụng macro. Tùy chọn này vô hiệu hóa NSAssert, NSParameterAssert và các macro tương tự thường được sử dụng trong Mục tiêu-C.

Disable Safety Checks là một lựa chọn hiệu suất:

Theo mặc định, các tiêu chuẩn đảm bảo an toàn thư viện bộ nhớ. Nhiều hàm và phương thức ghi lại các yêu cầu phải được đáp ứng bởi người gọi, chẳng hạn như một chỉ mục mảng là hợp lệ; an toàn bộ nhớ được đảm bảo ngay cả khi yêu cầu bị vi phạm. Tuy nhiên, vi phạm một yêu cầu có thể gây ra lỗi thời gian chạy. Các API bao gồm từ “không an toàn” trong tên của chúng cho phép bạn vô hiệu hóa một cách rõ ràng kiểm tra an toàn ở những nơi bạn cần hiệu suất bổ sung. Bạn có trách nhiệm xác minh tính an toàn của bộ nhớ sử dụng các API không an toàn. An toàn bộ nhớ cũng không được đảm bảo nếu có điều kiện chủng tộc trong mã đa luồng.

(Swift Library Reference)

Bạn có lẽ nên thử trả lời của tôi here (sử dụng -assert-config Release trong Other Swift Flags).

Hoặc chỉ giữ lại các xác nhận trong bản dựng sản xuất. Mỗi khẳng định không thành công là một lỗi và nói chung nó tốt hơn để biết về một lỗi càng sớm càng tốt.

+0

Tôi nên đặt những lá cờ này ở đâu? Dự án nào nhắm mục tiêu? Tôi biết về các lỗi ở đó. Chúng hiếm, nhỏ và tôi có kế hoạch sửa chúng trong các bản phát hành trong tương lai. Tai nạn gây ra bởi sự khẳng định là nghiêm trọng hơn nhiều. – drasto

+0

@drasto Bạn phải đặt chúng vào dự án và mục tiêu có chứa các xác nhận. Nó chỉ là một lá cờ trình biên dịch. – Sulthan

+0

Nó dường như không hoạt động - tôi đặt '-assert-config Debug' vào dự án có chứa các xác nhận (đây là dự án khung được liên kết từ một dự án khác), chạy nó từ XCode nhưng các xác nhận vẫn còn nhấn – drasto

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