我们怎样才能恢复ppc / ppc64以及完整的10.4 / 10.5 SDK支持Xcode 4?

由于苹果只用Xcode4发布SDK 10.6,因此用Xcode4开发PPC应用程序变得不可能。 虽然可以使用Xcode4开发应用程序,也可以运行在10.5甚至10.4系统上(通过selectSDK 10.6,但部署目标是10.5或10.4),但它们只能在Intel Mac上运行,因为您至less需要SDK 10.5build立PPC应用程序。

此外,还有一些极less数情况,您需要在10.6之前完全针对SDK进行完整的平台支持,例如,如果某些弃用的function已经完全从10.6 SDK中消失了,但您必须使用它,而dynamic链接不是在这些情况下总是最好的select。 另外,与较早版本的SDK链接有时也会使开发变得简单,因为它会导致与以前的操作系统版本不兼容,并且无法使用,从而导致编译器或链接器错误。

最后但并非最不重要的一点,苹果也从Xcode4中删除了GCC 4.0的支持,这对于某些软件的正确构build可能是必要的,苹果公司从未允许在使用SDK 10.4的时候使用GCC 4.2编译软件,即使我几乎不相信这会真的引起任何问题,毕竟使用GCC 4.2和SDK 10.6构build的软件也可以在Mac OS 10.4上运行,只要部署目标已经正确设置,并且没有使用MacOS 10.4下不可用的function。

当然,你可以在Xcode4旁边安装Xcode3,但是这意味着你必须放弃Xcode4的所有新function,并且继续使用过时的Xcode3 IDE。 如果你也可以在同一个IDE中pipe理你所有的旧项目,并从新的function中受益,那肯定会好很多。 并不是所有的项目在可预见的将来都只能达到10.6或英特尔。 此外,我严格反对早日取消对旧平台的支持。

我们可以将这个function恢复到Xcode4吗?

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

在开始“ 如何完成 ”部分之前,请先阅读有关我的修补程序/修补程序的说明。 从一开始,主要目标就是:

  1. 保持所有修改为绝对最小值。
    我们希望保持Xcode设置尽可能原始。

  2. 尽一切办法,尽量避免修补或修改任何文件。
    我们希望所有文件保持不变,并保持原有内容。

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

我能够保持所有这些目标。 几乎所有事情都是通过创build符号链接来完成的。 只有一个现有的符号链接需要被replace,我们会在replace之前进行备份,以防万一。

如果您不是terminal操作专家,我强烈build议您将所有terminal命令从我的答复中复制/粘贴到您的terminal,以避免input错误。 请记住,即使间距,报价,尤其是大写可能是重要的。 一行一行地复制/粘贴,一次不能超过一行,并在每一行粘贴后执行命令。 如果有任何操作提示您input密码,这将是当前login的pipe理员用户的密码(input时不显示击键,这是正常的,不要担心,只需input密码并按回车键;重新input – 如果你有一个错字,并再次提示)。

条件

在我们开始之前,请确保以下条件成立:

  • 您以pipe理员用户身份login。
  • 您已经启动了Terminal.app(应用程序/实用程序),并打开了一个terminal窗口。
  • 您有Xcode3(例如3.2.5)和Xcode4磁盘映像(DMG)或安装程序的副本。
  • 如果您已经安装了Xcode版本,请考虑先卸载它 ,以便您可以使用新的/干净的设置。 卸载Xcode不会删除您的首选项,配色scheme或键绑定自定义。 理想情况下,你会从一个没有安装Xcode版本(既不是3也不是4)的系统开始。

第1步:安装Xcode3

重要 :不要安装Xcode3的“ 系统工具 ”或“ Unix开发 ”包。
无论你想安装“ Mac OS X 10.4 SDK ”和/或“ 文档 ”取决于你。 如果这是一个Xcode3与iOS SDKs,无论你是否安装这些也取决于你。

您可以自由select任何目标文件夹进行安装。 对于本指南,我select了“ / Xcode3 ”,但随意select一个不同的。 只要确保相应地更改所有terminal命令。

这里给出的步骤的顺序通常并不重要,但我强烈build议您不要更换第1步和第2步.Xcode总是在选定的目标文件夹之外安装一些文件并相信我,最后您要这些文件的Xcode4版本在您的磁盘上。 通过在Xcode4之前安装Xcode3,您可以确保Xcode4将覆盖这些文件,如果有必要。 我曾经交换过第一步和第二步,最后我遇到了一些相当奇怪的问题,可能与错误的顺序有关(我不能肯定地说,但是按照正确的顺序重新安装后,问题就没有了)。

第2步:安装Xcode4

select你喜欢的任何数据包。 安装“ 系统工具 ”是可取的,但不是绝对必要的(尽pipe大多数人迟早会错过这个function)。

再次,随意挑选你喜欢的任何目标文件夹。 对于本指南,我select了普通的目标文件夹“ / Developer ”,如果您采取不同的操作,请相应地更改所有terminal命令。

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

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

  cd / Developer / SDKs
 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的select列表中。 试试看,如果你喜欢。 启动Xcode4,打开一个项目,尝试更改选定的SDK。 那很简单,是吧? 在继续下一步之前,一定要再次closuresXcode4(应用程序,而不仅仅是窗口)。

第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上完美地编译)。

回到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。 

现在我们已经恢复了完整的GCC 4.0支持,除了GCC 4.0在Xcode4中仍然不能select。 这是因为Xcode4已经没有GCC 4.0编译器插件了。 幸运的是,Xcode3插件也可以在Xcode4中使用,只是位置发生了根本性的变化。 现在苹果将这些插件隐藏在一个捆绑包内,只有插件似乎能够工作,把它们放到原来的位置似乎没有任何作用。

  cd / Developer / Library / 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,打开一个项目并尝试select编译器。 你应该有GCC 4.0回到名单上。 现在,您实际上已经可以selectSDK 10.4或10.5,GCC 4.0,您应该没有问题来构buildPPC二进制文件。 只需select“ 其他… ”作为“ 架构 ”构build设置,然后手动input“ ppc ”,然后更改“ 有效架构 ”以包含“ ppc ”。 我们差不多完成了,只是尝试使用GCC 4.2和SDK 10.5来构buildPPC二进制文件仍然会失败。

第5步:恢复GCC 4.2的PPC支持

由于苹果只支持Xcode4中的英特尔平台,并不是所有的GCC 4.2工具都是用PPC支持的。 有一个没有PPC支持的重要工具,工具名为“ as ”,它是GNU汇编程序。 要使用GCC 4.2编译ppc / ppc64二进制文件,我们需要使用支持ppc / ppc64的“ as ”版本。 这是唯一的文件(实际上它也是一个符号链接),我们必须首先移动(做一个备份副本),然后才能用符号链接代替它:

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

第六步:没有第六步

这就是所有人。 考虑到这是多么容易,你可以想象,苹果当然没有放弃SDK 10.4 / 10.5或ppc / ppc64或GCC 4.0的支持,因为这是必要的,他们放弃了所有这一切,因为他们想放弃它。

我希望这个设置对于你来说同样适用于我。 我已经能够在没有任何重大改变的情况下编译Xcode4中的所有旧项目,除了不得不在这里或那里修改searchpath。

PS:
我在这里回答自己的问题可能看起来很奇怪,但是由于我已经find了如何解决这个问题,所以我想与社区分享我的知识,因为我相信这对所有的MacOS都是非常有价值的input那里的开发人员。 这个问题在很多地方都被问过很多次了,到目前为止,我从来没有见过任何人提出类似的问题。 分享财富,传播知识等等,你知道我的意思。

如果您仍然有问题/问题:

如果您有关于这个主题的其他问题,或者如果您仍然有问题来正确构build您的旧项目,请做什么堆栈溢出devise:点击本页面右上angular的“问题”,并创build一个新的问题。 这样整个社区可以帮助你解决这些问题,因为这些问题可能不是直接(可能不是间接)与这种黑客有关。

我build议你提到你在问题的开始就应用这个黑客的事实。 也许你甚至想直接把这个问题联系起来,这样那些从来没有听说过这个黑客的人可以很容易地查到它。 否则当你提到SDK 10.4 / 10.5,PPC或GCC 4.0与Xcode4相结合时,大多数人会感到相当困惑,而Xcode4正式支持这两者。 如果你忘了提到这个黑客,你可能会得到相当愚蠢的评论而不是体面的回复。

请不要在这里张贴您的问题或问题作为答复或评论。 张贴他们作为答复是没有意义的,因为他们没有答复,也没有办法人们可以回复给你,其他然后使用评论,并且评论可能不会提供足够的空间来回答你的问题或体面的解决scheme给你的问题。 并发表评论意味着你是有限的空间和跟踪回复评论将是艰难的,因为评论没有树状分层结构(进一步他们仍然会提供一点体面的答复/解决scheme的余地)。 谢谢。

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

只有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 

EDITS:

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

我已经汇集了来自这个页面的所有信息,Mac OS X Hints,splhack.org以及这里引用的其他来源,并且汇集了一组BASH脚本,这些脚本可以自动恢复PPC和GCC 4.0支持, XCode 3安装或只是XCode 4自己的iPhone平台文件。

一如既往,谨慎使用! 并请提供任何修复或改进。 这些脚本只在本post的自己的系统上进行过testing。

你可以从GitHub下载它们:

如果你想让gcc从命令行工作(和上面一样),你还需要:

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

这仍然适用于从AppStore的Xcode 4.3.2 – 一切都是自包含在应用程序包中的版本。 正如在原始提示中,首先安装Xcode 3.2.6,然后从AppStore下载Xcode 4。 然后执行以下符号链接魔术:

 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,input命令(如果已更改缺省shell,请使用bash或等价的命令):

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

您还需要将时钟设置回2012年3月31日之前的date,否则安全证书在安装过程中将无法通过validation。 显然安装后你可以安全地更改date!

如果有人需要在Xcode 4.3和4.5中恢复旧的SDK和PPC编译器,这是我想出的一个脚本。 请注意,您需要在脚本开始处设置Xcode应用程序包的path和Xcode 3.2.6安装的path。

 #!/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对我来说已经足够了。

FrédéricDevernay有一个名为xcodelegacy的GitHub项目,它在Xcode 5.1.1上对我来说是非常棒的,只需要一些下载就可以完成这个任务。

使用他的项目,我已经成功地创build了通用二进制文件,其中包含使用GCC 4.0编译10.4 SDK的ppc和i386体系结构,所有这些都在Yosemite上运行的Xcode 5.1.1中进行。

我已经validation了自己,通用的二进制文件在10.5豹和优胜美地本身工作得很好。

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

Git枢纽项目在这里: https : //github.com/devernay/xcodelegacy

将这些文件安装到XCode 4实现中将会很有用。 (或者tarball)。

仅供参考:Xcode3的3.2.6不包含ppc体系结构。 但是我在电脑上备份了Leopard。 所以我抄袭了一个,似乎工作。 (使用/ usr / libexec / gcc / darwin / ppc / as)。

考虑到gcc和开源的唯一的东西,可能不可重新分配的Xcode插件和10.4 SDK的权利?