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

muqaddarmuqaddar Administrateur
janvier 2010 modifié dans Objective-C, Swift, C, C++ #1
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.

Réponses

  • yoannyoann Membre
    20:28 modifié #2
    Je pense que le problème viens de la

    index.php?action=dlattach;topic=5026.0;attach=3392;image

    Change le product name en iVinophile Lite et ça devrait le faire.
  • AliGatorAliGator Membre, Modérateur
    20:28 modifié #3
    C'est justement ce qu'il voulait éviter, puisque le but est de garder le même nom affiché sous l'icône dans l'iPhone (même si le nom est différent dans l'AppStore, le bundle identifier différent, et l'icône différente)...

    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...
  • muqaddarmuqaddar Administrateur
    janvier 2010 modifié #4
    Oui j'ai bien 2 applis si je change le "Product Name"... (mais je ne voulais pas comme le dit Ali)
    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...
  • yoannyoann Membre
    20:28 modifié #5
    Alors sauf erreur de ma part ici, tu as le même bundle ID dans tes deux target.

    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.
  • muqaddarmuqaddar Administrateur
    20:28 modifié #6
    ça pourrait être ça... mais (mea culpa), je ne vous ai pas donné toutes les infos.

    Je remets 2 captures, regarde en bas de chacune. ;)
  • muqaddarmuqaddar Administrateur
    20:28 modifié #7
    Comment vérifier lorsque l'on build que c'est bien le bon info.plist qui est targeté et traité ? (malgré le bon nom indiqué dans les 2 targets)
  • yoannyoann Membre
    20:28 modifié #8
    L'endroit où sont rajoutés tes valeurs, User Defined m'étonne un peut. Si tu veux redéfinir le bundle name c'est en haut, dans ce qu'on voit sur tes premiers screen.

    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
  • muqaddarmuqaddar Administrateur
    20:28 modifié #9
    dans 1264360179:

    L'endroit où sont rajoutés tes valeurs, User Defined m'étonne un peut. Si tu veux redéfinir le bundle name c'est en haut, dans ce qu'on voit sur tes premiers screen.

    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.


    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.
  • muqaddarmuqaddar Administrateur
    janvier 2010 modifié #10
    Quand je build les 2 versions, je n'ai qu'une appli sur le HD (capture). Pas normal non ?
    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.
  • AliGatorAliGator Membre, Modérateur
    20:28 modifié #11
    Ben t'as vérifié ce dont te cause yoann ?
    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 :D)
    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.
  • muqaddarmuqaddar Administrateur
    20:28 modifié #12
    dans 1264366026:

    Ben t'as vérifié ce dont te cause yoann ?
    Car d'après tes captures, tu utilises le même $BUNDLE_NAME pour tes deux cas, donc c'est normal tout ça :


    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.
  • muqaddarmuqaddar Administrateur
    20:28 modifié #13
    Bon je vois toujours pas.  ???

    - 1 seul info.plist pour les 2 targets
    - 1 variable BUNDLE_NAME que je mets dans le plist BUNDLE_NAME et BUNDLE_IDENTIFIER...

  • AliGatorAliGator Membre, Modérateur
    janvier 2010 modifié #14
    En effet...
    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...)
  • yoannyoann Membre
    20:28 modifié #15
    ça me choque toujours autant que tu définisse le BUNDLE_NAME en User Defined au lieux de information property list, à  régler la valeur de bundle name à  la main je le ferais en haut perso
  • muqaddarmuqaddar Administrateur
    20:28 modifié #16
    dans 1264373644:

    ça me choque toujours autant que tu définisse le BUNDLE_NAME en User Defined au lieux de information property list, à  régler la valeur de bundle name à  la main je le ferais en haut perso


    Oui mais ça me ferait faire 6 info.plist... 3 pour la version normale (debug, addhoc, distri) et 3 autres pour la lite...
  • muqaddarmuqaddar Administrateur
    20:28 modifié #17
    Je suis allé fouillé mes paquets, voilà  le contenu des fichiers plist, si je compile l'un puis l'autre...

    (et que donc ils sont écrasés respectivement)
  • muqaddarmuqaddar Administrateur
    20:28 modifié #18
    En fait, il se mélange les pinceaux...

    NSLog(@"BundleNameKey = %@",[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey]);
    


    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...

  • yoannyoann Membre
    20:28 modifié #19
    dans 1264402068:

    dans 1264373644:

    ça me choque toujours autant que tu définisse le BUNDLE_NAME en User Defined au lieux de information property list, à  régler la valeur de bundle name à  la main je le ferais en haut perso


    Oui mais ça me ferait faire 6 info.plist... 3 pour la version normale (debug, addhoc, distri) et 3 autres pour la lite...


    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
  • muqaddarmuqaddar Administrateur
    20:28 modifié #20
    Bon en tout cas, avec un autre nom 'iVInophile Lite' par exemple, et bien tout baigne.
    Donc je fonctionne comme ça en attendant.

    [Session started at 2010-01-25 09:28:34 +0100.]
    2010-01-25 09:28:37.169 iVinophile[9023:207] _currentLanguage : fr
    2010-01-25 09:28:37.170 iVinophile[9023:207] BundleNameKey = ivinophiledebug

    [Session started at 2010-01-25 09:28:58 +0100.]
    2010-01-25 09:29:01.010 iVinophile Lite[9857:207] _currentLanguage : fr
    2010-01-25 09:29:01.013 iVinophile Lite[9857:207] BundleNameKey = ivinophilelitedebug
  • muqaddarmuqaddar Administrateur
    20:28 modifié #21
    dans 1264408007:

    dans 1264402068:

    dans 1264373644:

    ça me choque toujours autant que tu définisse le BUNDLE_NAME en User Defined au lieux de information property list, à  régler la valeur de bundle name à  la main je le ferais en haut perso


    Oui mais ça me ferait faire 6 info.plist... 3 pour la version normale (debug, addhoc, distri) et 3 autres pour la lite...


    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


    J'ai un seul certificat pour toutes mes applis (com.physalia.xxx). ;)

  • yoannyoann Membre
    20:28 modifié #22
    dans 1264408458:

    dans 1264408007:

    dans 1264402068:

    dans 1264373644:

    ça me choque toujours autant que tu définisse le BUNDLE_NAME en User Defined au lieux de information property list, à  régler la valeur de bundle name à  la main je le ferais en haut perso


    Oui mais ça me ferait faire 6 info.plist... 3 pour la version normale (debug, addhoc, distri) et 3 autres pour la lite...


    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


    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 :-)
  • muqaddarmuqaddar Administrateur
    20:28 modifié #23
    Essaie avec le même Product Name... but du test. ;)
    Merci à  toi.
  • yoannyoann Membre
    20:28 modifié #24
    En fait c'est avec le même display name que tu cherche.

    Pour ma part j'ai réussi avec ces info la :
    59930323-b974a7bd8fc837849cf79123268a7165.4b5d628e-full.png

    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.
  • muqaddarmuqaddar Administrateur
    20:28 modifié #25
    Merci Yoann...
    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.
  • yoannyoann Membre
    20:28 modifié #26
    dans 1264415034:

    Merci Yoann...
    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.
Connectez-vous ou Inscrivez-vous pour répondre.