6
有沒有什麼辦法可以基於運行時版本的iOS版本有條件地導入Swift
中的框架?有條件地在Swift中導入基於iOS版本的框架(如Speech)?
特別是,我有一個部署目標爲iOS 8
的應用程序。如果它在運行時可用,我想在應用程序中使用新的Apple Speech
框架。我知道代碼段的#available(iOS 10, *)
指令以及可用於整個類的@available(iOS 10, *)
指令。所以我可以輕鬆地避免執行任何使用Speech框架的代碼。但是在包含使用Speech的類的文件中,我需要「import Speech」語句,並且這兩個指令都不能在那裏使用。我發現,即使我有我的整個班級的@available(iOS 10, *)
指令,當我在iOS 9設備上運行我的應用程序是在推出殺害與
"dyld: Library not loaded: /System/Library/Frameworks/Speech.framework/Speech".
我缺少的東西,或僅僅是有可能在部署目標爲10的應用程序中使用語音框架?
這不起作用,至少在這種情況下。有趣的是,在Apple的示例SpeakToMe項目中,Speech Framework甚至沒有鏈接到項目中,但它仍然可以在設備上正常生成並運行。同樣,在我的項目中,在iOS 10上,它沒有鏈接語音框架。如果我繼續添加框架並使其成爲可選項,它仍然可以在iOS 10上構建並運行,但是我在iOS 9上遇到了相同的崩潰。 –
@MattF_PI好奇。您需要覆蓋@ available的每個框架使用。嘗試註釋包含在每個包含引起編譯錯誤,以便您可以檢查它們 - 只有一個參數使用沒有@可用仍然會觸發系統嘗試加載「可選」框架。如果沒有,對不起,這應該起作用。 –
對不起我的錯誤 - 我剛剛意識到我已經將該框架添加到項目中的錯誤目標(我們有很多目標)。因此,明確地將Speech框架添加到正確的目標,然後使其可選(與@available和#available結合以避免代碼),確實允許代碼在iOS 9和iOS 10上運行。 –