web-dev-qa-db-fra.com

Comment pouvons-nous restaurer ppc / ppc64 ainsi que la prise en charge complète du SDK 10.4 / 10.5 sur Xcode 4?

Depuis Apple ne fournit que le SDK 10.6 avec Xcode4, développer des applications PPC avec Xcode4 est devenu impossible. Bien qu'il soit possible de développer des applications avec Xcode4 qui peuvent également fonctionner sur 10.5) et peut-être même sur les systèmes 10.4 (en sélectionnant SDK 10.6, mais cible de déploiement 10.5 ou 10.4), ils ne fonctionneront que sur les Mac Intel car vous avez besoin d'au moins SDK 10.5 pour créer des applications PPC.

De plus, il existe de rares cas où vous devez vraiment construire avec un SDK avant 10.6 pour une prise en charge complète de la plate-forme, par exemple si certaines fonctionnalités obsolètes ont complètement disparu du SDK 10.6, mais vous devrez l'utiliser et la liaison dynamique n'est pas toujours la meilleure option dans ces cas. La liaison avec un SDK antérieur facilitera parfois le développement car les fonctionnalités que vous n'êtes pas censé utiliser, car cela entraînerait une incompatibilité avec les versions antérieures du système d'exploitation, ne seront pas disponibles et toute tentative de l'utiliser entraînera immédiatement des erreurs de compilation ou de l'éditeur de liens.

Dernier point mais non le moindre Apple a également supprimé la prise en charge de GCC 4.0 de Xcode4, ce qui peut être nécessaire pour que certains logiciels se construisent correctement et Apple n'a jamais autorisé à compiler de logiciels avec GCC 4.2 lors de l'utilisation du SDK 10.4, même si je crois à peine que cela causerait vraiment des problèmes, car tous les logiciels construits avec GCC 4.2 et SDK 10.6 peuvent également fonctionner sur Mac OS 10.4 sans aucun problème tant que la cible de déploiement a été définie correctement et aucune fonctionnalité non disponible sous MacOS 10.4 n'a été utilisée.

Bien sûr, vous pouvez toujours avoir une installation parallèle de Xcode3 à côté de Xcode4, mais cela signifie que vous devez renoncer à toutes les (excellentes?) Nouvelles fonctionnalités de Xcode4 et continuer à travailler avec l'IDE Xcode3 obsolète. Il serait certainement beaucoup mieux si vous pouviez également gérer tous vos anciens projets dans le même IDE que vos nouveaux et bénéficier de toutes les nouvelles fonctionnalités disponibles. Tous les projets ne peuvent pas être réalisés 10.6 ou Intel uniquement dans un avenir prévisible. En outre, je suis strictement contre l'abolition du support des anciennes plates-formes plus tôt qu'il ne serait vraiment nécessaire.

Peut-on restaurer cette fonctionnalité sur Xcode4?

93
Mecki

La réponse rapide est: Oui, nous le pouvons!

Avant de passer à la partie "comment c'est fait", voici quelques notes sur mon patch/hack/fix. Dès le début, les principaux objectifs ont été:

  1. Gardez toutes les modifications au minimum absolu.
    Nous voulons garder les configurations Xcode aussi originales que possible.

  2. Par tous les moyens, essayez d'éviter de patcher ou de modifier des fichiers.
    Nous voulons que tous les fichiers restent intacts et conservent leur contenu d'origine.

  3. Essayez d'éviter de déplacer ou de copier des fichiers, sauf si cela est absolument nécessaire.

J'ai pu garder tous ces objectifs. Presque tout se fait en créant des liens symboliques. Un seul lien symbolique existant a dû être remplacé et nous le sauvegarderons avant le remplacement, au cas où.

Si vous n'êtes pas un expert des opérations du terminal, je vous conseille fortement de copier/coller toutes les commandes du terminal de ma réponse vers votre terminal, pour éviter les fautes de frappe. Gardez à l'esprit que même l'espacement, la cotation et surtout la capitalisation peuvent être importants. Copiez/collez-les ligne par ligne, jamais plus d'une ligne à la fois et appuyez sur Retour après chaque ligne collée pour exécuter la commande. Si une opération vous demande un mot de passe, ce sera le mot de passe de l'utilisateur administrateur actuellement connecté (vos frappes ne s'affichent pas lors de la frappe, c'est normal, ne vous inquiétez pas, continuez à taper le mot de passe et appuyez sur retour; re -essayez si vous aviez une faute de frappe et obtenez à nouveau une invite).

Prérequis

Avant de commencer, assurez-vous que les conditions suivantes sont remplies:

  • Vous êtes connecté en tant qu'utilisateur administrateur.
  • Vous avez démarré Terminal.app (Applications/Utilitaires) et une fenêtre de terminal est ouverte.
  • Vous disposez d'une copie de l'image disque Xcode3 (par exemple 3.2.5) et Xcode4 (DMG) ou du programme d'installation.
  • Si vous avez déjà installé la version de Xcode, envisagez de la désinstaller en premier , afin que vous puissiez commencer avec une configuration fraîche/propre. La désinstallation de Xcode ne supprimera pas vos préférences, votre jeu de couleurs ou vos personnalisations de liaison de touches. Idéalement, vous commenceriez avec un système qui n'a pas de version Xcode (ni 3 ni 4) actuellement installée.

Étape 1: installation de Xcode3

Important : N'installez pas le package "Outils système" ou "Développement Unix" de Xcode3.
La décision d'installer "Mac OS X 10.4 SDK" et/ou "Documentation" dépend de vous. S'il s'agit d'un Xcode3 avec des SDK iOS, que vous les installiez ou non, c'est à vous de décider.

Vous êtes libre de choisir n'importe quel dossier de destination pour votre installation. Pour ce guide, j'ai choisi "/ Xcode", mais n'hésitez pas à en choisir un autre. Assurez-vous simplement de modifier toutes les commandes du terminal en conséquence.

L'ordre des étapes donné ici n'est généralement pas vraiment important, mais je vous conseille fortement de ne pas permuter les étapes 1 et 2. Xcode installe toujours quelques fichiers en dehors du dossier de destination choisi et croyez-moi, à la fin vous voulez que le Versions Xcode4 de ces fichiers sur votre disque. En installant Xcode3 avant Xcode4, vous pouvez être sûr que Xcode4 écrasera ces fichiers si nécessaire. J'ai une fois échangé les étapes 1 et 2 et à la fin, j'ai eu des problèmes assez étranges qui pourraient être liés à un ordre incorrect (je ne peux pas dire avec certitude, mais après avoir réinstallé dans le bon ordre, les problèmes ont disparu).

Étape 2: installation de Xcode4

Choisissez les paquets que vous aimez. L'installation de "System Tools" est recommandée, mais pas strictement nécessaire (bien que la plupart des gens manqueront tôt ou tard cette fonctionnalité).

Encore une fois, n'hésitez pas à choisir le dossier cible que vous aimez. Pour ce guide, j'ai choisi le dossier cible normal "/ Developer", si vous en prenez un autre, modifiez toutes les commandes du terminal en conséquence.

Étape 3: Restauration de la prise en charge du SDK 10.4/10.5

Basculez vers votre fenêtre de terminal et exécutez les commandes suivantes:

cd /Developer/SDKs[.____..

Bien sûr, n'exécutez la commande pour 10.4u que si vous avez également installé le SDK 10.4 à l'étape 1.

Cela suffit pour ramener les SDK 10.5 (et éventuellement 10.4) à la liste de sélection dans Xcode4. Essayez si vous le souhaitez. Lancez Xcode4, ouvrez un projet, essayez de changer le SDK sélectionné. C'était facile, hein? Assurez-vous de refermer Xcode4 (l'application, pas seulement la fenêtre) avant de passer à l'étape suivante.

Étape 4: Restauration de la prise en charge de GCC 4.0

Si vous n'avez pas installé le SDK MacOS 10.4 ou si vous ne prévoyez pas de l'utiliser, vous pouvez ignorer cette étape en toute sécurité et passer à l'étape 5.

Pour utiliser le SDK 10.4, vous devrez utiliser GCC 4.0, GCC 4.2 ne fonctionnera pas. Apple affirme que GCC 4.2 n'est pas compatible avec le SDK 10.4, eh bien, si vous me demandez, c'est un canular. J'ai déjà remplacé ces limitations plus d'une fois et il n'y a jamais eu le moindre problème à cause de cela. Il serait facile de modifier le SDK 10.4 pour que Xcode vous permette d'utiliser GCC 4.2, mais mon objectif était d'éviter toutes les modifications de fichiers, nous rajoutons donc simplement la prise en charge de GCC 4.0 à Xcode, ce qui est également une bonne chose, car certains projets dépendent vraiment de GCC 4.0 (par exemple, il y a des bogues dans GCC 4.2 qui empêchent le code d'assemblage en ligne valide de compiler sans erreur, tandis que le même code se compile parfaitement sur GCC 4.0 et GCC 4.4).

Retour au terminal:

cd /Developer/usr/bin[.____.[Sudo ln -s /Xcode3/usr/bin/*4.0*. 
 
 cd/Developer/usr/libexec/gcc/powerpc-Apple -darwin10 
 Sudo ln -s /Xcode3/usr/libexec/gcc/powerpc-Apple-darwin10/4.0.1.

À l'heure actuelle, nous avons restauré la prise en charge complète de GCC 4.0, à l'exception du fait que GCC 4.0 n'est toujours pas sélectionnable dans Xcode4. C'est parce que Xcode4 n'a plus de plug-in de compilateur GCC 4.0. Heureusement, le plug-in Xcode3 fonctionne également dans Xcode4, seule la position a radicalement changé. Apple cache désormais ces plug-ins au plus profond d'un bundle et seuls les plug-ins semblent fonctionner, les placer à leur ancienne position semble n'avoir aucun effet.

cd /Developer/Library/Xcode/PrivatePlugIns[.____.. -ins/GCC 4.0.xcplugin ".

Maintenant, lancez à nouveau Xcode4, ouvrez un projet et essayez de sélectionner le compilateur. Vous devriez avoir GCC 4.0 de retour sur la liste. Maintenant, vous pouvez déjà sélectionner le SDK 10.4 ou 10.5, GCC 4.0 et vous ne devriez avoir aucun problème pour créer un binaire PPC. Sélectionnez simplement "Autre ..." pour le paramètre de construction "Architecture" et entrez manuellement "ppc", puis modifiez "Architectures valides "pour inclure également" ppc ". Nous avons presque terminé, sauf qu'essayer de construire un binaire PPC en utilisant GCC 4.2 et SDK 10.5 échouera toujours.

Étape 5: Restauration de PPC Prise en charge de GCC 4.2

Puisque Apple ne prend en charge que les plates-formes Intel dans Xcode4, tous les outils GCC 4.2 n'ont pas été construits avec la prise en charge PPC. Il existe un outil important qui ne prend pas en charge PPC, l'outil est nommé "as" et c'est l'assembleur GNU. Pour compiler les binaires ppc/ppc64 avec GCC 4.2, nous devons utiliser une version "as" avec le support ppc/ppc64. C'est le seul et unique fichier (en fait c'est aussi un lien symbolique) que nous devons d'abord écarter (en faisant une copie de sauvegarde) avant de pouvoir le remplacer par un lien symbolique:

cd /Developer/usr/libexec/gcc/powerpc-Apple-darwin10/4.2.1[.____.[Sudo mv as as.bak 
 Sudo ln -s/Xcode3/usr/bin/as.

Étape 6: Il n'y a pas d'étape 6

C'est tout le monde. Compte tenu de la facilité, vous pouvez imaginer que Apple n'a certainement pas abandonné le support SDK 10.4/10.5 ou ppc/ppc64 ou GCC 4.0 parce que c'était une nécessité, ils ont abandonné tout cela parce qu'ils voulaient le supprimer.

J'espère que cette configuration fonctionne aussi bien pour vous que pour moi. J'ai pu compiler tous mes anciens projets dans Xcode4 sans aucun changement majeur, sauf pour avoir à modifier un chemin de recherche ici et là.

PS:
Il peut sembler étrange que je réponde à ma propre question ici, mais comme j'ai découvert comment résoudre ce problème par moi-même, j'aimerais partager mes connaissances avec la communauté, car je pense que c'est vraiment une contribution précieuse à tous les développeurs MacOS. Cette question a été posée tant de fois dans tant d'endroits et jusqu'à présent, je n'ai jamais vu personne proposer un correctif similaire. Partagez la richesse, diffusez les connaissances et ainsi de suite, vous voyez ce que je veux dire.


Si vous avez encore des problèmes/questions:

Si vous avez des questions supplémentaires concernant ce sujet ou si vous avez toujours des problèmes pour construire correctement vos anciens projets, veuillez faire ce pour quoi Stack Overflow a été conçu: Cliquez sur "Poser une question" dans le coin supérieur droit de cette page et créez une nouvelle question . De cette façon, toute la communauté peut vous aider à résoudre ces problèmes, car les problèmes peuvent ne pas être directement (peut-être même indirectement) liés à ce piratage.

Je vous recommanderais de mentionner le fait que vous avez appliqué ce hack au tout début de votre question. Peut-être que vous voulez même créer un lien direct vers cette question, afin que les gens, qui n'ont jamais entendu parler de ce hack, puissent facilement le rechercher. Sinon, la plupart des gens seront plutôt confus lorsque vous mentionnez SDK 10.4/10.5, PPC ou GCC 4.0 en combinaison avec Xcode4, qui ne prend officiellement en charge aucun de ces éléments. Vous pourriez obtenir des commentaires plutôt stupides au lieu de réponses décentes si vous oubliez de mentionner ce hack.

Veuillez ne pas publier vos questions ou problèmes ici sous forme de réponses ou de commentaires. Les publier en tant que réponses n'a aucun sens, car ce ne sont pas des réponses et il n'y a aucun moyen pour les gens de vous répondre, sinon en utilisant des commentaires, et les commentaires peuvent ne pas offrir suffisamment de place pour une réponse décente à votre question ou une solution décente à votre problème. Et les publier en tant que commentaires signifie que vous êtes limité à très peu de place et le suivi des commentaires de réponse sera difficile car les commentaires n'ont pas de hiérarchie arborescente (en outre, ils offriront encore peu de place pour des réponses/solutions décentes). Merci.

Bien sûr, d'autres types de commentaires ainsi que de meilleures réponses à la question d'origine sont toujours les bienvenus ;-)

111
Mecki

Un autre moyen simple avec seulement Xcode4, Xcode3 n'est plus nécessaire.

$ Sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gcc/darwin/ppc /Developer/usr/libexec/gcc/darwin
$ Sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gcc/darwin/ppc /usr/libexec/gcc/darwin

MODIFICATIONS:

Pour Xcode 4.1,

Sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gcc/darwin/ppc /Developer/usr/libexec/gcc/darwin
Sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gcc/darwin/ppc /usr/libexec/gcc/darwin
Sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/powerpc-Apple-darwin10-cpp-4.2.1 /usr/bin/powerpc-Apple-darwin11-cpp-4.2.1
Sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/powerpc-Apple-darwin10-gcc-4.2.1 /usr/bin/powerpc-Apple-darwin11-gcc-4.2.1
Sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/powerpc-Apple-darwin10-g++-4.2.1 /usr/bin/powerpc-Apple-darwin11-g++-4.2.1
Sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/powerpc-Apple-darwin10-cpp-4.2.1 /Developer/usr/bin/powerpc-Apple-darwin11-cpp-4.2.1
Sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/powerpc-Apple-darwin10-gcc-4.2.1 /Developer/usr/bin/powerpc-Apple-darwin11-gcc-4.2.1
Sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/powerpc-Apple-darwin10-g++-4.2.1 /Developer/usr/bin/powerpc-Apple-darwin11-g++-4.2.1
Sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/gcc/powerpc-Apple-darwin10 /Developer/SDKs/MacOSX10.6.sdk/usr/lib/gcc

Vous ne pouvez utiliser gcc-4.2 que pour PowerPC. Et l'option "-isysroot /Developer/SDKs/MacOSX10.6.sdk" est requise, car le SDK 10.7 ne prend plus en charge PowerPC.

15
Kazuki Sakamoto

J'ai rassemblé toutes les informations de cette page, Mac OS X Hints, splhack.org, et les autres sources citées ici, et mis en place un ensemble de scripts BASH qui automatisent le processus de restauration de PPC et Prise en charge de GCC 4.0 à l'aide d'une installation XCode 3 ou uniquement des fichiers de la plate-forme iPhone de XCode 4.

Comme toujours, utilisez avec prudence! et veuillez apporter des correctifs ou des améliorations. Ces scripts n'ont été testés sur mon propre système qu'à partir de cette publication.

Vous pouvez les télécharger depuis GitHub:

8
Scott Lahteine

Si vous souhaitez que gcc fonctionne également à partir de la ligne de commande, (ainsi que ci-dessus), vous devrez également:

cd /usr/libexec/gcc/powerpc-Apple-darwin10/4.2.1
Sudo mv as as.bak
Sudo ln -s /Xcode3/usr/bin/as .
4
jas

Cela fonctionne toujours avec Xcode 4.3.2 de l'AppStore - la version où tout est autonome dans un bundle d'applications. Comme dans l'astuce d'origine, installez d'abord Xcode 3.2.6 * puis téléchargez Xcode 4 depuis l'AppStore. Ensuite, faites la magie de lien symbolique suivante:

cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
ln -s /Developer/Xcode3.2.6/SDKs/MacOSX10.5.sdk .
cd /Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2/bin/
ln -s /Developer/Xcode3.2.5/usr/llvm-gcc-4.2/bin/powerpc-Apple-darwin10-llvm-g* .
mv powerpc-Apple-darwin10-llvm-gcc-4.2 powerpc-Apple-darwin11-llvm-gcc-4.2
mv powerpc-Apple-darwin10-llvm-g++-4.2 powerpc-Apple-darwin11-llvm-g++-4.2

Les deux dernières lignes renomment darwin10 en darwin11 dans le lien symbolique - je suppose que les futures versions d'OS X nécessiteront que cela soit mis à jour le cas échéant.

  • Pour installer Xcode 3.2.x sur Lion, montez l'image disque Xcode, ouvrez Terminal, entrez les commandes (en utilisant bash, ou les commandes équivalentes si vous avez changé votre Shell par défaut):

    export COMMAND_LINE_INSTALL = 1 open "/ Volumes/Xcode et iOS SDK/Xcode et iOS SDK.mpkg"

Vous devrez également remettre l'horloge à une date antérieure au 31 mars 2012, faute de quoi la validation des certificats de sécurité échouera lors de l'installation. Vous pouvez changer la date en toute sécurité après l'installation, évidemment!

3
Avram

Frédéric Devernay a un projet GitHub appelé xcodelegacy qui fonctionne très bien pour moi sur Xcode 5.1.1, et nécessite très peu de travail pour le faire fonctionner, juste quelques téléchargements .

En utilisant son projet, j'ai réussi à créer des binaires universels contenant à la fois les architectures ppc et i386 compilées avec le SDK 10.4 en utilisant GCC 4.0, le tout à partir de Xcode 5.1.1 fonctionnant sur Yosemite.

Je me suis vérifié que les binaires universels créés fonctionnent correctement sur 10.5 Leopard et sur Yosemite lui-même.

Accueil du site ici: http://devernay.free.fr/hacks/xcodelegacy

Projet de hub Git ici: https://github.com/devernay/xcodelegacy

2
Aidan

Dans le cas où quelqu'un a besoin de restaurer d'anciens SDK et PPC dans Xcode 4.3 et 4.5, il s'agit d'un script que j'ai trouvé. Notez que vous devez définir le chemin d'accès au bundle d'application Xcode et le chemin d'accès à Installation de Xcode 3.2.6 au début du script.

#!/bin/bash

XCODE="/Applications/Xcode45-DP1.app"
XCODE3="/Xcode3"

# restore SDKs
cd "$XCODE/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"
Sudo ln -s "$XCODE3/SDKs/MacOSX10.4u.sdk" .
Sudo ln -s "$XCODE3/SDKs/MacOSX10.5.sdk" . 
Sudo ln -s "$XCODE3/SDKs/MacOSX10.6.sdk" . 

# restore gcc 4.0
cd "$XCODE/Contents/Developer/usr/bin"
Sudo ln -s "$XCODE3/usr/bin/"*4.0* .
Sudo ln -s "powerpc-Apple-darwin10-g++-4.0.1" "powerpc-Apple-darwin11-g++-4.0.1"
Sudo ln -s "powerpc-Apple-darwin10-gcc-4.0.1" "powerpc-Apple-darwin11-gcc-4.0.1"

# restore Xcode option
cd "$XCODE/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins"
Sudo ln -s "$XCODE3/Library/Xcode/Plug-ins/GCC 4.0.xcplugin" . 

Vous n'avez pas besoin de créer un lien symbolique vers le SDK 10.6 si vous utilisez Xcode 4.3 car il est fourni avec un.

De plus, le script ne restaure pas gcc 4.2 car il y a beaucoup de conflits de noms de fichiers qui le font. Mon objectif est de restaurer PPC et 4.0 est assez bon pour moi.

2
Stephen Chu

Il serait utile d'avoir un package pour simplement installer ces fichiers dans une implémentation XCode 4. (ou un tarball).

Pour info: 3.2.6 de Xcode3 n'inclut pas une architecture as avec ppc. Mais j'avais une sauvegarde de Leopard sur mon ordinateur. J'ai donc copié celui-là, semble fonctionner. (Utilisez/usr/libexec/gcc/darwin/ppc/as).

Considérant que gcc et as sont open source, le seul truc qui ne peut pas être redistribuable est le plugin xcode et le SDK 10.4 non?

1
Jason Kenney