Może Xcode.plik mobileprovision być 'zainstalowany' z linii poleceń?

Próbuję zautomatyzować proces tworzenia aplikacji dla naszych klientów za pomocą skryptów bash działających na serwerze Mac Mini (OSX 10.7).

Mój skrypt oparty jest na skrypcie z Githuba pierwotnie zamieszczonym na https://gist.github.com/949831

Buduję aplikację za pomocą xcodebuild, a następnie podpisuję i osadzam plik mobileprovision za pomocą xcrun.

Kiedy robię to wszystko z plikiem mobileprovision, który ręcznie zainstalowałem w Xcode korzystanie z GUI (np. podwójne kliknięcie) działa dobrze. Jeśli po prostu spróbuję użyć pliku mobileprovision skopiowanego na serwer z SCP, to się nie powiedzie (błąd oznaczenia kodu: nie można znaleźć profilu Provisioning '123abc123'.)

Prawdopodobnie dzieje się tak dlatego, że plik nie jest 'zainstalowany'.

Czy Jest jakiś sposób na zainstalowanie pliku mobileprovision z terminala? Używam SSH, więc używanie takich rzeczy jak polecenie' open ' nie będzie działać.

Dzięki!

Author: Ben Clayton, 2012-05-01

7 answers

Jeśli nie chcesz pobierać zewnętrznych zależności (tak jak Ben), w większości przypadków powinno działać:

uuid=`grep UUID -A1 -a adhoc.mobileprovision | grep -io "[-A-F0-9]\{36\}"`
cp adhoc.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/$uuid.mobileprovision

Zauważ, że a UUID składa się z cyfr szesnastkowych , więc prawidłowy zakres to [-A-F0-9], a nie [-A-Z0-9].

Bonus: Pobierz i zainstaluj profile

Używając narzędzia cupertino , poniższy fragment pobiera wszystkie profile dystrybucji z portalu deweloperów i instaluje je.

ios profiles:download:all --type distribution

for file in *.*provision*; do
    uuid=`grep UUID -A1 -a "$file" | grep -io "[-A-F0-9]\{36\}"`
    extension="${file##*.}"
    echo "$file -> $uuid"
    mv -f "$file" ~/Library/MobileDevice/Provisioning\ Profiles/"$uuid.$extension"
done

Cupertino (the ios polecenie) można zainstalować za pomocą sudo gem install cupertino.

 80
Author: nschum,
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-10-24 19:21:07

Odkąd zadałem to pytanie, sam zbudowałem rozwiązanie. Sekretem jest po prostu skopiowanie pliku do folderu ~/Library/MobileDevice/Provisioning Profiles/, ale (tutaj jest trudny bit) przemianowany na [UUID].mobileprovision.

UUID jest przechowywany wewnątrz tekstowej części pliku (w pliście). Niestety, plik zawiera również plik binarny, więc 'defaults read' nie może go odczytać. Na szczęście ten facet zbudował małe narzędzie wiersza poleceń, aby uzyskać UUID (i kilka innych rzeczy out again).

Oto mój cały działający skrypt:

Https://gist.github.com/2568707

 28
Author: Ben Clayton,
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-05-01 15:18:11

Kompendium wszystkich innych odpowiedzi update_provisioning_profile.sh :

#!/bin/sh
#
# Download and install a single iOS provisioning profile
# Requires https://github.com/nomad/cupertino
#
# Usage
# - Login to your account once:
# ios login
# - Configure TEAM and PROFILE (instructions below)
# - Run update_provisioning_profile.sh at anytime, usually after adding/removing devices to the profile

# Configure the team identifier
# Copy it from developer portal or just use cupertino to get it:
# ios devices
# Copy the string in parens and set it as TEAM
TEAM="team id"

# Configure the profile name you want to manage
# Copy it from developer portal or use cupertino to get a list (ignoring Xcode managed profiles):
# ios profiles --team ${TEAM} | grep -v 'iOS Team Provisioning Profile'
# Copy the name as-is and set as PROFILE
PROFILE="profile name"

# Fetch the profile using `cupertino` tool
# you need to run `ios login` once to setup the account
ios profiles:download "${PROFILE}" --team ${TEAM}
PROFILE_FILE=`echo $PROFILE | tr ' ' '_'` # `cupertino` tool will replace spaces with _
UUID=`/usr/libexec/PlistBuddy -c 'Print :UUID' /dev/stdin <<< $(security cms -D -i ${PROFILE_FILE}.mobileprovision)`

# copy where Xcode can find it
cp ${PROFILE_FILE}.mobileprovision "$HOME/Library/MobileDevice/Provisioning Profiles/${UUID}.mobileprovision"

# clean
rm ${PROFILE_FILE}.mobileprovision

Łatwy w dostosowaniu do Twoich potrzeb.

 7
Author: djromero,
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
2014-10-04 12:12:25

Uruchamialiśmy nasze Kompilacje w Jenkins i mieliśmy podobny problem. Nasz profil Ad Hoc provisioning zmienia się dość często i nie chcemy biegać do każdego z naszych niewolników kompilacji instalując je w xcode za każdym razem, gdy się zmieniają, więc oto, co mam do pracy: {]}

/usr/bin/xcrun -sdk iphoneos PackageApplication -v <path to yourapp.app> -o <path to your .ipa file> --sign "<Name of signing identity>" --embed <path to .mobileprovision file>

""jest tym, co widzisz w sekcji "podpisywanie kodu" w Ustawieniach budowania celu.

 3
Author: jpancoast,
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-05-02 16:40:40

Wygląda na to, że Apple dodało pustą linię w .plik profilu aprowizacji mobileprovision poniżej każdej pary klucz-wartość i opcja grep już nie działa.

Oto jak go odzyskać za pomocą PlistBuddy i zabezpieczeń za pomocą skryptu Pythona

command = "/usr/libexec/PlistBuddy -c 'Print :UUID' /dev/stdin <<< $(security cms -D -i abc.mobileprovision)"
uuid = os.popen(command).readline().rstrip('\n')
 3
Author: indiantroy,
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
2014-08-12 22:18:23

Użyj Fastlane sigh, aby zainstalować konkretny plik tymczasowy lub możesz utworzyć nowy.

fastlane sigh renew --adhoc -n "provisional-profile-name" --app_identifier "app-identifier" -u "user-name" --ignore_profiles_with_different_name

Provisional-profile-name jest tylko nazwą profilu, nie zawiera .mobileprovision przedłużenie.

Aby utworzyć nowy profil adhoc ze wszystkimi dodanymi Uuidami urządzenia,

fastlane sigh --adhoc --app_identifier "app-identifier" -u "username"

Fastfile,

lane :build do

sigh(
adhoc: true,
app_identifier: "***APP_ID**",
provisioning_name: "**Profile_name**",
username: "Apple_ID",
force: true,
skip_certificate_verification: true,
)


gym(
#export_options: "exportPlist.plist",
scheme: "**scheme-name**",
export_method: "ad-hoc",
xcargs: "PROVISIONING_PROFILE=$SIGH_UUID",
)
end
 2
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-11 12:49:56

Wygląda na to, że nie było żadnych ostatnich zmian na cupertino. Fastlane posiada narzędzie o nazwie sigh do zarządzania profilami obsługi (tworzenie, pobieranie, odnawianie, naprawa): https://github.com/fastlane/fastlane/tree/master/sigh#readme

 1
Author: Toland Hon,
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-08-26 20:56:32