iOS-子模块

作者: 618ecb324f60 | 来源:发表于2016-08-10 17:08 被阅读227次

    多图预警~

    无关图片

    前言

    随着业务的增多,app的模块必然增多,开发也会拆分出相应的小组负责维护某些模块,这时候很有必要将模块从主的代码中抽取成子工程。

    子工程

    • 子工程创建成Static Library
      也可以创建成Framework,但是xib引用图片资源就不方便了
    ModuleA.png
    • 子工程创建Bundle Target
      Static Library不能处理资源,需要单独建立一个Bundle Target收集资源。
      创建好Target记得给Lib Target添加依赖,在生成.a的同时生成Bundle.Bundle,如图:
    ModuleABundle.png
    • 资源分类
      在创建新的文件是,要加入到对应的Target中,否则会有奇怪的问题。
    code.png
    source.png
    xib 中使用的图片都是在MainBundle中搜索,
    现在把资源打包到子Bundle就引用不到,
    需要在集成到主工程的时候,
    通过脚本把子Bundle内的资源移动到MainBundle中,
    下文介绍主工程再作说明
    

    如此炮制做出其他的子工程

    此处省略N字。。。

    主工程

    • 引用子工程
      手动拖动子工程的.xcodeproj文件引用到主工程中,结束后如下图:
    Main.png
    • 配置
      1.设置Target依赖
    MainDepedency.png

    2.search path

    MainSearchPath.png

    3.other link flags
    $(inherited)很有用,特别是在使用Cocoapods的时候
    -all_load是强制加载子工程和Class相关的文件,因为有时候使用NSClassFromString()会找不到class
    -ObjC防止子工程存在分类导致的运行时闪退

    MainLink.png

    4.处理子工程资源
    在Build Phases中添加脚本块
    根据自己的实际情况处理,我的demo中只有三个子工程拥有Bundle,处理如下:

    modules=( "ModuleA" "ModuleB" "ModuleC" )
    cd  $CONFIGURATION_BUILD_DIR
    for file in ${modules[@]}
    do
        if [ -d "$file""Bundle.Bundle" ]
        then
            rm ${file}"Bundle.Bundle/info.plist"
            cp -rf ${file}"Bundle.Bundle/"  $CONTENTS_FOLDER_PATH
        fi
    done
    
    

    添加之后的效果:

    MainScript.png

    Run查看效果:

    MainBuild.png

    .app内部资源:

    MainApp.png

    模拟器:

    MainiPhone.png

    随着子工程的越来越多,越来越大,管理就很有必要,稍后补上Cocoapods管理子工程。
    最后:这里是demo
    最后的最后:如果喜欢还请点赞~~

    相关文章

      网友评论

      本文标题:iOS-子模块

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