大多数浏览器和
Developer App 均支持流媒体播放。
-
将二进制框架作为 Swift Packages 发布
了解如何将第三方框架添加到 app 中,并在 Xcode 中使用 Swift 软件包保持更新状态。我们将向你展示如何编写可以引用框架的软件包,介绍二进制对象以及如何在软件包清单文件中指定它们,并演示如何计算校验和,以便你的客户端始终得到你所期望的二进制文件。 框架以 XCFramework 格式分发。关于创建和版本管理 XCFramework 的更多细节,请观看 WWDC19 的“ Swift 中的二进制框架”。
资源
相关视频
WWDC20
WWDC19
-
下载
(你好 WWDC 2020) 你好 欢迎参加 WWDC
(将二进制框架 作为 Swift Packages 发布) 嗨 我叫 Boris 今天我要谈论如何 将二进制框架作为 Swift Packages 发布 在 Xcode 11 中 我们引入了对 Swift packages 的支持 提供一种简单的 将库作为源代码发布的方法 我们还引入了 XCFrameworks 它提供了一种更好的方法来 发布闭源二进制框架和库 在 Xcode 12 中 我们也将 Swift packages 在库发布方面的优势 引入到闭源库 并支持二进制依赖关系 在这段视频中 我将首先介绍 如何在 app 中使用二进制依赖关系 接下来 我将谈论如何将二进制框架作为 Swift package 发布 最后 我们要看看 如何用 Xcode 创建二进制框架 虽然许多库都以源代码的形式提供 但一些开发人员选择不提供 库的源代码 而是以二进制形式进行发布 使用这种二进制依赖关系 就像添加基于源的依赖关系一样 让我们在演示中看一下
我们会从简单的 iOS app 开始 选择文件 Swift Packages 添加包依赖关系
选择 BinaryEmoji 包…
使用 版本1.0…
并将二进制与我们的 app 关联
查看项目导航器 我们会看到一个新的组 “Referenced Binaries” 其中包含 XCFramework
让我们在访达中加以查看
可以看到 它包含一串子目录 每个子目录对应一个平台 和由目标三元组代表的目标环境
在子目录中 你可以看到与那个特定三元组对应的框架
让我们返回 Xcode
现在 我们可以在 app 的代码中
导入表情符号模块
如果我们跳转到“定义“
会看到它提供哪个 API 我想在我的 app 中 使用 EmojiView 类型
刷新预览…
会看到所使用的 EmojiView 因此使用二进制依赖关系的工作方式 与基于源的依赖关系相同
如果你已经熟悉 Xcode 11 中的 XCFrameworks 会发现它们的有效处理方式 与直接添加到 app 相同
如果你想用同一个库作为包依赖关系 会发现 它的工作方式也和你习惯的一样 在包清单中 你可以向依赖关系数组添加 指向包正在使用的存储库的条目 并定义你为该依赖关系选择的版本限制
现在我们了解了如何使用 他人编写的二进制依赖关系 接下来 让我们看看如何自行创建 这种发布二进制框架的包 Xcode 12 提供新的工具-版本:5.3 引入了新的包清单 API 这添加了新的目标类型: “binaryTarget”
它拥有与 XCFramework 的 模块名称相对应的名称…
HTTPS URL… 以及校验和 以便验证下载存档
同时还包含用于开发的 通过路径指向 XCFramework 的选项 注意 较大的 XCFrameworks 就如同较大的二进制文件 不应提交到 Git 存储库 因为它们会使签出变慢
产品可以引用二进制目标 以将其发送到客户端 就像常规目标一样 使用 XCFrameworks 的二进制目标 正如我们前面看到的一样 仅在 Apple 平台上得到支持 可以是 HTTPS 或基于路径 路径可指向包中文件 如果使用的是 HTTPS 将从包的 Git 签出 单独下载二进制工件 这意味着你不会用大二进制文件 污染存储库的历史记录 同时 也可以将同一下载位置用于其它用途 例如他人手动下载你的框架
名称与模块名称相对应 在整个图形中名称是唯一的 因此切勿捆绑他人的二进制框架 每个二进制框架应该包含一个规范包 在发展包的二进制目标时 你应该遵守语义版本控制 就像对基于源代码的目标一样 例如 中断对 XCFramework 的更改 例如重命名方法或类型 会导致包的主版本增大 同样 你还希望 用框架的 Info.plist 中的 捆绑版字符串设置 规定框架本身的版本 WWDC 2019 “Swift 中的二进制框架”讲座 包含更多有关发展二进制框架的信息 我建议你前往观看 让我们在另一个演示中 看看如何创建自己的二进制依赖关系
这次我们从一个新的包开始 使用文件 新 Swift Package
我们会称其为“表情符号”
我们删除由模板添加的目标…
添加二进制目标
名称也是“表情符号” 使用指向我的 XCFramework 所在的本地服务器的 URL
现在我们需要校验和 那么 它如何生成呢?
要计算二进制框架的校验和 需要使用“swift package compute-checksum”命令 这将会将校验和发布到终端 你可以从中断进行复制 并粘贴到你的包清单中 在使用你的包时 Xcode 会计算下载文件的校验和 如果发现与清单不匹配 将执行拒绝 这可以确保你的客户端 可以使用预期的二进制文件 现在我们可以添加该校验和并构建包
以上就是将 XCFramework 捆绑进 Swift package 进行发布的方式 最后 让我们了解下如何创建二进制框架 我们在 Xcode 11 中引入了 XCFrameworks 它们为不同的平台捆绑框架的多个变体 支持框架、动态库以及静态库 此外 每个 XCFramework 均包含一个模块 要创建 XCFramework 需要在现有的框架或库目标上设置 “构建用于发布的库”构建设置 使用 “xcodebuild archive” 命令 将所有变体存档 同时使用 “xcodebuild- create-xcframework” 命令 进行捆绑
WWDC 2019 “Swift 中的二进制框架”讲座 包含更多关于这一点的详细信息 因此 我建议在使用 Xcode 创建二进制框架之前观看视频 在进行总结之前 我想谈谈使用二进制依赖关系的权衡问题 你应该始终仔细考虑在项目中引入 哪些第三方组件 尤其是使用二进制文件 调试会更加困难 而且不可能自行修复
你还会被限制在 编者支持的平台 因为你无法重建二进制依赖关系 在向 app 添加新的二进制依赖关系之前 请记住这些要点 总结一下 你现在能将现有 XCFrameworks 作为 Swift packages 发布了 知道它们的工作方式与基于源的包相同 感谢观看
-
-
2:37 - Adding a Package Dependency to the Package Manifest
// swift-tools-version:5.3 import PackageDescription let package = Package( name: "package", products: [ .library( name: "package", targets: ["package"]), ], dependencies: [ .package(url: "https://github.com/JohnnyAppleseed2020/BinaryEmoji", from: "1.0.0"), ], targets: [ .target( name: "package", dependencies: ["Emoji"]), ] )
-
3:04 - Distributing Binary Frameworks as a Swift Package
// swift-tools-version:5.3 import PackageDescription let package = Package( name: "Emoji", products: [ .library(name: "Emoji", targets: ["Emoji"]) ], dependencies: [ ], targets: [ .binaryTarget( name: "Emoji", url: "https://example.com/Emoji/Emoji-1.0.0.xcframework.zip", checksum: "6d988a1a27418674b4d7c31732f6d60e60734ceb11a0ce9b54d1871918d9c194" ) ] )
-
5:43 - Computing the Checksum
swift package compute-checksum Emoji-1.0.0.xcframework.zip
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。