2013-03-26 4 views
15

Il mio cliente ha un'app per iOS con acquisti in-app, kit di giochi e notifiche push attivati, è attualmente nell'app store. Vorrei dimettermi dall'applicazione utilizzando un certificato di distribuzione aziendale interno, per testare internamente, ma essere ancora in grado di testare i servizi legati al profilo di provisioning originale. È possibile?Revoca di un profilo di provisioning iOS

risposta

29

ho finito per fare questo, che è una combinazione di: -

e

1) Creare Entitlements plist, prevenire problemi con il portachiavi ecc

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>application-identifier</key> 
    <string>GBA9L2EABG.com.your.bundle.id.MyApp</string> 
    <key>get-task-allow</key> 
    <false/> 
</dict> 

2) decomprimere l'IPA

unzip Application.ipa 

3) Rimuovere la vecchia firma codice

rm -r "Payload/Application.app/_CodeSignature" "Payload/Application.app/CodeResources" 2> /dev/null | true 

4) Sostituire incorporato profilo di provisioning cellulare

cp "MyEnterprise.mobileprovision" "Payload/Application.app/embedded.mobileprovision" 

5) Resign

/usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" --entitlements Entitlements.plist "Payload/Application.app" 

6) Re-pacchetto

zip -qr "Application.resigned.ipa" Payload 
+0

un comando potrebbe fare questo se ti dimetti il ​​file .app: 'xcrun -SDK iPhoneOS PackageApplication -v "build/ProgettoUtente-iPhoneOS/youAppName.app" -o "output_folder/yourAppName.ipa "--sign" yourCertificateName "--embed" your.mobileprovision "' – Xiao

+0

"GBA9L2EABG.com.your.bundle.id.MyApp" - questo è solo un ID bundle che hai creato, o è quello originale IPA? Anche le notifiche push funzionano se si modifica l'ID bundle dell'app originale? – Leonti

+0

Quando provo a installare l'app ricevendo l'errore come CFBundleExecutable di appName, che non è eseguibile. Ho provato il comando chmod + x su appName.app con lo stesso errore. – Raghav

1

Giusto per aggiungere un po 'per la risposta di Koko Carl, se si esegue in problemi con codesign_allocate quando si arriva al punto 5 (Resign), prova a esportare una variabile di shell CODESIGN_ALLOCATE e assegnagli un percorso per assegnare il codesign all'interno dell'SDK di iPhone. Per fare questo, assicurarsi di avere gli strumenti della riga di comando Xcode installati (Preferenze/Aggiornamenti in Xcode)

Per esempio, mi è stato sempre l'errore:

me$ /usr/bin/codesign -f -v -s "iPhone Distribution: Some Company, Inc" --resource-rules "Payload/MyApp.app/ResourceRules.plist" --entitlements Entitlements.plist "Payload/MyApp.app" 

uscita:

Payload/MyApp.app: replacing existing signature 
codesign_allocate: object: /Users/mimio/Downloads/Payload/MyApp.app/MyApp malformed object (unknown load command 33) 
Payload/MyApp.app: object file format unrecognized, invalid, or unsuitable 

Per risolvere questo, ho impostato la variabile in questo modo:

me$ export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate 

E poi ha eseguito di nuovo il mio comando:

me$ /usr/bin/codesign -f -v -s "iPhone Distribution: Some Company, Inc" --resource-rules "Payload/MyApp.app/ResourceRules.plist" --entitlements Entitlements.plist "Payload/MyApp.app" 

E voilà! Tutto ha funzionato correttamente con il nuovo codesign_allocate

4

Per rassegnare le dimissioni a un app un po 'più facile di quello che ha detto @Koko Carl, abbiamo adattato lo script floatsign, che può essere trovato su https://gist.github.com/Weptun/5406993. rende il processo molto semplice:

sh floatsign.sh ~/Downloads/File.ipa "iPhone Distribution: CertificateName" -b new.bundle.id -p /Path/To/Profile/Appstore.mobileprovision App-resigned.ipa 
+0

Avviso: --resource-rules è stato deprecato in Mac OS X> = 10.10! temp/Payload/Application.app/ResourceRules.plist: impossibile leggere le risorse Ha avuto un errore, interrompendo! –

1

Quando cercato questa è la prima domanda shownup nel flusso stackover. Voleva quindi essere aggiornato con l'ultima app mac di iResign, che rende il lavoro estremamente semplice con la GUI al posto dei comandi nel terminale.

iReSign

iReSign permette fasci iDevice app (.ipa) file da firmare né rassegnati con un certificato digitale da Apple per la distribuzione. Può anche creare file di pacchetti di app iDevice firmati (.ipa) da file .xcarchive. Questo strumento è rivolto agli utenti aziendali, per la distribuzione aziendale, quando la persona che firma l'app è diversa dalla persona che lo sviluppa.

Come utilizzare

iReSign permette di ri-firmare qualsiasi ipa-file non criptato con qualsiasi certificato per il quale si tiene la chiave privata corrispondente. iResign può anche creare un file ipa firmato da un file xcarchive.

Trascinare il file .ipa o .xcarchive senza segno nella casella in alto o utilizzare il pulsante Sfoglia.

Immettere il nome completo del certificato da Accesso Portachiavi, ad esempio "Sviluppatore iPhone: Nome Cognome (XXXXXXXXXX)" nella casella in basso.

Fare clic su ReSign! e aspetta. Il file dimesso verrà salvato nella stessa cartella del file originale.

Fonte: https://github.com/maciekish/iReSign

+2

Hai la stessa risposta su 4 domande diverse. Se è possibile rispondere alla domanda con la stessa risposta, è necessario contrassegnarla come duplicata e non come risposta post duplicata. – NathanOliver

+0

Perfetto per ri-firmare un ipa inviato all'App Store. Basta trovare i profili e il certificato giusti (se ne hai più di uno). Ho lasciato il file entitlement.plist vuoto, sembra creare un tempo uno se non lo si trova. Poi ho installato il mio ipa dimesso usando iMazing. Ora posso ricontrollare che l'app inviata funzionerà come previsto prima di raggiungere il negozio e/o in attesa di approvazione. –