ios - Comprobar la existencia del marco en tiempo de compilación?
objective-c frameworks (2)
Estoy trabajando en un proyecto de código abierto que opcionalmente puede usar un marco de código cerrado. Si el marco de código cerrado está incluido en el proyecto, habrá funcionalidad adicional. Pero si el marco no está incluido en el proyecto, el proyecto aún debería compilarse correctamente.
¿Cómo verifico en tiempo de compilación si el marco está incluido en el proyecto?
Básicamente, quiero hacer algo como esto:
#ifdef _MY_FRAMEWORK_EXISTS
#import <MyFramework/MyFramework.h>
#endif
He visto preguntas más antiguas de hace 2 años como esta , pero no ha surgido ninguna respuesta por lo que podría estar perdiendo algo nuevo ahora.
NO NSClassFromString()
verificar en tiempo de ejecución a través de NSClassFromString()
, porque esto fallará en tiempo de compilación cuando intento importar MyFramework
y no existe.
Puede verificar la presencia de un archivo de encabezado utilizando la extensión de idioma __has_include. http://clang.llvm.org/docs/LanguageExtensions.html#include-file-checking-macros
Sin embargo, eso solo le dice si el archivo de encabezado está instalado. No puede decirle si "Vincular binarios con bibliotecas" se ha vinculado a su marco.
Recomiendo leer la Mac Developer Library: Framework Programming Guide (que incluye una sección sobre enlaces débiles ).
¿Qué quiere decir con "existe" o "incluido en el proyecto"? ¿Quiere decir que se agregó a la fase de compilación "Vincular binarios con bibliotecas" (como se describe en Including Frameworks )? Todo lo que hace es afectar la vinculación, no la compilación, la fase de compilación. Para ver esto, construir. A continuación, busque
-framework
en el registro de compilación del navegador de registro de Xcode.Entonces, sí, si desea afectar la compilación del código que proporcionó, puede definir manualmente la macro
_MY_FRAMEWORK_EXISTS
.Realmente no entiendo lo que estás tratando de hacer. ¿Puedes explicar lo que quieres en un nivel superior? Tal vez, hay una mejor manera de hacerlo.
"La sobrecarga mínima" es agradable, pero demasiada magia puede ser confusa. Por ejemplo, la magia de Xcode oculta lo que realmente sucede cuando se incluye un marco.
También recomiendo ver cómo funciona el SDK de Facebook para iOS para ideas de alto y bajo nivel. Podría hacer el tipo de cosas que quieres hacer.