ios mac xcframework 自动打包

本文介绍了XCFramework的概念及其在跨平台开发中的作用,详细阐述了如何通过xcodebuild命令行工具进行编译,并针对不同平台生成对应的framework。同时,探讨了在自动化构建过程中遇到的目录不固定和设备目标指定问题,以及解决方案。最后,展示了如何将编译后的framework合并为XCFramework的步骤,帮助开发者实现更高效的框架打包和分发。
摘要由CSDN通过智能技术生成

XCFramework简介

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

XCFramework 允许将适用于多个平台(包括iOS设备、iOS模拟器和Mac Catalyst) 的二进制框架或库打包到一个可分发的. XCFramework包中,开发人员可以在自己的应用程序中使用这个包。

上面摘抄的两段网上对XCFramework的解释。下面直接上图看一下xcframework的架构图。

可以看到上面xcframework包含ios真机(arm64、armv7),ios模拟器(i386、x86_64)、mac(arm64_x86_64),把这个xcframework引入工程中,xcode会自动识别需要引用的framework。

我们先来看一下xcode编译的常识

xcodeproj 和xcworkspace 两种方式打开,build不是同一个目录

xcodebuild 以scheme方式编译 可以编译到相应的目录。如果不指定project或者worsapce 则默认编译到xcodeproj 的目录。

-configuration Debug 或者 Release

-workspace worspace文件名称

-project project文件名称

-sdk sdk平台 iphoneos/iphonesimulator/macosx/appletvos/appletvsimulator/watchos/watchos

用xcodebuild -showsdks 查看所有支持的平台。

-destination 设备目标 可以用xcodebuild -showsdks 查看支持的列表。以“key=value”的方式添加 如-destination "arch=x86_64"

xcodebuild -configuration "Debug" -scheme "mytest" -sdk iphoneos   build
xcodebuild -configuration "Debug" -project "mytest.xcodeproj" -scheme "mytest" -sdk iphoneos   build
xcodebuild -configuration "Debug" -workspace "mytest.xcworkspace" -scheme "mytest" -sdk iphoneos   build

 xcodebuild scheme 编译方式就是手动编译的复刻。选择参数都在面板上有体现。

 

 xcodebuild 以target 方式编译 

没有workspace 参数,destination也不起作用。默认bulid 目录在  在项目的build目录下。可以在buildsettings中修改。

xcodebuild -configuration  "Debug" -target "mytest" -sdk iphoneos  build

以上两种命令的变异方式好像都不满足自动编译的要求。第一种,目录不固定,在不同的机子目录不同(随机字符串文件夹),第二种没法指定目标设备,一些指定指令集的编译无法满足。 

怎么办,只能在xcodebuild 以scheme 上想办法

buildsetting 有个build ,修改一下试试。改了以后build路径就在项目路径下了。值得一题的是,你把名字改回来意后,也是有效的,也就是说回不到之前的样子了。

查看一下project.pbxproj 多了个symroot,修改之前是没有的,改回之前build这个新增的属性也还在的, 编译路径还是在项目下。

好了,到现在frame对应各个平台的build都可以用 命令还实现了,下面就只要把这些,framework合成xcframework 了,把合并的framework路径 和输出xcframework添加到下面的变量中。

arrframeworks_release="-framework /root/xx.framework [-framework /root/xx.framework ...]"
sdk_output_release="/root/xx.xcframework"
xcodebuild -create-xcframework $arrframeworks_release -output $sdk_output_release

最后,项目目录下执行你的shell文件就可以啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值