1.准备
先创建一个测试工程"ADemo",右键其Target选择Duplicate,再复制一个Target为"ADemo2"。
再选择TARGETS下方的"+",添加一个APP到项目中,这个命名为"BDemo"。
2、管理多个Target
可以对三个target分别导入不同的框架
swift
target 'ADemo' do
use_frameworks!
pod 'SnapKit'
end
target 'ADemo2' do
use_frameworks!
pod 'IQKeyboardManagerSwift'
end
target 'BDemo' do
use_frameworks!
pod "Kingfisher"
end
在代码中使用框架时需要区分开,可以通过在Build Settings -> Preprocessor Macros定义宏来区分。
swift
// ViewController.swift
// ADemo
//
// Created by Gamin on 2023/10/10.
//
import UIKit
#if ISADEMO
import SnapKit
#endif
#if ISADEMO2
import IQKeyboardManagerSwift
#endif
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let iv = UIImageView()
iv.backgroundColor = .red
self.view.addSubview(iv)
#if ISADEMO
iv.snp.makeConstraints { make in
make.leading.equalTo(15)
make.top.equalTo(100)
make.width.equalTo(100)
make.height.equalTo(44)
}
// 这里调用IQKeyboardManagerSwift会报错
#endif
#if ISADEMO2
IQKeyboardManager.shared.enable = true
// 这里调用SnapKit会报错
#endif
}
}
另外,还可以对不同的target设置不同的Info.plist、启动图和icon,比较简单就不赘述了。
3.应用
常见的例子,比如你开发了一款校园APP,需要提供给不同的学校,但要对icon和APP名称以及部分功能做差异化管理,这时候肯定首选像本文一样管理多个Target了。
再谈一个其它应用场景,比如我现在要开发一个SDK,创建了一个SDK工程,然后完成了开发,我要如何来调试和测试SDK呢?
根据经验,就本文ASDKDemo+BTestDemo这种方式会比较简单。在BTestDemo中先pod导入SDK的依赖库和一些测试框架(比如:Reveal-SDK),再导入开发的framework, 并对接口进行调用。开发中,我们只需要选择BTestDemo进行Run就可以了,可以断点调试,还可以打个包让测试去测。