Aktualizacja profili obsługi w wierszu poleceń

Nie mogłem nic na ten temat znaleźć (może po prostu używam niewłaściwych haseł wyszukiwania..):
Staramy się stworzyć sensowne ustawienie ciągłej integracji dla naszych aplikacji. Aby mieć naprawdę rozsądną implementację, serwer kompilacji powinien być w stanie automatycznie odświeżyć używane profile aprowizacji od apple. Podobne do tego, co robi X-Code organizer, ale automagicznie za pomocą wiersza poleceń.
Jakieś wskazówki, Czy to w ogóle możliwe?

Author: LordT, 2011-01-20

5 answers

Oto mój skrypt bash, gdzie pierwszym argumentem skryptu ($1) jest lokalizacja nowych profili.

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

Zasadniczo wszystko, co znajduje się w folderze ~/Library/MobileDevice/Provisioning Profile/ może być używane do budowania (i pojawi się w Xcode).

Jeśli chcesz postawić System CI, niedawno wygłosiłem wykład na temat używania Hudsona do tego, i umieściłem kilka slajdów i notatek tutaj . Mój e-mail jest na mojej stronie, jeśli masz jakieś pytania na ten temat.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-03 11:02:27

Aktualizacja: Cupertino nie będzie już działać na najnowszym iTunes. Spójrz na użycie sigh zamiast


Wygląda na to, że ten interfejs wiersza poleceń bardzo pomoże:

Https://github.com/nomad/cupertino

Który pozwala na pobranie wszystkich profili dystrybucji w ten sposób (dzięki @tdubik):

ios profiles:download:all --type distribution

[1]} innym podejściem byłoby użycie licencji Enterprise development ($300 / rok), która pozwala budować dla urządzeń BEZ zaopatrzenie! Możesz więc zbudować swoją aplikację i wysłać ją na urządzenie bez konieczności przechodzenia do Centrum deweloperów Apple lub rejestrowania nowych urządzeń.

Zauważ, że nie pozwoli to na dystrybucję aplikacji do appstore, ale jeśli jesteś deweloperem, który buduje Mnóstwo Aplikacji dla Klientów, może to ułatwić proces" build and send to clients " całkiem sporo! Nie jestem pewien, czy byłoby to zgodne z zasadami Apple, czy nie, więc sprawdź to, zanim rozważysz, że opcja. Ale może to być coś do rozważenia w przypadku prototypów itp., a kiedy faktycznie chcą go wysłać, możesz im uzyskać własną licencję na program programistyczny.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-29 23:21:54

Spróbuj użyć apple_dev_center.rb z https://github.com/lacostej/apple-dev

Przetwarza informacje ze strony internetowej programisty apple i pobiera profile, aby automatycznie skopiować je do właściwej lokalizacji.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-29 10:59:58

Sigh może zarządzać profilami aprowizacji. Jednak nie obsługuje instalowania profili, które już pobrałeś. Jednak nadal uważam, że warto spojrzeć na ich źródło , aby dowiedzieć się, jak faktycznie instalują profil po pobraniu go.

Na szczęście jest bardzo podobna do odpowiedź Jamesa 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

Mam skrypt do wykonania tej lokalnej instalacji dla mnie:

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

Który zależy od innego uuid-from-mobileprovision.bash skrypt:

#!/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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-21 03:48:12

Od jakiegoś czasu staram się, żeby to zadziałało. W końcu się udało!!

Można użyć Fastlane sigh, aby pobrać i zainstalować tylko tymczasowy profil, którego potrzebujesz.

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

Uwaga: polecenie to wymagało już żadnego tymczasowego profilu aplikacji zainstalowany w systemie. To rzuciło błąd dla mnie inaczej.

Provisional_profile_name = tylko nazwa profilu, nie potrzebuję przedłużenia.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-10 09:58:22