framework的Headers文件夹
xcode新建工程选择Cocoa Touch Framework类型
编码语言选择swift
置此完成由swift编写的framework
头文件的暴露
framewrok的作用就是避免源码暴露给调用者,只开放想要开放的文件/接口。
文件暴露:target->BuildPhase->Headers->Public;将需要暴露的文件添加到上述路径,framwork就会暴露该文件
swift framework在oc的兼容性
swift编写的framwork在oc工程能被正常使用,如下述代码需要注意以下几点:
public class CustomClass: NSObject {
@objc
public init(view: UIView) {
}
}
1.自定义CustomClass类为public
2.自定义CustomClass类继承NSObject
3.自定义CustomClass类的public需要标明@objc关键字
验证方法
查看对应的xxx.framework对应的xxx-Swift.h(xxx.framework->Headers->xxx-Swift.h),验证暴露的方法是否存在于xxx-Swift.h
ClassName类中有定义了4个方法,差异在于public,@objc两个关键字
ClassName.swift
//@objc+ public
@objc
public func myMethod1(par:Int)-> Int{
return par
}
//public
public func myMethod2(par:Int)-> Int{
return par
}
//@objc+ private
@objc
private func myMethod3(par:Int)-> Int{
return par
}
//private
private func myMethod4(par:Int)-> Int{
return par
}
xxx-Swift.h
SWIFT_CLASS("_TtC17ProjectName10ClassName")
@interface ClassName : NSObject <CALayerDelegate>
- (NSInteger)myMethod1WithPar:(NSInteger)par SWIFT_WARN_UNUSED_RESULT;
@end
说明:
1."_TtC17ProgectName10ClassName":工程名ProgectName+类名ClassName,一般以这种组织形式表明对应的类为公开类,对调用者开放
2.只有@objc+ public两个关键字的方法才会被暴露
3.framework中定义的方法名,在oc中可能会发生变化,但可在xxx-Swift.h确认最终的方法名
OC中framework使用
模式选择
1.framework的添加
a.调试模式:将framework target放在app target同一个workpalce,然后在wrokplace中的build中找到对应的xxx.framework待后续使用。
特点:便于调试
b.非调试模式:将xxx.framework拖入到app target的工程中。
特点:无法调试
app target的xx.frmaework环境配置
路径:
1.app traget -> general->embedded binaries 添加目标framework
2.linked frameworks and libraries 添加目标framework
app target代码中使用
1.头文件声明
如下,xcode不会有联想提示,需要手动输入
#import "ProjectName/ProjectName-Swift.h"
2.方法调用
直接调用ProjectName-Swift.h中声明的类方法/实例方法
[[ClassName alloc] initWithView:self.window];
注意:
编译过程中会提示动态库文件找不到,“image not fund”,
可以通过切换“Aways Embed Swift Standard Libraries”的设置