尝试将 Swift 与 Obj C 标头用于 Coda2 插件.获取错误:体系结构x86_64的未定义符号



尝试使用 swift 为 Coda 2.5 构建插件。我收到此错误:

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_CodaPlugInsController", referenced from:
      _get_field_types_PowPlugInViewController in PowPlugInViewController.o
      _get_field_types_PowPlugIn in PowPlugin.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我已经清理了我的构建文件夹。我已经创建导入语句并将其添加到项目名称-bridgedging-swift.h

以下是我的项目。

CodaPlugInsController.h

您可以在此处找到此文件。https://github.com/panicinc/CodaPluginKit/tree/master/Cocoa%20Plug-ins描述:此标头提供实现 Coda 的协议和工具基于文本的语法验证器和侧边栏插件。

CodaPow-Bridging-Header.h

//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//
#import "CodaPlugInsController.h"

插件.swift

import Foundation
class PowPlugIn: NSObject, CodaPlugIn, CodaSidebarPlugIn {
    let PowBundle: CodaPlugInBundle
    let PowController: CodaPlugInsController
    required init(plugInController: CodaPlugInsController, plugInBundle: CodaPlugInBundle) {
        self.PowBundle = plugInBundle
        self.PowController = plugInController
        super.init()
    }
    func name() -> String {
        return "Coda Pow"
    }
    func didLoadSiteNamed(name: String!) {
    }
    func viewController() -> NSViewController {
       return PowPlugInViewController(nibName: "PowPlugInView", plugInBundle: PowBundle, plugInController: PowController)!
    }
}

PowPlugInViewController.swift

import Foundation
class PowPlugInViewController: NSViewController, CodaSidebarViewController {
    let PowController: CodaPlugInsController
    init?(nibName: String, plugInBundle: AnyObject, plugInController: CodaPlugInsController) {
        self.PowController = plugInController
        super.init(nibName: nibName, bundle: plugInBundle as? NSBundle)
    }
    //  Xcode Says I need this.
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

我还有两个源文件。服务器和主机.swiftShell.swift他们不使用CodaPlugInsController.h中的任何类。命令行管理程序.swift文件只是一组类函数。

编辑:我可以使用 swift,只要我不从 CodaPlugInsController.h 进行子类化或传入一个已经存在的对象。

Swift 和 Obj-C 版本的 Project: https://www.dropbox.com/sh/bsw8cinn7kp9kfe/AAAgG_B44dbHNP5-JwJ3Amf8a?dl=0

项目将编译,因此桥接标头可能不是问题。

在链接阶段失败,编译器找不到当前体系结构的一组符号。这可能意味着

1( Coda 库不是针对您的架构编译

2( 链接器根本找不到库。

我查看了您的 Obj-C 项目,似乎 Coda 库不在项目中,所以我猜它的 #2。您要么希望以某种方式将库移动到项目中,要么在项目的"库搜索路径"中将库添加到系统上其他位置的路径

最新更新