Xcode 6 - Come scegliere il certificato di firma / profilo di provisioning per la distribuzione ad hoc?


143

Per distribuire l'app ai nostri tester utilizziamo Xcode, che facciamo utilizzando il seguente processo:

  • Applicazione di archivio
  • Distribuisci per Ad-Hoc
  • Scegli il profilo di provisioning
  • Salvare il .ipa in una cartella

Ma con Xcode 6 , questo flusso di lavoro è stato leggermente modificato. Posso ancora selezionare l'opzione di distribuzione Ad-Hoc, ma non riesco a selezionare il profilo di provisioning desiderato. Ciò non ci consente di controllare quale certificato di firma viene utilizzato e la configurazione del profilo di provisioning (utilizziamo le notifiche push).

Per impostazione predefinita iPhone distribution, viene utilizzata l'identità della firma e XC Ad Hocviene generato un tipo di profilo di provisioning, che può essere visualizzato nell'immagine seguente: Esportazione di IPA Se si fa clic sulla freccia accanto al profilo di provisioning, si apre la cartella con i profili di provisioning.

Quindi la mia domanda è:

Esiste un modo in Xcode 6 per selezionare il profilo di provisioning utilizzato con la distribuzione ad hoc?

Grazie!


Qualcuno sa se questo è stato risolto? Esiste un modo per distribuire una build agli utenti di iOS 7 per testare le notifiche push?
haupman,

utilizzando la versione GM di Xcode 6, stesso problema ...
Chris Chen,

Quindi non abbiamo ancora una buona soluzione per questo? le risposte sotto non funzionano per me. Possiamo usare il profilo di provisioning XC ?? Non voglio perdere una settimana in attesa della revisione della mela. Grazie
Miles M.

2
Ho avuto questo problema oggi e sembra che Xcode utilizzi solo profili di distribuzione che utilizzano tutti i dispositivi registrati online.
Hacking:

1
Sul serio? Non è possibile selezionare il file di provisioning? Credo che le vite yossariane.
Ajbraus,

Risposte:


52

Stavo affrontando lo stesso problema, risolto utilizzando lo script dello strumento da riga di comando "xcodebuild", che è preinstallato con Xcode 6 (non è stato necessario reinstallare Xcode 5).

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

Script nel terminale:

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

1
questo funziona per me! le altre risposte che utilizzavano xcodebuildnon avevano l' -exportProvisioningProfileopzione.
bunnyhero,

6
Nota che questo non funzionerà correttamente se la tua app utilizza estensioni, framework incorporati o librerie.
clarkcox3,

4
Questo mi ha aiutato. Grazie! Quindi Apple aggiorna XCode per generare profili di Prov XC scadenti ma dimentica XCodeBuild. Siamo stati fortunati questa volta. Oh! Come Apple ci fa soffrire!
kamyFC,

1
Sto impostando questa come risposta accettata. La risposta potrebbe non funzionare in tutti i casi, ma con alcune modifiche è possibile utilizzare xcodebuild per risolvere questo problema (questo è ciò che stiamo facendo sul nostro server CI).
Legoless,

1
Vorrei aver imparato 3 ore prima che xcodebuild ora può anche esportare in formato ipa! Ho perso molto tempo a cercare di ottenere xcrun per incorporare un determinato profilo di provisioning, ma non funzionerà su Xcode 6. xcodebuild lo fa! Grazie.
Oscar Hierro,

31

Ho avuto un problema simile durante l'invio all'App Store. Ho creato un archivio, quindi ho fatto clic su "Invia" e Xcode voleva firmare automaticamente con il profilo di provisioning jolly predefinito "XC com. *" Invece del profilo esplicito che già aveva.

Per risolvere questo problema, ho appena rigenerato il profilo sul Portale per sviluppatori Apple:

1) Vai su developer.apple.com e trova il profilo di provisioning di distribuzione che desideri utilizzare.
2) Selezionare, fare clic su "Modifica", rinominare il profilo e fare clic su "Genera".
3) Scarica il profilo di provisioning sul desktop e trascinalo sull'icona Xcode 6.
4) Riavvia Xcode 6.
5) Apri la finestra dell'organizzatore e fai clic su "Invia" nell'archivio che hai creato. Xcode sceglierà automaticamente il tuo profilo esplicito anziché quello generico.


Ciao, c'è qualche dichiarazione ufficiale su questo cambiamento?
franco,

Non che io sappia. Ho provato a confrontare i vecchi e nuovi profili in un editor di testo per vedere se potevo individuare i cambiamenti nel formato, ma non ho notato nulla di significativo
GingerBreadMane,

2
Ero scettico ma questo ha funzionato per me. Sono appena passato a Xcode 6 e ho provato a produrre il mio primo build ad hoc
Newtz,

Fino ad ora ho usato il profilo di provisioning di sviluppo. È ancora utilizzabile o devo creare un profilo di distribuzione?
Legoless,

Sì, senza legalità, dovrai esportare un profilo di distribuzione per esportare una build. Puoi comunque utilizzare un profilo di sviluppo per eseguire il debug quando il dispositivo è collegato al Mac.
codeburn

27

Una volta che sei in Organizer

  • Seleziona la build ad-hoc e fai clic su "Esporta ...."
  • Selezionare "Salva per distribuzione ad hoc" -> Avanti
  • Invece di selezionare un'organizzazione dal menu a discesa selezionare "Usa risorsa firma locale" -> Scegli
  • Esporta e salva .ipa come prima.

Naturalmente è necessario aver generato, scaricato e installato il profilo di provisioning ad hoc.


5
Risolto il problema grazie a questa risposta e a questa risposta . Il profilo di provisioning deve essere collegato a un ID app esplicito, che utilizza lo stesso identificativo di bundle dell'app. Un ID app jolly non funzionerà. È quindi necessario selezionare "Usa risorsa firma locale" quando si esporta l'app.
Sarah Elan,

@SarahElan combina le due risposte e scrivine una nuova ... grazie
YaBoiSandeep

Secondo me e riguardo alla mia esperienza, penso che questa sia la risposta migliore. Grazie.
Basem Saadawy,

17

Sembra che l'ultimo profilo di provisioning generato vince proprio ora. Quindi puoi semplicemente rigenerare il profilo che desideri e scaricarlo e Xcode lo userà.

Un approccio leggermente migliore: imposta il profilo prov desiderato nel tuo target e usa la riga di comando per costruire il tuo ipa, che funziona anche.

Ecco lo script che sto usando:

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

e le mie impostazioni:

Impostazioni Xcode


C'è un modo più semplice?
Timur Bernikovich,

Penso che sia perché MacOS 10.0. è ancora in beta.
Timur Bernikovich,

1
Il problema con l'utilizzo dei profili XC Ad Hoc è che includono sempre tutti i dispositivi - toglie l'opzione per disabilitare alcuni dispositivi che è possibile fare con i profili manuali.
Jonny,

Il profilo XC Ad Hoc è solo un esempio. Puoi usare qualsiasi profilo ti piaccia.
Thorsten,

È necessario rimuovere l'estensione '.ipa' dall'argomento in -exportPath, poiché è già stato aggiunto automaticamente da xcodebuild.
Oscar Hierro,

8

Nemmeno io sono riuscito a capirlo: sono stato morso da esso durante l'invio all'AppStore, dove per impostazione predefinita era un profilo jolly.

Ho finito per compilare Xcode 6, quindi tornare alla finestra Organizer di Xcode 5 per l'invio. In questo modo ti verrà chiesto di scegliere un profilo con cui accedere.


Questa è la soluzione che sto facendo. Ma voglio davvero sbarazzarmi di Xcode 5 ora. Sto pensando di usare xcrun e la riga di comando ora.
Legoless,

Ho provato tutte le soluzioni suggerite che ho trovato, ma questa è l'unica che funziona davvero.
HunTer DRF,

8

In Xcode 6 (almeno 6.1 che sto usando ora) quando si esegue l'esportazione per ad hoc, xcode 6 eseguirà automaticamente la scansione se è presente un profilo di provisioning che contiene tutti i dispositivi registrati nell'account sviluppatore e allo stesso tempo corrisponde all'ID del bundle . In caso contrario, utilizzerà il profilo di provisioning XC. Pertanto, se si desidera utilizzare il proprio profilo, ad esempio, ai fini della notifica push, sarà necessario selezionare tutti i dispositivi nel proprio profilo sul portale per sviluppatori Apple. Immagino che sia il motivo per cui alcune persone ricreano il profilo funzionerebbe e altre no.

tra l'altro, usare lo script può esportare e caricare su testflight, ma il dispositivo non può scaricarlo. probabilmente da qualche parte ho sbagliato. se qualcuno sa perché, fammi sapere. tks


Grazie! Questo ha fatto il trucco per me. Ho modificato il profilo per includere tutti i dispositivi, ri-archiviato l'app e viola, usando il profilo giusto.
Erik Villegas,

Questo è esattamente e mi sembra un bug o che ora che Apple introduce TestFlight per distribuire le versioni beta, la distribuzione AdHoc non ha ricevuto l'attenzione appropriata. Quello che mi è successo è stato proprio quello che descrive @AlexHsieh; Ho creato il mio profilo di provisioning come ho sempre fatto prima, selezionato solo un sottoinsieme di tutti i miei dispositivi registrati e quando ho provato a generare l'IPA, Xcode non è riuscito a trovare alcun profilo di provisioning valido e ho provato a utilizzare questo XC generato automaticamente (che anche fallito nel mio caso). La correzione era aggiungere tutti i miei dispositivi registrati al profilo di provisioning.
jjramos,

7

Questo ha funzionato per me:

  1. fai clic su "Visualizza account .." nella finestra di dialogo "..seleziona un team di sviluppo ...".
  2. fai clic su "Visualizza dettagli .." e trova il profilo di provisioning XC Ad Hoc.
  3. fai clic con il tasto destro su quel profilo e scegli "Mostra nel Finder".
  4. elimina il profilo selezionato.
  5. tornare alla finestra di dialogo al passaggio 1.
  6. fai clic su "Scegli".
  7. fare clic sulla freccia accanto al profilo di provisioning per aprire la directory dei profili di provisioning.
  8. elimina di nuovo il profilo generico come nel passaggio 4.
  9. fai clic sul pulsante "Precedente" dalla finestra di dialogo "Invia [nome applicazione] ad Apple:".
  10. seleziona di nuovo "Salva per distribuzione ad hoc"
  11. fai di nuovo clic sul pulsante "scegli".

ora dovresti vedere il nome del profilo di provisioning corretto.


Non ho provato il primo. Ma questo ha funzionato per me. Grazie. =]
Glauco Neves,

5
Non ha funzionato per me. Anche dopo aver eliminato i profili nei passaggi 4 e 8, i profili vengono ricreati e automaticamente selezionati di nuovo nel passaggio 11.
Chun

1
Non funziona per me perché ogni volta che devo fare clic su scegli un account (ho più account per la consegna di app ai miei clienti) viene ricreato il profilo XC Generated. PITA di Apple.
wuf810,

Vorrei aggiungere che prima di seguire questi passaggi con XCode 6, è necessario eliminare i profili di provisioning XC: * dal proprio account sviluppatore Apple. Dopo il passaggio 4, torno alla finestra di dialogo Visualizza dettagli e premo il pulsante di aggiornamento per assicurarmi che quei profili XC: * non siano più presenti. Inoltre, utilizza le impostazioni di creazione di Thorsten per assicurarti di selezionare il profilo corretto. Ha funzionato per me due volte.
Android Noob,

Ho avuto lo stesso problema di @Chun e (@) wuf810. Quelle maledette disposizioni mobili continuano a essere ricreate. Quello che ho fatto è stato mantenere aperta la finestra della directory "Profili di provisioning" e continuare a seguire i passaggi da (@) user3382891- eliminando i record .mobileprovision con la stessa velocità con cui venivano ricreati. Alla fine Xcode ha selezionato il mio profilo di provisioning corretto. Ora sto affrontando il prossimo problema ...
Kris

6

Ho una soluzione alternativa per questo che funziona per me.

Ho installato sia Xcode 6 che Xcode 5.1.1, Xcode 6 è in Applicazioni e Xcode 5.1.1 è in un'altra directory. Quando voglio fare una build, uso Xcode 6 per creare l'archivio. Ma puoi anche vedere l'Archivio creato in Xcode 5.1.1, quindi uso Xcode 5.1.1 per distribuire l'ip Hoc ad hoc usando il profilo di provisioning che voglio usare. Quindi costruisci usando Xcode 6 ma distribuiscilo usando Xcode 5.1.1.


non sono in grado di caricare build per testflight in questo modo.
Hardik Hadwani,

Se stai utilizzando lo stesso profilo di provisioning per la costruzione e la distribuzione, dovresti essere in grado di caricare la build per testare il volo in questo modo. Controlla che il profilo di provisioning che stai utilizzando per la costruzione sia uguale a quello che stai utilizzando per la distribuzione.
Adam Freeman,

4

L'uso delle risorse di firma locale durante l'esportazione ha risolto il problema per me:inserisci qui la descrizione dell'immagine


3

La risposta di @MrPatol non ha funzionato per me. Il mio scenario di lavoro per Xcode 6.3.2

Nel Centro membri -> Profili di provisioning iOS

  • Elimina il profilo di provisioning impostato per impostazione predefinita quando stavi cercando di creare l'app (ad esempio "XC ..."). Crea un profilo di provisioning ad hoc (non di produzione) con un nome breve.

In iPhone Configuration Utility -> Profili di provisioning

  • Elimina lo stesso profilo di provisioning (ad es. "XC ...")

In Xcode -> Organizer

  • Selezionare la build ad hoc e fare clic su "Esporta ...." Selezionare "Salva per distribuzione ad hoc" -> Avanti
  • Seleziona un'organizzazione dal menu a discesa
  • Verifica che il tuo nuovo profilo di provisioning ad hoc sia selezionato automaticamente
  • Esporta e salva .ipa come prima.

2

Ecco i due punti chiave che hanno risolto il problema per me.

  • Quando si genera il profilo di provisioning, è necessario che sia collegato a un ID app esplicito che utilizza lo stesso identificativo di bundle dell'app. Un ID app jolly non funzionerà.
  • Quando esporti l'app per la distribuzione ad-hoc, seleziona Usa risorsa firma locale nel menu a discesa e fai clic su Scegli.

Xcode troverà quindi il profilo di provisioning corretto abbinando l'ID app con l'identificatore del bundle dell'app.


1

In effetti, è necessario creare un nuovo profilo di distribuzione, specifico per la distribuzione ad hoc. Questo può essere trovato nel centro membri classico, ma è un nuovo tipo di certificato.

Puoi quindi selezionare quali dispositivi possono essere utilizzati per testare l'app come faresti con un profilo di sviluppatore.

E il certificato appena creato sarà disponibile quando esporti il ​​tuo pacchetto dall'Organizzatore nel solito modo.

In alternativa è possibile utilizzare la soluzione TestFlight fornita da Apple con iOS 8 per consentire all'utente di accedere al pre-rilascio.

inserisci qui la descrizione dell'immagine


Sì, ma come fai notare questo significa solo iOS8. Apple è stata particolarmente stupida costringendo gli utenti Testflight a iOS8. Per un bel po ', tuttavia, la base installata più grande sarà ancora iOS7, quindi Apple avrebbe dovuto consentirlo.
wuf810,

1

Ho avuto lo stesso problema, finalmente l'ho risolto rigenerando il profilo che volevo usare in Xcode 6 compresi tutti i dispositivi che ho registrato sul mio account Dev iOS, facendolo in questo modo, quando seleziono export mostra il profilo corretto e io può eseguire l'esportazione ad hoc con Xcode 6 senza utilizzare uno script. Spero che sia d'aiuto.


1
Funziona, ma solo se stai bene con il profilo di provisioning contenente tutti i dispositivi registrati con il tuo account di sviluppo iOS. Per utilizzare solo un sottoinsieme dei dispositivi nel profilo di provisioning ho dovuto utilizzare questa tecnica: stackoverflow.com/a/26296138/71262
Oran Dennison,

0

Sono rimasto bloccato per un po 'con questo, ma usando Crashlytics lo ho risolto, compilato distribuito usando il profilo selezionato nelle impostazioni di compilazione del tuo progetto Xcode.

spero che aiuti qualcuno.


0

Quasi lo stesso problema. Dopo aver creato un archivio per la distribuzione (Prodotto> Archivio), esporti l'archivio (fai clic su Esporta ...) e scegli "Salva per distribuzione aziendale"; quindi "Avanti". Quindi selezionare l'impostazione predefinita "Team di sviluppo" (ad esempio il nome dell'organizzazione) e fare clic su "Scegli". Alla fine ti verrà presentata una vista di riepilogo che elenca anche il profilo di provisioning che Xcode ha trovato automaticamente (forse creato al volo) per te. Potrebbe essere il profilo di provisioning errato (in genere un profilo di provisioning con caratteri jolly, come "XC: *") e potrebbe verificarsi perché esiste già un profilo di provisioning con caratteri jolly sul portale degli sviluppatori.

Ho usato un ticket di supporto per questo e ho ricevuto questo link solo https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/ConfiguringPushNotifications/ConfiguringPushNotifications.html#//le_ref/doc/uid/TP40012582 -CH32-SW1 . Non è davvero di grande aiuto.

Ho scoperto che la soluzione di Mr Patat funziona anche per l' implementazione aziendale e risolve il problema per noi. Ho prima effettuato l'accesso al portale per sviluppatori e ho creato manualmente un profilo di provisioning adatto alla mia app. Quindi scaricato e installato il nuovo profilo di provisioning creato manualmente.


0

In xcode 7, non sono riuscito a scegliere il provisioning ad hoc tramite

Organizer -> Carica su App Store e Organizer -> Convalida

Ma potrei scegliere tramite Organizer -> Esporta

Modificato:

Il caricamento dell'app dopo l'esportazione per adhoc nell'app store per testFlight ha causato un altro problema discusso qui . Quindi, la soluzione a entrambi questi problemi è una. Crea il provisioning di AppStore per poterlo selezionare tramite l'organizzatore e utilizzare testFlight caricando su appstore.


0
  1. Penso che sia un modo giusto per specificare un'opzione -exportOptionsPlist dopo Xcode 7. Sceglierà i file di provisioning corretti come nell'esportazione della GUI, indipendentemente da ciò che specifichi nelle impostazioni del progetto.

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

Il file optionPlist è così,

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


<plist>

lo sviluppo di app-store, enterprise, ad-hoc, è alternativo

  1. Ma potresti riscontrare un altro errore dopo sopra.

Dominio errore = IDEDistributionErrorDomain Code = 14 "Nessun dispositivo applicabile trovato." UserInfo = {NSLocalizedDescription = Nessun dispositivo applicabile trovato.}

È un problema rubino. Prova questo script di shell,xcbuild-safe.sh

xcbuild-safe.sh xxxxNormalOptionsInXcodebuild bla...
  1. Aspetta un momento, arriva un altro strano errore.

xcbuild-safe.sh: riga 62: shell_session_update: comando non trovato

Che diavolo è shell_session_update? Cerchiamo di aggirarlo. Basta definire una funzione prima del vero xcodebuild cmd, ovvero alla riga 60 o 61.

function shell_session_update() { :; }

-4

In risposta alla domanda specifica, no non è possibile selezionare il profilo di provisioning da utilizzare. Cosa stai tentando di fare? (es. cosa non consente il profilo che si desidera selezionare che quello generato automaticamente non lo fa?)


1
Ad esempio avere un elenco specifico di UDID disponibili per quell'applicazione. Sto sviluppando app per più client e non riesco a confonderle. Ci sono modi per aggirare questo, certo, ma tutti sono molto più complicati della semplice selezione del profilo di provisioning che voglio usare
Lope

Esiste sicuramente un modo per selezionare il profilo di provisioning da utilizzare. stackoverflow.com/a/26296138/71262
Oran Dennison,

1
@Lope Se un client ha installato una delle tue app e il profilo associato, può installare una qualsiasi delle tue app (anche se i profili delle altre app non contengono il loro dispositivo). Questa confusione è uno dei motivi principali per cui vogliamo allontanare gli sviluppatori dalla specifica manuale dei loro profili ed elenchi di dispositivi. (vale a dire che molte persone sembrano fare affidamento su un falso senso di sicurezza come motivo principale per voler specificare manualmente i profili)
clarkcox3,

@ clarkcox3 beh, peggio ancora, voglio impedire al client di potersi vedere le altre app
Lope

@Lope: non sono a conoscenza di un modo per distribuire file ipa ad hoc che renderebbe tutte le tue app disponibili per i tester. In altre parole, devi fornire esplicitamente ai tuoi tester l'app che vuoi che testino, giusto? Tale separazione fisica impedirebbe loro di utilizzare qualsiasi altra app. (Non è che possano andare nello store e prenderli tutti, sì?) Esiste un altro modo in cui i tester possono accedere a tutte le tue app senza il tuo permesso ???
leanne,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.