2 targets, 2 bundles... et 1 appli ?

Je suis en train de faire une version Lite, et je dois avouer que ce qui se passe me laisse perplexe.
J'ai mes 2 targets, des noms de bundle identifiers différents... mais quand je change de target et que je lance mon build&Run dans le simulateur, et bien je me retrouve avec 1 seule appli...et 1 sandbox donc...
Je vous mets quelques captures.
J'ai mes 2 targets, des noms de bundle identifiers différents... mais quand je change de target et que je lance mon build&Run dans le simulateur, et bien je me retrouve avec 1 seule appli...et 1 sandbox donc...
Je vous mets quelques captures.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Change le product name en iVinophile Lite et ça devrait le faire.
Maintenant, ça vaut le coup de mettre un ProductName différent et voir si ça change le problème ou pas, au moins pour tester...
Mais du coup, je perds mon icone (bizarre)... (elle est bien définie en tant que variable sous un autre nom)
D'autre part, j'ai déjà 3 iVinophile qui portent le même Product Name... (mais sous 1 seul target) et du moment que j'avais 1 bundle identifier différent, ça marche (ce n'est pas le nom du Product name qui fait l'identifiant unique de l'appli mais bien son bundle identifier).
Le fait d'avoir ici une appli qui écrase l'autre montre qu'il y a un souci avec les bundle identifiers... comme si en changeant de target il ne regardait pas le info.plist qu'il faut aller lire... (vu que j'en ai 2), et qu'il prenait toujours les mêmes...
Tes bundles ID sont com.physalia.${BUNDLE_NAME}
Pour chaque target, Bundle Name vaut ${PRODUCT_NAME}
Et vu que Product Name est le même...
Change le bundle ID par com.physalia.lite.${BUNDLE_NAME} par exemple.
Je remets 2 captures, regarde en bas de chacune.
L'endroit que tu viens de montrer c'est pour des variables perso, je suis pas certain que tes valeurs soit bien prise en compte.
Sinon pour tester le info.plist je sais pas trop, au pire ouvre le bundle de l'appli compilé et regarde
Avec un seul target tout baigne... je peux bien avoir une appli debug, une appli adhoc, et une appli distri côte à côté sur l'iPhone. Je change juste cette variable perso pour le bundle name, en fonction de la configuration. Le nom de l'application est le même dans les 3 cas.
En fait, elles s'écrasent build après build... le problème c'est que le info.plist dans le bundle ne prend pas les nouvelles valeurs !
Je pense qu'une parade serait de dupliquer les configurations, je vais tester et vous tient au courant.
Car d'après tes captures, tu utilises le même $BUNDLE_NAME pour tes deux cas, donc c'est normal tout ça :
1) Comme ton bundleidentifier est "com.physalia.${BUNDLE_NAME}" et que ${BUNDLE_NAME} est identique dans tes deux targets, tu as le même bundleidentifier dans les deux cas
2) De toute façon si tu as deux ${BUNDLE_NAME} identiques, ça va te générer deux fois la même appli / le même bundle au final, le second écrasant le premier.
BUNDLE_NAME c'est le nom du fichier .app généré (le nom du ... bundle, quoi
PRODUCT_NAME est le nom affiché sous l'icône dans l'iPhone
De plus, le output directory dans lequel sont générées tes applis dépend de la configuration active (Debug, Release) et du SDK (iphone simulator ou device).
Donc en résumé :
1) pour une même configuration et un même SDK (device/simu), tes applis (bundles) seront générés dans le même dossier. Ca c'est pas plus mal et t'as pas à toucher.
2) Comme tu veux des bundles (applis) avec des noms (de fichier) différents, tu dois mettre une valeur différente dans ${BUNDLE_NAME} pour tes deux targets
3) Par contre comme tu veux des display name (nom affiché sous l'icône dans l'iPhone) identiques, il te faut une même valeur dans ${PRODUCT_NAME}
4) Et pour les bundle identifiers, il faut qu'ils soient différents aussi. Tu peux les faire dépendre de ${BUNDLE_NAME} à condition que tu suive le point 2 bien sûr.
Mais faut rester cohérent (et faire ça à tête reposée :P) et après ça devrait marcher comme sur des roulettes.
Je t'assure que j'ai la tête reposée !
Regarde mieux mes captures plus haut, ce n'est PAS le même bundle identifier.
C'est pour cela que je suis perplexe.
J'ai même fait plus simple en test : 1 seul fichier info.plist (puisque le bundle change avec la variable bundle)... et bein c'est pareil.
- 1 seul info.plist pour les 2 targets
- 1 variable BUNDLE_NAME que je mets dans le plist BUNDLE_NAME et BUNDLE_IDENTIFIER...
Et les traces détaillées de la compilation (en particulier le step "Process TonApp-Info.plist", vérifier au moins que c'est bien le bon plist qu'il prend, tu peux même sélectionner ce step dans l'onglet Build Results, ça t'affichera le Info.plist utilisé dans ta fenêtre Xcode... enfin si tu reviens au mode de 2 fichiers Info.plist distincts pour chaque target)
[EDIT]
Sinon, regarde aussi le Info.plist qui se trouve dans le bundle généré (via le Finder, "Afficher le contenu du paquet", ...) voir ce que donne le Info.plist une fois généré.
Le tout est de savoir s'il prend bien en compte tes deux Info.plist distincts. Si c'est le même Info.plist qui est généré au final, alors que tu avais prévu deux différents, c'est déjà de ce côté qu'il faut chercher.
Si c'est bien deux Info.plist différents qui sont générés dans ton bundle au final selon que tu choisis un target ou l'autre pour ta compil', mais que quand tu upload sur ton device l'un remplace l'autre, c'est autre chose.
Et si tu mets des valeurs en dur (au moins pour le test) pour Bundle Name pour tes deux targets ? (Attention à bien mettre ces valeurs pour toutes les configurations, l'erreur classique étant par exemple de modifier la valeur pour Debug, et de compiler en Release, et pas comprendre pourquoi nos réglages sont pas pris en compte...)
Oui mais ça me ferait faire 6 info.plist... 3 pour la version normale (debug, addhoc, distri) et 3 autres pour la lite...
(et que donc ils sont écrasés respectivement)
me donne le même bundle name que je lance l'appli avec le target 1 ou le target 2... avec 1 ou 2 info.plist
J'ai tout essayé : vider le cache, nettoyé les targets, relancé Xcode, et même snow leo...
C'est juste 2 target avec 2 info.plist et des certificats différents obligatoirement.
Je fait un test sur un projet vierge dans la journée
Donc je fonctionne comme ça en attendant.
J'ai un seul certificat pour toutes mes applis (com.physalia.xxx).
Ok pour ma part j'utilise le wildcard uniquement pour le dev et en prod les appli ont leur propre certificat pour bien les séparer.
Donc dans ce cas tu as simplement 2 target avec éventuellement 2 info.plist, mais il ne devrait pas y avoir beaucoup de différences.
Je vais faire des test :-)
Merci à toi.
Pour ma part j'ai réussi avec ces info la :
Et comme Product Name MultiTest-Lite
Je te met le projet avec le post pour que tu puisse regarder.
L'important c'est que le bundle ID soit différent et que les noms des fichiers le soit aussi ainsi que le nom de la cible pour que Xcode ne se mélange pas. Tu es donc obligé d'avoir des product name différent, et tu change simplement le display name dans ton plist.
A noter que j'ai laisser me.gini.lite.productname dans le plsit du lite, le .lite n'est pas utile au final.
Pas pu tester ton appli vu que j'ai pas le provisioning...
Mais pas grave, effectivement j'y suis enfin arrivé en tapant le bundle display name en DUR dans mon plist, MAIS en conservant 2 product names différents.
Avoue que c'est quand même curieux qu'Xcode ne puisse pas gérer 2 produits différents avec le même product name, vu que le BUNDLE ID et BUNDLE NAME sont différents.
reste sur le simulateur ça passera.
Sinon c'est juste logique à mon sens qu'Xcode et l'iPhone galère avec 2 produit ayant le même product name, car c'est le nom du fichier sur le disque, donc il y a conflit.