无法编译使用Objective-C软件包的Swift软件包

时间:2019-10-06 17:01:01

标签: objective-c swift xcode package

我正在尝试使用Objective-C模块封装本机C ++代码。这很好。 接下来,我尝试使用Swift中的该模块,但无法使用Swift代码中的Objective-C类。我尝试构建两个单独的模块或一个具有两个目标的模块-相同的错误“ 使用未解决的标识符'Bridge'”,同时还警告了 umbrella目录 ..找不到/ Objective-CCode / include。

我猜想Objective-C和Swift之间的桥接头丢失了。在混合代码环境中,此标头是自动生成的,而不是在包管理中生成的。

缺少了什么或者是我的错?我附上了一个小例子来说明问题。

  

“ Package.swift”软件包说明。

// swift-tools-version:5.1

import PackageDescription

let package = Package(
    name: "MixedExample",
    products: [
        .library(
            name: "MixedExample",
            targets: ["SwiftCode", "Objective-CCode"]),
],
dependencies: [

],
targets: [
    .target(name: "SwiftCode", dependencies: ["Objective-CCode"]),
    .target(name: "Objective-CCode", dependencies: []),    
    ]
)
  

带有Objektive-C代码的模块“ Objective-CCode”:   “ Bridge.h”

#include <Foundation/Foundation.h>

@interface Bridge : NSObject

-(void) printHello;

@end
  

“ Bridge.m”

#include "Bridge.h"

@implementation Bridge : NSObject

-(void)printHello {
    fprintf(stdout, "Hello from ExampleBridge\n");
}

@end
  

带有Swift代码的模块“ SwiftCode”

import Foundation
import Objective_CCode

class Examples {

    let e = Bridge()   // compiler error here

    func printH() {
        e.printHello()
    }
}

1 个答案:

答案 0 :(得分:0)

同时,我搜索了伞目录,这使我进入了解决方案。

本文https://medium.com/allatoneplace/challenges-building-a-swift-framework-d882867c97f9解释了总括目录的用法,该总览目录是从swift调用C *类所必需的。

对于上面的示例,解决方案将是

  

使用以下文件“ MixedExample.h”将包含目录添加到Objective-C软件包中

#include "../Bridge.h"