iOS Object-c和Swift混合编写Framework

最近想把项目工程编写成framework,但是项目本身是oc(object-c简称)编写的。而项目中的折线图等实现是使用的swift的一个类库,所以需要编写swift和oc混合开发一个framework。

新建target或者本身就是framework的项目,这个我就不说了,一般百度下就可以了。我所要说的是 framework不支持 Objective-CBridging Header。所以在oc和swift相互调用的时候需要注意的是,

oc调用swift

需要引用系统为oc创建的一个隐含文件。#import "TWF(项目名)/TWF(product Module name)-Swift.h",这样oc还是不能调用一些swift。需要对外调用的swift 需要申请为public,例如:public class SwiftViewController: UIViewController。这里还有一些细节,有时间研究下。

swift调用oc 不需要引入头文件。但是需要在项目的公共的头文件中引入对swift开放的oc文件头。一般为项目名.h的头文件中。并且将该头文件在target-》build phases-〉headers中设置为public。

这样就可以相互调用和打包为framework了。

引入项目可能会报错

dyld: Library not loaded: @rpath/libswiftCore.dylib

Referenced from: /var/containers/Bundle/Application/295BD35B-CF6C-4769-B29F-116D60E4E4C5/PPStocks.app/PPStocks

Reason: no suitable image found.  Did find:

需要配置

并且需要在target的general的embedded binaries中添加该framework。并且将linked frameworks and Libraries中的framework的status的状态选为 Optional。


参考文献:

官方给出的混编的规范:

https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_84

官方给出的swift的修饰关键词

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html#//apple_ref/doc/uid/TP40014097-CH41

一些网络资源:

oc和swift和一个坑

http://www.jianshu.com/p/de8745c5cf0a

oc和swift的一个framework。

http://www.jianshu.com/p/b0a38b4ba5b9

swift framework

http://www.jianshu.com/p/13ee670f21ac 

你可能感兴趣的:(iOS Object-c和Swift混合编写Framework)