Интеграция Newsstand без нарушения обратной совместимости

#ios5 #backwards-compatibility

#ios5 #обратная совместимость

Вопрос:

Я изучаю интеграцию Newsstand в новое приложение для iOS и хочу знать, могу ли я сделать это таким образом, чтобы приложение по-прежнему могло работать на устройствах, которые не перешли на iOS 5.

Кто-нибудь может дать мне несколько отзывов о том, как создать приложение для решения этой проблемы?

Я знаю, что возможно иметь одно приложение с разными целями и наборами исходных файлов, но я бы предпочел сохранить кодовую базу как можно более унифицированной и динамически тестировать функции Newsstand.

Ответ №1:

Что вам нужно, прежде всего, для слабой привязки вашего приложения к платформе NewsstandKit. Это позволяет избежать сбоя устройства с версией iOS <5 из-за отсутствия библиотек.

Затем во время выполнения вам нужно избегать вызова методов NK и обращения к классам NK, которые, очевидно, недоступны в iOS <5. В таком случае вы можете использовать такие методы, как NSClassFromString() или другие функции среды выполнения obj-c, которые позволяют динамически обнаруживать наличие этих функций.

Рекомендация, которую я могу сделать в таком случае, — предоставить директиву предварительного компилятора, которая позволяет вам изолировать все содержимое Newsstand на уровне компиляции. Таким образом, вы можете попробовать скомпилировать с использованием SDK 4 (если он у вас есть) и посмотреть, нет ли ошибок компилятора или предупреждений.

Например, если вы добавите в свой Prefix.pch определение, подобное этому

 
#define WILL_USE_NK
  

затем вы можете заключить в скобки все ссылки NK таким образом:

 
#ifdef WILL_USE_NK
... your NK statements go here ...
#endif
  

Позже, когда вы будете компилировать приложение с SDK4, вы сохраните это определение, чтобы у вас была настоящая компиляция SDK4, действительная для устройств iOS4 (которую вы можете протестировать), и вы будете уверены, что все ваши ссылки на NK не используются приложением iOS4.
Затем вы должны #undef это определение и скомпилировать с SDK5 (конечно, сохраняя некоторые iOS 4.x в качестве минимальной цели) перед распространением приложения.

Конечно, таким образом вы не защищены от всех возможных ошибок, но, по крайней мере, вы изолировали ссылки NK.

Что касается лучшей стратегии в отношении бизнес-логики приложения, это зависит от вас: это непростая задача, поскольку теперь Newsstand заботится о многих аспектах, таких как фоновая загрузка и так далее. Кроме того, модель журнала теперь разделена между вашей существующей моделью и функциями NKIssue, но все это детали реализации, которые выходят за рамки этого конкретного вопроса.

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

1. Привет, Виджио, это отличная идея, спасибо. Это позволяет мне сохранить мой код унифицированным, в то же время изолируя части, которые могут вызвать проблемы с обратной совместимостью. Большое спасибо!