8

我为我的 iOS XCode 项目设置了持续集成,但是当 Xcode 机器人构建我的项目时,我不断收到很多警告。当我构建(用于运行、测试或归档)时,我没有收到任何警告。

我认为这与我的项目设置有关。我的主项目中有一个“内部”项目,其中包含我需要的库。我正在为i386架构构建这两个项目,以便它可以在模拟器中运行(因此 Xcode 机器人可以运行测试)。

确切的警告如下。.m我的内部项目中的每个文件都收到此警告。

Warning: no rule to process file '[…]/CDICMessage.m' of type sourcecode.c.objc for architecture i386

大多数关于此警告的 Google 结果都是针对.h错误添加到“编译源”的文件,但.m显然我的文件应该在那里。

同样,此警告仅显示在 Xcode 服务器上,本地构建很好。否则构建正常,测试成功并构建存档。最大的问题是警告堆会淹没项目可能产生的任何其他警告。

4

4 回答 4

3

我也有这个问题,但情况略有不同。随着在 iOS 8 中包含原生 Cocoa Touch 框架,我想放弃使用旧的、虽然很棒的 hack 来创建 iOS 框架。在这样做的过程中,我开始收到完全相同的警告......他们有很多!我通过从目标的构建设置中的“有效架构”中删除 i386 和 x86_64 来解决它们。

我已经在“架构”部分和“有效架构”构建设置中添加了这两种架构,因为我想确保当我运行 lipo 来创建通用架构时这些架构都可供我使用(是的,Apple 仍然是据我所知,我没有给我们一种方法来做到这一点)

通过从“架构”和“有效架构”中删除 i386 和 x86_64 架构。并将“仅构建活动架构”设置为“否”以进行调试和发布。我能够获得所需的结果,而无需在我的 .m 文件上收到大量“无规则处理...”警告。

希望这可以帮助!

于 2014-11-04T15:10:08.773 回答
2

我遇到了类似的问题,尽管在我的情况下它有几个 .c 文件(和一个 .m 文件)。 warning: no rule to process file '[...]/ioapi.c' of type sourcecode.c.c for architecture x86_64

现在,显然,我确实需要编译 .c 文件和 .m 文件。

显然,这不仅限于 .m 文件。如果有人对诊断有想法以找出更多问题,我将很乐意实施。

于 2015-02-06T00:19:44.860 回答
2

我不能保证这会解决你的这个问题的版本。但我终于得到了我的工作。

说要删除 i386 和 x86_64 的人有部分答案。

在我的目标中,我将架构部分设置如下

Architectures <multiple values>
Debug
    Standard Architectures <$(ARCHS_STANDARD)>
        Any iOS Simulator SDK <i386 x86_64>
        Any iOS SDK <$(ARCHS_STANDARD)>
Release
    Standard Architectures <$(ARCHS_STANDARD)>
        Any iOS Simulator SDK <i386 x86_64>
        Any iOS SDK <$(ARCHS_STANDARD)>
Base SDK <Latest iOS>
Build active Architecture only <No>
Supported Platforms <iOS>
Valid Architectures <armv7 arm64 i386 x86_64>

然后我创建了另一个目标。这是一个聚合(File->new->Target->iOS->Other->Aggregate)我没有更改此目标的构建设置,将它们全部保留为默认值。在 Build Phases 部分,我将预先存在的目标拖到“Target Dependencies”部分。

在运行脚本部分,我放置了以下内容。

# define output folder environment variable
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal

# Step 1. Build Device and Simulator versions
xcodebuild -target MiniZip ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
xcodebuild -target MiniZip ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

# make sure the output directory exists
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"

# Step 2. Create universal binary file using lipo  "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a"
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a"

# Last touch. copy the header files. Just for convenience
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/include" "${UNIVERSAL_OUTPUTFOLDER}/"

我试图将 MiniZip 库构建为 4 路胖库,所以在我的脚本显示“MiniZip”的地方,你显然会输入你的目标名称。

而我的最终结果?

Admins-Mac-mini-2:scratch JoeC$ file libminizip.a
libminizip.a: Mach-O universal binary with 4 architectures
libminizip.a (for architecture armv7):  current ar archive random library
libminizip.a (for architecture i386):   current ar archive random library
libminizip.a (for architecture x86_64): current ar archive random library
libminizip.a (for architecture arm64):  current ar archive random library

成功!好吧,反正对我来说。我希望这也能解决你的问题!

编辑:我应该把大部分功劳归功于 Ray Wenderlich。我的剧本是基于他发布的。

于 2015-02-10T21:57:22.360 回答
0

同样的问题

Unable to determine compiler to use - the abstract compiler specification is missing from this Xcode installation.

或者

warning: no rule to process file '/Users/dfpo/Desktop/ImageCell.m' of type sourcecode.c.objc for architecture x86_64

尝试使用“打开方式”打开项目或工作区,然后选择您的 Xcode

于 2015-03-19T13:51:17.013 回答