“相对于当前SDK”无法混合使用Mac Framework和iPhone静态库

时间:2010-04-26 03:53:13

标签: xcode frameworks linker

我有一个我维护的代码框架。它有mac和iphone的客观代码。其中一些是共享的。我对代码没有任何问题。这是Xcode的一个问题。

让我们为这个问题调用我的框架“AwesomeKit”。

我做的第一件事是创建一个名为“AwesomeKit”的xcode Framework项目。向它添加源文件,链接到常见的mac框架:基础,可可,碳等。它编译得很好。

然后,添加一个新的“静态库”目标,我们称之为“AwesomeKit-iPhone”,并将构建设置中的基础SDK设置为iphone设备3.1.3。

当我尝试将“现有框架”添加到AweseomKit-iPhone目标时出现问题。

  • 首先将当前构建目标更改为AwesomeKit-iPhone。
  • 右键单击任何组,然后选择“添加>现有框架...”
  • 选择UIKit.framework

UIKit将立即以红色突出显示,就像它缺失一样。它确实缺失,因为Xcode使用“Mac OS 10.6”SDK中的“相对SDK”设置。什么时候应该使用它相对于当前目标的基础sdk iphone设备3.1.3。

到底是什么?有没有人经历过这个?这真令人讨厌。

3 个答案:

答案 0 :(得分:1)

我找到了解决方法。您必须编辑project.xcodeproj目录中的project.pbxproj文件。找到“SDKROOT = XXX”之类的条目,并将其更改为真正的基本根。最好看一下正确设置的另一个project.pbxproj文件。我现在已经多次使用它,并且像魅力一样。通常在project.pbxproj中有2个或更多SDKROOT条目。

答案 1 :(得分:0)

我想我已经看到了你的问题。我对此仍然是新手,但是我发现,当模拟器和设备的通用静态库是最好将Xcode Active SDK设置为“Base SDK”而不是选择SDK。在该模式下,当前SDK是当前所选目标的SDK。

Active SDK就像覆盖命令行上的sdk一样。如果yoy设置它,将覆盖目标上的SDK设置。

所以在我的情况下我想要同时运行两个目标,一个使用模拟器sdk编译i386架构,另一个指向设备sdk,为armv6 / armv7架构构建通用lib。

我看到红色未找到的东西,我似乎记得这样做,让它消失了。我还将项目SDK设置为设备而不是Mac。请记住,目标会覆盖这一点,因此这是确保Xcode指向正确的sdk而不影响目标设置和最终构建的好方法。

答案 2 :(得分:0)

我现在正在同一条船上,XCode继续在框架前面添加错误的SDK。这是OSX和iOS目标的项目。但是我的Project Build设置似乎有些问题。您的屏幕截图不会显示它们,但您可能需要检查它们。就我而言,许​​多条目都是重复的。所以我有两个类别“架构”,完全相同。如果我改变一个,另一个随之改变。这可能与选择错误的SDK的问题有关。我认为项目文件已损坏,我现在正试图弄清楚我是否可以手动修复它。