Xcode BridgingHeader #import文件出错

这篇博客介绍了在Xcode 7.3.1和8.0中,如何处理Swift项目中使用CocoaPods引入Objective-C库的问题。文章提到了Bridging Header的#import方式变化,以及在使用#use_frameworks!时框架被打包为动态库的情况。作者建议使用#import <FrameworkName/FrameworkName.h>来避免动态库问题,并指出这种方式带来的好处,包括直接在Swift文件中引用代码、不影响Objective-C源文件以及代码查看体验的提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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文件中使用相应代码), 如下图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值