赞
踩
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文件就可以啦。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。