XCode 4 et library

groumpfgroumpf Membre
22:31 modifié dans Xcode et Developer Tools #1
Salut,

j'aimerai faire une lib static avec XCode 4 et je ne sais pas par où commencer. Je ne trouve pas d'infos dans la doc Apple et les tuto sur le web parlent souvent de XCode 3.
Comme c'est la première lib que je fais je n'ai pas toutes les notions. Je pense qu'il me faut générer une lib device et une lib simulator. Ca m'est égal qu'elles soient dans le même fichier.
J'ai commencé par faire 2 targets mais je ne vois pas quoi changer pour dire que c'est du device (en fait par défaut) ou du simulateur.
Ou alors il faut créer 2 schemes ?

Comme je suis aussi obligé d'utiliser des XIB, j'envisage de les livrer à  part, c'est possible ?

Merci pour toute info.

Réponses

  • Eddy58Eddy58 Membre
    22:31 modifié #2
    Cette doc devrait t'aider en ce qui concerne la lib.
  • AliGatorAliGator Membre, Modérateur
    22:31 modifié #3
    Tout comme un projet qui crée une appli il crée un .ipa (ou un .app) pour une architecture donnée, donc soit Simulateur soit Device (tu n'as pas un .ipa commun Device/Simulateur, ce sont bien deux compilations distinctes qui sont chacune sur leur architecture donnée), pour une lib c'est pareil. Quand tu vas choisir la config "Debug - Device" il va te créer une lib pour le device. Si tu choisis "Debug - Simulator" il va te créer une lib pour le simu. Deux produits bien différents.

    Et malheureusement (à  mon grand regret et celui de beaucoup), Xcode ne propose pas nativement ensuite de fusionner les deux produits. La seule solution est donc de créer une "Build Phase" de type "Exécution de script" et que ce script exécute l'outil en ligne de commande "lipo", cet utilitaire permettant de fusionner 2 produits d'architectures différentes dans un même binaire (donc en l'occurrence la librairie pour architecture armv6, armv7 et celle poru x86 dans un seul et même binaire libToto.a) pour qu'elle puisse être linkée avec des applis pour l'une ou l'autre des archis (et donc pour une app que tu compileras pour Simulator ou pour Device)
  • groumpfgroumpf Membre
    22:31 modifié #4
    Merci, je vais étudier tout ça.
  • groumpfgroumpf Membre
    juin 2011 modifié #5
    J'ai réussi à  faire un framework grâce au lien fourni, merci beaucoup, je n'avais pas trouvé cette page dans mes recherches.
    Il me reste les xib que je voudrais inclure, j'ai essayé de les copier dans le framework en bundle mais à  l'exécution il ne peut pas le charger (j'aurais été étonné que ça marche ...).
    Bon au pire je livre le xib à  côté, mais ça ne fait pas très propre.

    MAJ: bon pour le moment j'ai trouvé une méthode qui m'évite d'utiliser un nib.
  • groumpfgroumpf Membre
    juin 2011 modifié #6
    Finalement j'ai refait mon framework en utilisant le template https://github.com/kstenerud/iOS-Universal-Framework

    Je pensais que ça résoudrait mon problème de chargement de ressources dans le bundle du framework mais non !

    Quand j'utilise NSBundle bundleWithIdentifier:, il me retourne toujours nil.

    J'ai trouvé ce fil http://lists.apple.com/archives/cocoa-dev/2007/Dec/msg01259.html qui semble donner une solution mais j'avoue que je ne comprends pas bien. Ils disent d'utiliser  bundleWithPath: mais quel path je peux bien donner ?

    Quand on génère une appli avec un framework, que devient le bundle du framework, il est intégré dans le bundle de l'appli iphone (je ne m'intéresse qu'à  l'iphone) ?

    Ce que je voudrais c'est pouvoir utiliser des fichiers ressources dans le code de ma librairie.

    En fait j'ai vraiment un gros doute sur le fait que ca soit judicieux d'essayer de distribuer une lib sous la forme d'un framework. Je me demande si je ne ferais pas mieux de faire 2 lib statiques et de livrer les .h et les ressources à  côté.


  • CéroceCéroce Membre, Modérateur
    22:31 modifié #7
    dans 1309342320:

    En fait j'ai vraiment un gros doute sur le fait que ca soit judicieux d'essayer de distribuer une lib sous la forme d'un framework. Je me demande si je ne ferais pas mieux de faire 2 lib statiques et de livrer les .h et les ressources à  côté.

    La question s'est toujours posée.
    Si ton code a besoin de ressources (images, fichiers .string, voire des .xib), alors les Frameworks s'imposent. Elles sont également pertinentes si les classes sont nombreuses, parce qu'on a vite fait d'oublier un des fichiers.
  • groumpfgroumpf Membre
    22:31 modifié #8
    dans 1309344964:

    Si ton code a besoin de ressources (images, fichiers .string, voire des .xib), alors les Frameworks s'imposent. Elles sont également pertinentes si les classes sont nombreuses, parce qu'on a vite fait d'oublier un des fichiers.


    Mais je fais comment pour charger un fichier ressource du framework à  partir du code du framework ?

    Je rappelle que c'est un framework perso installé dans ~/Library/Frameworks.
Connectez-vous ou Inscrivez-vous pour répondre.