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?

Author: LordT, 2011-01-20

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.

 54
Author: James J,
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.

 16
Author: Brad Parks,
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.

 1
Author: coffeebreaks,
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
 1
Author: Heath Borders,
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.

 0
Author: Vineeth,
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