64 votes

Comment produire une version de version iOS que mon client peut signer de son côté?

Mon scénario

J'ai écrit une application iOS pour un client. Le projet est presque terminé, et maintenant il est temps pour eux de le mettre dans l'App Store. J'ai été l'envoi de leur développement s'appuie tout au long du processus de développement. Ces versions avaient un bundle id en fonction de ma société et de mon projet du client comme suit: com.mycompany.clientname.projectname. J'ai signé ces Ad Hoc construit avec une Distribution Ad Hoc Profil de configuration que j'ai créé dans mon propre approvisionnement compte sur le Portail.

Maintenant qu'il est temps d'aller à l'App Store, j'ai besoin de faire un Communiqué de Construire et l'envoyer pour qu'ils signent avec leur propre App Store Profil d'approvisionnement de Distribution. Cela implique également la définition d'un nouveau Bundle ID pour le projet.

Mon problème

- Je besoin d'une application compilée pour le client à signer avec leur profil de configuration. Cependant, j'ai besoin de l'ID de ce qu'ils vont utiliser en premier. Disons que c'est l' com.bestclientever.appname. Xcode 4 ne me permet pas d'archiver le projet maintenant, parce que cela requiert de la part de signature de code. Je ne peux pas le code de la signer, parce que je ne peux pas créer un profil de configuration avec le même ID que ce qu'ils ont mis en place dans leurs Provisioning Portal (le Provisioning Portal applique l'unicité, comme il se doit).

J'ai fait toutes les hypothèses incorrectes ou des malentendus ici? c'est à dire. Dois-je vraiment pour définir l'ID de ce qu'ils vont signer avec?

La Question

Est-il possible de l'archive, ou au contraire de construire, une application iOS sans la signature de code? Comme un "signe plus tard" réglage ou quelque chose?

Ou, est-il un moyen de construire l'application avec un id de lot mais alors quelqu'un d'autre sera en mesure de signer avec un profil de configuration pour une autre id de l'offre (soit en changeant l'id de l'application compilée ou une autre signature de la méthode)?

Comment puis-je construire la version finale de la construire, mais avoir quelqu'un d'autre de se connecter à l'application pour la distribution de l'App Store?

Ce que j'ai essayé ou exploré

  • Agissant pour le client.
    • Avec d'autres, moins savvy clients, j'ai fini juste à l'obtention de leur Provisioning Portal et iTunesConnect informations d'identification et juste de faire la finale construire comme eux. Qui ne volent pas avec ce client. C'est une grande entreprise avec de strictes consignes de sécurité et beaucoup de paperasse.
  • La mystification que le client.
  • L'envoi au client de mon projet de code source et de le laisser faire la version release.
    • Une licence pour le code source n'est pas notre accord. En outre, ce client n'a pas souhaité s'impliquer avec le code source (d'où le recours à l'externalisation). Je souhaite cela comme une solution de dernier recours, mais il doit bien y avoir une meilleure façon!
  • Se définir en tant qu'Administrateur au niveau de développeur dans leur Développeur Membre du Centre.
    • Malheureusement, seul l'Agent de niveau utilisateur peut créer un Profil de configuration (pour autant que je puisse dire). Il semble que il doit y avoir un moyen de soit permettez-moi de créer un profil que je peux utiliser pour signer les construire ou de générer un profil pour moi. Je ne peux pas trouver une ou l'autre option.

27voto

RickDT Points 1176

J'ai juste confirmé lors de la WWDC 2012, la technique de suivi de travaux. Il remplit au mieux mes contraintes de peu de participation de la clientèle, la faible client de l'expertise, un simple processus de signature, et le code source de la propriété.

  1. Client invite les développeurs à leur équipe dans le Centre comme un Admin
  2. Développeur accepte l'invitation (qui devrait être dans votre e-mail)
  3. Développeur ouvre Xcode de l'Organisateur -> Onglet Périphériques -> Profils de configuration et frappe de l'Actualisation dans le coin inférieur droit. Assurez-vous de choisir la bonne équipe et vous devriez obtenir quelques nouveaux éléments.
  4. Dans Xcode, congé de Signature de Code Identité paramètres à leurs valeurs par défaut (ou de les réinitialiser pour iPhone Développeur pour Toute SDK iOS)
  5. Archive de l'application
  6. Dans l'Organiseur, cliquez-droit sur l'archive et sélectionnez Afficher dans le Finder
  7. Envoyer la .xcarchive fichier à votre client
  8. Les clients doivent avoir Xcode installé
  9. Client, double-clique sur l' .xcarchive fichier qui devrait ouvrir dans l'Organiseur
  10. Client clique Distribuer et les signes de l'application avec leur identité
  11. Résultat

Ce n'exiger que le client à utiliser sur le Centre des Membres developer.apple.com et d'utiliser Xcode un peu (mais juste l'Organisateur!). Si votre client a la capacité technique des problèmes à ce niveau, alors je conseille de prendre le contrôle et de le faire pour eux (et de la charge pour elle!). Demandez-leur de développeur login et mot de passe et agir simplement sur leur nom, comme si vous étiez un employé.

Ndlr: les clés de Négociation est autour d'un terrible compromis parce que c'est plus technique et plus impliqués pour le client et plus hacky et risqué pour le développeur. Il devrait être considéré comme un non-option compte tenu de ces deux meilleures options.

27voto

Richard Venable Points 2121

La plupart de ces réponses semblent compliquées et désuètes. Je pense que la réponse la plus simple est de faire une archive avec un profil de Développeur.

C'est une solution que je suis actuellement en train d'étudier pour mes propres fins (pas entièrement testé):

Vous avez juste besoin d'un accès développeur (pas l'équipe de l'agent) à leur compte et de créer un profil d'approvisionnement de Développement qui vous autorise à construire le spécifiée ID d'Application (vous devez spécifier l'ID de l'Application, car il est compilé dans). Puis Archive de l'application avec le profil de Développement, et de partager l'archive avec votre client. Ils peuvent ensuite re-signer l'archive avec leur propre profil de Distribution.

Une complication est que lorsque vous créez une archive avec un profil de développeur, le droit de l'attribut get-tâche-pour autoriser est défini à true, mais doit être défini sur false pour la distribution, de sorte que vous avez à contourner ce problème en définissant manuellement vos Droits.plist - voir ma question ici: je Peux archive avec un certificat de Développeur, puis re-signer lors de la soumission avec un certificat de Distribution?

6voto

jimmyg Points 347

J'ai eu le même problème. C'est ainsi que j'ai finalement résolu:

  1. Client créé une de développement de certificat.
  2. Client créé une de développement le fichier de configuration en utilisant le même ID d'Application comme la distribution de fichier de configuration.
  3. Client exporté d'un certificat d'élaboration.p12).
  4. Client m'a envoyé la .fichier p12 et le développement mobile fichier de configuration.
  5. J'ai importé les clients p12 fichier dans mon trousseau
  6. J'ai importé le fichier de configuration du client dans Xcode.
  7. Définir la signature du code d'Identité pour ma configuration de build à utiliser le client du fichier de configuration.
  8. J'ai Archivé de l'application.
  9. J'ai Envoyé l'Archive pour le client.
  10. Le client créé leur distribution construire par la signature de l'application avec leur distribution fichier de configuration. (Ils ont été la distribution de l'application en interne pour les tests.)

Le client n'a pas tellement préoccupés par le partage d'un développement de certificat, comme ils le seraient le partage de leur certificat de distribution.

J'ai également eu à créer entitlements.plist avec "Peut être débogué" (get-tâche-pour autoriser) NON, et la référence dans la configuration de build (sous la Signature de Code, la Signature du Code des Droits).

3voto

Piwaf Points 304

Je crois avoir trouvé un moyen de faire exactement ce que vous voulez, je n'ai pas fait de tests extensifs ou essayé de télécharger sur l'app store, mais à partir de l'essai que j'ai fait il semble être bon. La démission et l'ajout de mon profil de configuration est de travail que je peux l'installer sur mes appareils définis dans le AdHoc profil sans manuel d'installation du profil nécessaire. Deuxième test a été j'ai eu un iPad et un iPhone version d'une application avec le même ID de lot à partir de xCode, au début, je ne pouvais pas avoir à la fois dans iTunes, mais après la démission et le faisceau changement d'ID, j'ai été capable d'avoir à la fois installés. J'ai aussi essayé de changer le nom de l'application et qui a travaillé aussi bien, il a montré sur l'appareil et dans iTunes avec le nouveau nom. Ci-dessous mon script, il est conçu pour démissionner d'une application spécifique pour moi, de sorte que le profil et ayez localisé sont codés en dur. Je flip entre un iPhone et la version iPad de l'application j'ai donc ajouté qu'en tant que paramètre au script. Mais vous devriez être en mesure de prendre les principes que j'ai ici et de les affiner pour vous-même.

Les entrailles de la ce s'appuie sur des articles comme de nouvelles aventures en donnant sa démission pour iOS à partir de Dan Dev Diary et très semblable à Erica Sadun de l'Application du Signataire énumérés ci-dessus. Le principal ajout que j'ai faite a été de l'édition de l'Info.plist avant de démissionner.

#!/bin/sh

DestFile="Signed_$1"
SigningCertName="YOUR DISTROBUTION CERT NAME HERE FROM KEYCHAIN"
AppInternalName="APP NAME FROM INSIDE PAYLOAD FOLDER.app"

echo
echo "Going to take the app $1 and resign it as $DestFile"
echo

if [ "$2" = "iphone" ] ; then
        echo "Using iPhone Profile"
        echo
        BundleID="com.YOURCOMPANY"
        ProvProfile="/Users/YOURNAME/Library/MobileDevice/Provisioning Profiles/PROVISIONINGPROFILE.mobileprovision"
elif [ "$2" = "ipad" ] ; then
        echo "Using iPad Profile"
        echo
        BundleID="com.YOURCOMPANY.ipad"
        ProvProfile="/Users/YOURNAME/Library/MobileDevice/Provisioning Profiles/PROVISIONINGPROFILE_iPad.mobileprovision"
else
        echo "You must enter either iphone or ipad as the second parameter to choose the profile to sign with."
        echo
        exit 1
fi

rm -f Resigned.ipa
unzip -q $1 -d temparea
cd temparea/Payload
echo "*** Original Signing ***"
echo "************************"
codesign -d -vv $AppInternalName/
cp "$ProvProfile" ./$AppInternalName/embedded.mobileprovision
export EMBEDDED_PROFILE_NAME=embedded.mobileprovision
export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate

#Update the Info.plist with the new Bundle ID
sed 's/>ORIGINAL BUNDLEID HERE</>'$BundleID'</' ./$AppInternalName/Info.plist >./$AppInternalName/Info.plist.new
mv -f ./$AppInternalName/Info.plist.new ./$AppInternalName/Info.plist

# this will do a rename of the app if needed
# sed 's/>ORIGINAL APP NAME</>NEW APP NAME</' ./$AppInternalName/Info.plist >./$AppInternalName/Info.plist.new
# mv -f ./$AppInternalName/Info.plist.new ./$AppInternalName/Info.plist

# echo "Hit enter to proceed with signing."
# read TMP
codesign -f -vv -s "$SigningCertName" -i $BundleID $AppInternalName

echo
echo "*** New Signing ***"
echo "*******************"
codesign -d -vv $AppInternalName/
cd ..
zip -r -q ../Resigned.zip .
cd ..
rm -R temparea
mv Resigned.zip $DestFile
echo
echo "New IPA Created, $DestFile"

2voto

samfisher Points 6889

La meilleure solution consiste à demander au client d'exporter sa clé privée de certificat de distribution dans un fichier .p12 et de vous l'envoyer le long du profil de distribution avec lequel vous pouvez générer une version de distribution App Store pour votre client.

Bonne chance!!

Cordialement, Sam

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X