美文网首页ios开发
iOS开发——制作framework和使用bundle

iOS开发——制作framework和使用bundle

作者: Warl_G | 来源:发表于2018-11-10 14:54 被阅读92次

    • 创建framework
    • 使用bundle
    • 打包framework

    创建framework

    新建工程,选择Cocoa Touch Framework



    开发完成后将需要公开的头文件和私有的头文件在framework的target中Build Phases下Headers选项中区分开


    使用bundle

    有时framework需要集成一些资源文件,普遍使用bundle将资源文件打包,framework再去使用。
    项目目录下新建一个文件夹,将需要用到的资源文件放进去,再修改文件夹后缀名为.bundle后拖入工程即可



    加入工程后在framework的BuildPhases下的Copy Bundle Resources应自动添加了bundle,若没有则需要手动添加,否则将无法找到该bundle



    考虑到framework需要能够找到自定义bundle的位置,所以需要再将framework添加进工程后需要对framework做同样的操作,将framework添加在App下的Copy Bundle Resources中,编译成功后即可在App的包内看到framework。与此同时,framework还需要通过代码找到自己的bundle。
    [NSBundle bundleWithPath:[[NSBundle bundleForClass:self.class] pathForResource:@"FW" ofType:@"bundle" inDirectory:@"FWDemo.framework"]];
    

    首先用[NSBundle bundleForClass:self.class]找到framework所在bundle目录,即为main bundle,但为了确保定位准确使用[NSBundle bundleForClass:self.class]。随后在framework目录中查找资源bundle的Path生成对应资源bundle对象。这种bundle打包方式的好处是随时和framework绑定,避免了遗漏的情况;但缺点则是需要将framework拷贝到App包中,一是增大了空间占用,二是完整的framework包都暴露在App包中。
    所以建议使用framework和bundle分离的方式,bundle文件创建完成后不要将其加入到framework工程下,也不要在framework的Copy Bundle Resources下添加bundle。只是将调用的framework中的bundle查找代码修改成

    [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"FW" ofType:@"bundle"]];
    

    然后将framework和bundle文件分别导入App工程中,App中的Copy Bundle Resources下仅添加FW.bundle。
    这样打包出的App包只暴露出了bundle文件。

    打包framework

    再新建一个taget,找到Aggregate



    在新建的Aggregate的Build Phases下点左上的+号选择New Run Script Phases
    添加脚本内容
    # Sets the target folders and the final framework product.
    # 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME
    # 例如: FMK_NAME = "MyFramework"
    FMK_NAME=${PROJECT_NAME}
    # Install dir will be the final output to the framework.
    # The following line create it in the root folder of the current project.
    INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
    # Working dir will be deleted after the framework creation.
    WRK_DIR=build
    DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
    SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework
    # -configuration ${CONFIGURATION}
    # Clean and Building both architectures.
    clean build
    xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos
    xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator
    # Cleaning the oldest.
    if [ -d "${INSTALL_DIR}" ]
    then
    rm -rf "${INSTALL_DIR}"
    fi
    mkdir -p "${INSTALL_DIR}"
    cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
    # Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.
    lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
    rm -r "${WRK_DIR}"
    open "${INSTALL_DIR}" 
    

    添加完脚本后选择Aggregate编译即可,编译完成后会自动打开打包目录。


    相关文章

      网友评论

        本文标题:iOS开发——制作framework和使用bundle

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