iOS 制作Framwork以及我所遇到的坑

作者: Codepgq | 来源:发表于2017-07-08 13:21 被阅读101次

    前景

    • 心血来潮觉得自己也要有一个SDK了,于是乎就想起来要制作一个Framwork,为什么不做.a文件呢?因为.a文件还需要自己引入头文件配合使用,这个对于我这个懒人是不能忍受的。
    • 在制作的过程中遇到很多坑,也在网上查阅了很多资料,于是乎就想把其记录下来。

    <br />

    正文

    • 1.0 创建工程
    创建工程
    • 1.1 然后就是输入SDK名称
    输入SDK名称

    <br />

    • 2.0 配置SDK支持的最低版本
    版本信息
    • 2.1 其它配置信息
    编译信息 link 信息
    • 2.2 支持bitcode
    第一步 第二步
    • 3.0 然后就是自己添加一些类文件进去
    Class

    这里我就随便添加几个方法进去,提供外界调用。

    <br />

    • 3.1 对外公开的文件如何显示
    头文件公开

    <br />

    • 3.2 导入头文件到.h文件中
    .h文件的使用

    <br />

    • 3.3 pch文件的使用 如果没有这个需求请忽略3.3
    PCH创建 PCH文件引用

    <br />

    • 4.0 合包
    - 如果不进行合包操作,真机包只能再真机上面运行,模拟器的包只能在模拟器上面运行。

    合包操作大概分为两种:手动、脚本。
    手动就不说了,其实脚本也是手动,只不过不用自己敲

    <br />

    • 4.1 添加脚本


      创建一个脚本
    添加脚本代码

    脚本代码如下,如果第一次编辑,会报错,报错的原因是找不到另外一个framework文件,在真机/模拟器编译一次就好了

    模拟器编译一次、真机编译一次,不分顺序。

    #需要注意的是,如果你的Framwork与你的工程名不一致,${PROJECT_NAME} 需要自改为你的framwork名称
    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
    

    <br />

    • 5.0 找到framework
    显示 模拟器、真机区分

    <br />

    • 6.0 导入工程测试
    Add target 创建一个single View Application
    • 6.1 导入framework
    导入 导入SDK
    • 6.3 使用
    使用SDK

    总结:制作framework就经历了上面的这些步骤

    <br />

    篇外:

    • Archive 打包失败
    这个错误

    要把framework放到与工程目录同级文件夹下,不要放入工程文件夹中。

    错误

    <br />
    <br />

    • 找不到方法报错
    找不到实现方法

    两种情况,要么你没有实现.m文件,要么你使用了分类,如果你使用了分类,需要添加-ObjC(一般这个就足够了,如果还是不行,那就试试 -all_load 、 -force_load)

    • 万恶的Linker错误
    错误

    引起这个的方式有很多,我这里遇到的是:bitcode所引起的,如果你的SDK不支持bitcode 那么你的项目也不能开启bitcode,否则就会出现这样子的错误

    相关文章

      网友评论

        本文标题:iOS 制作Framwork以及我所遇到的坑

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