iOS-Building for iOS Simulator, but the linked and embedded framework ‘XX.framework‘ was built for(代

Posted MinggeQingchun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS-Building for iOS Simulator, but the linked and embedded framework ‘XX.framework‘ was built for(代相关的知识,希望对你有一定的参考价值。

一、报错

运行一个以前的项目报错如下:

/Users/XX/Desktop/XX.xcodeproj Building for ios Simulator, but the linked and 
embedded framework 'XX.framework' was built for iOS.

 

二、原因

WWDC 2019 推出 XCFramework ,其实 XCode 11 开始就会有这个问题,但在 XCode 11 上一直是 warning 而并不会报错
XCode12.3 开始,针对类似于 iOS + iOS Simulator 这种多平台的包,强制使用 XCFramework 架构,否则 error

简单介绍一下XCFramework

XCFramework简介

XCFramework是XCode11中提出的一个新特性,是由XCode创建的一个可分发的二进制包,它包含了 framework 或 library 的一个或多个变体,因此可以在多个平台(iOS、iPadOS、macOS、tvOS、watchOS) 上使用,包括模拟器。XCFramework 可以是静态的,也可以是动态的。xcframework 的好处就是用 Xcode 发布的时候,Xcode 会自动选用正确的指令集 Frameworks,省去了手动移除动态库中的模拟器指令集的工作。

三、解决方案

1、Excluded Source File Names

打开工程设置,Build Settings,搜索 Excluded 关键字,找到 Excluded Source File Names,在其 Debug (也就是模拟器运行的配置)中添加这样的字段

Any iOS Simulator: aa.framework bb.framework

每个 framework 用空格隔开,再clean 一下,编译。如果失败可以尝试重启 Xcode 再试

2、Validate WorkSpace

启用 Validate WorkSpace ,让 XCode 对 frameworks 进行自动化管理;打开项目路径 - Build Setting > Build Options > Validate WorkSpace

但是博主发现Validate Workspace改为Yes之后编译完成,再改回No,也可以正常运行。

找了下Apple Developer论坛上大致是说:从Xcode的角度来看,iOS和iOS模拟器是两个不同的平台,原来framework是默认双平台的,会同时构建两个平台的framework,现在是做区分,这样的好处是可以在上传Appstore构建的时候省去剥离iOS模拟器相关的framework需求。

Apple开发论坛

3、Build System

修改编译系统为以前的系统

打开 Files > WorkSpace Setting > Build System,展开 Build System 选项卡,选择 Legacy Build System

这样只是为了能让模拟器正常运行我们的项目,如果之后需要打包,最好改回 New Build System 再打包。

系统有一个警告提示 Legacy Build System 将在不久之后就被弃用,不建议使用,总不能一直使用以前的构建系统吧?以后 WWDC 推出新功能了,还是得用新系统,苹果的 Deprecated 注释也说明了这点

4、使用Apple建议方案XCFramework

参考博文:

http://okgoes.cn/blog/detail?blog_id=25339

生成 XCFramework 的帮助文档

生成 XCFramework 的教程

以上是关于iOS-Building for iOS Simulator, but the linked and embedded framework ‘XX.framework‘ was built for(代的主要内容,如果未能解决你的问题,请参考以下文章

Truncated incorrect DOUBLE value:

ffmpeg for iOS

报错 Building for iOS, but the embedded framework ‘xxx.framework‘ was built for iOS + iOS Simulator

[iOS] Delphi for iOS 版本需求

李洪强漫谈iOS开发[C语言-052]-for循环

赛普拉斯 IO- 编写 For 循环