Bad*_*Cat 39 xcode cocoa frameworks compilation swift
我为util/extensions创建了一个Swift框架项目,它将.framework文件编译并复制到我系统上的专用位置.我希望能够将此文件包含在其他项目中(使用库构建阶段/链接二进制文件).框架项目是一个Cocoa Touch Framework类型项目(从Xcode 6.1项目模板浏览器中选择).
但是当我尝试编译一个链接框架文件的项目时,我收到了这个警告:
ld:警告:忽略文件/Users/name/Projects/Xcode/Libs/swiftutils.framework/swiftutils,文件是为x86_64构建的,它不是被链接的体系结构(i386):/ Users/name/Projects/Xcode/Libs/swiftutils.framework/swiftutils
我可以对框架项目做些什么,以便它对其他iOS项目有效吗?这令人困惑,因为框架项目是一个Cocoa Touch Framework项目,它应该自然地与其他Cocoa Touch(即IOS)项目一起工作,不应该吗?
dog*_*god 33
确保您已在lib的Build设置中的Architectures中列出i386并x86_64列出.还设置只能建有源体系明确地没有.
小智 10
虽然已接受的答案已经解决了这个问题,但是由于问题是关于体系结构,实际上是二进制文件,所以还有一点
1. iOS中的架构
armv64:iPhoneX,iPhone 5s-8,iPad Air - iPad Pro
armv7:iPhone3Gs-5c,iPad WIFI(第4代)
armv6:iPhone - iPhone3G
以上如果是真实设备
i386:32位模拟器
x86_64:64位模拟器
以上列表是向下兼容的,这意味着iPhoneX也可以与armv6一起运行,而且无法充分利用armv64的功能
有关iOS架构的更多信息,请访问:https: //developer.apple.com/library/content/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/DeviceCompatibilityMatrix/DeviceCompatibilityMatrix.html
2.什么是Build Active Architecture?
如果选择"是",它将仅构建您的框架到"选定设备",实际设备(armv)或模拟器(x86_64或i386).对于"否",它将构建您的框架到"有效架构"列表
默认情况下,在调试模式下,它为"是"; 在更多版本中,它是"否",这可以节省调试模式下的编译时间,并确保您的发布项目框架在您指定的所有体系结构上运行.
这就是为什么通过强制框架为所有体系结构构建所接受的解决方案,但是通过阅读更多内容,您将知道背后的内容并且绝对可以节省编译框架的时间.当然,对自己也有更多的控制权.
因此,如果您正在使用框架,并且想要导入到另一个项目,那么如果使用模拟器(i386或x86_64)仅使用Build Active Architecture编译框架"是" ,然后使用仅构建活动体系结构导入到项目中使用真实设备(armv) "是" ,您将遇到此错误.
期待错误描述:
文件是为x86_64构建的,而不是被链接的体系结构(i386)将暗示你在64位模拟器中构建框架,并且你的合并项目使用32位模拟器构建.
而更常见的是:
框架文件是为x86_64构建的,它不是被链接的架构(arm64):这意味着你的框架是在模拟器中构建的,而你的合并项目是用真实设备构建的.
3.提取框架
通常的做法是右键单击框架并选择Show In Finder,而大多数开发人员保持Finder打开,新编译的框架将替换旧框架,而不关闭Finder并重新打开.是的,它是正确的,但如果您在其间切换构建目标设备,框架将导致不同的文件夹.有时你认为你已经编译了你的框架,但实际上它在另一个文件夹中.我的建议总是选择在Finder中显示,以防止您导入的框架不是最新的框架.
两个不同的文件夹:Debug-iphoneos和Debug-iphonesimulator


我遇到了这个问题,当前的解决方案摆脱了原来的错误(即无法链接i386),但随后链接的Frameworks(如Alamofire)无法导入到我的项目中.以下解决方案解决了此问题.
Build Settings- > Architectures- >中Valid Architectures,添加值i386.接下来,删除项目的派生数据文件夹的内容.此文件夹的内容在构建期间生成,可以安全删除,Xcode将创建一个新文件夹.要在Xcode 8中删除此文件夹,请转到File- > Project/Workspace Settings,单击灰色箭头以在Finder中打开文件夹位置,然后删除内容.

清洁和重建.
如果构建仍然失败,请检查问题导航器中的内容Update to recommended settings.单击它,然后重试.
如果您没有看到该选项,请在构建设置中更改Build Active Architecture Only为Yes.这会减慢构建时间,这在经常在不同设备之间切换时会令人沮丧,但这可能是必要的.
| 归档时间: |
|
| 查看次数: |
25862 次 |
| 最近记录: |