我从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 arm64
和Architectures 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
答案 0 :(得分:1)
我遇到了同样的问题,试图在Xcode 7上构建一个多架构框架。看起来你正在构建一个静态库,这是不同的,但可能是相关的。我假设您正在使用xcodebuild
命令(在Aggregate目标运行脚本中?)为不同的SDK构建您的库,然后在最后执行lipo
以加入所有这些。
我遇到的问题是正在构建的框架/库位于build/UninstalledProducts
文件夹中,BUILD_DIR
中的内容是符号链接。因此,Release-iphoneos
和Release-iphonesimulator
中的库很可能是同一个库中的别名,因此您会发现它们具有相同的体系结构(在您的情况下为i386
)。
要避免这种情况,请导航至“构建设置”'您在Xcode中的静态库目标,并确保以下部署':
Deployment Location
NO
发布Deployment Postprocessing
NO
发布您应该看到构建不再输出UninstalledProducts
文件夹,并且BUILD_DIR
中构建的所有库/框架都是唯一文件,现在应该具有正确的体系结构。然后,您可以使用lipo
随意执行任何操作。在尝试上述操作之前,您可能必须删除DerivedData
。
答案 1 :(得分:1)
对我而言,解决方法是设置' Skip install'来自是否否(这是默认值)。所以确保除了Andrew Wei提到的其他两个选项。 +1为伟大的分析家伙。