私有库的相互引用
文章是转载自OC和Swift混合开发(Pod私有库的相互引用),在这里记录一下,方便以后查看。
概述:该文档主要介绍OC和Swift混合开发相互调用,包括3大类情况和12种具体情形。
三大类情况:
主工程内的混合互调,
主工程和Pod三方库之间的混合互调,
Pod三方库和其他Pod三方库之间的混合互调。
十二种情形:
- 主工程内的OC 调用 主工程内的OC:
#import “NSObject.h”
导入头文件直接调用。
- 主工程内的OC 调用 主工程内的Swift:
1. 主工程中创建.pch文件,在TARGETS -> Build Setting -> 搜索pch -> 设置.pch文件的路径,
2. 在.pch文件中添加 :
例如:#import “xxxxx_Swift.h”
(该文件命名规则为:”工程名_Swift.h”,该文件为系统自动生成) ,
3. 编译之后才可自动识别需要调用的Swift的文件 。
- 主工程内的OC 调用 OC的Pod三方库:
#import 导入头文件直接调用。
- 主工程内的OC 调用 Swift的Pod三方库:
1. 如果仅在某个OC文件内调用该Swift库,在该库中导入头文件:@import 包的名字;
例如:@import RxSwift;
(不要给库文件名添加<>或者” “、不要遗漏分号”;”) ,
2. 如果是全局多处调用该Swift库,在.pch文件 中导入头文件(导入规则同上) 。
- 主工程内的Swift 调用 主工程内的OC:
1. 自动创建桥接文件 (在OC或者Swift项目中第一次创建Swift或者OC文件时Xcode会自动提示创建桥接文件 ->xxxxx-Bridging-Header.h
) ,
2. 手动创建桥接文件(首先需要创建一个空的.h文件,命名规则为:项目名-Bridging-Header.h
; 设置桥接文件的路径: 在TARGETS -> Build Setting -> 搜索Bridging -> 设置桥接文件的路径:工程名/桥接文件所在的文件夹名/桥接文件的名字
) ,导入需要调用的OC的头文件,
例如:#import “NSObject.h”
- 主工程内的Swift 调用 主工程内的Swift:
主工程内的Swift调用主工程内的其他Swift不需要添加头文件等引用,可以直接调用。
- 主工程内的Swift 调用 OC的Pod三方库:
在桥接文件中添加需要调用的OC库的头文件。
例如:#import <AFNetworking/AFNetworking.h>
编译后可以直接调用
- 主工程内的Swift 调用 Swift的Pod三方库:
1. 只在某个Swift文件内调用该Swift库,在该Swift的文件中导入该Swift库的头文件,导入规则:import RxSwift
(此处导入不添加@、不添加分号、不添加引号) ,
2. 全局多处调用该Swift库,在主工程的.pch
文件中添加该Swift库的头文件:@import 包的名字;
例如:@import RxSwift;
(不要给库文件名添加<>或者””、不要遗漏分号”;”) ,
3. 编译后调用时才会出现自动提示 。
- OC的Pod三方库 调用 OC的Pod三方库:
1. Pod文件夹下的.podspec文件
内添加依赖,例如:s.dependency 'AFNetworking'
导入头文件:例如:#import <AFNetworking/AFNetworking.h>
2. 导入头文件直接调用。
- OC的Pod三方库 调用 Swift的Pod三方库:
1. 在OC库的Pod文件夹下的.podspec文件
内添加对该Swift库的依赖(例如:s.dependency 'TestSwift1', ~'0.1.0'
),
2. 单独调用该Swift库,只需在这个OC文件内导入Swift库头文件即可(例如:@import RxSwift;
[不要给库文件名添加<>或者””、不要遗漏分号”;”] ),
3. 全局调用该Swift库,在该OC库中创建.h文件
(可以任意命名,但为了保持统一性,命名规则参照桥接文件的命名规则) -> 在OC库的Pod文件夹下的.podspec文件
中添加对.h文件
的引用(s.prefix_header_contents = '#import "该OC库名-Bridging-Header.h"
) -> 重新pod update工程 -> 该.h文件
会自动添加到OC库的Support Files文件夹
下的.pch文件
中 -> 在.h文件
内导入Swift库的头文件即可(例如:@import RxSwift;
[不要给库文件名添加<>或者””、不要遗漏分号”;”] )。
- Swift的Pod三方库 调用 OC的Pod三方库:
1. Swift库内混编:在Swift库中进行库内的混编时,创建OC文件后pod update时,OC文件的头文件会被自动添加到该Swift库的Support Files文件夹
下的-umbrella.h文件
中 -> 可以直接调用,
2. Swift库内依赖OC库混编:在该Swift库的Pod文件夹
下的.podspec文件
内添加依赖OC库(例如:s.dependency 'AFNetworking, ~'2.3'
) -> 在主工程的Podfile文件
中对调用的OC库做特殊处理添加(:modular_headers => true ->
例如:pod 'AFNetworking', '2.3', :modular_headers => true
),
3. 在Swift库内创建.h文件(可以任意命名,但为了保持统一性,命名规则参照桥接文件的命名规则) -> 此处不需要进行头文件的依赖和引用,直接进行pod update 后,该Swift库的.h文件
会被自动同步添加到该Swift库的Support Files文件夹
下的-umbrella.h文件
中 -> 在Swift库内新建的.h文件中添加需要依赖的OC库的头文件(例如:#import <AFNetworking/AFNetworking.h>
),
4. 编译后调用时才会出现自动提示。
- Swift的Pod三方库 调用 其他Swift的Pod三方库:
1. 在该Swift库的Pod文件夹下的.podspec文件
内添加依赖其他Swift库(例如:s.dependency 'HandyJSON', ~'5.0.2'
) -> pod update,
2. 单独调用其他Swift库,只需在调用其他Swift库的文件中添加其他Swift库的头文件,例如:import HandyJSON
(注意:不添加@、不添加分号、不添加引号),
3. 全局调用其他Swift库,在Swift库中创建.h文件
(可以任意命名,但为了保持统一性,命名规则参照桥接文件的命名规则) -> pod update -> 该.h文件
会被自动同步添加到Swift库的Support Files文件夹
下的-umbrella.h文件
中 -> 在新建的.h文件
中添加其他Swift库的头文件(例如:@import HandyJSON;
(不要给库文件名添加<>或者””、不要遗漏分号”;”、不要遗漏@)。