Xcode项目多target配置

我们项目一般只有一个默认的target,假设项目名称为A
开发阶段可能需要多个版本,如果只是代码里面做不同的配置的话,噢诶之起来会很麻烦,也容易出错。

此时,我们可以创建多个target。配置过程如下。

1. 复制target。

点击选中我们的项目,在右侧的TARGETS目录下选中A,右键Duplicate复制一个完全一样的target,默认叫做A copy。可以把这里的两个target重新命名为A_Dis和A_Dev。

2. 修改项目名称。

点击Manage Schemes。会下拉弹出一个窗口,出现很多打钩和没有打钩的库名和项目名。这里打钩之后,会出现在Xcode的导航栏的如下部位:

在窗口中把默认的A删掉,然后点击+,重新创建两个,一个叫做 A_Dis,一个叫做 A_Dev,并且打上勾。 然后再添加 Pods-A_DisPods-A-Dev,这两个不知道是干嘛的。反正把原来带有A的全部替换成A_Dis和A_Dev相关的就行了。

3. info.plist文件

在复制了一个target之后,在项目里会出现一个A copy-info.plist文件,找到它,把它移动到info.plist文件的文件夹下,然后改名为A_Dev-info.plist,把另一个改为A_Dis-info.plist。然后在右侧的Build Settings里面搜索info.plist File,为两个target配置路径。分别为:

1
$(SRCROOT)/.../A_Dis-Info.plist


1
$(SRCROOT)/.../A_Dev-Info.plist

注意$(SRCROOT)代表你的项目的那个文件夹目录。中间的…自己按自己的项目结构填写。

3. 修改配置

分别选中target,在General面板里面修改各自的Display Name、Bundle Identifier、Version、以及Build版本号。

4. 其他配置

在Build Settings里搜索packaging,在出现的列表里面把A全部换成对应target名称的名字。

在Build Settings里搜索Preprocessor Macros 预编译宏指令。
里面有Debug状态的Release状态。一般在这里可以添加一个宏指令。效果跟#define 一样。
比如常见的DEBUG,也可以定义自己的宏。

5. Podfile修改

原来的Podfile可以修改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
source 'https://github.com/CocoaPods/Specs.git'
platform for your project
platform :ios, '9.0'
inhibit_all_warnings!

def default_pods
pod 'AFNetworking'
end

target 'A_Dis'
default_pods
end

target 'A_Dev'
default_pods
end

后续:
这样跟新之后一直没遇到问题,直到有一天,我在podFile中加入了一个库之后,运行pod install后,各种报错。错误列表:

  1. “Cannot synthesize weak property because the current deployment target does not support weak references”;

    这个在stack overflow上有很多解决办法:比如在Podfile的结尾加上:

    1
    2
    3
    4
    5
    6
    7
    8
    post_install do |installer|
    installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
    config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
    end
    end
    end
    >

其中的9.0根据自己的项目配置。

  1. 运行报错:diff: /../Podfile.lock: No such file or directory

    按照这个链接中的方案二可以解决。

  2. 运行报错:ramework not found AFNetworking

    在Podfile中加上: use_frameworks!

  3. 运行报:ld: framework not found Pods_Gailvlun

    点击项目,点击其中一个target,在Build Phases中的Link Binary With Liararies中会发现:

    删掉那一项,因为现在都是带有_Dev和_Dis后缀的了。没有后缀的是不存在的,所以会报找不到。