Actualización de la línea de Comandos de los Perfiles de Aprovisionamiento
No pude encontrar nada en esto (tal vez solo estoy usando los términos de búsqueda equivocados..):
Estamos tratando de crear una configuración de integración continua sensata para nuestras aplicaciones. Para tener una implementación REALMENTE sensata, el servidor de compilación debe ser capaz de actualizar automáticamente los perfiles de aprovisionamiento utilizados desde apple. Similar a lo que hace el organizador de código X, pero automáticamente a través de la línea de comandos.
¿Alguna pista si es posible?
5 answers
Aquí está mi script bash para ello, donde el primer argumento para el 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 esa carpeta ~/Library/MobileDevice/Provisioning Profiles/ se puede usar para compilar (y se mostrará en Xcode).
Si usted está buscando para poner en pie un sistema de CI, recientemente di una charla sobre el uso de Hudson para ello, y poner algunas diapositivas y notas aquí. Mi correo electrónico está en mi sitio si tiene alguna pregunta al respecto.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-03 11:02:27
Actualización: Cupertino ya no funcionará en la última versión de iTunes. Mira en usar suspiro en lugar
Suena como que esta interfaz de línea de comandos ayudará a lo grande:
Https://github.com/nomad/cupertino
Que le permite descargar todos los perfiles de distribución de esta manera (gracias @tdubik):
ios profiles:download:all --type distribution
Otro enfoque sería usar una licencia de desarrollo empresarial ($300/año) que le permite compilar para dispositivos sin aprovisionamiento! Así que puedes crear tu aplicación y enviarla a un dispositivo sin necesidad de ir al Apple Dev Center o registrar ningún dispositivo nuevo.
Tenga en cuenta que esto no le permitiría distribuir su aplicación a la appstore, pero si usted es una casa de desarrollo que construye toneladas de aplicaciones para los clientes, puede facilitar su "construir y enviar a los clientes" proceso bastante! No estoy seguro de si esto estaría en las políticas de uso legítimo de Apple o no, así que verifique eso antes de considerar que opcion. Pero podría ser algo a considerar para prototipos, etc., y cuando realmente quieren enviarlo, usted consigue que obtengan su propia licencia de programa de desarrollador.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-29 23:21:54
Intente usar apple_dev_center.po de https://github.com/lacostej/apple-dev
Analiza la información del sitio web del desarrollador de Apple y descarga los perfiles para que los copie en la ubicación adecuada automáticamente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-29 10:59:58
Sigh
puede administrar perfiles de aprovisionamiento por usted. Sin embargo, no admite la instalación de perfiles que ya haya obtenido usted mismo. Sin embargo, todavía me pareció valioso mirar su fuente para ver cómo realmente instalan un perfil una vez que lo han descargado.
Afortunadamente, es muy similar a la respuesta de James J :
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 por 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 otro uuid-from-mobileprovision.bash
script:
#!/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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-21 03:48:12
He estado tratando de hacer que esto funcione durante 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 ya necesitaba cualquier perfil provisional de la aplicación instalado en el sistema. Me arrojó un error de lo contrario.
Provisional_profile_name = Solo el nombre del nombre del perfil, no necesito extensión.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-10 09:58:22