“使用Xcode bot构建时,没有规则来处理文件......对于架构i386”

时间:2014-07-02 12:02:11

标签: ios xcode continuous-integration xcode-bots xcode-server

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

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

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

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

此警告的大多数Google结果都适用于添加到'编译源代码的.h个文件。错误地,但显然我的.m文件应该在那里。

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

4 个答案:

答案 0 :(得分:3)

我也有这个问题,但情况略有不同。随着在iOS 8中包含原生Cocoa Touch Frameworks,我想抛弃使用旧的,虽然很棒的黑客来创建iOS框架。通过这样做,我开始得到同样的警告......很多人!我通过从Target的Build Settings中的“Valid Architectures”中删除i386和x86_64来解决它们。

我在“架构”部分和“有效体系结构”构建设置中添加了这两种体系结构,因为我想确保这些体系结构在我运行lipo时可用于创建通用(是的,苹果仍然没有给我们一个方法来做到这一点,因为我可以告诉)

从“架构”和“有效架构”中删除i386和x86_64架构。并为两个调试和释放设置“仅构建活动体系结构”为“否”。我能够获得所需的结果而没有“没有规则处理...”的警告,我收到了我的.m文件。

希望这有帮助!

答案 1 :(得分:2)

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

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

显然,这不仅限于.m文件。如果有人有诊断想法来解决更多问题,我很乐意将它们推出。

答案 2 :(得分: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>

然后我创建了另一个目标。这是一个聚合(文件 - &gt;新 - &gt;目标 - &gt; iOS-&gt;其他 - &gt;聚合) 我没有更改此目标的Build设置,将它们全部保留为默认值。 在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大部分功劳。我的脚本基于他发布的一个。

答案 3 :(得分: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

尝试使用&#34打开项目或workpalce;打开方式&#34;,然后选择您的Xcode