Обновление командных профилей в командной строке - PullRequest
49 голосов
/ 20 января 2011

Я ничего не могу найти по этому поводу (возможно, я просто использую неправильные условия поиска ..):
Мы пытаемся создать разумную настройку непрерывной интеграции для наших приложений. Чтобы иметь ДЕЙСТВИТЕЛЬНО разумную реализацию, сервер сборки должен иметь возможность автоматически обновлять используемые профили обеспечения от Apple. Аналогично тому, что делает X-Code Organizer, но автоматически через командную строку.
Любая подсказка, если это вообще возможно?

Ответы [ 5 ]

54 голосов
/ 26 января 2011

Вот мой bash-скрипт для него, где первый аргумент скрипта ($ 1) - это местоположение новых профилей.

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

По сути, все в этом ~ / Library / MobileDevice / Provisioning Profiles/ Папка / может использоваться для сборки с (и будет отображаться в XCode).

Если вы хотите установить систему CI, я недавно выступил с докладом об использовании Hudson и поднял несколькослайды и заметки здесь .Мой электронный адрес находится на моем сайте, если у вас есть какие-либо вопросы по этому поводу.

16 голосов
/ 23 июля 2013

Обновление: Купертино больше не будет работать на последней версии iTunes. Попробуйте использовать вздох вместо


Похоже, этот интерфейс командной строки очень поможет:

https://github.com/nomad/cupertino

, который позволяет вам загружать все профили распространения, например, так (спасибо @tdubik):

ios profiles:download:all --type distribution

Другой подход заключается в использовании лицензии на разработку Enterprise ($ 300 / год), которая позволяет создавать устройства без инициализации! Таким образом, вы можете создать свое приложение и отправить его на устройство без необходимости посещать центр Apple Dev или регистрировать новые устройства.

Обратите внимание, что это не позволит вам распространять ваше приложение в магазине приложений, но если вы разрабатываете тонны приложений для клиентов, это может значительно облегчить процесс "сборки и отправки клиентам" ! Я не уверен, будет ли это в законной политике использования Apple или нет, поэтому, пожалуйста, проверьте это, прежде чем рассматривать этот вариант. Но это может быть что-то, что нужно учитывать для прототипов и т. Д., И когда они на самом деле хотят его отправить, вы получаете их, чтобы получить собственную лицензию на программу разработчика.

1 голос
/ 03 января 2018

Sigh может управлять профилями обеспечения для вас. Однако он не поддерживает установку профилей, которые вы уже выбрали. Тем не менее, я все же нашел ценным посмотреть на их источник, чтобы узнать, как они на самом деле устанавливают профиль после того, как загрузили его .

К счастью, это очень похоже на ответ Джеймса Дж :

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

У меня есть скрипт для выполнения этой локальной установки для меня:

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

, который зависит от другого 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 голос
/ 29 ноября 2012

Попробуйте использовать apple_dev_center.rb с https://github.com/lacostej/apple-dev

. Он анализирует информацию с веб-сайта разработчика Apple и загружает профили, чтобы вы могли автоматически скопировать их в нужное место.

0 голосов
/ 10 сентября 2017

Я пытался заставить это работать некоторое время. Наконец-то сделал это !!

Можно использовать fastlane sigh для загрузки и установки только необходимого вам предварительного профиля.

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

Примечание. Эта команда уже нуждалась во временном профиле приложения. установлен в системе. Это бросило ошибку для меня иначе.

provisional_profile_name = Просто имя имени профиля, не нужно расширение.

...