【问题标题】:Swift classes not found in iOS app when importing a mixed framework导入混合框架时在 iOS 应用程序中找不到 Swift 类
【发布时间】:2016-09-07 15:45:26
【问题描述】:

我有一个将Objective-CSwift 混合在一起的框架。它单独编译,但是当我在Objective-C iOS 应用程序中导入它时,找不到Swift 类,但找到了Objective-C 类。 导入 MyFramework-Swift.h 时在框架内找到我的 Swift 类 iOS 应用和框架是同一个工作区中的两个不同项目。

Defines ModuleEmbedded content contains Swift Code 对于所有目标都设置为 Yes,我的 Swift 类是公开的 @objc

我尝试使用@import MyFramework#import <MyFramework/MyFramework-Swift.h>,但没有成功。

我没有在项目的框架的 Headers 目录中看到 MyFramework-Swift.h 头文件。不确定这是否正常。生成于DerivedData

编辑:我设法在 Xcode 8 中用一个非常简单的工作区重现了这个问题(但在 7.3 中可能相同):

  • 在Objective-C中创建一个新的Cocoa touch框架TestFramework
  • 创建一个A.h 文件

    @class B;
    
    @interface A : NSObject
    
    -(void)print:(B*)caller;
    
    @end  
    
  • 创建一个A.m 文件

    #import <Foundation/Foundation.h>
    #import "TestFramework-Swift.h"
    
    #import "A.h"
    
    @implementation A
    
    -(void)print:(B*)caller {
        [caller test];
    }
    
  • 创建一个B.swift 文件

    import Foundation
    
    @objc public class B : NSObject {
        public func test() {
            print("test");
        }
    }
    
  • A.h设置为公共标头

  • A.h 导入TestFramework.h
  • 尝试编译框架

这里没有找到TestFramework-Swift.h

  • Install Objective-C compatibility header 设置为No
  • 尝试编译框架

现在可以编译了!

  • 新建 iOS Objective-C 单视图应用 App
  • 像这样更新 ViewController.m

     #import "ViewController.h"
     @import TestFramework;
    
     @interface ViewController ()
    
     @end
    
     @implementation ViewController
    
     - (void)viewDidLoad {
         [super viewDidLoad];
         B* b = [[B alloc] init];
         A* a = [[A alloc] init];
         [a print: b];
     }
    [...]
    @end
    

B 上应该有错误,但 A 上没有。我还在两个项目中都将 Defines Module 设置为 Yes,但均未成功

【问题讨论】:

  • 几个问题:1)框架和Objective-C代码实际上是不同的项目,还是同一个项目中的不同目标?听起来他们在不同的项目中,但想仔细检查。 2) 什么样的 Objective-C 代码使用该框架?它是命令行实用程序吗?可可应用程序?图书馆?
  • 1) 它们是同一工作区中的不同项目。 2)这是一个iOS应用问题更新

标签: ios objective-c swift xcode


【解决方案1】:

好的,我终于找到了答案。 Install Objective-C compatibility header 必须设置为 Yes 并且导入必须是 #import &lt;TestFramework/TestFramework-Swift.h&gt; 而不是框架内的 #import "TestFramework-Swift.h"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 2015-12-24
    • 2016-06-08
    相关资源
    最近更新 更多