Как вы # включаете фреймворки во время выполнения
У меня есть приложение в 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, вам нужно убедиться, что код никогда не пытается вызвать метод или создать экземпляр объект, который не существует в его ОС. [...] Другим вариантом, позволяющим избежать всего этого, является слабое связывание, которое заставляет среду выполнения вручную проверять наличие каждого символа перед его первым использованием.