在集成多Bu的大规模工程下,存在如下问题
1、资源混乱:
同样的资源由于缺乏系统管理,可能存在一种资源存在多份、无用资源的问题。
2、类的存放和命名:
为了不和别的Bu的类名发生冲突,必须时刻考虑类命名问题,每个Bu都需要自己管理自己的文件夹
3、误操作可能导致整个工程无法使用,成本很高
4、类之间的引用混乱
所以有必要使用系统的方法,解耦整个工程,使各个Bu独自管理自己的业务模块。
下面分2部分介绍Bu工程解耦的方法:
1、代码解耦
假如:存在主工程:Main_Project
Bu工程:Bu1、Bu2
基础业务:Business
步骤1、为每个Bu和基础控件建立新的工程,并把主工程中各个Bu的“业务代码”移入子工程,注:子工程必须为library类型
步骤2、添加依赖关系
如上图,主工程需要依赖于Bu1和Bu2
Bu1工程依赖于Business(基础控件)
Bu2工程依赖于Business(基础控件)
步骤3、添加头文件路径
为每个工程添加依赖的工程的代码路径
主工程中添加Bu1 和Bu2的代码路径
Bu1工程添加Business代码路径
Bu1工程添加Business代码路径
步骤
4、添加Target Dependencies和.a
以上完成了代码依赖,这样以来,主工程可以使用Bu工程的代码和控件工程的代码,Bu工程可以使用控件工程代码,Bu工程可以通过互加依赖来引用其他Bu(还可以通过Bus总线来实施Bu之间的调用,下一节介绍)
2、资源解耦
众所周知,工程依赖并不能传递资源,所以我们需要使用一些工具来完成资源的解耦。在工程中有一种包叫做“Bundle”,把所有子工程的资源加入Bu,并通过runscript把Bundle中的内容拷贝到.app中。
步骤1、建立Bundle
命名规则 = BuName + Bundle
新建Target ->Bundle(OS X->Framework&Library)
结果如图:
同样为所有子工程添加Bundle
步骤2、把子工程资源添加到Bundle中
注:所有的.xib文件,图片文件和文本文件都属于资源文件,都必须添加到Bundle中
步骤3、更改runscript
cd "$BUILD_DIR/$CONFIGURATION-$TARGET_PLATFORM"
for file1 in `ls`
do
if echo "$file1" | grep -q "bundle"
then
echo "***检查[$file1], 复制资源中的文件到app中***"
for item_path in ./$file1/*
do
item_file_name=${item_path##*/};
item_file_sufix=${item_path##*.};
item_dest_path="${CONTENTS_FOLDER_PATH}/${item_file_name}";
file_path="${file1}/${item_file_name}";
if [ "$item_file_name" == "$IgnoreFileList" ]; then
va="x"
elif [ -f "$file_path" ] || [ -d "$file_path" ]; then
rm -rf "$item_dest_path";
cp -rf "$file_path" "$item_dest_path";
fi
done
fi
done
总结:
当然还需要处理资源命名问题,可以使用如下命名规则,bussinessName_image