Как вы # включаете фреймворки во время выполнения

У меня есть приложение в App Store, минимальная поддерживаемая версия которого - iOS 7.1.

В следующей версии я улучшил ее, чтобы использовать платформу Photos, которая была представлена ​​в iOS 8.

В коде следующей версии приложения я гарантировал, что, если оно работает на устройстве iOS 7, новая функциональность скрыта.

Однако, когда я пытаюсь запустить приложение на своем тестовом устройстве iOS 7.1, оно терпит неудачу, потому что я включил инфраструктуру Photos в ряд классов, используя:

#import <Photos/Photos.h>

Ошибка, которую я получаю в Xcode:

"dyld: библиотека не загружена: /System/Library/Frameworks/Photos.framework/Photos Ссылка на: /var/mobile/Applications/2CA13C9B-EABC-47C3-A198-A7C703EACD59/ABCapp.app/ABCapp Причина: изображение не найдено"

Есть ли способ сделать это во время выполнения, а не во время компиляции, чтобы гарантировать, что я все еще могу поддерживать iOS 7?

Благодарю.

1 ответ

Решение

Используйте фреймворк слабой связи.

Когда символ в структуре определяется как слабо связанный, символ не должен присутствовать во время выполнения для продолжения процесса. Статический компоновщик идентифицирует слабо связанный символ как таковой в любом модуле кода, который ссылается на символ. Динамический компоновщик использует эту же информацию во время выполнения, чтобы определить, может ли процесс продолжить работу. Если слабо связанный символ отсутствует в платформе, модуль кода может продолжать работать до тех пор, пока он не ссылается на символ.

И вот Марко Армент берет слабую связь:

Если вы хотите, чтобы приложение для iPhone или iPad работало со старыми версиями ОС, или если вы хотите создать универсальное приложение, которое работает как на iPhone, так и на iPad, вам нужно убедиться, что код никогда не пытается вызвать метод или создать экземпляр объект, который не существует в его ОС. [...] Другим вариантом, позволяющим избежать всего этого, является слабое связывание, которое заставляет среду выполнения вручную проверять наличие каждого символа перед его первым использованием.

Другие вопросы по тегам