2011-01-20 14 views
48

No he podido encontrar nada al respecto (quizás solo estoy usando términos de búsqueda erróneos ...):
Estamos tratando de construir una configuración de integración continua sensible para nuestras aplicaciones. Para tener una implementación REALMENTE sensata, el servidor de compilación debería ser capaz de actualizar automáticamente los perfiles de aprovisionamiento utilizados desde Apple. Similar a lo que hace el organizador de X-Code, pero automágicamente a través de la línea de comando.
¿Alguna pista si eso es posible en absoluto?Línea de comandos Actualización de perfiles de suministro

+1

Gracias por esta pregunta. Hasta ahora, mi solución de línea de comandos era '$ open vnc: // server' ;-) – mpontillo

+0

Eche un vistazo a la siguiente url;
http://stackoverflow.com/questions/4369119/how-to-install-developer-certificate-private-key-and-provisioning-profile-for-ios Creo que será de ayuda. – jfalexvijay

Respuesta

53

Aquí está mi script de bash, donde el primer argumento del script ($ 1) es la ubicación de los nuevos perfiles.

rm -Rf ~/Library/MobileDevice/Provisioning\ Profiles/* 
cp "$1"/*.* ~/Library/MobileDevice/Provisioning\ Profiles/ 

Básicamente, cualquier cosa en la que ~/Perfiles/carpeta Library/MobileDevice/aprovisionamiento puede ser usado para construir con (y se mostrará en Xcode).

Si está buscando pararse un sistema de CI, recientemente di una charla sobre el uso de Hudson para él, y colocó algunas diapositivas y notas over here. Mi correo electrónico está en mi sitio si tiene alguna pregunta al respecto.

+2

genial, gracias por la respuesta. ¿Pero tienes alguna idea de cómo obtener $ 1? ¿Cómo se obtienen los perfiles en su máquina de construcción en primer lugar? – LordT

+5

Mi trabajo es principalmente contratado, y cada cliente tiene su propia cuenta de iTunes Connect, así que les he delegado eso. Los capacité sobre cómo actualizar los perfiles de aprovisionamiento con nuevos UDID, y compartí una carpeta de Dropbox.com con cada uno de ellos donde guardan sus perfiles de aprovisionamiento específicos. El primer paso de mi proceso de compilación es actualizar los perfiles de provisión con los específicos del cliente en Dropbox, por lo que las compilaciones siempre usan lo último. Cargar un nuevo perfil también es un desencadenante de compilación, por lo que pueden agregar nuevos dispositivos y obtener una compilación nueva sin mi intervención. –

+0

bien, eso tiene sentido. ¿Cómo se activa una nueva compilación con Dropbox? Folderactions? ¿O hay una opción específica para hacer esto? – LordT

16

Actualización: Cupertino ya no funcionará en iTunes más reciente. Ver en el uso sigh lugar


Suena como esta interfaz de línea de comandos le ayudará a cabo a lo grande:

https://github.com/nomad/cupertino

que le permite descargar todos los perfiles de distribución al igual que (gracias @tdubik):

ios profiles:download:all --type distribution

Otro enfoque sería utilizar un Ente licencia de desarrollo rápido ($ 300/año) que le permite construir para dispositivos sin aprovisionamiento! Así que puedes construir tu aplicación y enviarla a un dispositivo sin tener que ir al centro Apple Dev o registrar ningún dispositivo nuevo.

Tenga en cuenta que esto no le permitiría distribuir su aplicación a la tienda de aplicaciones, pero si usted es una casa de desarrollo que crea montones de aplicaciones para clientes, puede facilitar bastante su proceso de "crear y enviar a clientes". ¡pieza! No estoy seguro de si esto estaría en las políticas de uso legítimo de Apple o no, así que por favor revise eso antes de considerar esa opción. Pero podría ser algo a tener en cuenta para los prototipos, etc., y cuando en realidad quieren enviarlo, obtienes que obtengan su propia licencia del programa de desarrollo.

+3

Las licencias empresariales no son para la distribución de la tienda de aplicaciones, por lo que tendría que tener otra cuenta de desarrollador con Apple para usar esto de manera productiva (suponiendo que planea enviar sus aplicaciones a la tienda de aplicaciones). – danieljimenez

+0

Buen punto ... Olvidé mencionarlo ... ¡gracias! –

+2

¡Gracias por el enlace de Github! La mejor respuesta aquí. Sin embargo, no recomendaría usar Enterprise para crear aplicaciones para clientes: a Apple no le gusta eso. Enterprise es "para implementación interna dentro de la compañía solamente", y creo que el acuerdo dice que usted debe tener el control de todos los dispositivos que se usan con Enterprise. – Sperr

0

He estado tratando de hacer que esto funcione por algún tiempo. ¡Finalmente lo hizo!

Puede usar fastlane sigh para descargar e instalar solo el perfil provisional que necesita.

fastlane sigh renew --adhoc -n "provisional_profile_name" 
--app_identifier "your_app_identifier" -u "apple_login _username" --ignore_profiles_with_different_name 

Nota: Este comando necesita cualquier perfil provisional de la aplicación ya instalado en el sistema. Me arrojó un error de lo contrario.

temporary_profile_name = Solo el nombre del perfil, no necesita extensión.

1

Sigh puede gestionar los perfiles de aprovisionamiento para usted. Sin embargo, no es compatible con la instalación de perfiles que ya ha buscado. Sin embargo, todavía me pareció valioso mirar su source for how they actually install a profile once they've downloaded it.

Afortunadamente, es muy similar a James J's answer:

def self.install_profile(profile) 
    UI.message "Installing provisioning profile..." 
    profile_path = File.expand_path("~") + "/Library/MobileDevice/Provisioning Profiles/" 
    uuid = ENV["SIGH_UUID"] || ENV["SIGH_UDID"] 
    profile_filename = uuid + ".mobileprovision" 
    destination = profile_path + profile_filename 

    # If the directory doesn't exist, make it first 
    unless File.directory?(profile_path) 
    FileUtils.mkdir_p(profile_path) 
    end 

    # copy to Xcode provisioning profile directory 
    FileUtils.copy profile, destination 

    if File.exist? destination 
    UI.success "Profile installed at \"#{destination}\"" 
    else 
    UI.user_error!("Failed installation of provisioning profile at location: #{destination}") 
    end 
end 

Tengo un script para realizar esta instalación local para mí:

#!/bin/bash -euo pipefail 

BASH_SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 

cd "$BASH_SOURCE_DIR" 

# by default bash passes the glob characters if nothing matched the glob 
# disable that 
# http://stackoverflow.com/a/18887210/9636 
shopt -s nullglob 
# this creates a proper bash array, which we need since our profiles 
# have funny characters in them 
MOBILE_PROVISIONS=(*.mobileprovision) 
# re-enable default nullglob behavior 
shopt -u nullglob 

# On a brand new machine that has never run any app on a development device 
# the ~/Library/MobileDevice/"Provisioning Profiles" directory doesn't exist 
mkdir -p ~/Library/MobileDevice/"Provisioning Profiles" 

for mobileprovision in "${MOBILE_PROVISIONS[@]}" 
do 
    uuid=$(./uuid-from-mobileprovision.bash "${mobileprovision}") 
    cp "${mobileprovision}" ~/Library/MobileDevice/"Provisioning Profiles"/"${uuid}".mobileprovision 
done 

que depende de otra uuid-from-mobileprovision.bash guión:

#!/bin/bash -euo pipefail 

if [ ! -f "${1}" ] 
then 
    echo "Usage: $0 <path/to/mobileprovision/file>" 1>&2 
    exit 1 
fi 

UUID=$(grep --text --after-context=1 UUID "${1}" | grep --ignore-case --only-matching "[-A-Z0-9]\{36\}") 
if [ -z "${UUID}" ] 
then 
    echo "Invalid mobileprovision file: ${1}" 1>&2 
    exit 2 
else 
    echo "${UUID}" 
fi 
Cuestiones relacionadas