2010-10-23 30 views
8

J'essaie de créer une bibliothèque statique que je peux utiliser avec ios3.x et ios4.x. Je peux construire une bibliothèque statique avec ios3.0 qui fonctionne avec un autre projet dans ios3.0 mais ne compilera pas dans ios4. La même chose est vraie allant de ios4 à ios3.Comment créer une bibliothèque statique ios universelle

Voici comment recréer:

  1. Ouvrir XCode 3.2.4 et commencer un nouveau projet qui est une bibliothèque statique Cocoa Touch appelé bibliothèque4
  2. Cliquez sur le dossier cours et créer un nouveau UIViewController nommé « TestViewController »
  3. Cliquez avec le bouton droit sur le dossier Frameworks, ajoutez le cadre existant, choisissez UIKit
  4. Dans le panneau de gauche, développez des cibles, cliquez avec le bouton droit sur ma cible de bibliothèque et cliquez sur Obtenir des informations. Passer à toutes les configurations, Changer la base sdk pour iphone simulator 4.0, changer la cible de déploiement ios en ios3.0
  5. Cliquez sur le dossier Bibliothèque de liens avec les binaires. Dans le volet droit, modifiez les rôles des deux à « faible »
  6. construire la bibliothèque
  7. Ouvrir Xcode 3.2.2 et lancer une nouvelle application appelée Voir Library4Test
  8. Copier TestViewController.h aux classes folder
  9. Copiez le fichier libLibrary4.a dans le dossier frameworks. Il est automatiquement ajouté à la phase de l'éditeur de liens de la cible.
  10. Cliquez avec le bouton droit de la souris sur la cible Library4Test et cliquez sur Obtenir des informations. Dans d'autres drapeaux de l'éditeur de liens, ajouter « -ObjC » et « -all_load »
  11. Dans l'en-tête délégué app ajouter Importer « TestViewController.h »
  12. Dans la méthode de la demande d'en-tête délégué app didFinishLaunchingWithOptions ajouter

    TestViewController * Test = [TestViewController alloc] init;

  13. compilez avec simulateur de ios3.0

Quand je reçois compilez je:

Ld build/Debug-iphonesimulator/library4Test.app/library4Test normal i386 
cd /Users/test/Documents/Testing/library4Test 
setenv MACOSX_DEPLOYMENT_TARGET 10.5 
setenv PATH "/Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/GrandpaIPhone/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" 
/Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk -L/Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator -L/Users/test/Documents/Testing/library4Test -F/Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator -filelist /Users/test/Documents/Testing/library4Test/build/library4Test.build/Debug-iphonesimulator/library4Test.build/Objects-normal/i386/library4Test.LinkFileList -mmacosx-version-min=10.5 -framework Foundation -framework UIKit -framework CoreGraphics -llibrary4_1 -o /Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator/library4Test.app/library4Test 

Undefined symbols: 
"_objc_msgSendSuper2", referenced from: 
-TestViewController didReceiveMemoryWarning in liblibrary4_1.a(TestViewController.o) 
-TestViewController viewDidUnload in liblibrary4_1.a(TestViewController.o) 
-TestViewController dealloc in liblibrary4_1.a(TestViewController.o) 
"__objc_empty_vtable", referenced from: 
_OBJC_METACLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o) 
_OBJC_CLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o) 
"_OBJC_CLASS_$_UIViewController", referenced from: 
_OBJC_CLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o) 
"_OBJC_METACLASS_$_UIViewController", referenced from: 
_OBJC_METACLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o) 
".objc_class_name_TestViewController", referenced from: 
[email protected][email protected][email protected] in library4_1os3TestAppDelegate.o 
"_OBJC_METACLASS_$_NSObject", referenced from: 
_OBJC_METACLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 
+0

Pour les personnes souhaitant simplement créer une bibliothèque IOS statique: http://stackoverflow.com/questions/3520977/build-fat-static-library-device-simulator-using-xcode-and-sdk-4 –

Répondre

2

Je ne sais pas exactement, mais il ressemble à un problème de liaison (tous les .O choses). Voici comment j'ai configuré ma bibliothèque statique iOS. C'est une chose très simple, mais ça fonctionne.

  1. Démarrez un nouveau projet et choisissez iOS libarary >> Cocoa Touch Bibliothèque statique
  2. Ajouter quelques classes. Les miennes sont des catégories sur UIView qui donnent de meilleures descriptions pour une utilisation dans NSLog.
  3. Sélectionnez la cible et assurez-vous que le rôle de chaque classe est défini sur une valeur appropriée. Dans le cas de mes catégories, cela devrait être «public».
  4. Double-cliquez sur la cible et choisissez l'onglet Construire.
  5. sélectionnez la version de configuration et définissez les paramètres construire suivants:
  6. emplacement de déploiement OUI (contrôle)
    Déploiement de post-traitement OUI (vérification)
    Installation Créer Produits Emplacement/

Construisez votre bibliothèque statique. Par défaut, il sera construit dans/usr/local/lib

Créez maintenant un lien symbolique pour un accès facile à votre nouvelle bibliothèque. Un moyen facile est d'ouvrir votre terminal et exécutez les commandes suivantes:

cd ~  
ln -s /usr/local/lib 

Ouvrez maintenant le projet Xcode dans lequel vous souhaitez utiliser votre bibliothèque. Créez un groupe appelé Bibliothèques ou quelque chose comme ça, faites un Ctrl-clic et utilisez 'Ajouter des fichiers existants' pour ajouter la bibliothèque. Cela s'appellera quelque chose comme libYourLibrary.a Lorsque vous exécutez votre projet, vous obtenez une erreur de liaison. Double-cliquez sur le fichier du projet, allez dans Build >> Toutes les configurations et ajoutez la valeur suivante au paramètre "Library Search Paths": ~/lib

+0

créé une question que vous répondez peut-être ici mais je ne suis pas sûr. Le voici: http://stackoverflow.com/q/26597889/1735836 – Patricia

0

Comment créer une seule cible avec sdk? Je crée une bibliothèque statique pour iOS-OSx et la procédure était beaucoup plus simple.

  1. créer le projet (à partir du modèle iOS "touch Cocoa Bibliothèque statique")
  2. ajouter les fichiers source
  3. ajouter une cible pour sdk

Bien sûr, je dois ajouter un peu

#if TARGET_OS_IPHONE 
... 
#else 
... 
#endif 

au code. Vous pouvez ajouter vos propres conditions.

0

Les erreurs de compilation se produisent parce que vous n'avez pas lié les bonnes structures de système. Tous les symboles en rouge foncé proviennent de Foundation.framework, UIKit.framework et libobjc.dylib.

Les bibliothèques statiques n'entrent pas automatiquement dans les cadres requis avec lesquels elles doivent se lier, alors lorsque vous les utilisez, vous devez les ajouter vous-même au projet.