我们如何将ppc / ppc64以及对10.4 / 10.5 SDK的完整支持还原到Xcode 4?


93

由于Apple仅随Xcode4一起提供了SDK 10.6,因此无法使用Xcode4开发PPC应用程序。尽管可以使用Xcode4开发应用程序,这些应用程序也可以在10.5甚至在10.4系统上运行(通过选择SDK 10.6,但部署目标为10.5或10.4),它们只能在Intel Mac上运行,因为您至少需要SDK 10.5才能建立PPC应用程序。

此外,在极少数情况下,您确实需要在10.6之前的SDK上进行构建以提供完整的平台支持,例如,如果某些不推荐使用的功能已从10.6 SDK中完全消失,但是您必须使用它,而动态链接不是在这些情况下始终是最好的选择。另外,与较早版本的SDK链接有时会简化开发过程,因为您不应该使用该功能,因为它会导致与较早版本的OS不兼容,将不可用,并且任何尝试使用它的尝试都会立即导致编译器或链接器错误。

最后但并非最不重要的一点是,Apple还从Xcode4中删除了GCC 4.0支持,这对于某些软件的正确构建可能是必需的,并且Apple从未允许在使用SDK 10.4时使用GCC 4.2编译软件,尽管我几乎不相信这会导致任何问题,只要已经正确设置了部署目标并且未使用MacOS 10.4下不可用的功能,所有使用GCC 4.2和SDK 10.6构建的软件都可以在Mac OS 10.4上运行而没有任何问题。

当然,您总是可以在Xcode4旁边并行安装Xcode3,但这意味着您必须放弃Xcode4的所有(新功能),并继续使用过时的Xcode3 IDE。如果您还可以与新项目在同一IDE中管理所有旧项目,并从任何可用的新功能中受益,那肯定会更好。并非所有项目都只能在可预见的将来开发成10.6或Intel。此外,我严格反对在真正需要的时候取消对旧平台的支持。

我们可以将此功能还原到Xcode4吗?

Answers:


111

快速的答案是:是的,我们可以!

在进入“ 如何完成 ”部分之前,这里有一些有关我的补丁/黑客/补丁的说明。从一开始,主要目标就是:

  1. 将所有修改保持在最低限度。
    我们希望Xcode设置尽可能保持原始。

  2. 务必尝试避免打补丁或修改任何文件。
    我们希望所有文件保持不变,并保留其原始内容。

  3. 除非绝对必要,否则请尽量避免移动或复制文件。

我能够实现所有这些目标。几乎所有的事情都是通过创建符号链接来完成的。以防万一,只需替换一个现有的符号链接,我们将在替换之前对其进行备份。

如果您不是终端操作方面的专家,我强烈建议您从我的回复中将所有终端命令复制/粘贴到您的终端,以避免输入错误。请记住,即使是空格,引号,尤其是大写字母也很重要。逐行复制/粘贴它们,一次不超过一行,并在每行粘贴后按回车键以执行命令。如果有任何操作提示您输入密码,则该密码将为当前登录的管理员用户的密码(键入时不会显示您的击键,这是正常现象,请放心,只需继续输入密码并按回车即可;重新输入-尝试输入是否有错,并再次提示。

先决条件

在开始之前,请确保满足以下条件:

  • 您以管理员用户身份登录。
  • 您已经启动Terminal.app(应用程序/实用程序),并且打开了一个终端窗口。
  • 您拥有Xcode3(例如3.2.5)和Xcode4磁盘映像(DMG)或安装程序的副本。
  • 如果您已经安装了Xcode版本,请考虑先将其卸载,然后从全新/干净的安装开始。卸载Xcode不会删除您的首选项,配色方案或键绑定自定义项。理想情况下,您应该从当前未安装Xcode版本(3或4)的系统开始。

步骤1:安装Xcode3

重要提示:请勿安装Xcode3的“ 系统工具 ”或“ Unix开发 ”软件包。
是否要安装“ Mac OS X 10.4 SDK ”和/或“ 文档 ”由您决定。如果那是带有iOS SDK的Xcode3,则是否安装它们也取决于您。

您可以自由选择安装的任何目标文件夹。在本指南中,我选择了“ / Xcode3 ”,但可以选择其他一个。只要确保相应地更改所有终端命令即可。

通常,此处给出的步骤顺序并不是很重要,但是我强烈建议您不要交换步骤1和步骤2。Xcode总是在选定的目标文件夹之外安装几个文件,并信任我,最后您需要磁盘上这些文件的Xcode4版本。通过在Xcode4之前安装Xcode3,可以确保Xcode4会在必要时覆盖这些文件。我一次交换了步骤1和2,最后我遇到了一些很奇怪的问题,这些问题可能与不正确的顺序有关(我不能肯定地说,但是按照正确的顺序重新安装后,问题就消失了)。

步骤2:安装Xcode4

选择您喜欢的任何数据包。建议安装“ 系统工具 ”,但并非绝对必要(尽管大多数人迟早会错过该功能)。

同样,请随意选择您喜欢的任何目标文件夹。在本指南中,我选择了普通的目标文件夹“ / Developer ”,如果您使用其他文件夹,请相应地更改所有终端命令。

步骤3:恢复10.4 / 10.5 SDK支持

切换到您的终端窗口并运行以下命令:

cd /开发人员/ SDK
sudo ln -s /Xcode3/SDKs/MacOSX10.4u.sdk。
sudo ln -s /Xcode3/SDKs/MacOSX10.5.sdk。

当然,如果在步骤1中还安装了SDK 10.4,则仅对10.4u运行命令。

这足以将SDK 10.5(可能还有10.4)带回到Xcode4中的选择列表。如果您愿意,请尝试一下。启动Xcode4,打开一个项目,尝试更改所选的SDK。那很容易,对吗?在继续下一步之前,请确保再次关闭Xcode4(应用程序,而不仅仅是窗口)。

步骤4:还原GCC 4.0支持

如果尚未安装MacOS 10.4 SDK,或者不打算使用它,则可以安全地跳过此步骤并继续执行步骤5。

要使用SDK 10.4,您必须使用GCC 4.0,GCC 4.2将无法使用。苹果声称GCC 4.2与SDK 10.4不兼容,好吧,如果您问我,这是一个骗局。我已经不止一次地覆盖了这个限制,因此从来没有最微小的问题。修改SDK 10.4会很容易,以便Xcode允许您使用GCC 4.2,但是我的目标是避免所有文件修改,因此我们只是将GCC 4.0支持添加回Xcode,这也是一件好事,因为有些项目确实依赖于GCC 4.0(例如,GCC 4.2中存在一些错误,这些错误会阻止有效的内联汇编代码正确编译,而同一代码在GCC 4.0和GCC 4.4上可以完美地编译)。

返回终端:

cd /开发人员/ usr / bin
sudo ln -s /Xcode3/usr/bin/*4.0*。

光盘/ Developer / usr / libexec / gcc / powerpc-apple-darwin10
须藤ln -s /Xcode3/usr/libexec/gcc/powerpc-apple-darwin10/4.0.1。

目前,我们已经恢复了对GCC 4.0的完全支持,除了在Xcode4中仍无法选择GCC 4.0的事实。这是因为Xcode4不再具有GCC 4.0编译器插件。幸运的是,Xcode3插件也可以在Xcode4中使用,只是位置发生了根本变化。苹果现在将这些插件隐藏在捆绑软件的深处,并且只有那里的插件才起作用,将它们放回原来的位置似乎没有效果。

cd /开发人员/库/ Xcode / PrivatePlugIns
cd Xcode3Core.ideplugin / Contents / SharedSupport / Developer / Library / Xcode / Plug-ins
sudo ln -s“ / Xcode3 / Library / Xcode / Plug-ins / GCC 4.0.xcplugin”。

现在再次启动Xcode4,打开一个项目并尝试选择编译器。您应该将GCC 4.0重新列出。现在,您实际上已经可以选择SDK 10.4或10.5,GCC 4.0,并且构建PPC二进制文件应该没有问题。只需为“ 体系结构 ”构建设置选择“ 其他... ” ,然后手动输入“ ppc ”,然后更改“ 有效体系结构 ”以包含“ ppc ”。我们几乎完成了,只是尝试使用GCC 4.2和SDK 10.5构建PPC二进制文件仍然会失败。

步骤5:恢复对GCC 4.2的PPC支持

由于Apple仅在Xcode4中支持Intel平台,因此并非所有GCC 4.2工具都具有PPC支持。有一个不支持PPC的重要工具,该工具被命名为“ as ”,它是GNU汇编器。要使用GCC 4.2编译ppc / ppc64二进制文件,我们需要使用支持ppc / ppc64 的“ as ”版本。这是我们必须首先移开(制作备份副本)的唯一文件(实际上也是符号链接),然后才能用符号链接替换它:

光盘/Developer/usr/libexec/gcc/powerpc-apple-darwin10/4.2.1
须藤MV as.bak
须藤ln -s / Xcode3 / usr / bin / as。

步骤6:没有步骤6

那是所有人。考虑到这有多么容易,您可以想象苹果肯定没有放弃SDK 10.4 / 10.5或ppc / ppc64或GCC 4.0支持,因为这是必须的,他们放弃了所有这些,因为他们想放弃它。

我希望此设置对您和我都一样有效。除了不必在此处和此处更改搜索路径之外,我已经能够在Xcode4中编译所有旧项目,而无需进行任何重大更改。

PS:
我在这里回答自己的问题可能看起来很奇怪,但是由于我已经找到了自己解决所有问题的方法,因此我想与社区分享我的知识,因为我认为这对所有MacOS开发人员。这个问题在很多地方被问过很多次,到目前为止,我还从未见过有人提出过类似的解决方案。分享财富,传播知识等等,您知道我的意思。


如果您仍有问题/疑问:

如果您对此主题还有其他疑问,或者仍然无法正确构建旧项目,请执行堆栈溢出的设计目的:单击此页面右上角的“提问”,然后创建一个新问题。 。这样,整个社区就可以帮助您解决这些问题,因为这些问题可能与该黑客没有直接(甚至不是间接)相关。

我建议您提及一个事实,即您在问题的开始就确实应用了此技巧。也许您甚至想直接链接到此问题,以便从未听说过此黑客的人们可以轻松地查找它。否则,当您将SDK 10.4 / 10.5,PPC或GCC 4.0与Xcode4结合使用时,大多数人会很困惑,后者正式不支持这两种方式。如果您忘记提及此hack,您可能会得到愚蠢的评论,而不是像样的答复。

请不要在此处以答复或评论的形式发布您的问题或问题。将它们作为答复发布是没有意义的,因为它们不是答复,并且人们无法使用评论来回复您,其他方式是使用评论,并且评论可能没有足够的空间为您提供对问题的体贴或对您的体面解决方案问题。并且将它们作为评论发布意味着您将被限制在很小的空间内,并且由于评论没有像树一样的层次结构,因此很难跟踪回复评论(此外,它们仍然为体面的回复/解决方案提供了很小的空间)。谢谢。

当然,总是欢迎其他类型的评论以及对原始问题的更好答复;-)


6
这是个赞。我可能会复制旧的SDK和编译器文件,而不仅仅是符号链接它们,以便能够卸载其余的Xcode3。不是因为我喜欢Xcode4;而是因为我喜欢Xcode4。完全是因为我需要磁盘空间。谢谢!
伊凡·武西卡(IvanVučica)2011年

我无法使它正常工作。请参阅我的SO问题:stackoverflow.com/questions/5409860/...
paleozogt

除此之外,要为i686目标构建gcc 4.0,我必须执行以下操作:sudo ln -s /Xcode3/usr/libexec/gcc/i686-apple-darwin10/4.0.1 / Developer / usr / libexec / gcc / i686-apple-darwin10 / sudo ln -s /Developer/SDKs/MacOSX10.6.sdk/usr/lib/gcc/i686-apple-darwin10/4.0.1/ / Developer / usr / lib / gcc / i686- apple-darwin10 / sudo ln -s /Developer/SDKs/MacOSX10.6.sdk/usr/lib/gcc/i686-apple-darwin10/4.0.1/ / usr / lib / gcc / i686-apple-darwin10 /
标记凯里

2
这条线for SRC_FILE in /Xcode3/usr/bin/*4.0*; do sudo ln -s "$SRC_FILE" .; done可以简化为sudo ln -s /Xcode3/usr/bin/*4.0* .
Adam Rosenfield

1
@cullub转到developer.apple.com,使用您的开发人员ID登录,选择“ SDK”,向下滚动并选择“ Xcode”,选择“下载”,向下滚动并选择“其他工具”,搜索“ Xcode 3”在搜索字段中。
梅基2015年

15

仅使用Xcode4的另一种简便方法是,不再需要Xcode3。

$ 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

编辑:

对于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

您只能将gcc-4.2用于PowerPC。并且需要“ -isysroot /Developer/SDKs/MacOSX10.6.sdk”选项,因为10.7 SDK不再支持PowerPC。


3
大声笑,所以苹果在iOS编译器中支持PPC :-P但是,您应该注意,这只会恢复PPC兼容性,而不会恢复SDK或GCC4.0支持。仍然值得赞扬。
Mecki 2011年

比上面的hacky和简单得多,这是绝对的最低要求。
Diziet 2011年

在Xcode 4.1上启用PowerPC工具链。仅适用于gcc-4.2。它需要“ -isysroot /Developer/SDKs/MacOSX10.6.sdk”选项,因为10.7 SDK不再具有PowerPC的头文件。
坂本一树(Kazuki Sakamoto)

stackoverflow.com/questions/11989007与获取10.6 SDK有关。即它在Xcode 4.1中
fommil

8

我收集了该页面上的所有信息,Mac OS X提示,splhack.org以及此处引用的其他资源,并整理了一组BASH脚本,这些脚本使用以下任一方法自动恢复PPC和GCC 4.0支持: XCode 3安装或XCode 4自己的iPhone平台文件。

与往常一样,请谨慎使用!并请提供任何修复或改进。截止本文发布之时,这些脚本仅在我自己的系统上进行了测试。

您可以从GitHub下载它们:


哇,太酷了:-)我想亲自制作一个这样的脚本,但没有时间去做。感谢您与我们分享。
梅基

4

如果您还希望gcc从命令行运行(以及上述),则还需要:

cd /usr/libexec/gcc/powerpc-apple-darwin10/4.2.1
sudo mv as as.bak
sudo ln -s /Xcode3/usr/bin/as .

3

这仍然适用于AppStore中的Xcode 4.3.2-该版本中所有内容均独立包含在App捆绑包中。按照原始提示,先安装Xcode 3.2.6 *,然后从AppStore下载Xcode 4。然后执行以下symlink魔术:

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

最后两行在符号链接中将darwin10重命名为darwin11-我猜测OS X的未来版本将要求对此进行适当更新。

  • 要在Lion上安装Xcode 3.2.x,请挂载Xcode磁盘映像,打开Terminal,输入命令(使用bash或等效命令,如果您更改了默认shell):

    导出COMMAND_LINE_INSTALL = 1打开“ / Volumes / Xcode和iOS SDK / Xcode和iOS SDK.mpkg”

您还需要将时钟重新设置为2012年3月31日之前的日期,否则安全证书将在安装期间无法通过验证。安装后,您可以放心地再次更改日期!


2

如果有人需要在Xcode 4.3和4.5中还原旧的SDK和PPC编译器,这是我想到的脚本。请注意,您需要在脚本的开头设置Xcode应用程序包的路径和Xcode 3.2.6安装的路径。

#!/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" . 

如果您使用的是Xcode 4.3,则无需符号链接10.6 SDK,因为它附带一个。

脚本也不会还原gcc 4.2,因为这样做有很多文件名冲突。我的目标是还原PPC编译器,而4.0对我来说已经足够了。


2

FrédéricDevernay拥有一个名为xcodelegacy的GitHub项目,该项目在Xcode 5.1.1上对我来说效果非常好,并且只需进行一些下载即可完成工作。

通过他的项目,我设法创建了通用的二进制文件,其中包含使用GCC 4.0用10.4 SDK编译的ppc和i386架构,所有这些都在Yosemite上运行的Xcode 5.1.1内完成。

我已经证明自己,通用二进制文件在10.5 Leopard和优胜美地本身上都能正常工作。

主页在这里:http : //devernay.free.fr/hacks/xcodelegacy

这里的Git中心项目:https : //github.com/devernay/xcodelegacy


1

拥有一个仅将这些文件安装到XCode 4实现中的软件包将很有用。(或压缩包)。

仅供参考:Xcode3的3.2.6不包括ppc架构。但是我在计算机上备份了Leopard。所以我复制了一个,似乎正常。(使用/ usr / libexec / gcc / darwin / ppc / as)。

考虑到gcc和开源都是唯一的,可能无法重新分发的东西是xcode插件和10.4 SDK,对吗?


我不是许可问题方面的专家;“ as -v”表示“ Apple Inc版本为cctools-795〜45,GNU汇编程序版本为1.38”,但是,即使Apple修改了“ as”的源代码,它仍然获得GPL的许可(修改后的GPL代码会自动再次使用GPL代码),因此,如果GPL允许您执行此操作,则应该可以。
Mecki 2011年

好的,我想为什么我们必须替换“ as”的理由是错误的。Xcode 3.2.6的“ as”似乎也可以使用,即使它仅是Intel,但它似乎仍然能够创建ppc程序集输出。我将解决我的最初答复。感谢您指出了这一点!
Mecki 2011年

实际上,至少从命令行来看,它不是。它一直在抱怨,直到我从豹备份中抢到为止。
詹森·肯尼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.