ios duplicates ios8 target ios-app-extension

Extensiones de iOS con mĂșltiples objetivos.



duplicates ios8 (5)

En iOS 8, cuando creamos una nueva extensión, tenemos que decidir a qué objetivo se adjunta. La extensión tendrá el mismo prefijo de ID de paquete que el destino.

  1. ¿Hay alguna forma de cambiar el objetivo después?
  2. Si mi proyecto contiene 2 (o más) objetivos (por ejemplo, uno para depuración / simulador, uno para producción / dispositivo), ¿cuál es la mejor manera de trabajar con extensiones? ¿Necesito crear otra extensión y duplicar el código (muy molesto para mantener el mismo código para ambos objetivos)?

Debe crear múltiples extensiones para cada ID, pero puede crear un marco dinámico y simplemente vincularlo con cada extensión. Entonces no necesitarás duplicar tu código.


Esta es mi configuración: tengo 3 objetivos (producción, montaje, local) y un objetivo de extensión que no quiero duplicar 3 veces.

Solo para aclarar la respuesta de Neo Chen , edite cada uno de los esquemas de sus objetivos principales:

Compilación> Acciones previas> Nueva acción Ejecutar secuencia de comandos> Proporcionar configuraciones de compilación desde (esquema principal).

Pega esto para cada extensión:

#!/bin/bash buildID=${PRODUCT_BUNDLE_IDENTIFIER} extId="notification-service" /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $buildID.$extId" "${SRCROOT}/${extId}/Info.plist"

Parece que funciona en la primera construcción.


He creado un script de ejecución para soportar este requisito

#!/bin/sh buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${SRCROOT}/ImagePush/Info.plist" buildVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE") /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $buildVersion" "${SRCROOT}/ImagePush/Info.plist" buildID=${PRODUCT_BUNDLE_IDENTIFIER} /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $buildID.ImagePush" "${SRCROOT}/ImagePush/Info.plist"

ImagePush es mi extensión

agregue al destino cuál necesita y agregue asegúrese de que este script se ejecute antes de la configuración de su extensión en Build Phases, entonces solo necesita hacer la acción de compilación dos veces (PS: la primera vez que fallará, intentará mejorar) y apoyo a múltiples objetivos


Parece que deberías poder duplicar el objetivo de la Extensión con su propia lista de información, pero no otra cosa.

Sin embargo, cuando creas una extensión, Xcode agrega "Incrustar extensiones de aplicación" a las fases de creación del objetivo de la aplicación, como se ve a continuación, y aún no hay una interfaz de usuario para hacerlo.

Aún así, puede crear la extensión para el segundo objetivo, luego eliminar todos los archivos excepto el .plist, y corregir lo que necesita ser arreglado. Aquí está un paso a paso:

  • Crear "Extensión 1" para "Objetivo 1"
  • Crear "Extensión 2" para "Objetivo 2"
  • Elimine todos los archivos creados para "Extension 2", excepto su lista de información.
  • Haga que las "fases de compilación" para "Extensión 2" apunten al mismo nivel que las fases de compilación para "Extensión 1". Por lo general, eso es agregar los archivos .m necesarios a la fase de "Fuentes de compilación" y los recursos a la fase de "Copiar los recursos del paquete"

Para compartir un widget entre muchos destinos, solo se debe agregar widget.appex target a los archivos Embedded Binaries para cada objetivo principal en General pestaña Configuración General

Luego obtendrás el área de Embed App Extensions en Build Phases automáticamente