1、 需求
我们要提供一个iOS 私有 SDK, 对方可以通过cocoapods安装, 并且只能看到头文件
2、大致流程
- 使用Xcode创建一个framework工程, 在里面编写你需要提供的功能
- 创建
podspec 文件, 依赖这个framework, 然后上传到Cocoapods .
3、具体流程
如果我们单独创建一个framework工程, 如果有需求修改每次都要导出framwork在demo工程中调试, 这就很麻烦,所以今天创建一个framework+demo的混合工程, 在一个工程中包含framework工程+demo工程+Pods工程。结构如下:
混和工程创建步骤
Step1: 创建Demo工程, 取名为MySDKDemo
- 创建完成加入Podfile文件, 并执行Pod install
platform :ios, '9.0'
target 'MySDKDemo' do
end
Step2: 创建framework工程, 取名为MySDK
Step3: 关联项目
- 把创建好的MySDK移动到MySDKDemo下面
- 然后把MySDK工程文件拖进项目
- 拖入之后
Step4: 配置Podfile
platform :ios, '9.0'
#这里需要添加
workspace 'MySDKDemo.xcworkspace'
target 'MySDKDemo' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Demo工程依赖的第三方, 如果和SDK依赖的一致, 则Pod install的只会安装一份
pod 'SVProgressHUD'
pod 'AFNetworking'
end
target 'MySDK' do
#需要添加SDK路径,
project './MySDK/MySDK.xcodeproj'
# MySDK依赖 SVProgressHUD 和 AFNetworking
pod 'SVProgressHUD'
pod 'AFNetworking'
end
- cd 到MySDKDemo路径下, 执行pod install
- 当前选中demo工程进行调试
- 选中SDK, 进行编译
Step5: 联调
- 在demo中需要使用的时候,先在MySDK工程中command + B(确保demo中有效使用)
- demo中引入头文件#import <MySDK/MySDK.h>
以上工程架构搞定, 接下来开始改动MySDK工程, 进行测试
MySDK工程中编写需求代码
#import "Hud.h"
#import <SVProgressHUD.h>
@implementation Hud
- (void)showToast:(NSString *)msg {
[SVProgressHUD showInfoWithStatus:msg];
}
@end
- 拖进需要暴露的头文件
- 在MySDK.h中引入你的Hud
#import <MySDK/Hud.h> - 在demo中使用
#import <MySDK/MySDK.h>
[Hud showToast:@"Hello"];
导出framework
发布到Cocoapods
- 创建MySDK.podspec文件, 并把导出的MySDK.framework一同放入同一个文件
Pod::Spec.new do |s|
s.name = "MySDK"
s.version = "1.0.0"
s.summary = "测试用SDK"
s.description = <<-DESC
测试用SDK, 使用OC实现
DESC
s.homepage = "https://github.com/nieyinlong/MySDK_iOS"
s.author = { 'nieyinlong' => 'nyl0819@126.com' }
s.platform = :ios, "9.0"
s.source = { :git => "https://github.com/nieyinlong/MySDK_iOS.git", :tag => s.version }
# 过不支持真机调试则加上下面的
s.pod_target_xcconfig = {
'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64'
}
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
# 不支持真机结束
s.vendored_frameworks = 'MySDK.framework'
s.dependency 'AFNetworking', '~> 4.0'
s.dependency 'SVProgressHUD'
end
pod lin lint --allow-warnings
pod tunk push
发布成功即可在其他项目中使用
pod 'MySDK'
报错解决’MySDK/MySDK.h’ file not found
|