Как выборочно импортировать фреймворк и реализовать расширение на основе версии iOS?

#ios #swift #objective-c

Вопрос:

У меня есть приложение для iOS, написанное на Swift, которое должно работать на iOS 13 и более поздних версиях.

Проблема:

  1. У меня есть две платформы, одна из которых присутствует только в iOS 13 SDK, а другая — только в iOS 14 SDK
  2. Для каждой платформы мне нужно реализовать расширение для выполнения определенной задачи

Вопрос:

  1. Как я могу выборочно импортировать правильную платформу в зависимости от того, работает ли она на iOS 13 или iOS 14? Я изучил @available , canImport , #if defined , но никто не делает то, что я описал выше
  2. Как я могу реализовать расширения так, чтобы использовалось правильное расширение, а компилятор не кричал на меня?

Комментарии:

1. Импорт кодируется в двоичный код во время сборки, но загрузка динамической библиотеки происходит во время выполнения. Вы хотите сказать, что хотите выборочно загружать разные фреймворки во время выполнения?

2. Ну, я не уверен, возможно ли это, но конечная цель состоит в том, чтобы иметь один файл Swift, содержащий инструкции импорта для обеих платформ (возможно, используя фильтр времени компиляции, такой как @available, тоже выберите, какую инструкцию импорта выполнить).

3. И этот файл Swift также будет иметь реализации расширений для обеих платформ, но также будет отфильтрован во время компиляции в зависимости от версии iOS

4. Это может помочь вам выборочно загружать фреймворки и символы из ваших фреймворков во время выполнения github.com/facebook/facebook-ios-sdk/blob/…