apinotes实践 - ShenYj/ShenYj.github.io GitHub Wiki
-
文件命名格式:
SDK名称.apinotes
--- Name: OCSDK Classes: - Name: OCClass SwiftName: SDKClass Methods: - Selector: 'oc_func1' MethodKind: Class SwiftName: 'func1' - Selector: 'oc_func2' MethodKind: Class SwiftName: 'func2' - Selector: 'oc_func3:number2:' MethodKind: Instance SwiftName: 'func3(_:number2:)'
-
将文件放在 SDK 的目录中
. ├── OCSDK │ ├── OCClass.h │ ├── OCClass.m │ ├── OCSDK.apinotes │ └── OCSDK.h └── OCSDK.xcodeproj
-
在
Build Phase
下点击+
号选择New Copy files Phase
,将.apinotes
拷贝到Framework
的Headers
目录下:如果在
Copy Bundle Resources
中有.apinotes
可以将其删除掉,没必要 copy 到 framework 的根目录下
- 通过这种方式配置 SDK 后,文件会被打包进入 Framework 中, 这样也就保证了使用方能够读取配置
-
从最终产物的角度对比一下
.apinotes
文件的存放路径-
framework
: 在 Framework 的Headers
目录下 -
ipa
: 在Frameworks/OCSDK.framework
下, 与库二进制文件同级
-
通过示例,实现了以下处理
-
将
OCClass
这个 OC 类文件在 Swift 下定义为SDKClass
-
将
oc_func3:number2:
这个方法定义为func3(_:number2:)
如图:
原 OC 本身的符号并不会被改变, Swift 在调用 OC 方法前会进行解析,在此过程中处理映射
在 .apinotes
配置中,除了上面两处生效配置外,还有两个类方法的重命名,但是实测并没有生效,暂时还不确定原因