Xcode 6 - Jak wybrać certyfikat podpisywania / profil aprowizacji do dystrybucji ad-hoc?


143

Do dystrybucji aplikacji wśród naszych testerów używamy Xcode, co robimy w następujący sposób:

  • Aplikacja archiwum
  • Dystrybucja dla Ad-Hoc
  • Wybierz profil informacyjny
  • Zapisz plik .ipa w folderze

Ale dzięki Xcode 6 ten przepływ pracy został nieco zmieniony. Nadal mogę wybrać opcję dystrybucji Ad-Hoc, ale nie mogę wybrać żądanego profilu informacyjnego. Nie daje nam to żadnej kontroli nad tym, który certyfikat podpisywania jest używany i konfiguracją profilu aprowizacji (używamy powiadomień push).

Domyślnie iPhone distributionużywana jest tożsamość podpisu i XC Ad Hocgenerowany jest pewien rodzaj profilu informacyjnego, który można zobaczyć na poniższej ilustracji: Eksport IPA Kliknięcie strzałki obok profilu informacyjnego powoduje otwarcie folderu z profilami udostępniania.

Więc moje pytanie brzmi:

Czy istnieje sposób w Xcode 6, aby wybrać profil aprowizacji używany z dystrybucją ad hoc?

Dzięki!


Czy ktoś wie, czy to zostało naprawione? Czy istnieje możliwość dystrybucji kompilacji do użytkowników iOS 7 w celu przetestowania powiadomień push?
haupman

używając wersji Xcode 6 GM, ten sam problem ...
Chris Chen

Więc nadal nie mamy na to dobrego rozwiązania? poniższe odpowiedzi nie działają dla mnie. Czy możemy użyć profilu aprowizacji XC? Nie chcę tracić tygodnia czekając na recenzję jabłka. Dzięki
Miles M.

2
Miałem ten problem dzisiaj i wygląda na to, że Xcode używa tylko profili dystrybucji, które używają wszystkich urządzeń zarejestrowanych online.
HackingOtter

1
Poważnie? Nie możemy wybrać pliku konfiguracyjnego? Wierzę, że Yossarian żyje.
ajbraus

Odpowiedzi:


52

Miałem ten sam problem, rozwiązany za pomocą skryptu narzędziowego "xcodebuild" wiersza poleceń, który jest preinstalowany z Xcode 6 (nie trzeba było ponownie instalować Xcode 5).

http://www.thecave.com/2014/09/16/using-xcodebuild-to-export-a-ipa-from-an-archive/

Skrypt w terminalu:

xcodebuild -exportArchive -archivePath $projectname.xcarchive -exportPath $projectname -exportFormat ipa -exportProvisioningProfile 'Provisioning Profile Name'

1
to działa dla mnie! inne odpowiedzi xcodebuildnie miały -exportProvisioningProfileprzełącznika.
bunnyhero

6
Pamiętaj, że nie będzie to działać poprawnie, jeśli Twoja aplikacja korzysta z jakichkolwiek rozszerzeń, wbudowanych struktur lub bibliotek.
clarkcox3

4
To mi pomogło. dzięki! Dlatego Apple aktualizuje XCode, aby generować kiepskie profile XC Prov, ale zapomina o XCodeBuild. Tym razem po prostu nam się poszczęściło. O! Jak Apple sprawia, że ​​cierpimy!
kamyFC,

1
Ustawiam to jako zaakceptowaną odpowiedź. Odpowiedź może nie działać we wszystkich przypadkach, ale z pewnymi modyfikacjami można użyć xcodebuild do rozwiązania tego problemu (to właśnie robimy na naszym serwerze CI).
Bezprawny

1
Żałuję, że nie nauczyłem się 3 godziny wcześniej, że xcodebuild może teraz eksportować również do formatu ipa! Zmarnowałem tyle czasu, próbując zmusić xcrun do osadzenia danego profilu informacyjnego, ale to po prostu nie zadziała na Xcode 6. xcodebuild tak! Dziękuję Ci.
Oscar Hierro

31

Miałem podobny problem podczas przesyłania do App Store. Utworzyłem archiwum, a następnie kliknąłem „Prześlij” i Xcode chciał automatycznie podpisać przy użyciu domyślnego profilu aprowizacji „XC com. *” Zamiast jawnego profilu, który już miał.

Aby to naprawić, po prostu ponownie wygenerowałem profil w portalu Apple Developer Portal:

1) Wejdź na developer.apple.com i znajdź dystrybucyjny profil informacyjny, którego chcesz użyć.
2) Wybierz go, kliknij „Edytuj”, zmień nazwę profilu i kliknij „Generuj”.
3) Pobierz profil informacyjny na pulpit i przeciągnij go na ikonę Xcode 6.
4) Uruchom ponownie Xcode 6.
5) Otwórz okno organizatora i kliknij „Prześlij” w utworzonym archiwum. Xcode automatycznie wybierze Twój jawny profil zamiast ogólnego.


Cześć, czy jest jakieś oficjalne oświadczenie dotyczące tej zmiany?
szczery

Nie żebym o tym wiedział. Próbowałem porównać stare i nowe profile w edytorze tekstu, aby sprawdzić, czy mogę zauważyć zmiany w formacie, ale nie zauważyłem nic znaczącego
GingerBreadMane

2
Byłem sceptyczny, ale to zadziałało. Właśnie przełączyłem się na Xcode 6 i próbowałem
wygenerować

Do tej pory korzystałem z profilu aprowizacji deweloperskiej. Czy to nadal działa, czy muszę utworzyć profil dystrybucji?
Bezprawny,

Tak Bez legalności, aby wyeksportować kompilację, musisz utworzyć profil dystrybucji. Nadal możesz używać profilu deweloperskiego do debugowania, gdy urządzenie jest podłączone do komputera Mac.
codeburn

27

Gdy jesteś w Organizatorze

  • Wybierz kompilację ad hoc i kliknij „Eksportuj…”
  • Wybierz „Zapisz do wdrożenia ad hoc” -> Dalej
  • Zamiast wybierać organizację z listy rozwijanej, wybierz „Użyj lokalnego zasobu do podpisywania” -> Wybierz
  • Wyeksportuj i zapisz .ipa jak poprzednio.

Oczywiście musisz wygenerować, pobrać i zainstalować profil aprowizacji ad hoc.


5
Rozwiązałem problem dzięki tej odpowiedzi i tej odpowiedzi . Profil aprowizacji musi być połączony z jawnym identyfikatorem aplikacji, który używa tego samego identyfikatora pakietu co Twoja aplikacja. Identyfikator aplikacji z symbolem wieloznacznym nie będzie działać. Następnie podczas eksportowania aplikacji należy wybrać opcję „Użyj lokalnego zasobu do podpisywania”.
Sarah Elan

@SarahElan połącz obie odpowiedzi i napisz nową ... dzięki
YaBoiSandeep

Moim zdaniem i biorąc pod uwagę moje doświadczenie, myślę, że to najlepsza odpowiedź. Dzięki.
Basem Saadawy

17

Wygląda na to, że ostatnio wygenerowany profil aprowizacji wygrywa teraz. Możesz więc po prostu ponownie wygenerować żądany profil i pobrać go, a Xcode go użyje.

Nieco lepsze podejście: ustaw żądany profil Prov w celu i użyj wiersza poleceń, aby zbudować swój ipa, to też działa.

Oto skrypt, którego używam:

#!/bin/sh

# Current as working as of 2014/09/22
# Xcode 6

OUTPUTDIR="$HOME/build"
APPNAME="your-app"
SCHEME="your-app"
APP_WORKSPACE="$HOME/Path/To/your-app.xcworkspace"

rm "$OUTPUTDIR/$APPNAME.ipa" #deletes previous ipa
xcodebuild -workspace "$APP_WORKSPACE" -scheme "$SCHEME" archive -archivePath "$OUTPUTDIR/$APPNAME.xcarchive"
xcodebuild -exportArchive -exportFormat ipa -archivePath "$OUTPUTDIR/$APPNAME.xcarchive" -exportPath "$OUTPUTDIR/$APPNAME.ipa" 

i moje ustawienia:

Ustawienia Xcode


Czy jest jakiś łatwiejszy sposób?
Timur Bernikovich

Myślę, że to dlatego, że MacOS 10.0. jest nadal w wersji beta.
Timur Bernikovich

1
Problem z używaniem profili XC Ad Hoc polega na tym, że zawsze zawierają one wszystkie urządzenia - eliminuje możliwość wyłączenia niektórych urządzeń, co można zrobić z profilami ręcznymi.
Jonny

Profil XC Ad Hoc to tylko przykład. Możesz użyć dowolnego profilu.
Thorsten

Powinieneś usunąć rozszerzenie „.ipa” z argumentu -exportPath, ponieważ zostało już dodane automatycznie przez xcodebuild.
Oscar Hierro

8

Nie mogłem też tego rozgryźć - zostałem przez to pokonany podczas przesyłania do AppStore, gdzie domyślnie był to profil wieloznaczny.

Skończyło się na tworzeniu w Xcode 6, a następnie wróciłem do okna Organizatora Xcode 5, aby przesłać zgłoszenie. W ten sposób poprosi Cię o wybranie profilu do podpisania.


To jest obejście, które robię. Ale naprawdę chcę się teraz pozbyć Xcode 5. Myślę teraz o użyciu xcrun i wiersza poleceń.
Bezprawny,

Wypróbowałem wszystkie sugerowane rozwiązania, które znalazłem, ale to jedyne, które faktycznie działa.
HunTer DRF

8

W Xcode 6 (co najmniej 6.1, którego używam teraz), kiedy robisz eksport ad hoc, xcode 6 automatycznie skanuje, jeśli istnieje jakikolwiek profil aprowizacji zawierający wszystkie urządzenia zarejestrowane na koncie programisty i jednocześnie pasuje do identyfikatora pakietu . Jeśli nie, użyje profilu prowizyjnego XC. Dlatego jeśli chcesz użyć własnego profilu, na przykład do celów powiadomień push, będziesz musiał wybrać wszystkie urządzenia w swoim profilu w portalu dla programistów Apple. Myślę, że to jest powód, dla którego niektórzy ludzie odtworzyliby profil, a inni nie.

btw, użyj skryptu może eksportować i przesyłać do testflight, ale urządzenie po prostu nie może go pobrać. prawdopodobnie gdzieś się pomyliłem. jeśli ktoś wie, dlaczego tak jest, daj mi znać. tks


Dzięki! To załatwiło sprawę dla mnie. Zmieniłem profil, aby uwzględnić wszystkie urządzenia, ponownie zarchiwizowałem aplikację i altówkę, użyłem odpowiedniego profilu.
Erik Villegas,

To jest dokładnie to i brzmi to dla mnie jak błąd lub że teraz, gdy Apple wprowadza TestFlight do dystrybucji wersji beta, dystrybucja AdHoc nie zyskała odpowiedniej uwagi. To, co mi się przydarzyło, było właśnie tym, co opisuje @AlexHsieh; Utworzyłem swój profil obsługi administracyjnej, tak jak zawsze wcześniej, wybrałem tylko podzbiór wszystkich zarejestrowanych urządzeń, a kiedy próbowałem wygenerować IPA, Xcode nie mógł znaleźć żadnego prawidłowego profilu obsługi administracyjnej i próbowałem użyć tego automatycznie wygenerowanego profilu XC (który również zawiodła w moim przypadku). Rozwiązaniem było dodanie wszystkich moich zarejestrowanych urządzeń do profilu informacyjnego.
jjramos,

7

To zadziałało dla mnie:

  1. kliknij „Wyświetl konta…” w oknie „..wybierz zespół programistów…”.
  2. kliknij „Wyświetl szczegóły” i znajdź profil obsługi administracyjnej XC Ad Hoc.
  3. kliknij prawym przyciskiem myszy ten profil i wybierz „Pokaż w Finderze”.
  4. usunąć wybrany profil.
  5. wróć do okna dialogowego w kroku 1.
  6. kliknij „Wybierz”.
  7. kliknij strzałkę obok profilu informacyjnego, aby otworzyć katalog profili informacyjnych.
  8. usuń ponownie profil ogólny, jak w kroku 4.
  9. kliknij przycisk „Poprzedni” w oknie dialogowym „Wyślij [nazwa aplikacji] do Apple:”.
  10. wybierz ponownie „Zapisz do wdrożenia ad hoc”
  11. kliknij ponownie przycisk „wybierz”.

teraz powinieneś zobaczyć właściwą nazwę profilu informacyjnego.


Nie próbowałem pierwszego. Ale ten zadziałał dla mnie. Dzięki. =]
Glauco Neves

5
Nie działa dla mnie. Nawet po usunięciu profili w krokach 4 i 8 profile zostaną odtworzone i automatycznie wybrane ponownie w kroku 11.
Chun

1
Dla mnie nie działa, ponieważ za każdym razem, gdy muszę kliknąć wybierz konto (mam wiele kont do dostarczania aplikacji do moich klientów), odtwarzany jest profil XC Generated. PITA firmy Apple.
wuf810,

Dodam, że przed wykonaniem tych kroków w XCode 6 należy usunąć profile obsługi administracyjnej XC: * z konta programisty Apple. Po kroku 4 wróciłem do okna dialogowego Wyświetl szczegóły i kliknąłem przycisk odświeżania, aby upewnić się, że tych profili XC: * już tam nie ma. Skorzystaj także z ustawień kompilacji Thorstena, aby upewnić się, że wybrałeś właściwy profil. Pracował dla mnie dwukrotnie.
Android Noob

Miałem ten sam problem, co @Chun i (@) wuf810. Te cholerne urządzenia mobilne są wciąż odtwarzane. To, co zrobiłem, to pozostawienie otwartego okna katalogu „Provisioning Profiles” i kontynuowanie wykonywania kroków od (@) user3382891 - usuwanie rekordów .mobileprovision tak szybko, jak były odtwarzane. Ostatecznie Xcode wybrał mój prawidłowy profil obsługi. Teraz przechodzę do następnego problemu ...
kris

6

Mam obejście tego problemu, które działa dla mnie.

Mam zainstalowane Xcode 6 i Xcode 5.1.1, Xcode 6 jest w aplikacjach, a Xcode 5.1.1 w innym katalogu. Kiedy chcę zrobić kompilację, używam Xcode 6 do tworzenia archiwum. Ale możesz również zobaczyć utworzone archiwum w Xcode 5.1.1, więc używam Xcode 5.1.1 do dystrybucji Ad Hoc .ipa przy użyciu profilu aprowizacji, którego chcę użyć. Więc skompiluj przy użyciu Xcode 6, ale rozpowszechniaj za pomocą Xcode 5.1.1.


Nie mogę w ten sposób przesłać kompilacji do lotu testowego.
hardik hadwani

Jeśli używasz tego samego profilu aprowizacji do tworzenia i dystrybucji, powinieneś móc przesłać swoją kompilację, aby w ten sposób przetestować lot. Dokładnie sprawdź, czy profil informacyjny, którego używasz do tworzenia, jest taki sam, jak ten, którego używasz do dystrybucji.
Adam Freeman,


3

Odpowiedź od @MrPatol nie działa dla mnie. Mój scenariusz roboczy dla Xcode 6.3.2

W Centrum członkowskim -> Profile aprowizacji iOS

  • Usuń profil informacyjny, który był ustawiony domyślnie podczas próby zbudowania aplikacji (np. „XC ...”). Utwórz profil aprowizacji ad hoc (nie produkcyjny) o krótkiej nazwie.

W narzędziu konfiguracyjnym iPhone'a -> Profile obsługi administracyjnej

  • Usuń ten sam profil informacyjny (np. „XC ...”)

W Xcode -> Organizator

  • Wybierz kompilację ad hoc i kliknij „Eksportuj…” Wybierz „Zapisz do wdrożenia ad hoc” -> Dalej
  • Wybierz organizację z listy rozwijanej
  • Sprawdź, czy nowy profil udostępniania ad hoc został wybrany automatycznie
  • Wyeksportuj i zapisz .ipa jak poprzednio.

2

Oto dwa kluczowe punkty, które rozwiązały problem.

  • Podczas generowania profilu aprowizacji należy go połączyć z jawnym identyfikatorem aplikacji, który używa tego samego identyfikatora pakietu, co Twoja aplikacja. Identyfikator aplikacji z symbolem wieloznacznym nie będzie działać.
  • Podczas eksportowania aplikacji do wdrożenia ad hoc wybierz z listy rozwijanej Użyj lokalnego zasobu do podpisywania i kliknij Wybierz.

Xcode znajdzie następnie prawidłowy profil aprowizacji, dopasowując identyfikator aplikacji do identyfikatora pakietu aplikacji.


1

W rzeczywistości musisz utworzyć nowy profil dystrybucji, specyficzny dla wdrożenia ad hoc. Można to znaleźć w klasycznym centrum członkowskim, ale jest to nowy typ certyfikatu.

Następnie możesz wybrać, które urządzenia mogą być używane do testowania aplikacji, tak jak w przypadku profilu programisty.

Nowo utworzony certyfikat będzie dostępny po wyeksportowaniu paczki z Organizatora w zwykły sposób.

Alternatywnie możesz skorzystać z rozwiązania TestFlight dostarczonego przez firmę Apple z systemem iOS 8, aby umożliwić użytkownikowi dostęp do wersji wstępnej.

wprowadź opis obrazu tutaj


Tak, ale jak zauważyłeś, oznacza to tylko iOS8. Apple było szczególnie głupie, zmuszając użytkowników Testflight tylko do iOS8. Przez jakiś czas największą zainstalowaną bazą będzie nadal iOS7, więc Apple powinno było na to pozwolić.
wuf810,

1

Miałem ten sam problem, w końcu rozwiązałem go regenerując profil, którego chciałem użyć w Xcode 6, w tym wszystkie urządzenia, które zarejestrowałem na moim koncie iOS Dev, robiąc to w ten sposób, po wybraniu eksportu pokazuje prawidłowy profil i ja może wykonać eksport Ad Hoc za pomocą Xcode 6 bez użycia skryptu. Mam nadzieję, że to pomoże.


1
To działa, ale tylko wtedy, gdy zgadzasz się z profilem aprowizacji zawierającym wszystkie urządzenia zarejestrowane na koncie dewelopera iOS. Aby użyć tylko podzbioru urządzeń w profilu aprowizacji, musiałem użyć tej techniki: stackoverflow.com/a/26296138/71262
Oran Dennison.

0

Utknąłem z tym przez jakiś czas, ale używam Crashlytics rozwiązałem to, kompiluj rozproszone przy użyciu wybranego profilu w ustawieniach kompilacji projektu Xcode.

mam nadzieję, że to komuś pomoże.


0

Prawie ten sam problem. Po utworzeniu archiwum do dystrybucji (Produkt> Archiwum) wyeksportuj archiwum (kliknij Eksportuj ...) i wybierz „Zapisz do wdrożenia w przedsiębiorstwie”; następnie „Dalej”. Następnie wybierasz domyślne ustawienie „Zespół deweloperski” (np. Nazwa organizacji) i klikasz „Wybierz”. Na koniec zostanie wyświetlony widok podsumowania, który zawiera również listę profili aprowizacji, które Xcode automatycznie znalazł (być może utworzony w locie) dla Ciebie. MUSI to być zły profil aprowizacji (zwykle profil aprowizacji z symbolem wieloznacznym, np. „XC: *”) i MOŻE się tak dziać, ponieważ w portalu dla programistów istnieje już profil informacyjny z symbolem wieloznacznym.

Użyłem do tego zgłoszenia do pomocy technicznej i otrzymałem tylko ten link z powrotem https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/ConfiguringPushNotifications/ConfiguringPushNotifications.html#//apple_ref/doc/uid/TP40012582 -CH32-SW1 . Niezbyt duża pomoc.

Odkryłem, że rozwiązanie MrPatol działa również w przypadku wdrażania w przedsiębiorstwie i rozwiązuje problem za nas. Najpierw zalogowałem się do portalu dla deweloperów i ręcznie utworzyłem profil aprowizacji, który pasuje do mojej aplikacji. Następnie pobrano i zainstalowano nowy ręcznie utworzony profil informacyjny.


0

W xcode 7 nie mogłem wybrać obsługi adhoc za pośrednictwem

Organizator -> Prześlij do App Store i Organizatora -> Zatwierdź

Ale mogłem wybrać przez Organizer -> Eksportuj

Edytowano:

Wgranie aplikacji po wyeksportowaniu z adhoc do sklepu z aplikacjami na potrzeby testFlight spowodowało inny omawiany tutaj problem . Tak więc rozwiązanie obu tych problemów jest jedno. Utwórz obsługę administracyjną AppStore, aby móc ją wybrać za pośrednictwem organizatora i wykorzystać testFlight, przesyłając do Appstore.


0
  1. Myślę, że to właściwy sposób na określenie opcji -exportOptionsPlist po Xcode 7. Wybierze ona odpowiednie pliki obsługi, takie jak w eksporcie GUI, bez względu na to, co określisz w ustawieniach projektu.

xcodebuild -exportArchive -archivePath $ Archive_Path -exportPath $ LOCAL_PACKAGE_DIR -exportOptionsPlist $ Export_Plist_Path

plik optionPlist jest taki,

<dict>
  <key>teamID</key>
        <string>MYTEAMID123</string>
        <key> teamID </key>
        <string>app-store</string>
        <key>uploadSymbols</key>
        <true/>
</dict>


<plist>

app-store, enterprise, ad-hoc, development to alternatywa

  1. Ale po powyższym możesz napotkać inny błąd.

Error Domain = IDEDistributionErrorDomain Code = 14 "Nie znaleziono odpowiednich urządzeń." UserInfo = {NSLocalizedDescription = Nie znaleziono odpowiednich urządzeń.}

To problem rubinowy. Wypróbuj ten skrypt powłoki,xcbuild-safe.sh

xcbuild-safe.sh xxxxNormalOptionsInXcodebuild bla...
  1. Poczekaj chwilę, pojawia się kolejny dziwny błąd.

xcbuild-safe.sh: wiersz 62: shell_session_update: nie znaleziono polecenia

Co do diabła shell_session_update? Pozwól nam to obejść. Po prostu zdefiniuj funkcję przed prawdziwym cmd xcodebuild, a mianowicie w wierszu 60 lub 61.

function shell_session_update() { :; }

-4

Odpowiadając na Twoje konkretne pytanie, nie ma możliwości wybrania profilu informacyjnego, który ma być używany. Co próbujesz zrobić? (tj. na co zezwala profil, który chcesz wybrać, a nie generowany automatycznie?)


1
Na przykład posiadanie określonej listy identyfikatorów UDID dostępnych dla tej aplikacji. Tworzę aplikacje dla wielu klientów i nie mogę ich pomylić. Oczywiście, istnieją sposoby na obejście tego problemu, ale wszystkie są znacznie bardziej skomplikowane niż zwykłe wybranie profilu obsługi administracyjnej, którego chcę użyć
Lope

Z pewnością istnieje sposób na wybranie profilu informacyjnego, który ma być używany. stackoverflow.com/a/26296138/71262
Oran Dennison

1
@Lope Jeśli klient ma zainstalowaną jedną z Twoich aplikacji i powiązany z nią profil, może zainstalować dowolną z Twoich aplikacji (nawet jeśli profile innych aplikacji nie zawierają ich urządzenia). To zamieszanie jest jednym z głównych powodów, dla których chcemy odciągnąć programistów od ręcznego określania swoich profili i list urządzeń. (tj. wiele osób wydaje się polegać na fałszywym poczuciu bezpieczeństwa jako głównym powodem chęci ręcznego określania profili)
clarkcox3

@ clarkcox3 cóż, to jeszcze gorzej, chcę, aby klient nie mógł widzieć innych aplikacji
Lope,

@Lope: Nie znam sposobu na dystrybucję plików ad hoc ipa, które udostępniłoby wszystkie Twoje aplikacje testerom. Innymi słowy, musisz wyraźnie udostępnić swoim testerom aplikację, którą mają przetestować, prawda? Ta fizyczna separacja uniemożliwiłaby im korzystanie z innych aplikacji. (To nie tak, że mogą wejść do sklepu i pobrać je wszystkie, tak?) Czy jest inny sposób, w jaki testerzy mogliby uzyskać dostęp do wszystkich aplikacji bez Twojej zgody?
leanne
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.