美文网首页sdkiOS集合
Swift4.0 SDK Framework创建

Swift4.0 SDK Framework创建

作者: Codepgq | 来源:发表于2017-12-22 14:21 被阅读470次

    1、创建一个Framwork


    1

    2、选择语言为Swift


    2

    3、然后就看到这样子的工程列表


    3

    4、设置为静态库


    image.png

    5、添加脚本


    image.png

    6、编写脚本


    image.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
    
    



    7、设置最低支持版本

    image.png

    8、新建一个文件


    4



    9、编写如下代码

    import UIKit
    
    class PQTest: NSObject {
        
        class func sayHello(){
            print("Hello Framework")
        }
        
    }
    



    10、分别选择模拟器和真机编译一次

    image.png

    11、然后在创建一个测试程序
    File - new - target


    1 2 3

    11、导入框架
    进入新建的那个测试程序,进入ViewController


    image.png

    12、到这里你就会发现死活都用显示不了.....

    因为你没有加public

    然后回到你的Framework中的PQTest这个文件中,修改代码如下:

    public class PQTest: NSObject {
        
        public class func sayHello(){
            print("Hello Framework")
        }
        
    }
    
    然后编译一次(如果你是用模拟器测试就编译模拟器包,如果是你真机就选择真机)

    13、回到ViewController就可以使用了

    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            
            PQTest.sayHello()
            
        }
    
    }
    

    14、上面是针对在Swift工程中使用,如果你在OC工程或者混编工程中使用的画还需要

    • @objc 这个很重要



    15、我们定义一个 enum

    enum PQTestType: Int {
        case a
        case b
        case c
        case d
    }
    

    正常情况下的Swift中的enum这样子写就可以,但是如果你需要在OC项目中使用,就需要加上 @objc public

    16、如果想要刚才的内容全部支持在OC项目中调用

    @objc public enum PQTestType: Int {
        case a
        case b
        case c
        case d
    }
    
    public class PQTest: NSObject {
        
        @objc public class func sayHello(){
            print("Hello Framework")
        }
        
    }
    

    你最终的代码如下,只有加了@objc 在会在 '项目名'-Swift.h中进行桥接,这个时候你可以调用。

    所以你也可以在 image.png

    中查看


    image.png

    最后在OC中调用如下


    image.png

    2017-12-25 更新:

    如果你在Swift的Framework中要使用OC的文件
    首先桥接文件是不支持的,如果你使用了桥接文件的话会报如下错误:

    <unknown>:0: error: using bridging headers with framework targets is unsupported
    

    但是你又想使用怎么办。

    • 1、创建Objective-C的文件
    • 2、在Framework中自带的头文件导入#import <XXX/OC文件.>
      举例:framework名称 AA
      OC文件名为: BBBB
      所以你要在AA.h文件中导入#import <AA/BBBB.h>
    • 3、公开他


      image.png

    更新2018年05月07日 解决Swift框架在OC项目里面调用的问题

    • 问题:library not found for -lswiftSwiftOnoneSupport for architecture arm64
    • 解决方案:
      OC的项目中创建一个空的Swift文件即可

    相关文章

      网友评论

        本文标题:Swift4.0 SDK Framework创建

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