Xcode4 包含iOS项目和相关静态库项目的工作区

Xcode4 包含iOS项目和相关静态库项目的工作区,xcode4,static-libraries,header-files,Xcode4,Static Libraries,Header Files,我正在使用Xcode 4工作区。目前Xcode 4获胜。因此,我的情况是: 我有iOS应用程序项目的工作区。此工作区中还有iOS应用程序依赖的静态库项目 解决方案#1 我尝试这样配置: 应用程序项目: 添加到目标的构建阶段>将二进制文件与产品库链接(libmystaticlib.a) 将USER\u HEADER\u SEARCH\u path设置为$(TARGET\u BUILD\u DIR)/usr/local/include$(DSTROOT)/usr/local/include

我正在使用Xcode 4工作区。目前Xcode 4获胜。因此,我的情况是:

我有iOS应用程序项目的工作区。此工作区中还有iOS应用程序依赖的静态库项目


解决方案#1 我尝试这样配置:

  • 应用程序项目:
    • 添加到目标的构建阶段>将二进制文件与产品库链接(
      libmystaticlib.a
    • USER\u HEADER\u SEARCH\u path
      设置为
      $(TARGET\u BUILD\u DIR)/usr/local/include$(DSTROOT)/usr/local/include
  • 静态库项目:
    • 将一些头文件添加到目标的构建阶段>复制头文件>公共文件
    • SKIP\u INSTALL
      设置为
      YES
重要的是:两个项目的配置必须命名相同。否则,如果我为应用程序配置了名为Distribution(Ad Hoc)的配置,为静态库配置了Release,则Xcode无法将应用程序与库链接

使用此配置,归档结果将与静态库项目中的应用程序和公共头一起归档。当然,在这种情况下,我无法共享
*.ipa
:(


解决方案#2 我还尝试了另一种配置:

  • Xcode首选项:
    • 为静态库设置源代码树,例如,
      ADDITIONS\u项目
  • 应用程序项目:
    • 添加到目标的构建阶段>将二进制文件与产品库链接(
      libmystaticlib.a
    • 用户\标题\搜索\路径设置为
      $(添加\项目)/**
  • 静态库项目:
    • 不要将任何头文件添加到Public
    • SKIP\u INSTALL
      设置为
      YES
我仍然需要关心这两个项目的配置名称。但结果是我可以成功地构建和存档。结果是我得到了存档并可以共享
*.ipa


我不喜欢第二种解决方案,因为在这种情况下,我没有从Xcode 4工作区中获得任何真正的优势。如果我在应用程序项目中添加静态库项目,我可以添加get。因此,我认为我的解决方案有问题。
有没有关于如何更好地链接静态库的建议?

我目前正在努力解决同样的问题。我没有比你进步太多。我只能在第二个解决方案中添加,你可以将需要使用的标题从库拖动到应用程序项目,而不是设置添加项目和用户标题搜索路径。这将使在应用程序项目中使其可见。在这种情况下,SKIP_INSTALL标志的值并不重要。
尽管如此,这个解决方案对我来说还是不起作用,因为我正在将一个相当大的项目,有几十个库,从Xcode 3转移到Xcode 4,这意味着要使我的项目正确构建和存档,需要进行大量的拖放。如果你能找到更好的解决方法,请告诉我们。

我们终于找到了答案。好吧,种类of、 出现此问题的原因是,Xcode 4在构建存档期间将公用标头放在InstallationBuildProductsLocation文件夹中。显然,在存档时,它会看到这些标头并尝试将其放入存档。例如,将库的公用标头文件夹路径更改为InstallationBuildProductsLocation之外的某个位置,以$(DSTROOT)/../public_文件夹并将此路径添加到标题搜索路径可以解决此问题。
这个解决方案看起来并不优雅,但对我们来说,它似乎是唯一的选择。也许你会发现它很有用。

我可以使用Core Plot作为静态库和工作区同级,有两种构建配置:

发布:

  • 在项目中,标题搜索路径:“$(内置产品目录)”
  • 在CorePlot CoCoCoatTouch中,公用标题文件夹路径:/usr/local/include
临时(针对“归档”步骤方案的构建配置,生成可共享的.ipa):

  • 在项目中,标题搜索路径:“$(内置产品目录)”/../../../public\u文件夹/**
  • 在CorePlot CoCoCoatTouch中,公用标头文件夹路径:../../Public\u folders

希望它能帮助人们不要在这件事上浪费一天的时间。

我还找到了一个可以与构建和归档一起使用的解决方案。
在静态库中,将公用标题文件夹路径设置为
。/../Headers/YourLib

在应用程序配置中,将标题搜索路径设置为
$(build\u PRODUCTS\u DIR)/../../Headers

在您的应用程序中,您可以编写
#导入


不要忘记静态库中的
Skip Install=YES
选项。

这是一个从Apple DTS获得的解决方案。我不喜欢它,因为建议使用绝对路径。但我仍然在这里发布它,也许有人觉得它适合他


如何设置静态库:

  • 通过复制发布配置添加名为“Archive”的生成配置
  • 将标题移动到复制标题生成阶段的项目组
  • 将“存档”配置的每配置生成产品路径设置为$(Build_DIR)/MyLibBuildDir。Xcode将在BuildProductsPath中创建MyLibBuildDir文件夹,然后将静态库添加到该文件夹中。您可以使用“MyLibBuildDir”或为上述文件夹提供其他名称
  • 对于所有配置,将“跳过安装”设置为“是”
  • 将“存档”的安装目录设置为$(TARGET_TEMP_DIR)/UninstalledProducts
  • 编辑其方案,将其存档操作的生成配置设置为“存档”
如何根据库设置项目链接:

  • 通过复制发布配置添加名为“Archive”的生成配置
  • 将“Archive”的库搜索路径设置为$(BUILD\u DIR)/MyLibBuildDir
  • 将用户标题搜索路径设置为workspace director根目录的递归绝对路径