2016-09-28 25 views
12

Sau khi nâng cấp lên macOS Sierra (10.12) và Xcode 8.0 (8A218a), tôi bắt đầu nhận được nhiều thông báo lỗi trong ứng dụng macOS/Cocoa của mình (được viết trong Mục tiêu-C) mà theo định dạng này:Nhận lỗi không xác định về "truy cập động không thành công" sau khi cập nhật lên macOS

[error] warning: dynamic accessors failed to find @property implementation for 'uniqueId' for entity ABCDInfo while resolving selector 'uniqueId' on class 'ABCDInfo'. Did you remember to declare it @dynamic or @synthesized in the @implementation ? 

[error] warning: dynamic accessors failed to find @property implementation for 'uniqueId' for entity ABCDContact while resolving selector 'uniqueId' on class 'ABCDContact'. Did you remember to declare it @dynamic or @synthesized in the @implementation ? 

[error] warning: dynamic accessors failed to find @property implementation for 'uniqueId' for entity ABCDEmailAddress while resolving selector 'uniqueId' on class 'ABCDEmailAddress'. Did you remember to declare it @dynamic or @synthesized in the @implementation ? 

[error] warning: dynamic accessors failed to find @property implementation for 'address' for entity ABCDEmailAddress while resolving selector 'address' on class 'ABCDEmailAddress'. Did you remember to declare it @dynamic or @synthesized in the @implementation ? 

Không ai trong số này là mã hoặc mã của tôi từ các thư viện phát triển bên thứ 3 mà tôi đang sử dụng, và làm một tìm kiếm trên những tên biến (ví dụ: 'UNIQUEID' hoặc 'ABCDInfo') không kéo bất cứ thứ gì lên, cho biết nó không có trong dự án của tôi.

tôi thấy rằng vấn đề này cũng đã được báo cáo trên diễn đàn nhà phát triển của Apple gấp đôi (Issue 1Issue 2), nhưng cả hai câu hỏi chưa được trả lời

Câu hỏi của tôi là: Điều gì gây ra các thông báo lỗi và làm thế nào tôi có thể khắc phục chúng? Nó không khiến ứng dụng của tôi gặp sự cố, nhưng tôi muốn tìm ra và hiểu điều gì sai.

+0

Tôi gặp vấn đề tương tự, nhưng tôi đang tìm câu trả lời Swift. Cảm ơn. – iphaaw

Trả lời

8

Trước hết chúng ta hãy kiểm tra những gì @synthesize và @dynamic là:

  • @synthesize sẽ tạo ra getter và setter cho tài sản của bạn
  • @dynamic thông báo cho trình biên dịch rằng các phương thức getter và setter được thực hiện không phải bởi chính lớp đó mà ở một nơi khác (như lớp học hoặc sẽ được cung cấp khi chạy)

Danh sách liên hệ hiện yêu cầu bất kỳ ai sử dụng khung thư/liên hệ cần phải được mã hóa với quyền sử dụng danh bạ.

Bạn cần phải sandbox ứng dụng của mình bằng cách cấp quyền truy cập "Quyền truy cập danh bạ". Các cảnh báo vẫn sẽ được ghi lại, nhưng điều này được liên kết với một lỗi khác của XCode 8 ghi lại quá nhiều thứ vô ích.

Có vẻ như Apple sẽ không còn chấp nhận ứng dụng không có hộp cát để truy cập Danh sách liên hệ (hoặc vị trí hoặc lịch).

Để sandbox ứng dụng của bạn làm như sau: Đi tới cài đặt dự án của bạn> Chọn ứng dụng của bạn> Bật ứng dụng SandBox và sau đó chọn dữ liệu Ứng dụng bạn đang sử dụng.

+0

Nếu bạn không có kế hoạch phân phối ứng dụng thông qua App Store vì bạn cần hộp cát tắt, bạn vẫn có thể bật quyền liên lạc, sau đó tự hoàn nguyên giá trị sandbox thành NO trong plist. – cdf1982

1

lẽ liên quan đến cấu hình này:

  • Bạn đang truy cập vào khuôn khổ AddressBook, có lẽ được xây dựng với ON 'tính chất tổng hợp tiềm ẩn'.
  • Bạn phần mềm được xây dựng với 'đặc tính tổng hợp tiềm ẩn' OFF
+2

Làm cách nào để tắt "các thuộc tính tổng hợp ngầm" trong khung AddressBook? –

+0

@ RyanD'souza Bạn không thể, bởi vì nó đã được biên soạn. Bạn phải bật tùy chọn này. – Sirens

+0

Tôi đã thử, vẫn nhận được thông báo lỗi được ghi lại (trong khi chức năng hoạt động tốt) – cdf1982

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