织梦图片瀑布流网站模板,免费永久云服务器购买,网和网站的区别,wordpress 地方门户Swift Package Manager (SPM) 是苹果官方提供的用于管理 Swift 项目的依赖关系和构建过程的工具。它是一个集成在 Swift 编程语言中的包管理器#xff0c;用于解决在开发过程中管理和构建包依赖项的需求。
1、上传xcframework.zip到服务端
压缩xcframeworks成一个zip包…Swift Package Manager (SPM) 是苹果官方提供的用于管理 Swift 项目的依赖关系和构建过程的工具。它是一个集成在 Swift 编程语言中的包管理器用于解决在开发过程中管理和构建包依赖项的需求。
1、上传xcframework.zip到服务端
压缩xcframeworks成一个zip包并且上传到服务器得到一个压缩包的https链接如https://www.xxx.com/mysdk.xcframework.zip
在命令行中运行
shasum -a 256 mysdk.xcframework.zip
得到这个压缩包的SHA256哈希值
2、制作package
使用下面命令初始化package
swift package init --type library
或者在Xcode菜单选择 File - New - Package 新建package
2.1、Package结构
一个 Package包由 Swift 源码文件和一个清单文件组成。这个清单文件被命名为 Package.swift它使用 PackageDescription 模块来定义包的名称、内容以及依赖关系。
Package包含如下内容
Package.swift: 包的清单文件用于描述包的名称、内容、依赖关系、支持的 Swift 版本号Sources: 源码文件夹通常包括 C/C 代码和 Swift 代码等Tests: 单元测试代码
目录结构如下 Sources --MyLibrary //同顶层目录名的target目录 -----MyLibrary.swift Tests //单元测试 --MyLibraryTests -----MyLibraryTests.swift README.md //文档 Package.swift //配置文件类似Cocoapods自定义pod库的podspec文件 2.2、修改package.swift文件
// swift-tools-version:5.8 //这句不可以删除指定版本的import PackageDescriptionlet package Package(name: MyLibrary,platforms: [.iOS(.v13) // 适用的 iOS 版本],products: [.library(name: MyLibrary,targets: [MyLibraryTarget]),],dependencies: [.package(name: MapboxMaps, url: https://github.com/mapbox/mapbox-maps-ios.git, .exact(10.12.3)),.package(name: Python-iOS, url: https://github.com/kewlbear/Python-iOS.git, from: 0.1.1-b),.package(name: NumPy-iOS, url: https://github.com/kewlbear/NumPy-iOS.git, .branch(main)),],targets: [.binaryTarget(name: MySDK, // 二进制库的名称url: , // 二进制库的下载链接 上一步生成的checksum: // 二进制库的校验和 上一步生成的),.target(name: MyLibraryTarget,dependencies: [MapboxMaps, Python-iOS, NumPy-iOS, MySDK],),resources: [.copy(MyLib.bundle)],//资源包linkerSettings: [.linkedLibrary(z),.linkedLibrary(bz2),.linkedLibrary(sqlite3),.linkedFramework(SystemConfiguration)]]
)package.swift 必须以字符串“// swift-tools-version:”开头后面跟一个版本号例如 // swift-tools-version:5.3 2.2.1、添加对另一个Swift Package的依赖项
dependencies: [.package(url: https://url/of/another/package.git, from: 1.0.0),.package(path: path/to/a/local/package/, 1.0.0..2.0.0)
], // 向位于给定路径的package添加依赖 .package(name: String, path: String) // 向位于给定路径的package添加依赖 .package(path: String) // 添加从特定最小版本开始的package依赖直到下一个主要版本 .package(url: String, from: Version) // 添加从特定最小版本开始的package依赖直到但不包括指定的最大版本 .package(url: String, RangeVersion) // 添加从特定最小版本开始的package依赖直到并包括特定的最大版本 .package(url: String, ClosedRangeVersion) // 添加给定分支需求的package依赖 .package(url: String, branch: String) // 添加给定修订要求的package依赖 .package(url: String, revision: String) // 添加使用确切版本要求的package依赖 .package(url: String, exact: Version) 2.2.2、明确声明资源
要添加Xcode无法自动处理的资源需要在package.swift中明确声明为资源。
targets: [.target(name: MyLibrary,resources: [.process(text.txt)]),
]
当明确声明资源时必须选择以下规则之一以确定Xcode如何处理资源文件
.process
Xcode会为支持此类优化的平台优化图像文件。如果资源没有特殊处理Xcode会将资源复制到资源包的顶级目录。
.copy
Xcode会将资源原样复制到资源包的顶层。保留目录的结构。
2.2.3、排除资源
如果文件驻留在target文件夹中并且不希望它成为软件包资源需要将其传递给exclude参数来从target中排除文件
targets: [.target(name: MyLibrary,exclude:[instructions.md]),
]
2.2.3、binaryTarget
创建一个引用本地库的二进制target
.binaryTarget(name: MySDK, // 二进制库的名称path: , // 二进制库的路径
),
创建一个引用远程库的二进制target。
.binaryTarget(name: MySDK, // 二进制库的名称url: , // 二进制库的下载链接checksum: // 二进制库的校验和
),
2.2.4、LinkerSettings
声明与系统框架的连接
linkerSettings: [.linkedFramework(SystemConfiguration)
]
声明与系统库的连接
linkerSettings: [.linkedLibrary(z),.linkedLibrary(sqlite3),
]
2.3、上传package到git
上传文件夹到git公开仓库并且打上tag版本号。
3、使用package包
打开Xcode选择file - add Packages将git路径粘贴到输入框。