Xcode使用笔记之Target

4,219 阅读3分钟

前言

在开发项目时,经常需要在开发环境下增加一些方便调试的方法,或者需要完成类似马甲包的操作,等等,Xcode为我们提供了一个简单的方案。

简介

Target为我们提供了一个完全独立的编译环境,可以非常灵活的编译工程代码。

生成Target

有两种方法可以生成一个新的Target,新建一个Target和复制原有Target。

新建

在Targets栏目下点击+新建一个Target。

弹框中有很多可选项,比如一些应用的扩展也在这里生成。我们需要的是Application下的选项,一般都是Single View App。

用这种方法生成的Target相当于新建了一个应用,多个Target间有各自的文件夹,文件相互之间不会因命名的问题冲突。

复制

在要复制的Target上点击右键,在弹框中选择Duplicate。

这时候会生成一个以copy结尾的Target,并在项目中生成一个对应plist文件。

属于所复制的应用原有的文件都会在新的Target中生效。

基于Target开发

生成了Target之后,会有一些基于此Target的操作,这个时候需要了解项目中文件的作用范围。

文件作用范围

在新建文件的时候可以选择文件生效的Target,可以多选。

可以针对不同的Target声明不同的OC类,但是叫同一个名字,这样就可以用同一套逻辑完成针对不同Target的各自实现,但是注意不要把相同名字的类存放在一个文件夹下。

如果项目中存在一些相同名字的类的话,在修改时要注意这个类的作用范围。

如果在编译的时候报错找不到这个类,注意检查一下是不是这个类的作用范围不包括正在编译的这个Target。

Target设置

在新建Target会根据你生成的方式默认填入相关的配置,并为这个Target生成Info.plist,当然,你也可以向平时一样,手动指定其他的plist文件。你也可以针对Target配置不同的证书等等,这里就不再赘述。

宏的运用

有时候对不同的Target不需要专门生成一个类去处理逻辑间的区别,这个时候预编译宏就能起到很好的区分作用了,可以声明一个宏,对不同的Target赋予不同的值,再在代码中根据值做不同的逻辑。

Run Script Phase

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了。