xcodebuild inny profil aprowizacji Dla zależności docelowych

[[2]}próbuję zbudować swoją aplikację z xcodebuild:

xcodebuild -workspace "RG.xcworkspace" -scheme "Production" -configuration "Release" build CONFIGURATION_BUILD_DIR="${TEMP_DIR}" PROVISIONING_PROFILE="1234-5678-9098-7654-3210"
Mój plan ma dwa cele. Jeden cel to aplikacja, drugi to rozszerzenie aplikacji (zbudowałem rozszerzenie dla Safari). Rozszerzenie aplikacji jest zależnością docelową. Każdy obiekt docelowy wymaga osobnego profilu aprowizacji. Nie wiem jak określić PROVISIONING_PROFILE Dla zależności. Dostaję ten błąd, zgodnie z oczekiwaniami:
CodeSign error: code signing is required for product type 'App Extension' in SDK 'iOS 8.1'

StackOverflow i strona man dla xcodebuild nie wydają się nic wymyślać. Czy czy ktoś wie jak zbudować projekt z xcodebuild, który opiera się na dwóch profilach provisioning?

Author: Rey Gonzales, 2015-01-16

4 answers

Zbyt długo nad tym pracowałem. Byłem w drodze do łóżka, gdy odpowiedź mnie uderzyła:

W Ustawieniach budowania każdego z celów powinieneś ustawić $VARIABLE dla nazwy profilu. Aby to zrobić, wybierz "inne" na dole listy profili. Spowoduje to otwarcie pola tekstowego-wybierz inny $VARIABLE dla każdego celu-na przykład wybrałem {[3] } dla celu aplikacji kontenerów i $EXTENSION_PROFILE dla mojego celu rozszerzenia Today

Dodawanie zmiennej build...

To spowoduje w coś takiego:

Profile

Na koniec, gdy budujesz z xcodebuild, określ uuid profilu tak, jak to zrobiłeś z PROVISIONING_PROFILE:

xcodebuild ... APP_PROFILE="85b6f019-d5e5-43a7-9e8f-e3aaed64a7e4" EXTENSION_PROFILE="e50cf605-ab63-40ad-8329-2758359ea748"
[7]}budowanie z XCode wydaje się być nienaruszone - z tego co wiem XCode wybiera domyślne profile (tak jakby w trybie "automatycznym")

Teoretycznie może to również obsługiwać wiele rozszerzeń.

Działa dla mnie z XCode 6.3:)

 45
Author: Max Chuquimia,
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
2015-04-13 12:47:02

Rozwiązanie Bez Zmiennej

Istnieje opcja -exportSigningIdentity, która może Ci pomóc, ponieważ profile obsługi aplikacji i rozszerzenia / widżetu mogą być różne, ale tożsamości podpisywania aplikacji i rozszerzenia powinny być takie same.

Na przykład, zobaczysz, że,

  • TargetApp - > Build Settings - > "Code Signing Identity (id)" (Release)
  • TargetExtension - > Build Settings - > "Code Signing Identity (id)" (Release)

Są zasadniczo takie same string, powiedzmy, że ta tożsamość to "Code Signing Identity (id)" . Tak więc, aby zbudować & eksport archiwum, co można uruchomić, są po prostu,

Czyszczenie

xcodebuild clean -workspace HelloWorld.xcworkspace -scheme HelloWorld

Budynek

xcodebuild -workspace HelloWorld.xcworkspace -scheme HelloWorld archive -archivePath ~/output/HelloWorld.xcarchive

Eksport

xcodebuild -exportArchive -exportFormat ipa -archivePath ~/output/HelloWorld.xcarchive -exportPath "HelloWorld.ipa" -exportSigningIdentity "Code Signing Identity (id)"

Reference: xcodebuild documentation

 2
Author: Sazzad Hissain Khan,
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-02-20 07:38:23

Miesiące później... Znalazłem rozwiązanie, które nie obejmuje wartości ustawień w Xcode: wewnątrz sigh istnieje skrypt , który potrafi usunąć plik ipa z podanymi profilami. Dla mnie działa:

bash resign.sh Experiments-AdHocProd.ipa "iPhone Distribution: Company Pty Ltd" output.ipa -p com.company.experiments.AudioPlugin=Experiments-AdHocProd_com.company.experiments.AudioPlugin.mobileprovision -p com.company.experiments=Experiments-AdHocProd.mobileprovision --verbose

Gdzie:

  • Experiments-AdHocProd.ipa jest istniejącym ipa
  • com.company.experiments.AudioPlugin jest identyfikatorem pakietu rozszerzeń
  • Experiments-AdHocProd_com.company.experiments.AudioPlugin.mobileprovision jest profilem rozszerzenia
  • com.company.experiments jest głównym identyfikatorem pakietu aplikacji
  • Experiments-AdHocProd.mobileprovision jest główną aplikacją profil

Identyfikator pakietu każdego profilu musi być zgodny z identyfikatorem aplikacji, z którą zostanie podpisany.

Znalazłem coś, co jest Ważne, aby pamiętać jest to, że jeśli identyfikator pakietu ma symbol wieloznaczny (w moim przypadku Experiments-AdHocProd.mobileprovision ma), to profile z jawnymi identyfikatorami muszą być najpierw przekazane do -p.


Alternatywnie, możesz użyć sigh, Aby wykonać rezygnację. Niestety, sigh --help nie mówi nic o rezygnacji z plików binarnych z rozszerzeniami, jednak sigh resign --help tak.

 1
Author: Max Chuquimia,
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-05-13 00:24:38

W języku Swift, Framework plików Pod będzie pakowany osobno. Następujące kroki rozwiązały problem.

 1. Select pods 
 2. Targets
 3. General
 4. Edit bundle id
 5. Build Settings
 6. Code Signing
 7. Provisioning profile -> select the valid profile
 8. Code Signing Identity -> Select the respective identity from
    profile.

Powtórz to samo dla wszystkich celów.

Jestem w stanie wygenerować build.

 0
Author: Pebby,
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-04 12:40:47