首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何为包含依赖项cocoapods的动态库构建聚合目标

为包含依赖项cocoapods的动态库构建聚合目标,可以按照以下步骤进行:

  1. 确保已经安装了CocoaPods,并且已经在项目中配置了Podfile。
  2. 在终端中进入项目目录,并执行pod init命令,生成Podfile文件。
  3. 打开Podfile文件,添加需要的依赖库,并保存文件。
  4. 在终端中执行pod install命令,根据Podfile文件安装依赖库。
  5. 在Xcode中打开项目,选择项目的主目标,并在"Build Phases"选项卡下展开"Link Binary With Libraries"。
  6. 点击"+"按钮,选择"Add Other...",然后导航到项目目录下的"Pods"文件夹,选择"Pods.xcodeproj"文件,并点击"Open"按钮。
  7. 在"Link Binary With Libraries"中,确保已经添加了"Pods.xcodeproj"。
  8. 在Xcode中选择"Pods.xcodeproj",然后在"Build Phases"选项卡下展开"Target Dependencies"。
  9. 点击"+"按钮,选择需要构建聚合目标的动态库,并点击"Add"按钮。
  10. 在"Build Phases"选项卡下展开"Aggregate",并点击"+"按钮,选择"New Run Script Phase"。
  11. 在新添加的Run Script中,输入以下脚本:
代码语言:shell
复制
# Set the target folders and the final framework product.
FMK_NAME="YourFrameworkName"
FMK_VERSION="1.0.0"
FMK_DIR="${BUILD_DIR}/${CONFIGURATION}-universal"
FMK_FILE="${FMK_DIR}/${FMK_NAME}.framework"

# Clean any existing framework that might be there.
if [ -d "${FMK_DIR}" ]; then
    rm -rf "${FMK_DIR}"
fi

# Build the framework for device and for simulator (using all needed architectures).
xcodebuild -target "${FMK_NAME}" -configuration "${CONFIGURATION}" -arch arm64 -arch armv7 -arch armv7s only_active_arch=no defines_module=yes -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}/DependentBuilds" BUILD_ROOT="${BUILD_ROOT}" SYMROOT="${SYMROOT}" $ACTION

xcodebuild -target "${FMK_NAME}" -configuration "${CONFIGURATION}" -arch x86_64 -arch i386 only_active_arch=no defines_module=yes -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}/DependentBuilds" BUILD_ROOT="${BUILD_ROOT}" SYMROOT="${SYMROOT}" $ACTION

# Create the universal framework folder structure.
mkdir -p "${FMK_DIR}"
mkdir -p "${FMK_DIR}/Versions"
mkdir -p "${FMK_DIR}/Versions/${FMK_VERSION}"
mkdir -p "${FMK_DIR}/Versions/${FMK_VERSION}/Resources"
mkdir -p "${FMK_DIR}/Versions/${FMK_VERSION}/Headers"

# Copy the framework files over.
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FMK_NAME}.framework/." "${FMK_DIR}/Versions/${FMK_VERSION}"
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FMK_NAME}.framework/." "${FMK_DIR}/Versions/${FMK_VERSION}"

# Create the universal binary file using lipo.
lipo -create -output "${FMK_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FMK_NAME}.framework/${FMK_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FMK_NAME}.framework/${FMK_NAME}"

# Create the symlinks for the current version.
ln -s "${FMK_VERSION}" "${FMK_DIR}/Versions/Current"
ln -s "Versions/Current/Headers" "${FMK_DIR}/Headers"
ln -s "Versions/Current/Resources" "${FMK_DIR}/Resources"
ln -s "Versions/Current/${FMK_NAME}" "${FMK_DIR}/${FMK_NAME}"

# Copy the framework to the project's directory.
cp -R "${FMK_DIR}" "${PROJECT_DIR}"

# Remove the temporary build directory.
rm -rf "${FMK_DIR}"
  1. 确保脚本中的"YourFrameworkName"替换为你的动态库的名称。
  2. 保存并关闭Xcode。

完成上述步骤后,你将得到一个包含依赖项cocoapods的动态库的聚合目标。你可以将该目标用于其他项目中,并且可以使用腾讯云的相关产品来部署和管理该聚合目标。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

有赞iOS-基于二进制的编译提效策略

pods 做开发,顺应而生的就是去做 Cocoapods 库的二进制化,既包含了三方库代码,也包含了封装的通用组件库以及业务库代码。...去构建 .a / .framework,在看过该库的源码后发现该逻辑并不复杂,但是在尝试之后会发现几个问题: 当选择 .a 形式作为产物时,我们 podspec 中所指定的 .h 并不会被正确拷贝到目标文件夹...,在打包机上部署源码工程,触发打包时对相应的 Pod 库执行相关打包命令 //构建模拟器静态库文件 xcodebuild -project '目标工程'-target '目标target' ONLY_ACTIVE_ARCH...armv7 armv7s arm64' 在构建完对应的架构,用lipo对架构.a/.framework进行合并操作: lipo -create '模拟器.a''真机.a'-output '目标静态库'....{h}" #如果对应 pod 包含有 subspec,是否合并 subspec 是可选项,这里的情况较多,需要针对业务场景进行对应的处理 八、业务 Project 与 Pod 库转化 如大家在上文中所看到的工程目录

1.7K20

现今 Swift 包中的二进制目标

Apple 已经努力推动桥接那些缝隙,并且修复那些阻碍开发者的问题,例如阻碍开发者将他们的库和依赖由其他诸如 Carthage[1] 或 CocoaPods[2] 依赖管理工具迁移到 Swift 包依赖管理工具的问题...这对任何依赖一些代码生成的库来说都是破坏者,比如,协议和 Swift 生成。...这些被扩展(或增大)的可执行文件,是包含了为多个不同架构原生构建的切片。这允许库的所有者分发一个运行在所有预期的目标架构上的单独的二进制。...这是一个很共通的问题,它激发了诸如 cocoapods-binary[4] 之类的项目,该项目预编译了 pod 依赖项以减少客户端的构建时间。...开发者工具如, SwiftLint[11] 或 SwiftGen[12] 正是这种案例。在这种情况下,可以使用包含可执行文件(本地或远程)的 .zip 文件的路径创建新的二进制目标。

1.9K20
  • Android开发快速入门iOS开发(概览)

    但如果需要使用其他第三方库时,则离不开Cocoapods工具了; 2.1 Cocoapods Cocoapods 就是iOS开发中的maven,主要用于集成管理第三方的依赖库。...) 静态库与动态库的区别主要在于在打包链接时的操作不一样; 4.3.1 静态库 静态库在打包生成可执行的目标文件时,会把汇编生成的目标文件.o与引用的库一起链接打包到目标文件中,静态库的特点: 在编译期完成对函数库的链接...运行时与函数库不再有关,可独立运行; 会比较占用空间(如果有函数库被多个静态库依赖,则这个函数库里会有多份拷贝) 更新麻烦,如果静态库A更新了,则所有依赖静态库A的库都需要重新编译,更新; 加载速度较动态库快...4.3.2 动态库 动态库与静态库类似,只是在打包时不用把所链接的文件全部拷贝进目标文件中,只是拷贝一些重定位和符号信息,这些信息在运行时可完成真正的链接,动态库的特点: 在运行时完成对函数库的链接(...不同应用程序调用相同的库,在内存里只需要有一份该库的实例); 运行时与函数库有关,需要依赖对应的函数库才可运行; 会比较省空间(只需要拷贝少量的符号与链接信息) 更新简单,只需要更新对应的动态库就可以了

    1.1K20

    Cocoa包管理器之Carthage详解及CocoaPods中心化+Carthage的二进制化

    这个.resolved的文件与CocoaPods中的lock文件功能一致,都是用来锁版本的。而这个Carthage文件夹下存放的就是Carthage为我们提供的动态库framework。  ?...下方是CocoaPods的README中列举的目标之一: 通过创建更集中的生态系统,提高第三方开源库的可发现性和参与度。 相比之下,Chathages是分散式依赖管理器。...CocoaPods的工程目录中必须有一个叫做podspec的这么一个文件,其中包含有关项目的元数据并指定了工程的的编译方式。...Carthage使用了xcodebuild工具来构建依赖关系,而不是将这些依赖集成到单个工作区域中。...它没有类似podspec这样的文件,但你的依赖项必须包括它们自己的XCODE项目,在这些项目中提供了依赖库的编译规则。

    1.6K20

    Q音直播编译优化与二进制集成方案

    动态库 安装: sudo gem install cocoapods-binarysudo gem install cocoapods-packing-cubes 使用方式: ?...不包含依赖的符号表,这里分两种情况使用:a).如果是静态库的话要使用此命令,否则外部引入被依赖库的话会报duplicatesymbol。...b).如果是动态库的话则不要加此命令,动态库一定需要包含依赖的符号表。 --no-mangle:表示不使用name mangling技术,pod package默认是使用这个技术的。...所以这两条命令是配合使用的,打成包含其他依赖的静态库的时候一般会同时使用这两行命令。 pod package在打包时会为打包工程分配一个沙盒路径。...(这里为了防止每次修改依赖多处的podspec都要跟随修改,将依赖项抽成一个ruby脚本在podspec中引入,每次修改依赖只需要改在公共的rb脚本即可)。 d.

    3.7K41

    Xcode Concepts

    xcodebuild命令的几个参数怎么填,到底是填scheme,还是填target,亦或是其他的? CocoaPods是如何将库与工程组合到一起的?...{PODS_ROOT} 代表的是 Pods 目录,是 CocoaPods 通过 UserDefine 自定义的; (inherited) 继承上一级(Project)或依赖项的配置。...Build Phases 我们可以看到该部分主要分为四项内容,当然也可以手动添加一些脚本在构建过程中运行,如使用Cocoapods管理的项目这里就会增加一些自定义的脚本。...Dependenices 设置Target依赖的其他Target,即该Target的构建必须等到其依赖的Target构建输出之后才可构建。...注意这里Target的范围必须是同一Project里面的; 有一些对应的使用场景: 宿主程序依赖扩展程序; Pod Target依赖三方库Target; 单元测试 Target依赖App Target

    2.2K20

    KotlinNative KMM项目架构

    iOS sdkframework层:Kotlin/Native构建一个framework时,产物是二进制,也包含了Kotlin/Native的基础库、Runtime,会使包大小增加1M+左右,而且多个Kotlin.../Native构建的framework不会共享基础库导致每一个framework都会增加1M+,为了避免包过大,统一构建一个framework。...当然如果依赖了一些库如ktor网络库,包也会变大,避免这个问题也可以不用依赖ktor,直接依赖现有的网络库来实现一个KMM SDK。...这里提一下几个值得注意的问题。有2种方式构建:1、本地构建,写一个sdkframework项目依赖其他模块的klib包,来构建sdkframework。...上面说到的第1点本地构建,在iosApp本地依赖构建sdkframework时,要将依赖项正确导入 Kotlin/Native 模块,Podfile必须包含use_modular_headers!

    3.3K00

    基于CocoaPods的组件化原理及私有库实践

    但是在在概念上,静态库是一种All In One的设计思路,因为依赖静态库的代码会把静态库完全链接到App的可执行文件中。...因为动态库不需要参与编译过程,因此不会产生链接时符号冲突的问题。 不过,苹果对动态库的完全支持仅停留在系统的动态库上,例如UI.framework,对于第三方的动态库,还是需要embed到系统中。...CocoaPods的下载流程 首先,CocoaPods会根据Podfile中的描述进行依赖分析,最终得出一个扁平的依赖表。...这里,CocoaPods使用了一个叫做 Milinillo 的依赖关系解决算法。...针对列表中的每一项,回去Spec的Repo中查看其podSpec文件,找到其地址 通过downloader进行对应库的下载。

    5K12

    CocoaPods对三方库的管理探究

    CocoaPods是iOS开发中经常被用到的第三方库管理工具,我们有必要深入了解一下它对项目产生了什么影响,以及它是如何管理这些库的。...CocoaPods安装的内容 xcworkspace文件 该文件下包含一个叫contents.xcworkspacedata的文件,它的内容是这样的: <?...Pods-Demo Framework 先看这个Demo的Framework,它会被用于工程项目的引用依赖 ? 这个库不会被打进包里,因为Do Not Embed代表并不是包含的关系。...这里是设置编译阶段配置的地方,当首次pod install成功之后,这里会多几个[CP]开头的配置项(CP即CocoaPods缩写),它们都是由CocoPods添加的脚本内容,执行顺序从上到下。...,我们的项目和库都应该使用新版的构建系统进行构建。

    2.9K20

    如何在iOS中构建模块化架构

    这种依赖关系可以是应用程序的技术方面(网络,存储等),也可以是功能(搜索,帐户等)来封装复杂性。 定义后,我们就可以开始添加要隔离的代码和资源。 打包代码的方式只有两种:动态框架和静态库。...两者之间的主要区别在于它们在最终可执行文件中的导入方式。静态库包含在编译类型中,可在可执行文件中进行复制,动态库在可执行文件的运行时包含在其中,而从不复制,因此启动时间更快。...假设我们为电子商务创建了一个新应用程序,则需要创建一个特定的依赖项,以表示我们应用程序的核心概念。我称它为Core。 首先,我创建一个动态框架项目。...处理依赖关系的另一个角度是创建一个伞形框架,以将每个依赖关系嵌入到一个程序包中,以限制构建并保持整洁的工作空间。 事实是,如果您使用CocoaPods,您可能已经做到了。...如果您查看工作空间并探索Pods项目,它就是处理依赖项的方式。但是,构建时间仍然是瓶颈。 最后,另一个流行的依赖性管理器是Carthage。主要区别在于依赖项是在导入之前构建的。

    2.5K30

    ·第三方网络图片处理框架:SDWebImage(官方文档翻译篇)

    目前,虽然AFNetworking也提供了图片下载及缓存策略,但更专业的时候,图片加载框架一般用SDWebImage,正如主流APP(如QQ和微信)会用到。...常见问题 ---- 9.1 UITableViewCell与使用动态图像的大小尺寸 UITableView根据单元格的第一个图像集,确定图像的大小尺寸。...安装 ---- 在您的项目中使用SDWebImage有三种方法: 使用CocoaPods 使用Carthage 通过将项目复制到您的存储库中 10.1 使用CocoaPods安装 CocoaPods是Objective-C...的依赖管理器,它可以自动化并简化在项目中使用第三方库的过程。...在需要使用库的源文件中,导入头文件: #import 10.5 构建工程 到这里,您的workspace应该能没有错误地被构建。

    3.7K20

    APP生成与运行(二)

    Dyld 2.0的加载过程是: 解析 mach-o 文件,找到其依赖的库,并且递归的找到所有依赖的库,形成一张动态库的依赖图。...iOS 上的大部分 app 都依赖 300 到 600 个动态链接库,所以这个步骤包含了较大的工作量。...目标程序没有外部依赖,直接就可以运行。当然其缺点也很明显,就是会使用目标程序的体积增大。...与静态库相反,动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。等到程序运行时,动态库才会被真正加载进来。...动态库的优点是,不需要拷贝到目标程序中,不会影响目标程序的体积,而且同一份库可以被多个程序使用(因为这个原因,动态库也被称作共享库)。

    1.2K10

    《Maven实战》笔记

    第一章 Maven简介 1.1何为Maven maven翻译为“知识的积累”,“内行”,“专家” 作为Apache组织中颇为成功的一个开源项目,Maven主要服务于基于Java平台的项目构建,依赖管理和项目信息管理...1.1.1何为构建 编译,运行单元测试,生成文档,打包和部署 1.1.2Maven是优秀的构建工具 Maven是跨平台的 最大化地消除了构建的重复 抽象了构建生命周期 提供已实现的插件 标准化构建过程...一个插件包含多个功能,每个功能对应一个插件目标 maven-dependency-plugin有十多个目标 分析依赖冲突:mvn dependency:tree -Dverbose 查看声明但未被使用的依赖...,反应堆就是其本身 对于多模块项目,反应堆指所有模块组成的一个构建结构,包含各模块之间继承与依赖的关系,从而能够自动计算出合理的模块构建顺序 先分析pom,如果该模块没有依赖与其他模块,则先构建,如果依赖了...,则先构建依赖的模块 继承 父容器的packaging必须为pom 子项目包含parent元素 子项目构建时会根据relative元素检查父pom,如果找不到,再从本地仓库查找,relative默认值为

    97010

    工程化(四)——组件二进制工程框架搭建

    (默认是动态库,默认是组件二进制),同时需要手动将frameworks拷贝到项目中(copy-frameworks)。...另外说一点,将源码构建成二进制的一个好处就在于,可以节省编译时间、提升编译速度。...二、组件二进制架构简述 App依赖三方库的格式有两种选择:源码、二进制。 如果需要依赖三方库的二进制的话,那么二进制可以在三方库的接入方进行生成,也可以在三方库的开发制作方进行生成。...如果二进制是在三方库的接入方进行生成,那么有两个弊端: 生成二进制是需要时间的,这就会影响到接入方App的编译速度 如果一个App依赖的所有的三方库都是由该App的开发人员进行三方库二进制的生成,其风险远大于在三方库开发的时候就将二进制给生成好...进行开发,所以还需要依赖cocoapods: spec.add_runtime_dependency 'cocoapods' 7,安装相关三方库 最终的Gemfile如下: 可以看到Gemfile中只有一个

    35830

    Xcode添加库文件framework (转)

    目标程序没有外部依赖,直接就可以运行。当然其缺点也很明显,就是会使用目标程序的体积增大。...与静态库相反,动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。等到程序运行时,动态库才会被真正加载进来。...动态库的优点是,不需要拷贝到目标程序中,不会影响目标程序的体积,而且同一份库可以被多个程序使用(因为这个原因,动态库也被称作共享库)。...同时,编译时才载入的特性,也可以让我们随时对库进行替换,而不需要重新编译代码。动态库带来的问题主要是,动态载入会带来一部分性能损失,使用动态库也会使得程序依赖于外部环境。...3.通过Cocoapods来导入.framework 1) 在Podfile文件中,写入你需要导入的.framework文件的名字,如 pod 'XXXXXX' 2)执行pod安装命令:pod install

    8.2K31

    maven实战总结,工作中常见操作

    什么是构建 何为构建:编译、运行单元测试、生成文档、打包、部署的过程,这就是构建。 构建的步骤: 清理 clean:将以前编译得到的旧文件 class 字节码文件删除。...如:spring-core。 test:测试依赖范围 只对于测试 classpath 有效,只需要在编译测试及运行测试才需要,在打包的时候不会打进去。如:JUnit。...但是 X、Y 两个依赖对于 B 来讲可能是互斥的,如 B 是数据库隔离包,支持多种数据库 MySQL、Oracle,在构建 B 项目时,需要这两种数据库的支持,但在使用这个工具包时,只会依赖一个数据库。...内置绑定 为实现快速构建,Maven 有一套内置的插件绑定。三套生命周期的插件绑定具体如下(其实是各个生命周期阶段与插件的目标的绑定)。...聚合:为了一次构建多个项目模块,就需要对多个项目模块进行聚合 模块一 模块二 <module

    1.3K30

    maven 实战总结,工作中常见操作!

    什么是构建 何为构建:编译、运行单元测试、生成文档、打包、部署的过程,这就是构建。 构建的步骤: 清理 clean:将以前编译得到的旧文件 class 字节码文件删除。...如:spring-core。 test:测试依赖范围 只对于测试 classpath 有效,只需要在编译测试及运行测试才需要,在打包的时候不会打进去。如:JUnit。...但是 X、Y 两个依赖对于 B 来讲可能是互斥的,如 B 是数据库隔离包,支持多种数据库 MySQL、Oracle,在构建 B 项目时,需要这两种数据库的支持,但在使用这个工具包时,只会依赖一个数据库。...clean 生命周期的目的是清理项目; default 生命周期的目的是构建项目; site 生命周期的目的是建立项目站点; 单个生命周期执行顺序 每个生命周期包含一些阶段(phase),这些阶段是有顺序的...聚合:为了一次构建多个项目模块,就需要对多个项目模块进行聚合     模块一     模块二     <module

    66820

    Carthage的安装和使用

    为什么要使用Carthage CocoaPods是已存在很长时间的Cocoa依赖管理器, 那么为什么要创建Carthage呢?...它只是根据我们描述文件中配置的第三方库,将他们下载到本地,然后用xcodebuild构建成framework文件。然后由我们自己将这些库集成到项目中。...CocoaPods 的库,就会相对繁琐一些(尽管有了命令行); ③ 每次干净编译都会把所有第三方库都重新编译一次; Carthage的优点: ① 使用Carthage的话,所有的第三方库依赖,除非是更新的需要...: ① 库不如CocoaPods丰富:尽管很多库不需要声明并改造就直接可以被 Carthage用,但依然有大量CocoaPods能用的库不支持; ② 只支持Framework,所以是 iOS 8 Only...依赖源之后 跟上要下载的库,格式为Username/ProjectName``git关键字 后面跟的是资料库的地址,可以是远程的URL地址,使用git://, http://, ssh://,或者是本地资料库地址

    1.5K80

    Swift和Objective-C混编在有赞移动的实践

    其中动态库 framework 是 Xcode 支持配置并生成 header,静态库 .a 需要自己编写对应的 umbrella.h 和 modulemap。...配置将三方库构建成静态库,或者 use_frameworks! 配置将三方库构建成动态库时,在编译产物中都会生成一个 modulemap 和 module umbrella.h 文件 ?...该特性是 Cocoapods 1.5.0 引入的配置,目的是为了满足 Xcode 9 以后支持的 Swift Static Libraries ,将 Swift Pods 构建成为静态库 如果你的 Swift...微商城项目初期: 所有模块均依赖 common 模块,同时所有模块也依赖了 Cocoapods 的二/三方库;在新架构中,common 被封装为 development pod, 并在 podspec...在迁移过程中,可以先依赖 common 以实现对二/三方库的依赖。随业务迭代,单业务 development pod 也逐渐理清自身真实的依赖,最终可以把自己的依赖写入 podspec。

    2.3K20
    领券