93

由于 Apple 仅随 Xcode4 发布 SDK 10.6,因此无法使用 Xcode4 开发 PPC 应用程序。虽然可以使用 Xcode4 开发也可以在 10.5 甚至 10.4 系统上运行的应用程序(通过选择 SDK 10.6,但部署目标为 10.5 或 10.4),但它们只能在英特尔 Mac 上运行,因为您至少需要 SDK 10.5 才能运行构建 PPC 应用程序。

此外,还有一些罕见的情况,您确实需要针对 10.6 之前的 SDK 构建以获得完整的平台支持,例如,如果某些已弃用的功能已从 10.6 SDK 中完全消失,但您必须使用它并且动态链接不是在这些情况下始终是最佳选择。此外,链接到较早的 SDK 有时会简化您不应该使用的功能的开发,因为它会导致与较早的操作系统版本不兼容,将不可用,并且任何尝试使用它都会立即导致编译器或链接器错误。

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

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

我们可以将此功能恢复到 Xcode4 吗?

4

8 回答 8

112

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

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

  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
须藤 ln -s /Xcode3/SDKs/MacOSX10.4u.sdk 。
须藤 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 将无法工作。Apple 声称 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
须藤 ln -s /Xcode3/usr/bin/*4.0* 。

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

现在我们已经恢复了对 GCC 4.0 的全面支持,除了 GCC 4.0 在 Xcode4 中仍然不可选择。那是因为 Xcode4 不再有 GCC 4.0 编译器插件。幸运的是 Xcode3 插件也可以在 Xcode4 中使用,只是位置发生了根本性的变化。Apple 现在将这些插件隐藏在捆绑包的深处,并且似乎只有那里的插件可以工作,将它们放在旧位置似乎没有任何效果。

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,打开一个项目并尝试选择编译器。您应该将 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 Assembler。要使用 GCC 4.2 编译 ppc/ppc64 二进制文件,我们需要使用支持 ppc/ppc64的“ as ”版本。这是唯一一个文件(实际上它也是一个符号链接),我们必须先将其移到一边(制作备份副本),然后才能用符号链接替换它:

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

第 6 步:没有第 6 步

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

我希望此设置对您和我一样适用。我已经能够在 Xcode4 中编译所有旧项目而无需进行任何重大更改,除了必须在这里和那里更改搜索路径。

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


如果您仍有问题/疑问:

如果您对此主题还有其他问题,或者您仍然无法正确构建旧项目,请按照 Stack Overflow 的设计目标:点击本页右上角的“提问”并创建一个新问题. 这样,整个社区都可以帮助您解决这些问题,因为这些问题可能不会直接(甚至可能不是间接)与此 hack 相关。

我建议你在问题的一开始就提到你确实应用了这个技巧。也许您甚至想直接链接到这个问题,以便从未听说过此 hack 的人可以轻松查找。否则,当您提到 SDK 10.4/10.5、PPC 或 GCC 4.0 与 Xcode4 结合使用时,大多数人会感到困惑,而 Xcode4 官方都不支持这两者。如果您忘记提及此 hack,您可能会收到相当愚蠢的评论而不是体面的回复。

请不要在此处以回复或评论的形式发布您的问题或问题。将它们作为回复发布是没有意义的,因为它们不是回复,而且除了使用评论之外,人们无法回复您,并且评论可能无法提供足够的空间来对您的问题进行体面的回复或为您的问题提供体面的解决方案问题。将它们作为评论发布意味着您的空间非常有限,并且由于评论没有树状层次结构,因此很难跟踪回复评论(此外,它们仍然会为体面的回复/解决方案提供很小的空间)。谢谢你。

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

于 2011-03-17T00:39:33.543 回答
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。

于 2011-04-05T08:00:21.313 回答
8

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

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

您可以从 GitHub 下载它们:

于 2011-08-12T04:54:43.407 回答
4

如果您希望 gcc 也可以从命令行工作,(以及上述)您还需要:

cd /usr/libexec/gcc/powerpc-apple-darwin10/4.2.1
sudo mv as as.bak
sudo ln -s /Xcode3/usr/bin/as .
于 2011-03-21T16:54:46.347 回答
3

这仍然适用于 AppStore 中的 Xcode 4.3.2 - 所有内容都包含在 App 包中的版本。与最初的提示一样,首先安装 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 磁盘映像,打开终端,输入命令(使用 bash,如果您更改了默认 shell,则使用等效命令):

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

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

于 2012-07-07T19:35:01.737 回答
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 对我来说已经足够好了。

于 2012-06-12T18:56:22.327 回答
2

Frédéric Devernay 有一个名为xcodelegacy的 GitHub 项目,它在 Xcode 5.1.1 上对我来说非常好用,而且只需要很少的工作就可以启动它,只需要一些下载。

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

我已经验证自己,通用二进制文件在 10.5 Leopard 和 Yosemite 本身上都可以正常工作。

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

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

于 2014-10-26T20:48:04.913 回答
1

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

仅供参考:Xcode3 的 3.2.6 不包括 as with ppc 架构。但我的电脑上有 Leopard 的备份。所以我复制了那个,似乎有效。(使用 /usr/libexec/gcc/darwin/ppc/as )。

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

于 2011-03-18T05:47:30.197 回答