Ios 如何从Xcode构建中删除不需要的架构x86_64?

Ios 如何从Xcode构建中删除不需要的架构x86_64?,ios,xcode,Ios,Xcode,我正在尝试重新编译其他人的代码。代码包括对第三方库myLib.a的引用,该库有两个部分: Architectures in the fat file: myLib.a are: armv7 arm64 我得到了这个警告,随后是一系列链接错误: ld: warning: ignoring file myLib.a, missing required architecture x86_64 in file myLib.a (2 slices) 现在,我知道这个库不打算在模拟器中工作。所以我想把

我正在尝试重新编译其他人的代码。代码包括对第三方库myLib.a的引用,该库有两个部分:

Architectures in the fat file: myLib.a are: armv7 arm64 
我得到了这个警告,随后是一系列链接错误:

ld: warning: ignoring file myLib.a, missing required architecture x86_64 in file myLib.a (2 slices)
现在,我知道这个库不打算在模拟器中工作。所以我想把模拟器从构建中扔掉。我不太了解构建目标,所以我这样做了:

然而,同样的错误。我做错了什么


Xcode 7.3

您确实将architect设置为armv7、arm64,所以只需在调试模式下将Build Active Architecture Only更改为YES:

调试模式:是

释放模式:否(默认值)


因此,在调试时,您将仅为当前设备生成

您已将architect设置为armv7、arm64,因此只需在调试模式中将“仅生成活动体系结构”更改为“是”:

调试模式:是

释放模式:否(默认值)


因此,调试时,您将只为当前设备构建

我在这里回答了这个问题:

同一个anwser

对于iOS项目,您有以下体系结构:
arm64
armv7
armv7s
i386
x86\u 64

x86_64
i386
用于模拟器

您可能会遇到的问题是,您使用的框架是为iOS构建的,而不是模拟器

要解决此问题,可以绕过构建框架并使用lipo命令行

首先
lipo-info[library.framework位置]

示例用法
lipo-info/Users/../library.framework/LibrarySDK

示例输出

Architectures in the fat file: /Users/.../library.framework/LibrarySDK are: i386 x86_64 armv7 arm64 
您将获得用于该框架的体系结构列表

第二个:我们需要将框架从模拟器架构中剥离出来,并制作该框架的两个版本(1个用于iOS设备,1个用于模拟器)

使用
lipo-删除[architecture][location]-o[output\u location]

示例
lipo-删除i386/Users/../SDK-o/Users/../SDK\u输出目录

转到您选择的输出目录,获取新生成的SDK,而不使用已删除的体系结构,以验证您是否可以使用与上面相同的lipo-info命令

您可以在新创建的SDK上使用相同的lipo remove命令,但使用另一种体系结构
lipo-删除x86_64…
您将获得仅适用于iOS设备的SDK

第三个:将最后一个SDK重命名为“SDK\u Name\u IOS”并使用它


快乐编码

我在这里回答了这个问题:

同一个anwser

对于iOS项目,您有以下体系结构:
arm64
armv7
armv7s
i386
x86\u 64

x86_64
i386
用于模拟器

您可能会遇到的问题是,您使用的框架是为iOS构建的,而不是模拟器

要解决此问题,可以绕过构建框架并使用lipo命令行

首先
lipo-info[library.framework位置]

示例用法
lipo-info/Users/../library.framework/LibrarySDK

示例输出

Architectures in the fat file: /Users/.../library.framework/LibrarySDK are: i386 x86_64 armv7 arm64 
您将获得用于该框架的体系结构列表

第二个:我们需要将框架从模拟器架构中剥离出来,并制作该框架的两个版本(1个用于iOS设备,1个用于模拟器)

使用
lipo-删除[architecture][location]-o[output\u location]

示例
lipo-删除i386/Users/../SDK-o/Users/../SDK\u输出目录

转到您选择的输出目录,获取新生成的SDK,而不使用已删除的体系结构,以验证您是否可以使用与上面相同的lipo-info命令

您可以在新创建的SDK上使用相同的lipo remove命令,但使用另一种体系结构
lipo-删除x86_64…
您将获得仅适用于iOS设备的SDK

第三个:将最后一个SDK重命名为“SDK\u Name\u IOS”并使用它



快乐编码

尝试添加armv7s或armv6sTried添加armv7s。现在它说“文件是为归档而构建的,而归档不是链接的体系结构(i386)”。隐马尔可夫模型。。。发生什么事?为什么添加ARMV7会有这种效果?我想你正在模拟器上尝试。试用设备。或者删除派生数据并清除项目不确定当您说我在模拟器上尝试时的意思。我在做产品>清洁,然后是产品>构建。这是你的意思吗?这是一台远程计算机,macincloud.com,所以在设备上尝试并不容易,但我确实想关闭模拟器。尝试删除派生数据,添加armv7s或armv6sTried添加armv7s的结果相同。现在它说“文件是为归档而构建的,而归档不是链接的体系结构(i386)”。隐马尔可夫模型。。。发生什么事?为什么添加ARMV7会有这种效果?我想你正在模拟器上尝试。试用设备。或者删除派生数据并清除项目不确定当您说我在模拟器上尝试时的意思。我在做产品>清洁,然后是产品>构建。这是你的意思吗?这是一台远程计算机,macincloud.com,所以在设备上尝试并不容易,但我确实想关闭模拟器。尝试删除派生数据,结果相同,i86_64是否在发布模式下使用?如果没有(我也不这么认为),它是如何删除的,我可以在调试模式下执行同样的操作吗?或者,我可以完全删除调试模式吗?在线运行的调试模式对我有任何好处吗?为什么在我试图构建归档文件时它还要尝试这样做(模拟器)?嘿!!,谢谢你,伙计,你让我今天过得很好!!!:)继续努力!!此外,i86_64是否在释放模式下使用?如果没有(我想没有),它是如何被移除的,