xcode xcode-workspace

xcode - ¿Cómo compilar un proyecto con una aplicación y una biblioteca en el mismo espacio de trabajo con diferentes nombres de configuración?



xcode-workspace (2)

Estoy desarrollando una aplicación y estoy usando un componente de código abierto.

Tengo un espacio de trabajo que contiene tanto MyApp.xcodeproj como Component.xcodeproj . Mi aplicación tiene tres configuraciones: Depurar , App Store e In House, pero el componente tiene solo dos: Depurar y Liberar

En la configuración de depuración , todo funciona bien, pero no puedo compilar mi aplicación en la configuración de App Store o In House porque los nombres de configuración no coinciden. Obtengo un error de archivo no encontrado al intentar #import <Component/Component.h>

Necesito las configuraciones de App Store y In House , y realmente me gustaría evitar modificar las configuraciones del componente para facilitar futuras actualizaciones del componente.

Sé que podría usar CocoaPods para resolver este problema, pero me gustaría saber si hay una solución simple en Xcode


Puedes hacer que tu proyecto se compile con algunos ajustes a la configuración de tu aplicación.

Le sugiero que modifique todas las configuraciones a nivel de proyecto para que todos sus objetivos puedan heredar estas configuraciones.

  1. Agregue una nueva configuración definida por el usuario DEFAULT_CONFIGURATION y defina su asignación de configuración. Así es como debería verse:

  2. Establezca FRAMEWORK_SEARCH_PATHS en $(BUILD_DIR)/$(DEFAULT_CONFIGURATION)-$(PLATFORM_NAME) para todas las configuraciones, agregue cualquier variante del OS X SDK y configure el valor en $(BUILD_DIR)/$(DEFAULT_CONFIGURATION) . Establezca HEADER_SEARCH_PATHS en $(FRAMEWORK_SEARCH_PATHS)/include y LIBRARY_SEARCH_PATHS en $(FRAMEWORK_SEARCH_PATHS) . Así es como debería verse:

    Este paso es bastante tedioso, se puede automatizar con la herramienta xcproj y ejecutando este script en el directorio de su proyecto. Edite el mapeo de configuraciones según sea necesario.

    #!/bin/bash CONFIGURATIONS=( "App Store:Release" "In House:Release" "Debug:Debug" ) for CONFIGURATION in "${CONFIGURATIONS[@]}"; do xcproj --configuration "${CONFIGURATION%%:*}" write-build-setting DEFAULT_CONFIGURATION "${CONFIGURATION#*:}" done xcproj write-build-setting ''FRAMEWORK_SEARCH_PATHS'' ''$(BUILD_DIR)/$(DEFAULT_CONFIGURATION)-$(PLATFORM_NAME)'' xcproj write-build-setting ''FRAMEWORK_SEARCH_PATHS[sdk=macosx*]'' ''$(BUILD_DIR)/$(DEFAULT_CONFIGURATION)'' xcproj write-build-setting ''HEADER_SEARCH_PATHS'' ''$(FRAMEWORK_SEARCH_PATHS)/include'' xcproj write-build-setting ''LIBRARY_SEARCH_PATHS'' ''$(FRAMEWORK_SEARCH_PATHS)''

  3. Si el componente se distribuye como una biblioteca estática, habrá terminado aquí. Si el componente viene como marco, debe actualizar la referencia de su ruta editando el archivo project.pbxproj en un editor de texto. En la sección PBXFileReference (en /* Begin PBXFileReference section */ ) encuentra Component.framework y actualiza su path siguiente manera:

    name = Component.framework; path = "../$(DEFAULT_CONFIGURATION)/Component.framework"; sourceTree = BUILT_PRODUCTS_DIR; };

    Asegúrese también de que sourceTree esté configurado en BUILT_PRODUCTS_DIR , es decir, en relación con los productos creados. Una vez que haya editado el archivo de proyecto, esto debería verse así:

Tu proyecto ahora debería construirse como se esperaba.


Tuve el mismo problema, pero tuve varias configuraciones (Debug, TestFlight , Release, Enterprise ) en mi aplicación, y las configuraciones en negrita siempre fallarían en la creación porque no podía encontrar los marcos. Realmente no quería meterme con la configuración del proyecto de mis subproyectos para facilitar la actualización.

La respuesta que encontré fue simplemente actualizar la ruta de búsqueda del marco para tener en cuenta el hecho de que los marcos se eliminarían en la versión (o la configuración predeterminada establecida) de los subproyectos.

Específicamente lo puse a: $ (BUILD_DIR) / Release - $ (PLATFORM_NAME)

Lo puse para ser recursivo también. Esto funciona tanto para Simulator como para Device, compilando en Xcode y en la línea de comandos.