Rob*_*ier 12 objective-c swift swift-package-manager
我有一个导入到 ObjC 代码中的现有 Swift 框架。我想将它从 xcodeproj 移动到 Swift Package Manager。到目前为止,我还没有找到生成 ObjC 标头并导入它的方法。
例如,考虑以下最小项目:
$ ls -R
Package.swift Sources
./Sources:
SwiftStuff objc
./Sources/SwiftStuff:
SwiftStuff.swift
./Sources/objc:
main.m
Run Code Online (Sandbox Code Playgroud)
包.swift
// swift-tools-version:5.1
import PackageDescription
let package = Package(
name: "ObjCStuff",
products: [
.executable(name: "objc", targets: ["objc"]),
.library(name: "SwiftStuff", targets: ["SwiftStuff"]),
],
targets: [
.target(name: "SwiftStuff"),
.target(name: "objc", dependencies: ["SwiftStuff"]])
]
)
Run Code Online (Sandbox Code Playgroud)
SwiftStuff.swift
import Foundation
@objc public class TheObject: NSObject {
@objc public func dothing() {
print("DO IT!")
}
}
Run Code Online (Sandbox Code Playgroud)
主文件
#import <Foundation/Foundation.h>
@import SwiftStuff;
int main(int argc, const char * argv[]) {
@autoreleasepool {
[[TheObject new] dothing];
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我还没有弄清楚如何使该@import SwiftStuff;
行编译。如果我使用 手动构建标头-emit-objc-header
,则可以使用 导入它#import "...path_to_header"
,然后手动将 ObjC 代码与.linkLibrary
. 但是我找不到一种方法来自动完成这项工作,如果我包含-emit-objc-header
在 Package.swift 中,则没有其他包可以依赖于这个包(因为它需要一个不安全的设置)。