最近想把项目工程编写成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
网友评论