Xcode 6 - ¿Cómo elegir el certificado de firma / perfil de aprovisionamiento para la distribución Ad-Hoc?

143

Para distribuir la aplicación a nuestros evaluadores, usamos Xcode, lo que hacemos mediante el siguiente proceso:

  • Aplicación de archivo
  • Distribuir para Ad-Hoc
  • Elegir perfil de aprovisionamiento
  • Guarde el .ipa en una carpeta

Pero con Xcode 6 , este flujo de trabajo cambió un poco. Todavía puedo seleccionar la opción de distribución Ad-Hoc, pero no puedo seleccionar el perfil de aprovisionamiento que quiero. Esto no nos da control sobre qué certificado de firma se usa y la configuración del perfil de aprovisionamiento (usamos notificaciones push).

Por defecto iPhone distribution, se utiliza la identidad de firma y XC Ad Hocse genera algún tipo de perfil de aprovisionamiento, que se puede ver en la imagen a continuación: Exportando IPA Si hace clic en la flecha cerca del perfil de aprovisionamiento, se abre la carpeta con los perfiles de aprovisionamiento.

Entonces mi pregunta es:

¿Hay alguna forma en Xcode 6 para seleccionar el perfil de aprovisionamiento utilizado con la distribución Ad Hoc?

¡Gracias!

Sin lego
fuente
¿Alguien sabe si esto se ha solucionado? ¿Hay alguna forma de distribuir una compilación a los usuarios de iOS 7 para probar las notificaciones push?
haupman
usando la versión Xcode 6 GM, el mismo problema ...
Chris Chen
¿Entonces todavía no tenemos una buena solución para esto? Las respuestas a continuación no funcionan para mí. ¿Podemos usar el perfil de aprovisionamiento XC? No quiero perder una semana esperando la revisión de Apple. Gracias
Miles M.
2
Tuve este problema hoy y parece que Xcode solo usa perfiles de distribución que usan todos los dispositivos que registró en línea.
HackingOtter
1
¿Seriamente? ¿No podemos elegir el archivo de aprovisionamiento? Creo que Yossarian vive.
ajbraus

Respuestas:

52

Estaba enfrentando el mismo problema, resuelto usando la secuencia de comandos de la herramienta "xcodebuild", que está preinstalada con Xcode 6 (no necesitaba reinstalar Xcode 5).

http://www.thecave.com/2014/09/16/using-xcodebuild-to-export-a-ipa-from-an-archive/

Script en terminal:

xcodebuild -exportArchive -archivePath $projectname.xcarchive -exportPath $projectname -exportFormat ipa -exportProvisioningProfile 'Provisioning Profile Name'
Aqib Mumtaz
fuente
1
esto funciona para mi! las otras respuestas usando xcodebuildno tenían el -exportProvisioningProfileinterruptor.
bunnyhero
66
Tenga en cuenta que esto no funcionará correctamente si su aplicación usa extensiones, marcos incrustados o bibliotecas.
clarkcox3
44
Esto me ayudo. ¡Gracias! Entonces, Apple actualiza XCode para generar perfiles de XC Prov de mala calidad pero se olvida de XCodeBuild. Solo tuvimos suerte esta vez. Oh! ¡Cómo nos hace sufrir Apple!
kamyFC
1
Estoy configurando esto como la respuesta aceptada. La respuesta puede no funcionar para todos los casos, pero con ciertas modificaciones, xcodebuild puede usarse para resolver este problema (esto es lo que estamos haciendo en nuestro servidor CI).
Legoless
1
¡Ojalá hubiera aprendido 3 horas antes que xcodebuild ahora también puede exportarse a formato ipa! Perdí mucho tiempo tratando de hacer que xcrun incrustara un perfil de aprovisionamiento determinado, pero simplemente no funciona en Xcode 6. ¡xcodebuild sí lo hace! Gracias.
Oscar Hierro
31

Tuve un problema similar al enviar a la App Store. Creé un archivo, luego hice clic en "enviar" y Xcode quería firmar automáticamente con el perfil de aprovisionamiento de comodines predeterminado "XC com. *" En lugar del perfil explícito que ya tenía.

Para solucionar esto, acabo de volver a generar el perfil en el Portal de desarrolladores de Apple:

1) Vaya a developer.apple.com y busque el perfil de aprovisionamiento de distribución que desea usar.
2) Selecciónelo, haga clic en "Editar", cambie el nombre del perfil y haga clic en "Generar".
3) Descargue el perfil de aprovisionamiento en el escritorio y arrástrelo al icono Xcode 6.
4) Reinicie Xcode 6.
5) Abra la ventana del organizador y haga clic en "Enviar" en el archivo que creó. Xcode elegirá automáticamente su perfil explícito en lugar del genérico.

GingerBreadMane
fuente
Hola, ¿hay alguna declaración oficial sobre este cambio?
franco
No que yo sepa. Probé la comparación de los viejos y nuevos perfiles en un editor de texto para ver si podía detectar cambios en el formato, pero no me di cuenta de nada significativo
GingerBreadMane
2
Era escéptico pero esto funcionó para mí. Acabo de cambiar a Xcode 6 e intenté generar mi primera compilación ad hoc
Newtz el
Hasta ahora utilizaba el perfil de aprovisionamiento de desarrollo. ¿Sigue siendo utilizable o necesito crear un perfil de distribución?
Legoless
Sí, Legoless, deberá crear un perfil de Distribución para exportar una compilación. Todavía puede usar un perfil de desarrollo para depurar cuando su dispositivo está conectado a su Mac.
codeburn
27

Una vez que estés en Organizador

  • Seleccione la compilación ad-hoc y haga clic en "Exportar ..."
  • Seleccione "Guardar para implementación ad hoc" -> Siguiente
  • En lugar de seleccionar una organización del menú desplegable, seleccione "Usar activo de firma local" -> Elegir
  • Exportar y guardar .ipa como antes.

Por supuesto, debe haber generado, descargado e instalado el perfil de aprovisionamiento ad-hoc.

MrPatol
fuente
55
Resolvió el problema gracias a esta respuesta, y esta respuesta . El perfil de aprovisionamiento debe estar vinculado a una ID de aplicación explícita, que utiliza el mismo identificador de paquete que su aplicación. Una ID de aplicación comodín no funcionará. Luego debe seleccionar "Usar activo de firma local" al exportar la aplicación.
Sarah Elan
@SarahElan combina las dos respuestas y escribe una nueva ... gracias
YaBoiSandeep
En mi opinión y con respecto a mi experiencia, creo que esta es la mejor respuesta. Gracias.
Basem Saadawy
17

Parece que el último perfil de aprovisionamiento generado gana en este momento. Por lo tanto, puede volver a generar el perfil que desee y descargarlo y Xcode lo usará.

Un enfoque un poco mejor: establezca el perfil prov deseado en su objetivo y use la línea de comando para construir su ipa, eso también funciona.

Aquí está el script que estoy usando:

#!/bin/sh

# Current as working as of 2014/09/22
# Xcode 6

OUTPUTDIR="$HOME/build"
APPNAME="your-app"
SCHEME="your-app"
APP_WORKSPACE="$HOME/Path/To/your-app.xcworkspace"

rm "$OUTPUTDIR/$APPNAME.ipa" #deletes previous ipa
xcodebuild -workspace "$APP_WORKSPACE" -scheme "$SCHEME" archive -archivePath "$OUTPUTDIR/$APPNAME.xcarchive"
xcodebuild -exportArchive -exportFormat ipa -archivePath "$OUTPUTDIR/$APPNAME.xcarchive" -exportPath "$OUTPUTDIR/$APPNAME.ipa" 

y mi configuración:

Configuraciones de Xcode

Thorsten
fuente
¿Hay alguna manera más fácil?
Timur Bernikovich
Creo que es porque MacOS 10.0. todavía está en beta.
Timur Bernikovich
1
El problema con el uso de perfiles XC Ad Hoc es que siempre incluyen todos los dispositivos; elimina la opción de desactivar algunos dispositivos, lo que puede hacer con perfiles manuales.
Jonny
El perfil XC Ad Hoc es solo un ejemplo. Puedes usar el perfil que quieras.
Thorsten
Debe eliminar la extensión '.ipa' del argumento para -exportPath, ya que xcodebuild ya la agrega automáticamente.
Oscar Hierro
8

Tampoco pude resolver esto: me mordió al enviarlo a la AppStore, donde el valor predeterminado fue un perfil comodín.

Terminé construyendo en Xcode 6, luego volví a la ventana Organizador de Xcode 5 para el envío. De esta forma, te pedirá que elijas un perfil para firmar.

Jonathan del Strother
fuente
Esta es la solución que estoy haciendo. Pero realmente quiero deshacerme de Xcode 5 ahora. Estoy pensando en usar xcrun y la línea de comando ahora.
Legoless
Intenté todas las soluciones sugeridas que encontré, pero esta es la única que realmente funciona.
HunTer DRF
8

En Xcode 6 (al menos 6.1 que estoy usando ahora) cuando está haciendo la exportación para ad hoc, xcode 6 escaneará automáticamente si hay algún perfil de aprovisionamiento que contenga todos los dispositivos registrados en la cuenta del desarrollador y al mismo tiempo coincida con la ID del paquete . Si no, usará el perfil de provisión XC. Por lo tanto, si desea utilizar su propio perfil, por ejemplo, con el fin de notificaciones automáticas, deberá seleccionar todos los dispositivos en su perfil en el portal de desarrolladores de Apple. Supongo que esa es la razón por la cual algunas personas recrean el perfil y otras no.

por cierto, use script puede exportar y cargar a testflight, pero el dispositivo simplemente no puede descargarlo. probablemente en algún lugar me equivoqué. Si alguien sabe por qué es así, por favor hágamelo saber. tks

AlexHsieh
fuente
¡Gracias! Esto hizo el truco para mí. Edité el perfil para incluir todos los dispositivos, volví a archivar la aplicación, y viola, usó el perfil correcto.
Erik Villegas
Esto es exactamente y suena como un error para mí o que ahora que Apple presentó TestFlight para distribuir versiones beta, la distribución AdHoc no recibió la atención adecuada. Lo que me pasó fue lo que @AlexHsieh describe; Creé mi perfil de aprovisionamiento como siempre lo hice antes, seleccioné solo un subconjunto de todos mis dispositivos registrados y cuando intenté generar el IPA, Xcode no pudo encontrar ningún perfil de aprovisionamiento válido e intenté usar este XC generado automáticamente (que También falló en mi caso). La solución fue agregar todos mis dispositivos registrados al perfil de aprovisionamiento.
jjramos
7

Esto funcionó para mí:

  1. haga clic en "Ver cuentas ..." dentro del cuadro de diálogo "... seleccione un equipo de desarrollo ...".
  2. haga clic en "Ver detalles .." y busque el perfil de aprovisionamiento Ad XC Ad Hoc.
  3. haga clic derecho en ese perfil y elija "Mostrar en Finder".
  4. Eliminar el perfil seleccionado.
  5. regrese al diálogo en el paso 1.
  6. haga clic en "Elegir".
  7. haga clic en la flecha cerca del perfil de aprovisionamiento para abrir el directorio de perfiles de aprovisionamiento.
  8. elimine nuevamente el perfil genérico como en el paso 4.
  9. haga clic en el botón "Anterior" del cuadro de diálogo "Enviar [nombre de la aplicación] a Apple:".
  10. seleccione nuevamente "Guardar para implementación ad hoc"
  11. haga clic nuevamente en el botón "elegir".

ahora debería ver el nombre de perfil de aprovisionamiento correcto.

usuario3382891
fuente
No probé el primero. Pero este funcionó para mí. Gracias. =]
Glauco Neves
55
No funciono para mi. Incluso después de eliminar los perfiles en los pasos 4 y 8, los perfiles se vuelven a crear y se seleccionan automáticamente nuevamente en el paso 11.
Chun
1
No me funciona porque cada vez que tengo que hacer clic en elegir una cuenta (tengo varias cuentas para entregar aplicaciones a mis clientes) se recrea el perfil XC Generated. PITA de Apple.
wuf810
Agregaría que antes de seguir estos pasos con XCode 6, debe eliminar los perfiles de aprovisionamiento XC: * de su cuenta de desarrollador de Apple. Después del paso 4, volvería al cuadro de diálogo Ver detalles y presionaría el botón Actualizar para asegurarme de que esos perfiles XC: * ya no estén allí. Además, use la configuración de compilación de Thorsten para asegurarse de seleccionar el perfil correcto. Trabajó para mí dos veces.
Android Noob
Tuve el mismo problema que @Chun y (@) wuf810. Esas malditas provisiones .mobile se siguen recreando. Lo que hice fue mantener abierta la ventana del directorio "Provisioning Profiles" y seguir los pasos de (@) user3382891- eliminar los registros de .mobileprovision tan rápido como se estaban recreando. Finalmente, Xcode seleccionó mi perfil de aprovisionamiento correcto. Ahora estoy en el siguiente problema ...
kris
6

Tengo una solución para esto que funciona para mí.

Tengo instalado Xcode 6 y Xcode 5.1.1, Xcode 6 está en Aplicaciones y Xcode 5.1.1 está en otro directorio. Cuando quiero hacer una compilación, uso Xcode 6 para crear el Archivo. Pero también puede ver el Archivo creado en Xcode 5.1.1, así que uso Xcode 5.1.1 para distribuir el Ad Hoc .ipa usando el perfil de aprovisionamiento que quiero usar. Así que compila usando Xcode 6 pero distribuye usando Xcode 5.1.1.

Adam Freeman
fuente
No puedo subir build a testflight de esta manera.
hardik hadwani
Si está utilizando el mismo perfil de aprovisionamiento para construir y distribuir, entonces debería poder cargar su construcción para probar el vuelo de esta manera. Verifique que el perfil de aprovisionamiento que está utilizando para construir sea el mismo que el que está utilizando para distribuir.
Adam Freeman
4

El uso de activos de firma local durante la exportación resolvió el problema para mí:ingrese la descripción de la imagen aquí

Durga Vundavalli
fuente
3

La respuesta de @MrPatol no funcionó para mí. Mi escenario de trabajo para Xcode 6.3.2

En el Centro de miembros -> Perfiles de aprovisionamiento de iOS

  • Elimine el perfil de aprovisionamiento que se configuró de manera predeterminada cuando intentaba compilar la aplicación (por ejemplo, "XC ..."). Cree un perfil de aprovisionamiento ad-hoc (no producción) con un nombre corto.

En la Utilidad de configuración de iPhone -> Perfiles de aprovisionamiento

  • Eliminar el mismo perfil de aprovisionamiento (por ejemplo, "XC ...")

En Xcode -> Organizador

  • Seleccione la compilación ad-hoc y haga clic en "Exportar ...." Seleccione "Guardar para implementación ad hoc" -> Siguiente
  • Seleccione una organización del menú desplegable
  • Compruebe que su nuevo perfil de aprovisionamiento ad-hoc se seleccione automáticamente
  • Exportar y guardar .ipa como antes.
Serge Seletskyy
fuente
2

Aquí están los dos puntos clave que resolvieron el problema para mí.

  • Cuando genera el perfil de aprovisionamiento, debe estar vinculado a un ID de aplicación explícito que use el mismo identificador de paquete que su aplicación. Una ID de aplicación comodín no funcionará.
  • Cuando exporte la aplicación para una implementación ad-hoc, seleccione Usar activo de firma local en el menú desplegable y haga clic en Elegir.

Luego, Xcode encontrará el perfil de aprovisionamiento correcto haciendo coincidir la ID de la aplicación con el identificador de paquete de la aplicación.

Sarah Elan
fuente
1

De hecho, debe crear un nuevo perfil de distribución, específico para la implementación ad hoc. Esto se puede encontrar en el centro de miembros clásico, pero es un nuevo tipo de certificado.

Luego puede seleccionar qué dispositivos se pueden usar para probar la aplicación como lo haría con un perfil de desarrollador.

Y el certificado recién creado estará disponible cuando exporte su paquete desde el Organizador de la forma habitual.

Alternativamente, puede usar la solución TestFlight proporcionada por Apple con iOS 8 para permitir que su usuario tenga acceso a la versión preliminar.

ingrese la descripción de la imagen aquí

cdescours
fuente
Sí, pero como señala, esto solo significa iOS8. Apple ha sido particularmente estúpido forzando a los usuarios de Testflight a iOS8 solamente. Durante un buen tiempo, la base instalada más grande seguirá siendo iOS7, por lo que Apple debería haberlo permitido.
wuf810
1

Tuve el mismo problema, finalmente lo resolví regenerando el perfil que quería usar en Xcode 6, incluidos todos los dispositivos que he registrado en mi cuenta de iOS Dev, haciéndolo de esa manera, al seleccionar exportar muestra el perfil correcto y yo puede hacer la exportación Ad Hoc con Xcode 6 sin usar un script. Espero eso ayude.

diegomen
fuente
1
Esto funciona, pero solo si está de acuerdo con el perfil de aprovisionamiento que contiene todos los dispositivos registrados con su cuenta de desarrollador de iOS. Para usar solo un subconjunto de dispositivos en el perfil de aprovisionamiento, tuve que usar esta técnica: stackoverflow.com/a/26296138/71262
Oran Dennison
0

Estuve atrapado por un tiempo con esto, pero usando Crashlytics lo resolvió, compilación distribuida usando el perfil seleccionado en la configuración de compilación de su proyecto Xcode.

Espero que ayude a alguien.

M.Othman
fuente
0

Casi el mismo problema. Después de crear un archivo para su distribución (Producto> Archivo), exporte el archivo (haga clic en Exportar ...) y elija "Guardar para implementación empresarial"; entonces "Siguiente". Luego selecciona el valor predeterminado "Equipo de desarrollo" (por ejemplo, nombre de la organización) y hace clic en "Elegir". Finalmente, se le presentará una vista de resumen que también enumera el perfil de aprovisionamiento que Xcode ha encontrado automáticamente (tal vez creado sobre la marcha) para usted. Esto PODRÍA ser el perfil de aprovisionamiento incorrecto (típicamente un perfil de aprovisionamiento de comodines, como "XC: *") y PODRÍA estar sucediendo porque ya hay un perfil de aprovisionamiento de comodines en el portal del desarrollador.

Utilicé un ticket de soporte para esto y solo recuperé este enlace https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/ConfiguringPushNotifications/ConfiguringPushNotifications.html#//apple_ref/doc/uid/TP40012582 -CH32-SW1 . Realmente no es una gran ayuda.

He descubierto que la solución de MrPatol también funciona para Enterprise Deployment y resuelve el problema por nosotros. Primero inicié sesión en el portal del desarrollador y creé manualmente un perfil de aprovisionamiento que se adaptaba a mi aplicación. Luego descargó e instaló el nuevo perfil de aprovisionamiento creado manualmente.

sejersbol
fuente
0

En xcode 7, no pude elegir el aprovisionamiento adhoc a través de

Organizador -> Cargar en App Store y Organizador -> Validar

Pero podría elegir a través de Organizador -> Exportar

Editado:

Cargar la aplicación después de exportar ad hoc a la tienda de aplicaciones para testFlight causó otro problema discutido aquí . Entonces, la solución a ambos problemas es una. Cree el aprovisionamiento de AppStore para poder seleccionarlo a través del organizador y utilizar testFlight cargándolo en la tienda de aplicaciones.

zeeawan
fuente
0
  1. Creo que es una forma correcta de especificar una opción -exportOptionsPlist después de Xcode 7. Escogerá los archivos de aprovisionamiento correctos como en la exportación GUI sin importar lo que especifique en la configuración del proyecto.

xcodebuild -exportArchive -archivePath $ Archive_Path -exportPath $ LOCAL_PACKAGE_DIR -exportOptionsPlist $ Export_Plist_Path

El archivo optionPlist es así,

<dict>
  <key>teamID</key>
        <string>MYTEAMID123</string>
        <key> teamID </key>
        <string>app-store</string>
        <key>uploadSymbols</key>
        <true/>
</dict>


<plist>

tienda de aplicaciones, empresa, ad-hoc, desarrollo son alternativas

  1. Pero puede encontrar otro error después de lo anterior.

Error Domain = IDEDistributionErrorDomain Code = 14 "No se encontraron dispositivos aplicables". UserInfo = {NSLocalizedDescription = No se encontraron dispositivos aplicables.}

Es un problema de rubí. Prueba este script de shell,xcbuild-safe.sh

xcbuild-safe.sh xxxxNormalOptionsInXcodebuild bla...
  1. Espera un momento, llega otro extraño error.

xcbuild-safe.sh: línea 62: shell_session_update: comando no encontrado

¿Qué demonios shell_session_update? Trabajemos alrededor de esto. Simplemente defina una función antes del cmd real de xcodebuild, es decir, en la línea 60 o 61.

function shell_session_update() { :; }
Victor Choy
fuente
-4

En respuesta a su pregunta específica, no, no hay forma de seleccionar el perfil de aprovisionamiento que se utilizará. ¿Qué intentas hacer? (es decir, ¿qué permite el perfil que desea seleccionar para que el generado automáticamente no lo haga?)

clarkcox3
fuente
1
Por ejemplo, tener una lista específica de UDID disponibles para esa aplicación. Estoy desarrollando aplicaciones para múltiples clientes y no puedo mezclarlas. Hay formas de evitar esto, claro, pero todas ellas son mucho más complicadas que simplemente seleccionar el perfil de aprovisionamiento que quiero usar
Lope
Sin duda, hay una manera de seleccionar el perfil de aprovisionamiento que se utilizará. stackoverflow.com/a/26296138/71262
Oran Dennison
1
@Lope Si un cliente tiene instalada una de sus aplicaciones y el perfil asociado, puede instalar cualquiera de sus aplicaciones (incluso si los perfiles de las otras aplicaciones no contienen su dispositivo). Esta confusión es una de las principales razones por las que queremos alejar a los desarrolladores de especificar manualmente sus perfiles y listas de dispositivos. (es decir, muchas personas parecen confiar en una falsa sensación de seguridad como su razón principal para querer especificar perfiles manualmente)
clarkcox3
@ clarkcox3 bueno, eso es aún peor, quiero evitar que el cliente pueda verse las aplicaciones
Lope
@Lope: no conozco una forma de distribuir archivos ipa ad hoc que hagan que todas sus aplicaciones estén disponibles para sus evaluadores. En otras palabras, debe proporcionar explícitamente a sus evaluadores la aplicación que desea que prueben, ¿verdad? Esa separación física les impediría usar otras aplicaciones. (No es como si pudieran ir a la tienda y obtenerlos todos, ¿sí?) ¿¿Hay alguna otra forma en que sus evaluadores puedan acceder a todas sus aplicaciones sin su permiso ???
Leanne