前言
因為業(yè)務(wù)需要要將功能模塊打包成framework,有一點比較坑的是代碼是swift 和 oc混編,里面又包含了大量的第三方框架,大家都知道在混編中,需要有橋接文件,那么問題來了混編打包framework 怎么搞,橋接文件怎么辦。
因為時間原因打包的流程就不寫了,網(wǎng)上一搜一大把
[請點擊 swift和oc打包教程]: https://www.cnblogs.com/yajunLi/p/5987687.html
首先說明混編中把橋接文件打包進(jìn)去是不起作用的,swift會找不到oc的類
經(jīng)歷過各種坑后,只能swift語言的打swift的包,oc語言的打oc的包
打包OC的framework
- 新建一個工程 OCTest ,選
cocoa Touch Framework語言選擇objective-c - 將所需要的OC的類拖進(jìn)OCTest 中
- 在OCTest.h(此文件會自動生成)中 import 需要暴露出來的文件
#import <OCTest/CPControllerManager.h> - 給第三方引用的時候需要將圖片、xib文件等 以bundle形式 導(dǎo)入第三方工程里否則會報錯:
Reason: image not found
還有就是必須將所有OC代碼里的[UIImage imageNamed:@"xxx"]改成[UIImage imageNamed:@"OCTest.bundle/xxx"]的形式否則還會報錯 - oc的framework給swift的工程引用的時候,直接
import OCTest即可
6.點擊run或ommand+B可以生成OCTest.framework
打包swift的framework
- 新建一個工程 SwiftTest ,選
cocoa Touch Framework語言選擇swift - 將所需的swift類導(dǎo)入到SwiftTest中
- 如果swift中有用到co的framework 的話需要在
SwiftTest.h(此文件自動生成)引用#import <OCTest/CPControllerManager.h> - 如果在swift類中有使用到OC的framework中的方法還需要在swift文件中 import bundleName 如
import OCTest - 配置swift需要暴露的類及方法這里有幾點需要注意
需要暴露的swift類和方法 要加 @objc 和public 修飾
@objc public class TestSSSS: NSObject { @objc public func test(str :String) { print(str) } @public func test22(sss :String) { print(sss) } }
- 在OC中引用需要在.h 文件中如下操作才會將方法暴露出來
#import <UIKit/UIKit.h> \n #import <SwiftTest/SwiftTest-Swift.h> @class TestSSSS; @interface ViewController : UIViewController @end