首页
学习
活动
专区
工具
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.6K20

现今 Swift 包中二进制目标

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

1.8K20

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

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

96820

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

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

1.5K20

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.6K41

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.1K20

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.1K00

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

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

4.8K12

CocoaPods对三方管理探究

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

2.7K20

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

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

2.4K30

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

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

3.6K20

《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默认值为

94210

APP生成与运行(二)

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

1.2K10

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

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

23930

Xcode添加文件framework (转)

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

7.4K31

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

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

63920

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

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

1.3K30

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.4K80

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.1K20
领券