美文网首页iOS开发程序员iOS点点滴滴
Xcode 9 下创建包含 Objective-C 与 Swif

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

作者: 世界的一缕曙光 | 来源:发表于2017-10-17 00:23 被阅读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

    参考

    相关文章

      网友评论

        本文标题:Xcode 9 下创建包含 Objective-C 与 Swif

        本文链接:https://www.haomeiwen.com/subject/sqqruxtx.html