Xcode 7为Release-iphoneos构建i386而不是arm二进制文件

时间:2015-09-29 10:24:36

标签: ios objective-c iphone xcode arm

我从XCode 6迁移到XCode 7,没有对源,项目或任何我的Archive构建开始失败的任何更改。

在研究lipo产生的错误之后:

lipo:.../Release-iphoneos/libSDWebImage.a and .../Release-iphonesimulator/libSDWebImage.a have the same architectures (i386) and can't be in the same fat output file

我发现了以下内容:

在XCode 6中,lipo -info返回Architectures in the fat file: .../Release-iphoneos/libSDWebImage.a are: armv7 arm64Architectures in the fat file: .../Release-iphonesimulator/libSDWebImage.a are: i386 x86_64,这是正确的。我有iphone设备和i386 iphone模拟器。

在XCode 7中,这两个文件是相同的,并且具有i386架构!因此,使用lipo将这两个.a文件合并为一个的框架脚本失败。

为什么XCode 7突然停止构建我的SDWebImage框架?项目设置不变,库是相同的,该方案将Archive设置为Release。请帮忙。

iMac:~ lukasz$ lipo -info /Users/lukasz/Library/Developer/Xcode/DerivedData/…-etcsjmgakpylpmgchumhnsqpyrev/Build/Intermediates/ArchiveIntermediates/adhoc-stage/BuildProductsPath/Release-iphoneos/libSDWebImage.a
input file /Users/lukasz/Library/Developer/Xcode/DerivedData/…-etcsjmgakpylpmgchumhnsqpyrev/Build/Intermediates/ArchiveIntermediates/adhoc-stage/BuildProductsPath/Release-iphoneos/libSDWebImage.a is not a fat file
Non-fat file: /Users/lukasz/Library/Developer/Xcode/DerivedData/…-etcsjmgakpylpmgchumhnsqpyrev/Build/Intermediates/ArchiveIntermediates/adhoc-stage/BuildProductsPath/Release-iphoneos/libSDWebImage.a is architecture: i386

iMac:~ lukasz$ lipo -info /Users/lukasz/Library/Developer/Xcode/DerivedData/…-etcsjmgakpylpmgchumhnsqpyrev/Build/Intermediates/ArchiveIntermediates/adhoc-stage/BuildProductsPath/Release-iphonesimulator/libSDWebImage.a
input file /Users/lukasz/Library/Developer/Xcode/DerivedData/…-etcsjmgakpylpmgchumhnsqpyrev/Build/Intermediates/ArchiveIntermediates/adhoc-stage/BuildProductsPath/Release-iphonesimulator/libSDWebImage.a is not a fat file
Non-fat file: /Users/lukasz/Library/Developer/Xcode/DerivedData/…-etcsjmgakpylpmgchumhnsqpyrev/Build/Intermediates/ArchiveIntermediates/adhoc-stage/BuildProductsPath/Release-iphonesimulator/libSDWebImage.a is architecture: i386

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,试图在Xcode 7上构建一个多架构框架。看起来你正在构建一个静态库,这是不同的,但可能是相关的。我假设您正在使用xcodebuild命令(在Aggregate目标运行脚本中?)为不同的SDK构建您的库,然后在最后执行lipo以加入所有这些。

我遇到的问题是正在构建的框架/库位于build/UninstalledProducts文件夹中,BUILD_DIR中的内容是符号链接。因此,Release-iphoneosRelease-iphonesimulator中的库很可能是同一个库中的别名,因此您会发现它们具有相同的体系结构(在您的情况下为i386)。

要避免这种情况,请导航至“构建设置”'您在Xcode中的静态库目标,并确保以下部署':

  1. Deployment Location NO发布
  2. Deployment Postprocessing NO发布
  3. 您应该看到构建不再输出UninstalledProducts文件夹,并且BUILD_DIR中构建的所有库/框架都是唯一文件,现在应该具有正确的体系结构。然后,您可以使用lipo随意执行任何操作。在尝试上述操作之前,您可能必须删除DerivedData

答案 1 :(得分:1)

对我而言,解决方法是设置' Skip install'来自是否否(这是默认值)。所以确保除了Andrew Wei提到的其他两个选项。 +1为伟大的分析家伙。