Trước tiên bạn phải làm gì để liên kết yếu ứng dụng của bạn với khung NewsstandKit. Điều này tránh được rằng một thiết bị có phiên bản iOS < 5 sẽ bị lỗi do các thư viện bị thiếu. Khi đó bạn có thể sử dụng các phương thức như NSClassFromString() hoặc các tính năng thời gian chạy obj-c khác, cho phép bạn sử dụng các phương thức NK và tham chiếu đến các lớp NK mà không có sẵn trong iOS < 5. Trong trường hợp này, bạn có thể sử dụng các phương thức như NSClassFromString() hoặc các tính năng thời gian chạy obj-c khác phát hiện tự động sự tồn tại của các tính năng này.
Một đề xuất mà tôi có thể làm trong trường hợp này là cung cấp chỉ thị tiền biên dịch cho phép bạn cách ly tất cả các nội dung của Newsstand ở cấp biên dịch. Bằng cách này, bạn có thể thử biên dịch bằng SDK 4 (nếu có) và xem lỗi trình biên dịch hoặc cảnh báo.
Ví dụ: nếu bạn thêm trong Prefix.pch bạn một định nghĩa như thế này
#define WILL_USE_NK
sau đó bạn có thể đặt dấu ngoặc tất cả các tài liệu tham khảo NK theo cách này:
#ifdef WILL_USE_NK
... your NK statements go here ...
#endif
Sau đó, khi bạn sẽ biên dịch các ứng dụng với SDK4 bạn giữ này định nghĩa, do đó bạn sẽ có một bộ biên dịch SDK4 thực hợp lệ cho các thiết bị iOS4 (mà bạn có thể kiểm tra) và bạn sẽ chắc chắn rằng tất cả các tham chiếu NK của bạn không được ứng dụng iOS4 sử dụng. Sau đó, bạn phải #undef định nghĩa này và biên dịch với SDK5 (tất nhiên giữ một số iOS 4.x là mục tiêu tối thiểu) trước khi phân phối ứng dụng.
Tất nhiên theo cách này, bạn không được bảo vệ chống lại mọi sai lầm có thể xảy ra nhưng ít nhất bạn đã phân lập các tham chiếu NK. Theo như chiến lược tốt hơn về logic nghiệp vụ của ứng dụng, điều này tùy thuộc vào bạn: nó không phải là một nhiệm vụ dễ dàng vì bây giờ Newsstand sẽ quan tâm đến nhiều khía cạnh, như tải xuống nền và cứ như vậy. Bên cạnh mô hình tạp chí bây giờ đã được phân chia giữa mô hình hiện tại của bạn và các tính năng NKIssue, nhưng tất cả những chi tiết này đều là những chi tiết thực hiện vượt ra ngoài câu hỏi cụ thể này.
Xin chào Viggio, đây là một ý tưởng tuyệt vời, cảm ơn bạn. Điều này cho phép tôi giữ mã của tôi thống nhất, trong khi cô lập các phần có thể gây ra các vấn đề tương thích ngược. Cảm ơn rất nhiều! – James