我正在与Xcode 4工作区作战。目前Xcode 4胜。因此,我的情况:
我有iOS应用程序项目的工作区。 iOS应用程序还依赖于此工作空间中的静态库项目。
我尝试像这样配置:
libmystaticlib.a
); USER_HEADER_SEARCH_PATHS
设为$(TARGET_BUILD_DIR)/usr/local/include $(DSTROOT)/usr/local/include
; SKIP_INSTALL
设为YES
。重要的是:两个项目必须具有相同的配置。否则,如果我有例如app的 Distribution(Ad Hoc)配置和静态库的 Release ,则Xcode无法将应用程序与库链接。
使用此配置将结果归档到包含来自静态库项目的应用程序和公共头文件的存档。当然,在这种情况下,我无法分享*.ipa
。 :(
我还尝试了另一种配置:
ADDITIONS_PROJECT
; libmystaticlib.a
); USER_HEADER_SEARCH_PATHS
设为$(ADDITIONS_PROJECT)/**
; SKIP_INSTALL
设为YES
。我仍然需要关心这两个项目的配置名称。但结果我可以成功构建和存档。在结果中,我获得了存档,我可以分享*.ipa
。
我不喜欢第二种解决方案,因为在这种情况下,我没有得到Xcode 4工作区的任何真正优势。如果我在app项目中添加静态lib项目,我可以添加相同的效果。因此,我认为我的解决方案有问题。 有什么建议如何更好地链接静态库?
答案 0 :(得分:10)
我还找到了一个适用于构建和存档的解决方案
在静态库中,将公共标题文件夹路径设置为../../Headers/YourLib
在您的应用配置中,将标题搜索路径设置为$(BUILT_PRODUCTS_DIR)/../../Headers
在您的应用中,您可以对#import <YourLib/YourFile.h>
不要忘记静态库中的Skip Install = YES
选项。
答案 1 :(得分:2)
我们终于找到了答案。好吧,有点儿。出现此问题是因为Xcode 4在构建存档期间将公共标头放入InstallationBuildProductsLocation文件夹中。显然,归档时,它会看到标题并尝试将它们放入存档中。将公共标题文件夹路径更改为InstallationBuildProductsLocation之外的某个位置,例如,更改为$(DSTROOT)/../ public_folders并将此路径添加到标题搜索路径可解决问题。 这个解决方案看起来不是很优雅,但对我们来说似乎是唯一的选择。可能你会觉得这很有用。
答案 2 :(得分:2)
以下是来自Apple DTS的解决方案。我不喜欢它,因为建议使用绝对路径。但我仍然在这里发表,也许有人觉得这对他来说是对的。
如何设置静态库:
如何设置链接库的项目:
答案 3 :(得分:1)
到目前为止,我也遇到了同样的问题,但确实找到了一个最小权衡的解决方案:
这需要Dervied Data作为您的构建位置。 我将Public Headers Folder路径设置为../usr/local/include 这将确保标题不会被放入档案中。
对于应用程序,我将标题搜索路径设置为: $(OBJROOT)在/ usr /本地/包括 $(SYMROOT)的/ usr /本地/包括
由于在构建档案时路径略有变化,因此需要2个条目,而我还没有想出如何用一个变量来描述它。
这里的好处是,它不会破坏代码意义。所以除了有两个条目而不是一个,这个工作完全正常。
答案 4 :(得分:0)
此刻我正在努力解决同样的问题。我没有比你进步得更远。我只能在第二个解决方案中添加,您可以将需要使用的标题从库中拖动到应用程序项目,而不是设置ADDITIONS_PROJECT和USER_HEADER_SEARCH_PATH。这将使它们在app项目中可见。在这种情况下,SKIP_INSTALL标志的值无关紧要。 尽管如此,这个解决方案并不适合我,因为我正在移动相当大的项目,有几十个库,从Xcode 3到Xcode 4,这意味着我的项目构建和存档正确。如果您找到更好的方法,请告诉我们。
答案 5 :(得分:0)
我可以使用Core Plot作为静态库和工作区兄弟,有两个构建配置:
推出:
AdHoc(在Scheme中为“存档”步骤构建配置,生成可共享的.ipa):
希望它能帮助别人不浪费一天。