我无法链接到Xcode 5中的静态库。我并不熟悉很多与我一样的构建设置信息。我确实阅读了有关在Pro iOS 5工具中构建和使用静态库的章节。在创建静态库之后它告诉我要做的是在Build Phases选项卡中链接到框架。那部分非常简单。然后它在“构建设置”中的“标题搜索路径”下面添加:
$(BUILT_PRODUCTS_DIR)
然后为了使用我的静态库,我只是这样导入它:
#import "ConversionCalculator/ConversionCalculator.h"
所以过去一直工作到昨天。我尝试在我的项目中添加一个新的静态库,但似乎没有用。所以我清理了我的项目,并再次尝试重建,但现在Xcode抱怨#import "ConversionCalculator/ConversionCalculator.h"
。它说
词法或预处理器问题。找不到“ConversionCalculator / ConversionCalculator.h”文件。
我想知道是否有人有关于调试这个的任何提示。我看过这样的不同教程: http://blog.stevex.net/2012/04/static-libraries-in-xcode/ http://cocoamanifest.net/articles/2011/06/library-management-with-xcode-workspaces.html http://www.raywenderlich.com/41377/creating-a-status-library-in-ios-tutorial
但我似乎无法找到链接到静态库的“黄金方式”,或者如何解决为什么Xcode无法找到我的文件。我的文件结构在我的机器上设置如下:
Projects\
DistanceCalculator\DistanceCalculator.xcodeproj
ConversionCalculator\ConversionCalculator.xcodeproj
DistanceCalculator.workspace
就像我说的那样,当我按照Pro iOS 5工具书中的教程进行操作时,这一切都已经过去了。现在我不知道为什么我的工作区在以前使用它时找不到ConversionCalculator。我发现难以理解的部分是不同的文章说出了关于标题搜索路径的不同内容,我不确定填充该字段的最佳方法是什么。有什么想法吗?提前谢谢!
编辑: 我将补充一点,我可以为设备构建而不会出错。但是,当我切换到iPhone模拟器时,它给我一个关于无法找到该文件的错误。我也看到了这个警告:
ConversionCalculator was rejected as an implicit dependency for 'libConversionCalculator.a' because its architectures 'i386' didn't contain all required architectures 'i386 x86_64'
看着这一点,我不确定这意味着什么。如果这意味着我的库不是为所有体系结构构建的,那么我只是尝试根据上面链接中的wenderlich文章创建一个为所有体系结构构建的Target。这似乎工作,当我去dervieddata文件夹,我看到调试,发布和通用,我看到libConversionCalculator.a文件。但是当我回到工作区并尝试为模拟器重建项目时,我发现无法找到文件错误和隐式警告。
编辑#2: 我刚刚在Xcode上看到一个警告标志,表示升级到推荐的Build Settings。现在我没有错误。不确定发生了什么......但我猜没有错误是好的。
答案 0 :(得分:1)
我会按照Configuration Your Application中Introduction to Using Static Libraries in iOS章中的Xcode帮助主题“链接到您的图书馆”中提供的说明进行操作 (您也可以在Xcode帮助中搜索。)
除了我建议总是使用尖括号从库中包含你的标题:
#import <ConversionCalculator/ConversionCalculator.h>
使用双引号可能会无意中在相对于写入此import指令的文件的某个子文件夹中搜索和查找具有相同名称的文件。只有在任何子文件夹中没有文件后,预处理器才会开始使用指定的标题搜索路径进行搜索。
使用尖括号,预处理器只会立即搜索指定的标题搜索路径。
因此,由于您实际上想要找到对应库的标题,因此请始终使用尖括号。
注意:如果您按照创建静态库项目的建议,则无需在目标中明确设置标题搜索路径,该路径将再次链接到library:Xcode已经添加了一个搜索路径:
$(BUILT_PRODUCTS_DIR)/includes
您的图书馆标题位于
$(BUILT_PRODUCTS_DIR)/includes/<product-name>
通过iOS静态库目标的“Copy-Files”阶段放置,其“Destination”设置为“Products Directory”,其“Subpath”设置为“includes / $ {PRODUCT_NAME}”per默认值。
您可以将这些默认设置更改为其他合理且合理的值。 (如果你这样做,请考虑Xcode默认搜索路径的后果!)