iOS 子模块

前言

随着业务的增多,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,框架,iOS,class)