Xcode 9 下创建包含 Objective-C 与 Swift 代码的 Framework 及其使用

说明

  1. 本篇文章中 Frmaework 是在 Objective-C 环境下创建的,包含 Objective-C 和 Swift 文件。由于项目原因,只涉及 Objective-C 调用 Swift。
  2. Swift 调用 Objective-C 需要添加一个 bridge 文件,本文不做详述。

注意事项

Xcode 9 中不要直接拖动文件到项目中(直接拖入不会选中 Targets 的那个复选框),需要右键导入文件,并且选中 Targets 的那个复选框,否则会找不到文件。

0.jpg

PS:也可以在拖动后,选中文件,在 Xocde 的右侧选中那个复选框。

1.png

完成一个 Framework

  1. 创建一个 Objective-C 的Framework(截图省略)

  2. 在 Build Settings 中设置 Defines Module 为 YES

2.png
  1. Build Phases -> Headers -> Public 中添加需要暴露的 .h 文件,不需要暴露的文件放在 Build Phases -> Headers -> Project 中。
3.png
  1. 在 Objective-C 的 .h 文件中,需要用到 Swift 中的对象时,前置声明在 Swift 中的类。

不要在 .h 中 #import <ChartFramework/ChartFramework-Swift.h>,否则会报错找不到文件

PS:ChartFramework-Swift.h 是我自己项目中的命名。格式是 productModuleName-Swift.h。
当你工程中有 Swift 文件时,会自动生成的(注意前面提到的注意事项),不需要手动创建。
4.png
  1. 在 .m 中
#import <ChartFramework/ChartFramework-Swift.h>
5.png
  1. 通过脚本将真机和模拟器编译生成的 Framework 合并

在 Build Phases 中选中 "+",再单击 "New Run Script Phase",最后添加脚本。

6.png
7.png
PS:脚本是在网上找的,好用,具体链接忘了。感谢作者!
说明:
1. 分别在真机和模拟器下编译一次即可。第一次编译模拟器时会报错,忽略。然后再编译一次真机就可以了。
2. 真机和模拟器编译无先后顺序。
3. 生成的 Framework 目录在主工程文件夹下。
8.png

脚本如下:

if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework

DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework

SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework


if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"

lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"

#open "${DEVICE_DIR}"
#open "${SRCROOT}/Products"
fi

使用该 Framework

  1. 将 Framework 右键导入项目中
  2. 将 Build Settings -> Build Options -> Always Embed Swift Standard Libraries 设置为 YES
6.png
  1. 在 Framework Search Paths 中设置 Framework 的 path
7.png
  1. 嵌入 Framework
8.png
  1. 如果 Framework 中有 xib、storyboard 等文件,需要导入到项目中
9.png

总结

Apple Swift and Objective-C in the Same Project 文档中的一段总结,写得非常好。

总结.png

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • (原文:How to Create a Framework for iOS 作者:Sam Davies 译者:Mr...
    王宪岭阅读 10,401评论 3 23
  • (原文:How to Create a Framework for iOS作者:Sam Davies 译者:Mr_...
    Yaanco阅读 6,997评论 4 5
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,441评论 4 61
  • 如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件。然而,这种方法并不是很优雅。它会暴露所有的实现细节...
    小热狗阅读 8,861评论 3 9
  • 拼爹拼妈,拼的是什么?金钱?地位?当然,金钱和地位确确实实能提升阶层,给予很多方面的保障。 那除此之外呢?家庭给予...
    happystone阅读 4,390评论 0 4

友情链接更多精彩内容