web-dev-qa-db-fra.com

Mise à jour en ligne de commande des profils d'approvisionnement

Je n'ai rien trouvé à ce sujet (peut-être que j'utilise simplement les mauvais termes de recherche ..):
Nous essayons de créer un paramètre d’intégration continue raisonnable pour nos applications. Pour avoir une implémentation VRAIMENT sensible, le serveur de génération doit pouvoir actualiser automatiquement les profils de provisioning utilisés par Apple. Semblable à ce que fait l'organisateur X-Code, mais de manière automatique via une ligne de commande.
Avez-vous la moindre idée si c'est possible? 

49
LordT

Voici mon script bash pour cela, où le premier argument du script ($ 1) est l'emplacement des nouveaux profils.

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

Fondamentalement, tout ce qui se trouve dans ce dossier ~/Library/MobileDevice/Profils de provisioning/peut être utilisé pour construire avec (et sera affiché dans Xcode).

Si vous envisagez de mettre en place un système d’information commune, j’ai récemment parlé de l’utilisation de Hudson pour ce système, et ai ajouté quelques diapositives et notes ici-même . Mon email est sur mon site si vous avez des questions à ce sujet.

54
James J

Mise à jour: Cupertino ne fonctionnera plus sur le dernier iTunes. Regardez plutôt en utilisant soupir


On dirait que cette interface en ligne de commande vous aidera beaucoup:

https://github.com/nomad/cupertino

qui vous permet de télécharger tous les profils de distribution comme suit (merci @tdubik): 

ios profiles:download:all --type distribution

Une autre approche consisterait à utiliser une licence de développement Enterprise (300 USD/an) qui vous permet de créer des périphériques sans provisioning! Vous pouvez donc créer votre application et l'envoyer à un appareil sans avoir besoin d'aller au centre de développement Apple ou d'enregistrer de nouveaux appareils. 

Notez que cela ne vous permettrait pas de distribuer votre application sur l'Appstore, mais si vous êtes une entreprise de développement qui construit des tonnes d'applications pour les clients, cela facilitera grandement le processus de "génération et envoi aux clients"! Je ne suis pas sûr que ce soit dans les politiques d'utilisation légitime d'Apple ou non, alors vérifiez-le avant de considérer cette option. Mais cela pourrait être quelque chose à considérer pour les prototypes, etc., et quand ils veulent réellement l'expédier, vous les obligez à obtenir leur propre licence de programme de développeur.

16
Brad Parks

Essayez d’utiliser Apple_dev_center.rb depuis https://github.com/lacostej/Apple-dev

Il analyse les informations du site Web des développeurs Apple et télécharge les profils pour les copier automatiquement à l'emplacement approprié.

1
coffeebreaks

Sigh peut gérer les profils de provisioning pour vous. Cependant, il ne prend pas en charge l’installation des profils que vous avez déjà récupérés. Cependant, j’ai toujours trouvé intéressant de consulter leur source pour savoir comment ils installent réellement un profil après l’avoir téléchargé .

Heureusement, cela ressemble beaucoup à La réponse 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

J'ai un script pour effectuer cette installation locale pour moi:

#!/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

qui dépend d'un autre script uuid-from-mobileprovision.bash:

#!/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
Heath Borders

J'essaie de faire ce travail depuis quelque temps. Enfin réussi !!

Vous pouvez utiliser Fastlane Sigh pour télécharger et installer uniquement le profil provisoire dont vous avez besoin.

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

Remarque: Cette commande nécessitait déjà un profil provisoire de l'application installé dans le système. Il a jeté une erreur pour moi autrement. 

provisoire_profile_name = Juste le nom du profil, pas besoin d'extension.

0
Vineeth