翻译: 如何使用Xcode构建xcframework

翻译: 如何使用Xcode构建xcframework

人们通过构建有用的代码块来构建Framework框架来帮助社区,并将其分发给其他人,这样他们就可以直接使用它,而无需再次重写所有逻辑。

它在软件行业中非常有用,您可以始终依靠他人以及他人投入大量时间进行完善和测试以供他人使用的开源库/框架,我们作为软件工程师,在方便时应利用它我们。

在大型团队中,人们建立框架以使工作模块化,这有助于大型团队拆分工作,而较小的团队可以孤立地工作。同样,能够在公司内的不同应用程序中重用相同的组件/框架,而不必从一个地方重写或复制/粘贴该代码。

在本文中,我将介绍如何构建框架并使用xcode测试框架。

创建框架源代码

本文是由xcode版本12.4 编写和测试的。
打开xcode并从框架项目开始。

www.zeeklog.com  - 翻译: 如何使用Xcode构建xcframework


我将其命名为mine FruitBasket,您可以选择任何内容,然后将其保存到桌面上,以便以后在构建xcframework时可以轻松地访问它。

www.zeeklog.com  - 翻译: 如何使用Xcode构建xcframework


什么是FruitBasket?这是我为本文编写的一个愚蠢的示例,它基本上是一篮水果,我们应该能够向其中添加水果,并且该篮应该告诉我们其中有多少种水果,它们是什么。挺有趣的,不是吗?

首先,我将添加一个快速文件以包含要使用的多种水果的简单枚举,然后将其命名为“水果”。

www.zeeklog.com  - 翻译: 如何使用Xcode构建xcframework


如您所见,我添加了public access修饰符,以便能够从框架外部(即,在导入此框架时从我们的项目中)访问该枚举。

我将为水果篮添加一个简单的类。随意添加仅一个功能进行打印Hello, world,在此示例中这并不重要。

www.zeeklog.com  - 翻译: 如何使用Xcode构建xcframework


现在框架代码已经准备就绪,让我们生成框架。

这是您需要了解的有关xcframeworks的知识,它们是您为他人分发的预编译代码(二进制代码)。

Xcode为特定的体系结构构建了framworks,因此,xcode将为模拟器构建框架,为iOS设备构建另一个框架,为macOS和tvOS构建另一个框架。

在大多数情况下,当您将框架分发给客户时,您不会为它们提供单独的框架,而当它们在模拟器或iPhone设备上运行时它们会被替换,我们将创建所需的所有框架,然后使用LIPO工具来帮助我们将所有这些框架组合到一个通用框架中.framework并进行分发。。

但是,由于Apple引入了新的xcframework,因此我们不再需要LIPO。

因此,让我们看看如何创建它。

生成用于模拟器和设备的.xcframwork

首先从xcode中的构建设置启用 “分发的构建库”。

www.zeeklog.com  - 翻译: 如何使用Xcode构建xcframework


然后,打开一个终端窗口并导航到您的项目目录,在我的情况下,该目录保存在我的桌面上

注意:以下所有命令均用于FruitBasket,如果您以不同的方式命名项目,则必须使用框架名称调整所有命令。

cd ~/Desktop/FruitBasket/

并编写以下命令,这将创建一个可以在模拟器上运行的框架。

xcodebuild archive \
 -scheme FruitBasket \
 -archivePath ~/Desktop/FruitBasket-iphonesimulator.xcarchive \
 -sdk iphonesimulator \
 SKIP_INSTALL=NO

等待它完成,您将看到成功消息。

www.zeeklog.com  - 翻译: 如何使用Xcode构建xcframework


检查您的桌面,您应该看到已经在其中创建了名称为FruitBasket-iphonesimulator.xcarchive的xcarchive。

www.zeeklog.com  - 翻译: 如何使用Xcode构建xcframework

然后编写此非常相似的命令为iOS设备创建另一个命令。

xcodebuild archive \
 -scheme FruitBasket \
 -archivePath ~/Desktop/FruitBasket-iphoneos.xcarchive \
 -sdk iphoneos \
 SKIP_INSTALL=NO

成功之后,您现在应该将两个xcarchives与我相同

www.zeeklog.com  - 翻译: 如何使用Xcode构建xcframework


在这里,我们需要将两者结合在一起xcframework,将follow命令复制并粘贴到您的终端中,然后按Enter

xcodebuild -create-xcframework \
 -framework ~/Desktop/FruitBasket-iphonesimulator.xcarchive/Products/Library/Frameworks/FruitBasket.framework \
 -framework ~/Desktop/FruitBasket-iphoneos.xcarchive/Products/Library/Frameworks/FruitBasket.framework \
 -output ~/Desktop/FruitBasket.xcframework

您应该知道xcframwork已成功编写。

www.zeeklog.com  - 翻译: 如何使用Xcode构建xcframework


检查您的桌面并寻找 YourFrameworkName.xcframework

www.zeeklog.com  - 翻译: 如何使用Xcode构建xcframework

测试框架

从xcode创建一个新项目,单视图应用程序可以进行测试。

www.zeeklog.com  - 翻译: 如何使用Xcode构建xcframework


通过将您刚刚创建的xcframework文件拖放到Framworks,Libraries和Embedded Content中来添加它

www.zeeklog.com  - 翻译: 如何使用Xcode构建xcframework


www.zeeklog.com  - 翻译: 如何使用Xcode构建xcframework

现在切换到您的视图控制器并导入框架并开始对其进行测试。

www.zeeklog.com  - 翻译: 如何使用Xcode构建xcframework
www.zeeklog.com  - 翻译: 如何使用Xcode构建xcframework


在模拟器和真实设备上运行它,它应该运行并为您提供相同的结果。

恭喜您创建xcframework了可同时在模拟器和设备上运行的第一个程序。

下一步是什么?

要了解有关二进制框架及其接口以及它们如何工作的更多信息,请观看

参考

https://medium.com/swlh/how-to-build-xcframework-with-xcode-b3d0b3c08f43

Read more

深入理解 Proxy 和 Object.defineProperty

在JavaScript中,对象是一种核心的数据结构,而对对象的操作也是开发中经常遇到的任务。在这个过程中,我们经常会使用到两个重要的特性:Proxy和Object.defineProperty。这两者都允许我们在对象上进行拦截和自定义操作,但它们在实现方式、应用场景和灵活性等方面存在一些显著的区别。本文将深入比较Proxy和Object.defineProperty,包括它们的基本概念、使用示例以及适用场景,以帮助读者更好地理解和运用这两个特性。 1. Object.defineProperty 1.1 基本概念 Object.defineProperty 是 ECMAScript 5 引入的一个方法,用于直接在对象上定义新属性或修改已有属性。它的基本语法如下: javascript 代码解读复制代码Object.defineProperty(obj, prop, descriptor); 其中,obj是目标对象,prop是要定义或修改的属性名,descriptor是一个描述符对象,用于定义属性的特性。 1.2 使用示例 javascript 代码解读复制代码//

By Ne0inhk

Proxy 和 Object.defineProperty 的区别

Proxy 和 Object.defineProperty 是 JavaScript 中两个不同的特性,它们的作用也不完全相同。 Object.defineProperty 允许你在一个对象上定义一个新属性或者修改一个已有属性。通过这个方法你可以精确地定义属性的特征,比如它是否可写、可枚举、可配置等。该方法的使用场景通常是需要在一个对象上创建一个属性,然后控制这个属性的行为。 Proxy 也可以用来代理一个对象,但是相比于 Object.defineProperty,它提供了更加强大的功能。使用 Proxy 可以截获并重定义对象的基本操作,比如访问属性、赋值、函数调用等等。在这些操作被执行之前,可以通过拦截器函数对这些操作进行拦截和修改。因此,通过 Proxy,你可以完全重写一个对象的默认行为。该方法的使用场景通常是需要对一个对象的行为进行定制化,或者需要在对象上添加额外的功能。 对比 以下是 Proxy 和 Object.defineProperty 的一些区别对比: 方面ProxyObject.defineProperty语法使用 new Proxy(target,

By Ne0inhk