iOS xcframework项目提示“ld: framework not found”

2023-09-14 15:59:36

iOS xcframework项目提示“ld: framework not found”

问题描述

公司有一个项目,同时引用了.framework和.xcframework, 但是使用xcode编译的时候,

xcodebuild archive -project ${project_Name}.xcodeproj -target ${target_Name} -configuration ${build_model} -sdk iphoneos16.2 || exit -1

总是报一个srp的framework找不到,问题log如下:

ld: framework not found srp
clang: error: linker command failed with exit code 1 (use -v to see invocation)

日志中搜索关键字发现“-framework srp” 字样。

检查源代码配置,发现文件路径如下:

Lib/Coss/srp.xcframework/ios-arm64_armv7s/srp.framework

问题定位分析

1、 在网上查找了xcframework与framework的区别:

1.1. XCFramework 是一种相对较新的分发代码的方式,特别是用于跨平台开发或支持不同架构的应用程序。
1.2 XCFramework 可以包含多个 Framework,每个 Framework 都针对不同的架构(例如 iOS、macOS、arm64、x86_64 等)进行了优化。
1.3 XCFramework 允许开发者将多个架构的库打包到一个文件中,以便在不同平台上使用。这使得跨平台开发更加方便,同时也允许为不同架构提供不同版本的库。

2、然后找了xcframework的配置和引用方式:

配置 Xcode 项目: 在 Xcode 项目中,确保已将 XCFramework 添加到项目的 “Frameworks, Libraries, and Embedded Content” 部分。这可以通过打开 Xcode 项目,然后导航到项目设置的 “General” 标签下完成。在 “Frameworks, Libraries, and Embedded Content” 部分,单击加号(+)按钮,然后选择您的 XCFramework 文件并添加到项目中。
指定 Framework Search Paths: 在 Xcode 项目的 “Build Settings” 下,搜索 “Framework Search Paths” 设置。确保该设置包含XCFramework 的路径。通常,这个路径是相对于 Xcode项目文件的路径,例如 $(PROJECT_DIR)/Frameworks。

3、按照上述描述,先配置了General部分,然后在Build Settings下遇到了问题:
3.1 在“Framework Search Path” 中先填写到$(PROJECT_DIR)/Lib/Coss/srp.xcframework, 然后执行编译命令,失败;
3.2 $(PROJECT_DIR)/Lib/Coss/srp.xcframework/ios-arm64_armv7s/srp.framework, 失败;
3.3 $(PROJECT_DIR)/Lib/Coss/srp.xcframework/ios-arm64_armv7s/srp.framework/, 在xcode界面执行编译,成功;但是执行命令行,失败;
3.4 $(PROJECT_DIR)/Lib/Coss/srp.xcframework/ios-arm64_armv7s/, 界面执行成功,命令行也成功,开心不已!

解决方案

最终解决方案是,直接将srp.framework放到Lib/Coss下面, 删除xcframework,同时 General下 srp.framework仍然为Embedded。

记之。

更多推荐

【Linux】常用工具(下)

Linux常用工具一、Linux项目自动化构建工具-make/Makefile1.依赖关系和依赖方法2.伪目标3.make/Makefile具有依赖性的推导能力(语法扩展)4.编写一个进度条代码(1)缓冲区(2)\n和\r(3)进度条代码二、Linux版本控制器-git1.gitclone2.gitconfig3.gi

系统检测到您的账户不符合国家相关法律法规或《支付宝用户服务协议》约定,暂时无法签约当前产品

最新一直在开发支付宝小程序,遇到的各种问题颇多,技术上的问题都好解决,开发平台上的问题,真的是让我心力交瘁,自己分析不出原因,打支付宝客服电话永远得不到解答。现在把自己有一些收获的问题,分享给大家,作为抛砖引玉,大家有什么收获,我们也一起交流,让开发支付宝小程序的同行少走弯路。1,刚刚开的新号为什么不能签约签约首先要有

QT-day1作业

#include"mywnd.h"#include<iostream>#include<QDebug>#include<QIcon>#include<QPushButton>#include<QLabel>#include<QLineEdit>MyWnd::MyWnd(QWidget*parent):QWidget(p

知识图谱(4)图算法

基于图有很多任务,比如:节点分类:预测哪些网站是诈骗网站;关系预测:判断图中两个节点的关系;图分类:分子性质预测;聚类:社交网络分析,将相似用户聚类在一起,再推荐适合该簇的商品;图生成:药物分子生成,药物发现;目录图基础内容图遍历图聚类Node2Vec图基础内容节点的度:节点的边的数量。对于有向图,度还可以分为入度和出

植物大战僵尸各种僵尸攻略(四)

前言此文章为“植物大战僵尸”专栏中的011刊(2023年9月第十刊),欢迎订阅。版权所有。注意:1.本博客适用于pvz无名版;2.pvz指植物大战僵尸(PlantsVSZonbies);3.本文以耗费低做标准,方法不唯一;4.本期讲述难度较中型的僵尸。各种僵尸攻略潜水僵尸潜水僵尸有两种形态:第一种是普通形态;第二种是莲

虚拟人三维动画宣传片案例分享 | 广州“五羊”城市文化IP商业体裸眼3D广告影片

随着时代的发展+元宇宙的助推,裸眼3D形式的宣传方式逐渐出现在大众眼前。以数字人IP的3D立体效果吸引大众目光,让其驻足拍照、录视频分享至社交平台,为企业品牌带来高频传播价值。近日,广州“五羊”城市文化IP裸眼3D广告宣传片在广州黄埔大悦汇商业体精彩亮相,极具冲击力的视觉效果,令过往市民旅客大饱眼福,赋予城市现代感,打

LabVIEW使用PID对激振器控制

LabVIEW使用PID对激振器控制LabVIEW的PID在许多项目中都会用到,比如温度控制、压力控制、流量控制等,一般用自带的PID通过调节参数的值,基本上都可以解决。现在项目的情况是,通过正弦波的输出控制激振器,输出正弦波的幅值与激振器的运动距离相关。波形输出是通过阿尔泰PCI5655实现,激振器也是国产。通过采集

提交本地项目到GitHub

文章目录1下载git1.1通过homebrew安装Git1.2通过Xcode安装2创建sshkey、配置git3提交本地项目到GitHub说明:该博文参考这篇文章和这段视频1下载git1.1通过homebrew安装Git1、未安装homebrew,需安装homebrew/usr/bin/ruby-e"$(curl-fs

Unity中Shader的屏幕抓取 GrabPass

文章目录前言一、抓取1、抓取指令2、在使用抓取的屏幕前,需要像使用属性一样定义一下,_GrabTexture这个名字是Unity定义好的前言Unity中Shader的屏幕抓取GrabPass一、抓取1、抓取指令屏幕的抓取需要使用一个PassGrabPass{}GrabPass{“NAME”}2、在使用抓取的屏幕前,需要

Apache Doris 快速入门

1.基本概念FE,Frontend,前端节点,接收用户查询请求,SQL解析,执行计划生成,元数据管理,节点管理等BE,Backend,后端节点,数据存储,执行查询计划。前端节点FE和后端节点BE各自独立运行,互不影响。broker:用来和外部文件系统打交道2.修改配置DORIS_HOME=/export/server/

【数据结构】&&【C++】红黑树RBTree的模拟实现(平衡搜索二叉树)

【数据结构】&&【C++】红黑树的模拟实现(平衡搜索二叉树)一.红黑树的性质二.红黑树的模拟实现1.结点的定义2.搜索树的插入3.变色+向上处理4.旋转+变色三.红黑树与AVL树的差别四.完整代码一.红黑树的性质1.什么是红黑树?红黑树是一种搜索二叉树,但又在搜索树的基础上,在每个结点上增加一个存储位表示结点的颜色,颜

热文推荐