20161018
使用软件: CocoaPods 1.1.0 beta2, Xcode 7.3.1, Xcode 8.0
BridingHeader
作用是在Swift中包含Objc源文件, 在Cocoapods 0.38
之前, 引用每个Pod中的Objc第三方框架时, 都需要在BridingHeader
中#import "AFNetworking.h" 或 #import <AFNetworking/AFNetworking.h>
(以AFNetworking为例, 下同
), 如下图:
Xcode 7.3.1和Xcode 8中两种包含("" 和<>
)方式都可以, 但是实践发现若是引用Pods, 最好使用<>
的形式.
但是自从CocoaPods
中的PodFile
支持use_frameworks!
语句之后, 如果在PodFile
中显示标识了use_frameworks!
, 所有用CocoaPods
下载的框架都将被打成.framework
动态库. 如下图:
而我们知道, 在这之前, CocoaPods
是把下载到的框架打成.a
静态库, 这就是为什么我们在以前Objc开发的时候, 经常看到一个libPods.a
的静态库. 如下图:
现在典型的PodFile
如下:
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
target 'test' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for test
pod 'AFNetworking'
pod 'IQKeyboardManager', '3.3.7'
end
在PodFile
中使用use_frameworks!
功能的好处:
1.不需要再依赖
BridingHeader
来引用Pod中的代码了, 而是直接在需要用到的.swift
文件中import AFNetworking
. 如下图:
2.不会影响项目中的Objc源文件包含Pods, 只需要在Objc中继续
#import <AFNetworking/AFNetworking.h>
就可以了, 比如下图所示:
3.在
import AFNetworking
的.swift文件中, 如果按住command
键查看框架代码, 显示的将会是Swift形式的代码; 而#import <AFNetworking/AFNetworking.h>
的Objc源文件中, 显示的则是Objc形式的代码. 请看下面两张图:
从.swift文件中查看源码
从.m文件中查看源码
其实, 在Xcode 7.3.1和Xcode 8中, 如果继续在BridingHeader
中用#imort ""
包含Pod, 会报编译错误, 而#import <>
则不会报错(但是无效, 依然无法在.swift文件中使用相应代码)
, 如下图: