Come posso distribuire un'applicazione iPhone da Xcode a un dispositivo iPhone reale?


157

Come posso distribuire un'applicazione iPhone da Xcode a un dispositivo iPhone reale senza avere un certificato Apple da $ 99?


Vedi questa risposta a una domanda che ho posto in precedenza per un'ottima guida su come inserirla nel tuo iPhone con jailbreak.
Dan Walker,


2
Xcode 7 ha il provisioning gratuito ora, quindi non è necessario registrarsi per un account sviluppatore Apple per testare le app su un dispositivo reale. Vedi questa risposta per maggiori dettagli.
Suragch,

Risposte:


56

Sembra che l'applicazione non sia firmata. Scarica ldid da Cydia e poi usalo in questo modo:ldid -S /Applications/AccelerometerGraph.app/AccelerometerGraph

Assicurati anche che il binario sia contrassegnato come eseguibile: chmod +x /Applications/AccelerometerGraph.app/AccelerometerGraph


3
Sì, dovrai eseguire il jailbreak del dispositivo affinché questo metodo funzioni. (ovviamente)
esqew,

come si avvia il comando ldid -S ...? hai bisogno di una console SSH per questo? c'è un modo gratuito per ottenere un client SSH su un iPhone con jailbreak?
Dan Leahu,

tanderson: esiste un pacchetto ldid in Cydia e puoi compilarne uno per OS X
rpetrich

Credo che le sue domande siano come digitare e usare il comando, non come acquisire il pacchetto. @tanderson puoi passare a Open SSH (e quindi connettersi al telefono dal desktop) o a un Terminale all'interno dell'iPhone stesso. Entrambe le app sono download gratuiti da Cydia . Con SSH hai il vantaggio di poterlo utilizzare anche semplicemente per copiare la tua app sul telefono. Se lo fai molto, assicurati di controllare le altre risposte: puoi fare in modo che XCode ti faccia tutto il lavoro, ma è una procedura fastidiosa ingannarlo.
Cregox,

92

Ho usato un mix di due howtos: Jason e Alex . Con il secondo abbiamo il vantaggio di poter eseguire il debug. Coprirò principalmente entrambi di seguito (e semplificherò quello di alex):

Aggiornamento gennaio 2012: funziona ancora su SDK 4.2.1 e iOS 5.0.1 - Ho appena provato tutto su un nuovo computer e dispositivo!


1. Creare un certificato autofirmato

Patch il tuo iPhone SDK per consentire l'uso di questo certificato:

  1. Avvia Keychain Access.app. Senza elementi selezionati, dal menu Portachiavi selezionare Assistente certificato, quindi Crea un certificato.

    • Nome: sviluppatore iPhone
    • Tipo di certificato: firma del codice
    • Consentitemi di ignorare le impostazioni predefinite:
  2. Fai clic su Continua

    • Validità: 3650 giorni
  3. Fai clic su Continua

  4. Svuota il campo Indirizzo e - mail .

  5. Fai clic su Continua fino al completamento .

    Tu dovresti vedere "Questo certificato radice non è attendibile" . Questo è previsto.

  6. Imposta iPhone SDK per consentire l'utilizzo del certificato autofirmato:

    sudo /usr/bin/sed -i .bak 's/XCiPhoneOSCodeSignContext/XCCodeSignContext/' /Developer/Platforms/iPhoneOS.platform/Info.plist

    Se hai Xcode aperto, riavvialo per rendere effettive le modifiche.

E se sei su iOS 5, questo è tutto! Provalo ora! Potrebbe non consentire il debug, ma l'app sarà lì!

Sono stato molto sorpreso da questo perché, come dovresti sapere , non ho idea di cosa siano tutti quegli hacker! Tutto quello che ho fatto è stato migliorare un po 'quello che ho trovato altrove, come ho indicato.

Quindi sì, l' intero metodo non funziona più allo stesso modo e non potrei preoccuparmi di trovarne uno nuovo ... Tranne questo, che utilizza uno strumento chiamato Theos ma non sono riuscito a completare l'intero processo.

Infine, se è necessario disinstallarlo per qualsiasi motivo, controllare la fine di questo post. Nel mio caso, dovevo farlo perché non riuscivo a capire perché tutto il blu dell'intero metodo smettesse di funzionare, e non me ne potrebbe fregare più poiché abbiamo già la licenza tanto attesa. (Il numero di DUNS di Freaking richiede così tanto tempo ...)

.

.


.

.

.

2. Abilita gli Xcode per costruire sul dispositivo jailbroken

  1. Sul tuo iPhone jailbreak, installa l'app AppSync aggiungendo la fonte ** http://repo.hackyouriphone.org **

  2. Rimuovi i requisiti SDK per il segno di codice e le autorizzazioni (ti amo sed !):

    sudo /usr/bin/sed -i .bak '/_REQUIRED/N;s/YES/NO/' /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/SDKSettings.plist
  3. Prestare attenzione allaiPhoneOS5.0.sdkparte. Se, ad esempio, stai utilizzando iOS 4.2 SDK, sostituiscilo di conseguenza:

    sudo /usr/bin/sed -i .bak '/_REQUIRED/N;s/YES/NO/' /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/SDKSettings.plist
  4. Concludere la rimozione dei requisiti mediante l'applicazione di patch a Xcode. Questo significa editing binario:

    cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/
    dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255
    printf "\xc3\x26\x00\x00" >> working
    /bin/mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original
    /bin/mv working iPhoneOS\ Build\ System\ Support
    chmod a+x iPhoneOS\ Build\ System\ Support

    Se hai Xcode aperto, riavvialo per rendere effettiva questa modifica (e l'ultima).

  5. Apri "Progetto> Modifica impostazioni progetto" (dal menu). Fai clic sulla scheda "Crea" . Trova "Identità firma codice" e il relativo figlio "Qualsiasi dispositivo iPhoneOS" nell'elenco e imposta entrambi sulla voce "Non firmare codice" :

    testo alternativo

    Dopo questo, sentiti libero di annullare il passaggio 3. Almeno nel mio caso è andato tutto bene.

  6. Impostare Xcode per firmare il codice con il nostro certificato autofirmato personalizzato (il primo how-to). Probabilmente questo passaggio può essere ignorato se non si desidera essere in grado di eseguire il debug:

    mkdir /Developer/iphoneentitlements401
    cd /Developer/iphoneentitlements401
    curl -O http://www.alexwhittemore.com/iphone/gen_entitlements.txt
    mv gen_entitlements.txt gen_entitlements.py
    chmod 777 gen_entitlements.py

    Collega il tuo iPhone e apri Xcode. Apri finestra> Organizer. Seleziona il dispositivo dall'elenco a sinistra e fai clic su "Usa per lo sviluppo". Ti verrà richiesto un accesso al sito Web di provisioning, fai clic su Annulla. È lì per facilitare il provisioning legittimo, ma non rende più difficile il non-provisioning illegittimo.

    Ora devi fare quest'ultima parte per ogni nuovo progetto che realizzi . Vai al menu Progetto> Nuova fase di costruzione> Nuova fase di esecuzione dello script di esecuzione. Nella finestra, copia / incolla questo:

    export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
    if [ "${PLATFORM_NAME}" == "iphoneos" ]; then
    /Developer/iphoneentitlements401/gen_entitlements.py "my.company.${PROJECT_NAME}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent";
    codesign -f -s "iPhone Developer" --entitlements "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/"
    fi

.

.


.

.

Disinstallare

Per la prima parte:

sudo mv -f /Developer/Platforms/iPhoneOS.platform/Info.plist.bak /Developer/Platforms/iPhoneOS.platform/Info.plist

Per la seconda parte:

sudo mv -f /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/SDKSettings.plist.bak /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/SDKSettings.plist
sudo mv -f iPhoneOS\ Build\ System\ Support.original iPhoneOS\ Build\ System\ Support

nel caso abbiate fatto il passaggio 3 anziché 2, modificatelo anche di conseguenza:

sudo mv -f /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/SDKSettings.plist.bak /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/SDKSettings.plist

per il resto, sta semplicemente ripristinando ciò che hai fatto su XCode e cancellandolo /Developer/iphoneentitlements401/gen_entitlements.pyse vuoi:

sudo rm -f /Developer/iphoneentitlements401/gen_entitlements.py

Ho provato a seguire queste istruzioni, ma ora 'Scheme' è di tipo My Mac 64 bit e non ho più alcuna opzione per eseguire simulatore o iPhone reale, quindi non posso nemmeno testare il codice. Stavo usando SDK 4.3, non sono sicuro che sia importante
nosatalian il

1
In realtà, aggiorna: dopo aver modificato l'SDK di base nelle impostazioni del progetto da iPhone a iOS 4.3, le cose funzionano. Anche se xcode dice "Errore durante l'avvio del programma remoto: impossibile ottenere l'attività per il processo" Posso avviare l'app facendo clic su di essa.
nosatalian,

1
Ottengo questo errore: The identity used to sign the executable is no longer valid. ... (0xE8008018) anche quando ho scaduto 3650 giorni. Sembra che il telefono stesso stia facendo un controllo.
Stephen,

questo trucco "patching XCode" funziona per 4.3.2 o lo frenerà
Gabor

1
Punto 6. Nel mio caso ho dovuto modificare le autorizzazioni del file /Developer/iphoneentitlements401/gen_entitlements.py per ottenere l'esecuzione da parte dell'utente normale. Con questo la procedura funziona perfettamente.
abidibo,

43

Provisioning gratuito dopo Xcode 7

Per testare la tua app su un dispositivo reale anziché pagare la quota di Apple Developer (o effettuare il jailbreak del dispositivo), puoi utilizzare il nuovo provisioning gratuito supportato da Xcode 7 e iOS 9.

Ecco i passaggi presi più o meno dalla documentazione (il che è abbastanza buono, quindi dategli una lettura):

1. Aggiungi il tuo ID Apple in Xcode

Vai a XCode> Preferenze> scheda Account> pulsante Aggiungi (+)> Aggiungi ID Apple. Consulta i documenti per ulteriori informazioni.

inserisci qui la descrizione dell'immagine

2. Fare clic sulla scheda Generale in Project Navigator

inserisci qui la descrizione dell'immagine

3. Scegli il tuo ID Apple dal menu a comparsa Team.

inserisci qui la descrizione dell'immagine

4. Connetti il ​​tuo dispositivo e selezionalo nel menu schema.

inserisci qui la descrizione dell'immagine

5. Fare clic sul pulsante Risolvi problemi

inserisci qui la descrizione dell'immagine

Se viene visualizzato un errore relativo al nome del pacchetto non valido, modificarlo in qualcosa di unico.

6. Esegui la tua app

In Xcode, fai clic sul pulsante Crea ed esegui.

inserisci qui la descrizione dell'immagine

7. Affidati allo sviluppatore dell'app nelle impostazioni del dispositivo

Dopo aver eseguito l'app, visualizzerai un errore di sicurezza perché l'app che desideri eseguire non proviene dall'App Store.

inserisci qui la descrizione dell'immagine

Sul dispositivo , vai in Impostazioni> Generali> Profilo> nome-ID-Apple > Fidati del tuo nome-ID-Apple > Affidabilità.

8. Avvia nuovamente l'app sul dispositivo.

Questo è tutto. Ora puoi eseguire la tua (o qualsiasi altra app per cui hai il codice sorgente) senza dover pagare $ 99 dollari. Grazie, Apple, per aver finalmente permesso questo.


1
molte grazie. questo ha funzionato perfettamente senza la licenza per sviluppatori Apple a pagamento.
kishorer747,

Tuttavia, ci sono alcuni problemi: puoi installare solo fino a 3 app alla volta e devi rinnovare il certificato ogni settimana.
SilverWolf - Ripristina Monica il

@seaturtle, grazie per l'aggiornamento. Alla fine ho sborsato i soldi per la licenza sviluppatore, quindi non mi sono tenuto aggiornato su questa risposta. È un peccato per i limiti. Ci sono alcune cose su Android che sono molto più belle di Apple.
Suragch,

9

Non puoi, non se stai parlando di applicazioni create con l'SDK ufficiale e che vengono distribuite direttamente da xcode.


8

Dovrai effettuare il jailbreak del tuo dispositivo.


1
Segui il metodo @ rpetrich e SSH l'eseguibile nella cartella / Applicazioni del dispositivo, dovrebbe funzionare dopo un riavvio / respring.
esqew,

6

Esiste un modo per distribuire app per iPhone senza pagare per apple Dovrai effettuare il jailbreak del tuo dispositivo e seguire le istruzioni in http://www.alexwhittemore.com/?p=398


anche una guida perfetta, con un approccio diverso da @Dan ... Ho usato entrambi, però.
Cregox,

5

Nulla di ciò che ho visto da nessuna parte indica che puoi implementare ad hoc su un vero iPhone senza un certificato (a pagamento).


4

Ieri sera stavo attraversando lo sviluppatore Apple e lì nel certificato di provisioning ho trovato qualcosa del tipo: "Firma dei membri del team". Penso che ci sia un modo per aggiungere membri del team al profilo a pagamento. Puoi semplicemente chiedere al proprietario dell'ID app (a pagamento) di aggiungerti come membro del team. Non sono sicuro. Ci sto ancora cercando.


Sì, puoi aggiungere membri del team. C'è un limite di 200 dispositivi all'anno.
Cregox,

Cawas - Sai come aggiungere un membro al tuo ID Apple?
Akshay,

riceviamo notifiche solo se aggiungi @ prima del nome. Come hai detto tu stesso, devi prima ottenere un conto di pagamento. Quindi dovrebbe essere davvero semplice perché non sono riuscito a trovare alcun tutorial su come farlo. Non l'ho mai fatto da solo, comunque.
Cregox,

3

No, è facile farlo. In Xcode, imposta la Configurazione attiva su Rilascio. Cambia il dispositivo da Simulatore a Dispositivo, qualunque sia l'SDK. Se desideri esportare direttamente sul tuo iPhone, collegalo al tuo computer. Premi Build and Go. Se il tuo iPhone non è collegato al tuo computer, verrà visualizzato un messaggio che dice che il tuo iPhone non è collegato.

Se questo è il tuo caso: (iPhone non era collegato)

Vai alla cartella dei tuoi progetti e poi alla cartella di compilazione all'interno. Vai alla cartella Release-iphoneos e porta l'app all'interno, trascina l'icona di iTunes. Quando sincronizzi il tuo dispositivo iTouch, lo copierà sul tuo dispositivo. Apparirà anche in iTunes come applicazione per iPhone.

Spero che questo ti aiuti!

PS: se dice che un certificato non è valido, fai clic sul progetto in Xcode, la piccola icona del progetto nello stack di file a sinistra e premi Apple + I, oppure ottieni Informazioni dalla barra dei menu. Fai clic su Crea in alto. In Firma codice, modifica identità firma codice - Qualsiasi dispositivo con sistema operativo iPhone deve essere Non firmare.


7
L'OP non ha un certificato di firma o un profilo di provisioning. Queste istruzioni sono per i membri se il programma per sviluppatori iPhone da $ 99 ma non affrontano la domanda su come eseguire sul dispositivo senza registrarsi al programma.
cdespinosa,

2

Tutto dipende da quale versione di Xcode stai usando, poiché versioni diverse usano metodi diversi per implementare il tuo iPhone senza un profilo di provisioning.

Xcode 3.2.1 è una buona versione ed è facile da risolvere, ma dobbiamo sapere quale versione stai usando.


2

La soluzione pubblicata da Cawas funziona perfettamente anche con XCode4. Tuttavia, ci sono alcune modifiche all'interfaccia utente di IDE, quindi è necessario effettuare alcune ricerche per trovare Run Script :)

Nella vista Navigatore progetto, fai clic sull'elemento principale del progetto, quindi nella finestra centrale seleziona Target, quindi fai clic sulla scheda Fasi di generazione e nella parte inferiore vedrai il pulsante Aggiungi fase di generazione, fai clic e seleziona Aggiungi Esegui script, quindi incolla "codesign "sceneggiatura pubblicata da Cawas.


1

Non c'è soluzione alternativa. Puoi distribuire app ad hoc solo se sono registrate sul tuo dispositivo. Questo ti impedisce di creare il tuo app store ..

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.