我为我的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服务器上,本地构建很好。 构建是正常的,否则测试成功并构建存档。最大的问题是警告堆会淹没项目可能产生的任何其他警告。
答案 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