在Swift应用程序中使用Obj-C子项目

时间:2014-09-25 17:20:51

标签: ios xcode swift ios8 xcode6

我的团队有一些完整的Obj-C库,我们喜欢在我们的项目中重用。为此,我们通常设置一个git子模块,然后将其作为子项目添加到xcode项目中(使用target dependencylink binary with library并更新User Header Search Paths

到目前为止,它只在完整的Obj-C项目中完成,我现在尝试在Swift项目中使用它,但到目前为止收效甚微。我尝试添加briding-header文件,在项目中引用它并填充它:

#import "MyLibraryHeader.h"

目标标题位于User Header Search Paths

它允许我构建,但在我的Swift文件中使用它时:

    let test = MyLib();
    let secondTest = MyLib.classMethod1("some_arguments");

我在EXC_BAD_INSTRUCTION上获得secondTest,以及调试器中的以下日志:

(lldb) po test
error: <EXPR>:1:1: error: use of unresolved identifier 'test'

(lldb) po secondTest
error: Error in auto-import:
failed to get module 'MyProject' from AST context:
/Users/siegele/Sources/MyProject_iOS/MyProject/Classes/MyProject-Bridging-Header.h:12:9: error: 'MyLibraryHeader.h' file not found
#import "MyLibraryHeader.h"
        ^
failed to import bridging header '/Users/siegele/Sources/MyProject_iOS/MyProject/Classes/MyProject-Bridging-Header.h'

找到以下问题但没有回答:Xcode 6 crashing when using Objective-C subproject inside Swift

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:7)

我按照HockeyApp教程可以在这里找到: http://support.hockeyapp.net/kb/client-integration-ios-mac-os-x/integrate-hockeyapp-for-ios-as-a-subproject

最后,我在正确的轨道上,但搞砸了标题搜索路径:

  1. 将子项目xcodeproj添加到工作区
  2. 在主项目上:Link binary with library,并添加子项目产品库(奖励点:也将其添加为目标依赖项)
  3. 相应地更新Header Search Paths User Header Search Paths
  4. 在主项目Library.h文件
  5. 中导入Bridging-Header.h

答案 1 :(得分:0)

让我失望的是,Objective-C Bridging Header的Swift Compiler设置没有自动设置。检查目标的构建设置,确保“Objective-C Bridging Header”设置不为空。