美文网首页iOS开发精进程序员iOS Developer
创建用到OC Framework的Swift Framework

创建用到OC Framework的Swift Framework

作者: huhueggtest_tdp | 来源:发表于2016-08-26 14:20 被阅读1922次

遇到的问题

平时很熟悉在Swift工程中使用Objective-C的方法,一个桥接头文件就搞定了。在写Swift Framework的时候很自然的就是先随意创建个oc文件,等待弹出是否需要自动创建桥接文件的提示。没出现! 手动添加也不生效!

那么如何在Swift的framework中使用OC的framework呢?
刚踩完坑,留个demo。

创建OC Framework

OCFramework

为swift framework调用做配置

  1. 需要把给Swift调用的TestOCFramework.h添加到OCFramework.h中
此处添加需要被SwiftFramework访问的.h
  1. 设置OCFramework->BuildPhases->Headers
将TestOCFramework.h移至Public

TestOCFramework

TestOCFramework.h

#import <Foundation/Foundation.h>

@interface TestOCFramework : NSObject

+(NSString *)hello;
@end

TestOCFramework.m

#import "TestOCFramework.h"

@implementation TestOCFramework
+(NSString *)hello {
    return @"Objective-c hello";
}
@end

创建Swift Framework

SwiftFramework

添加OCFramework.framework

添加OCFramework.framework

import OCFramework

添加需要调用的OCFramework的.h

TestSwiftFramework

import UIKit

public class TestSwiftFramework: NSObject {
    public class func hello() {
        //测试调用OCFramework
        if let ocHello = TestOCFramework.hello() {
            print("TestSwiftFramework.hello load oc framework: \(ocHello)")
        } else {
            print("TestSwiftFramework load OCFramework failed")
        }
    }
}

SwiftFramework调用OCFramework就这样完成啦,分别创建OC和Swift的Demo来测试一下。

TestOCDemo

创建OC工程测试

OC测试工程

添加Framework

添加使用的Framework

为SwiftFramwork修改Build Settings

将Always Embed Swift Standard Libraries设置为Yes

在AppDelegate调用SwiftFramework试试

#import "AppDelegate.h"

#import "SwiftFramework/SwiftFramework-Swift.h"
@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //测试调用SwiftFramework
    [TestSwiftFramework hello];
    return YES;
}
@end

日志
TestSwiftFramework.hello load oc framework: Objective-c hello

TestSwiftDemo

创建Swift工程测试

Swift测试工程

添加Framework

添加Framework

在AppDelegate调用SwiftFramework试试

import UIKit
import SwiftFramework

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        //测试调用SwiftFramework
        TestSwiftFramework.hello()
        
        return true
    }
  }

日志
TestSwiftFramework.hello load oc framework: Objective-c hello

查看Demo源码

https://github.com/huhuegg/Demo/tree/master/UseOCFrameworkInSwiftFramework

相关文章

网友评论

  • ze_jie:大神,请问,swift framework 里面可以用第三方的oc库吗?例如BmobSDK这种库。
    demo里面调用自己的oc framework,我试了是可以,但是用第三方的就失败。
    huhueggtest_tdp:@ze_jie swift framework 里面可以用三方的库,.a可以直接包含,framework需要在工程中Link
  • d17dee4c68e5:请问,如何制作一个基于OC的framework, 在这个framework 中 实现 OC 调用swift ?
    zp秋枫暮霞:@itlijunjie 我试过了不行啊
    itlijunjie:http://stackoverflow.com/questions/24078043/call-swift-function-from-objective-c-class/26756530#26756530

    1) Add @ObjC to Swift class

    2) Add in .m
    #import "(ProjectName)-Swift.h"

    3) Call from .h
    @class SwiftClass;

    4)On SwiftClass
    click "Command" + Left Click (Apple Documantation)

    5) To see "-Swift.h" -> click "Command" + Left Click
  • shuolol:你好 大神 请问 为在OC的frameworks 里面用oc 调用swift 的代码 怎么弄 没有桥接文件 不知道怎么调啊
    itlijunjie:http://stackoverflow.com/questions/24078043/call-swift-function-from-objective-c-class/26756530#26756530
    huhueggtest_tdp:@shuolol #import “<工程名>-swift.h”
  • KayMo:dyld: Library not loaded: @rpath/OCFramework.framework/OCFramework
    /TestSwiftDemo Reason: image not found
  • huhueggtest_tdp:建议Carthage试试
  • 爱尔兰雪:写的很清楚。只是我现在的困难是,pod。pod一个oc轮子到swift fw里,然后再给别的target使用,就会报错,怎么都找不到这个sw fw
  • 669f4f27f444:#import <SwiftFramework/SwiftFramework-Swift.h> 运行可以,但是这里会报红色,could not build module "SwiftFramework", 另外 如何在 OC的framework中使用Swift的framework呢? 反过来一直报错,不能用!!请指教,谢!!
    huhueggtest_tdp:@tonylegend OC的framework直接可以使用Swift的Framework,需要注意设置Build Settings -> BuildOptions -> Embedded Content Contains Swift Code 为Yes
    huhueggtest_tdp:@tonylegend 是不是#include< x/x.h >出现:Could not build module ‘x’ ? 那可能是因为没有将在对外部公开的类中.h引用到的类,放到pulbic里面

本文标题:创建用到OC Framework的Swift Framework

本文链接:https://www.haomeiwen.com/subject/kqhzsttx.html