iOS开发程序员iOS点点滴滴

Xcode 9 下创建包含 Objective-C 与 Swif

2017-10-17  本文已影响280人  世界的一缕曙光

说明

  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

参考

上一篇 下一篇

猜你喜欢

热点阅读