在开发项目时,常常须要在开发环境下增长一些方便调试的方法,或者须要完成相似马甲包的操做,等等,Xcode为咱们提供了一个简单的方案。shell
Target为咱们提供了一个彻底独立的编译环境,能够很是灵活的编译工程代码。bash
有两种方法能够生成一个新的Target,新建一个Target和复制原有Target。框架
在Targets栏目下点击+新建一个Target。ui
弹框中有不少可选项,好比一些应用的扩展也在这里生成。咱们须要的是Application下的选项,通常都是Single View App。spa
用这种方法生成的Target至关于新建了一个应用,多个Target间有各自的文件夹,文件相互之间不会因命名的问题冲突。3d
在要复制的Target上点击右键,在弹框中选择Duplicate。调试
这时候会生成一个以copy结尾的Target,并在项目中生成一个对应plist文件。code
属于所复制的应用原有的文件都会在新的Target中生效。cdn
生成了Target以后,会有一些基于此Target的操做,这个时候须要了解项目中文件的做用范围。blog
在新建文件的时候能够选择文件生效的Target,能够多选。
能够针对不一样的Target声明不一样的OC类,可是叫同一个名字,这样就能够用同一套逻辑完成针对不一样Target的各自实现,可是注意不要把相同名字的类存放在一个文件夹下。
若是项目中存在一些相同名字的类的话,在修改时要注意这个类的做用范围。
若是在编译的时候报错找不到这个类,注意检查一下是否是这个类的做用范围不包括正在编译的这个Target。
在新建Target会根据你生成的方式默认填入相关的配置,并为这个Target生成Info.plist,固然,你也能够向平时同样,手动指定其余的plist文件。你也能够针对Target配置不一样的证书等等,这里就再也不赘述。
有时候对不一样的Target不须要专门生成一个类去处理逻辑间的区别,这个时候预编译宏就能起到很好的区分做用了,能够声明一个宏,对不一样的Target赋予不一样的值,再在代码中根据值作不一样的逻辑。
XCode为咱们提供了Run Script功能,让咱们能用过shell脚本在项目编译时完成更多的操做,帮咱们将关注尽量的聚焦于代码部分。
在Target对应的Build Phases里面点击+号,选择New Run Script Phase,添加一个脚本。
咱们在项目中有时候也用脚原本作Releas版本的Build的自增,避免了手动的繁琐和失误。
if [ $CONFIGURATION == Release ]; then
echo "Bumping build number..."
plist=${PROJECT_DIR}/${INFOPLIST_FILE}
#increment the build number (ie 115 to 116)
buildnum=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${plist}")
if [[ "${buildnum}" == "" ]]; then
echo "No build number in $plist"
exit 2
fi
buildnum=$(expr $buildnum + 1)
/usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnum" "${plist}"
echo "Bumped build number to $buildnum"
else
echo $CONFIGURATION " build - Not bumping build number."
fi
复制代码
然而有了Target以后,咱们能够作的事情就更多了。好比咱们能够针对开发和发布各生成一个Target,在发布的的Target下将生成的ipa移动到指定的文件夹甚至发布到网上,或者移除一些三方库中模拟器的框架。不过要注意的是,由于脚本是在代码编译完以后才执行的,因此替换代码或资源对当前编译的结果是无效的,只要下次编译的时候才会生效。
不过这就要求对shell比较熟悉,很少说了,我去学shell了。