编译,构build或存档问题与Xcode 4(和依赖项)
这个问题在过去的几个星期里已经有所发展,以涵盖xcode4的更多一般性问题(以及旧版xcode的升级项目)。
但是,许多问题可以通过遵循相同的指令来解决。
如果您遇到以下任何问题,请尝试接受的答案中的方法:
- Xcode 4无法存档应用程序
- Xcode 4创build一个不可用的存档
- Xcode 4不会创build一个.ipa
- 由于预处理器错误,Xcode 4无法编译
- Xcode 4无法find标题
- Xcode 4的代码完成不起作用
- 项目依赖不会编译
- 添加依赖会导致上述任何问题
原来的问题
标题: Xcode 4中的“词法或预处理器问题文件未find”
我有一个在Xcode 4中的项目,将build立罚款,并在设备和模拟器上运行,但是当试图存档错误时,查找与静态库相关的头文件:
In file included from /Volumes/Development/Path/LBProject/LBProject/LBProject-Prefix.pch:15: In file included from /Volumes/Development/Path/LBProject/LBFDefines.h:23: In file included from /Volumes/Development/Path/LBProject/Classes/LBProjectAppDelegate.h:11: In file included from /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDirectoryManager.h:10: /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDataModel.h:11:9: fatal error: 'Merchant.h' file not found [1] #import "Merchant.h" ^ 1 error generated.
Xcode给出的错误
lexical or preprocessor issue file not found
很多谷歌search显示,很多人都有这个问题,但没有解决scheme。 任何人都有一个解决办法,甚至是一个线索。
更新:在所有configuration中, user header
searchpath都设置为${BUILT_PRODUCTS_DIR}
。 除了归档时,它可以使用任何configuration进行构build。
更新2: Merchant.h
是一个自动生成的核心数据类,因此在.xcdatamodeld
包内,但是在构build库时,头文件都被复制到公共头文件.xcdatamodeld
。
注意:下面的步骤将解决90%的Xcode存档问题,但是从build议您先尝试退出Xcode 。 这可以节省您调整设置的时间。
- 检查“用户头文件path”是否正确(在项目和依赖项中添加“”到空间的path)
- 将“始终search用户path”设置为是
- 在您的项目中创build一个“索引标题”的组呼,并将标题拖动到该组, 不要在提示时添加到任何目标。 这包括.xcdatamodeld中的任何头文件,您需要右键单击并查看包内容才能find它们。
- 对于所有依赖关系,将“跳过安装”版本设置设置为“是”
- 将构build阶段中的任何“公共”标题移动到“项目”
- 将目标的生成设置“安装目录”设置为
$(LOCAL_APPS_DIR)
- 将目标版本设置“扫描包含的所有源文件”更改为YES。 ( 链接 )
- 使用较新版本的Xcode(> 4.2),您可能需要阅读与工作空间相关的这个问题 。
- 从所有引用的项目手动删除project.xcworkspace文件
我在XCode 4中遇到了同样的问题:“找不到词法或预处理器问题MyFile.h”。 但是,MyFile.m不是一个静态库,只是一个标准的类。 MyFile.m和MyFile.h被正确包含并在项目中编入索引。
所以…我退出XCode和模拟器,然后重新启动它们,问题消失了。
我发现,当我将目标版本设置“扫描包含的所有源文件”从no更改为yes时,问题就消失了。
我能够通过简单地将.h文件复制到查找程序的Project目录中,而无需对任何构build设置进行任何更改来解决此问题。 我没有把它们添加到项目中。 只要将它们放在项目的文件系统目录中就足以让Xcode的隐式链接正常工作。 更多细节在这里 。
我有这样一个奇怪的问题。 将“扫描所有资源文件…”更改为“是”没有帮助。 我看了一下框架searchpath,发现我有
- $(inheritance)
- “$(SRCROOT)”
- “$(SRCROOT)/我的/正确的/path”
这似乎是正确的,但仍然失败。 然后,我尝试重新排列2&3的顺序,突然间它build好了。 所以不知道为什么这是垃圾邮件,但想把它添加到事情的名单,以防万一它帮助别人。
我的解决办法是改变我的
#import "HeaderFile.h"
至
#import <FrameworkName/HeaderFile.h>
一切又开始了。 不寻常的是,build筑几次之后,它突然停止了工作。
问题解决时,我自己设置
生成设置 – >项目 – >searchpath为是
我的项目( GHUnit
Project和ProjectTest )有两个相同的目标。 当我的scheme设置为Project时 , <GHUnitIOS/GHUnit.h>
的导入是<GHUnitIOS/GHUnit.h>
词法或预处理器问题文件”的问题 。 但是当我将ProjectTest设置为一个scheme时,一切正常。 所以,我也在Project中添加了GHUnitIOS.framework
。
看起来您的标题searchpath不正确,在您的活动scheme的构build设置中没有正确configuration。 validation它们并用当前设置更新你的问题。
我在模拟器上有类似的问题,但不是设备和我的标题searchpath字段是空的(似乎是默认)。 但改变工作空间似乎已经解决了这个问题。 也许你可以尝试创build一个新的工作区,添加你的项目,看看是否有帮助。 现在我正在调查为什么。
我得到这个“文件未find”错误的一个特定的.h文件在我的项目。 我通过从项目中删除.h文件(select“删除引用”)并重新添加它来解决问题。
添加更多的变体:在Compile Source
阶段,我有两个foo.m
实例,其中一些如何导致foo.h
“Header not found”。
另一个机会:
在工作区项目中:观察目标中的部分构build阶段。 由于许多手册说,你需要有一个复制文件构build阶段复制所有的标题到另一个地方,因为iOS框架不能包含头文件共享(这是我的情况)。
select这些复制文件作为目的地选项“产品目录”。 或者像你的头文件将驻留在其他目录。
这对我有效。 存档(或发布)目录的构build可能与构builddebugging时的预期非常不同。
另外检查您的工作区设置您的build立目录。
XD
对我而言,在向项目中添加新文件后发生了这个问题。 一个从NSObject派生的空白.m和.h。 以下是我解决它的方法:
- closures并重新启动xCode
- 通过XCode删除这两个新文件
- 重新编译成功
然后,我再加上他们,它也工作。
肯定是xCode中的一个错误…