1. 先去官网下载xcframework
2. 简单实现,直接使用binaryTarget包下
新建个目录,创建package.swift
目录如下
├── Package.swift
├── Sources
│ └── AlipaySDK
│ └── AlipaySDK.xcframework
Package.swift
// swift-tools-version: 6.2
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "AlipaySDK",
platforms: [.iOS(.v15)],
products: [
.library(
name: "AlipaySDK",
targets: ["AlipaySDK"]
),
],
targets: [
.binaryTarget(
name: "AlipaySDK",
path: "Sources/AlipaySDK/AlipaySDK.xcframework"
),
.testTarget(
name: "SimpleSwiftKitTests",
dependencies: ["AlipaySDK"]
),
]
)
这样主工程就可以通过spm使用这个库了,但是根据iOS 集成流程要添加这些添加库依赖
但是这时会提示AlipaySDK.framework did not contain an Info.plist。有个两个方法
- 让ai补上缺失的
Info.plis(我选这个) - 把
AlipaySDK-inside-Info.plistcopy一份改名为Info.plis,然后自己改。
这时就可以运行成功了
import AlipaySDK
print("AlipaySDKVersion", AlipaySDK.defaultService().currentVersion())
输出
AlipaySDKVersion Optional("15.8.42")
#import <AlipaySDK/AlipaySDK.h>
或者
@import AlipaySDK;
NSLog(@"AlipaySDK.currentVersion %@", [[AlipaySDK defaultService] currentVersion]);
AlipaySDK.currentVersion 15.8.42
这时应该就大功告成了,但是我觉得主工程要自己添加那么多库依赖,实在不好。使用cocoapods时就不用这么麻烦。所以自己就试除了以下几个方法。
方案A 用普通的Target包下详见
cocoapods时主工程不用添加那么多库依赖,是因为.podspec中用frameworks加好了。由于SPM 的binaryTarget不支持配置linkerSettings,所以要不自己在主工程里加,要么用普通的Target包下。
文件目录如下
├── Package.swift
├── README.md
├── Sources
│ ├── AlipaySDK
│ │ └── dummy.swift
│ └── AlipaySDKBinary
│ └── AlipaySDK.xcframework
Package.swift
// swift-tools-version: 6.2
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "AlipaySDK",
platforms: [.iOS(.v15)],
products: [
.library(
name: "AlipaySDK",
targets: ["AlipaySDK"]
),
],
targets: [
.binaryTarget(
name: "AlipaySDKBinary",
path: "Sources/AlipaySDKBinary/AlipaySDK.xcframework"
),
.target(
name: "AlipaySDK",
dependencies: ["AlipaySDKBinary"],
path: "Sources/AlipaySDK",
linkerSettings: [
.linkedFramework("SystemConfiguration"),
.linkedFramework("CoreTelephony"),
.linkedFramework("QuartzCore"),
.linkedFramework("CoreText"),
.linkedFramework("CoreGraphics"),
.linkedFramework("UIKit"),
.linkedFramework("Foundation"),
.linkedFramework("CFNetwork"),
.linkedFramework("Network"),
.linkedFramework("WebKit"),
.linkedLibrary("z"),
.linkedLibrary("c++"),
// .unsafeFlags(["-fmodules"])
]
),
.testTarget(
name: "SimpleSwiftKitTests",
dependencies: ["AlipaySDK"]
),
]
)
dummy.swift
@_exported import AlipaySDK
import Foundation
这样主工程不用自己添加那么多库依赖,使用跟以前一样。但是在objc中不能用@import AlipaySDK;导入了#import <AlipaySDK/AlipaySDK.h>
#import <AlipaySDK/AlipaySDK.h> ✅
@import AlipaySDK; ❌
方案B 用普通的Target包下,用oc实现详见
文件目录如下
├── Package.swift
├── README.md
├── Sources
│ ├── AlipaySDK
│ │ ├── AlipaySDK.m
│ │ └── include
│ │ ├── AlipaySDKModule.h
│ │ └── module.modulemap
│ └── AlipaySDKBinary
│ └── AlipaySDK.xcframework
│ ├── Info.plist
│ ├── ios-arm64
│ └── ios-arm64_x86_64-simulator
AlipaySDKModule.h
#ifndef AlipaySDKModule_h
#define AlipaySDKModule_h
#import <AlipaySDK/AlipaySDKModule.h>
#endif /* AlipaySDKModule_h */
module.modulemap
module AlipaySDKOC {
umbrella header "AlipaySDKModule.h"
export *
module * { export * }
}
这样的话,使用就跟以前一样了