2016-07-23 16 views
6

Có cách nào có điều kiện nhập khung trong Swift dựa trên phiên bản iOS thời gian chạy không?Điều kiện nhập khung (chẳng hạn như Lời nói) dựa trên Phiên bản iOS trong Swift?

Cụ thể, tôi có một ứng dụng có mục tiêu triển khai là iOS 8. Tôi muốn sử dụng khung công tác Apple Speech mới trong ứng dụng, nếu nó có sẵn khi chạy. Tôi biết về chỉ thị #available(iOS 10, *) cho các phần mã và chỉ thị @available(iOS 10, *) có thể được sử dụng cho toàn bộ lớp học. Vì vậy, tôi có thể dễ dàng tránh thực hiện bất kỳ mã nào sử dụng khung thoại với những người đó. Nhưng trong tập tin chứa các lớp học sử dụng Speech, tôi cần câu lệnh "Import Speech", và cả hai chỉ thị này đều không thể sử dụng ở đó. Tôi thấy rằng thậm chí nếu tôi có @available(iOS 10, *) chỉ thị trên toàn bộ lớp học của tôi, khi tôi chạy ứng dụng của tôi trên một thiết bị iOS 9 nó bị giết khi ra mắt với

"dyld: Library not loaded: /System/Library/Frameworks/Speech.framework/Speech". 

Tôi có thiếu cái gì đó, hoặc là nó chỉ có thể sử dụng khung thoại Speech trong một ứng dụng có mục tiêu triển khai là 10?

Trả lời

4

Bạn có thể làm cho khung tùy chọn (xem chi tiết và hình ảnh từ Ray Wenderlicht):

Making a framework optional

này, kết hợp với việc bạn sử dụng @available, nên ngăn chặn hệ thống từ cố gắng để tải nó vào thiết bị mà nó không có sẵn.

+0

Điều này không hiệu quả, ít nhất trong trường hợp này. Thật thú vị, trong dự án SpeakToMe mẫu của Apple, khung thoại Speech thậm chí không được liên kết trong dự án, nhưng nó xây dựng và chạy tốt (trên thiết bị) anyway. Tương tự, trong dự án của tôi, trên iOS 10, nó hoạt động mà không cần liên kết khung thoại. Nếu tôi tiếp tục và thêm khung làm việc, và làm cho nó tùy chọn, nó vẫn xây dựng và chạy trên iOS 10, nhưng tôi gặp phải sự cố tương tự trên iOS 9. –

+0

@MattF_PI Curious. Bạn cần phải bao gồm mọi việc sử dụng khung làm việc với @ có sẵn. Hãy thử nhận xét (các) lỗi để tạo ra một lỗi biên dịch trên mỗi trang để bạn có thể kiểm tra chúng - chỉ cần sử dụng một tham số mà không có @ sẵn có sẽ kích hoạt hệ thống thử tải khung 'tùy chọn'. Nếu không, xin lỗi, điều đó sẽ hoạt động tốt. –

+0

Xin lỗi lỗi của tôi - Tôi vừa nhận ra rằng tôi đã thêm khung vào mục tiêu sai trong dự án (chúng tôi có rất nhiều mục tiêu). Vì vậy, hãy thêm khung Speech vào đúng mục tiêu, sau đó làm cho nó tùy chọn (kết hợp với @available và #available để tránh mã), thực sự cho phép mã chạy trên cả iOS 9 và iOS 10. –

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