- iOS组件化(一) - 学习和整理
- iOS组件化(二) - iOS本地组件化管理
- iOS组件化(三) - iOS中使用CocoaPods进行私有组件远程管理
- iOS组件化(四) - iOS组件中图片文件资源的使用
一、创建主项目和组件
- 创建主项目,并添加
CocoaPods
- 创建组件模块,
File - New - Project - Framework,下一步,填写组件名,选择Swift语言,下一步,Add to、Group选择主项目,完成。
- 模块中新建一个类
MyBase.swift用于测试
Command + B编译组件项目,生成BaseModule.framework
二、使用模块的方法
手动添加到主项目,或通过CocoaPods添加到主项目,选其一
手动添加模块到主项目
- 模块中要向外暴露的接口文件,移动到
Build Phases - Headers - Public下(Swift项目文件不用添加)。
- 进入主项目,
Targets -Build Phases - Link Binary With Libraries,添加BaseModule.framework
- 主项目,
Targets - Build Setting - Search Paths - User Header Search paths添加${SRCROOT}
CocoaPods添加到主项目
platform :ios, '10.0'
use_frameworks!
workspace 'TestComponentDemo.xcworkspace'
# BaseModule组件
target 'BaseModule' do
# 配置组件路径
project 'BaseModule/BaseModule.xcodeproj'
end
# 主项目
target 'TestComponentDemo' do
end
三、测试使用
//
// ViewController.swift
// TestComponentDemo
//
// Created by yuanzhiying on 2021/7/26.
//
import UIKit
import BaseModule
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
test()
testExtend()
}
func test() {
let base = MyBase()
base.openName = "modify open name"
base.publicName = "modify public name"
print(base.openName ?? "")
print(base.publicName ?? "")
base.openHelloWorld()
base.publicHelloWorld()
base.objcPublicHelloWorld()
}
func testExtend() {
let myExtend = MyClass()
print(myExtend.openIntro)
print(myExtend.publicIntro)
myExtend.openHelloWorld()
}
}
class MyClass: MyBase {
// 存储属性不能被override
// override var openName: String?
// override var publicName: String?
override var openIntro: String {
return "openIntro"
}
// Overriding non-open property outside of its defining module
// override var publicIntro: String? {
// return "publicIntro"
// }
override func openHelloWorld() {
}
// Overriding non-open instance method outside of its defining module
// override func publicHelloWorld() {}
// Overriding non-open instance method outside of its defining module
// override func objcPublicHelloWorld() {}
}