将完整的项目制作成framework和正常制作工具类SDK一个道理,需要注意的点是:
1.图片及文件(word等)资源需要制作成Resource.bundle
2.app里面得依赖有的是动态库,有的是静态库,他们引入方式要注意一下(这里顺带讲一下项目pods库处理)
3.反射类名调用及交换方法要特别注意调用的实际和影响范围
4.项目启动方式要改,你只能移动项目的内容,appdelegte不需要,一些设置得从appdelegate中挪到其他地方
1.图片及文件资源的bundle制作
建好之后直接将图片及文件资源直接拖到bundle中
在项目中的图片、文件加载方式换一下,类似于
btn.imageName = [NSString stringWithFormat:@"Resource.bundle/%@",icons[I]];
2.制作framework
先看下需要做成远程依赖的演示项目,就这么一个简单的页面和一个弹框。
下面是制作framework的过程
因为我们是将项目制作成framework供其他人调用,所以删除创建时生成的TestDemoSDK.h,重新创建一个继承于NSObject的类,用来写方法名和实现供他人使用。
然后是一些framework的常规配置
设置framework支持的设备和最低版本号
将演示项目中的主要代码导入到这个framework中,Resource.bundle可以不用导入,后面提交的时候需要用到,导入了也没关系,就是打出来的包里面会多了一个Resource.bundle包,这样后面在写podspec的时候可以不写source地址,直接食用framework包里面的bundle资源也是同样可以的
将pch文件设置一下地址,和你正常项目中设置是一样的$(SRCROOT)/TestDemo/LFPrefixHeader.pch
项目中依赖了Masonry这个三方库,所以要将当前的framework工程和普通项目一样进行pod init ->pod install一下,将Masonry库集成到framework工程中
继承后的项目是
到这里编译一下项目,如果报三方库头文件找不到,可能是因为上面第4步导致的原因,Build Active Architecture Only
设置为NO的意思是当前打包的.framework支持所有的设备.否则打包时只能用当前版本的模拟器或真机运行.可以测试下,
将debug改成YES,release改成NO,如果编译成功了,说明是这个问题导致的
这样应该就能够解决编译报错的问题
3.构建自定义代码类
在刚才创建的TestDemoSDKManager里面写方法供别人调用你的项目
完事之后将需要暴露给别人使用的或是看到的.h文件暴露出去,直接从project中拽到public中就可以了
4.编译framework合并模拟器和真机包
分别选择真机和模拟器com+b编译
合并两个包,在终端输入命令行 -lipo create 真机包地址(直接拖拽进来) 模拟器包地址 -output 真机包地址
合并完了之后,将真机包复制出来,这就是最后的framework包,可以先测试下这个包能不能用,新建一个测试项目,将刚才导出的framework包和Resource.bundle包导入到项目中,并pods之前SDK依赖的Masonry库
我这里跑一下是没有问题的,下面就是上传做远程依赖了
5.制作cocoapods远程依赖库
在github上创建自己的仓库,注意勾选指示的位置
将仓库clone到桌面后,写podspec文件,如果有不懂的可以自行百度,下面简单说明下,可以直接复制我的修改下使用。 spec.author 是制作者信息,spec.author = { "github账户昵称" => "github登录邮箱" }
Pod::Spec.new do |spec|
spec.name = "TestDemoSDK"
spec.version = "0.0.1"
spec.summary = "test TestDemoSDK 1224"
spec.description = <<-DESC
此版本SDK说明文字,自己根据实际书写
DESC
spec.homepage = "https://github.com/marsLiuFei/TestDemoSDK"
spec.license = "MIT"
spec.author = { "GaiShiDaYingXiong" => "mars_liu_dev@163.com" }
spec.ios.deployment_target = "9.0"
spec.source = { :git => "https://github.com/marsLiuFei/TestDemoSDK.git", :tag => "#{spec.version}" }
spec.resource = 'TestDemoSDK/Resource.bundle'
spec.ios.vendored_frameworks = 'TestDemoSDK/TestDemoSDK.framework'
spec.pod_target_xcconfig = {
'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64'
}
spec.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
# spec.source_files = 'TestDemoSDK/*'
spec.dependency 'Masonry'
spec.requires_arc = true
end
该写的都写了,然后就是提交这个仓库了
提交完后,打tag
然后提交自己的pod,执行pod trunk push TestDemoSDK.podspec --allow-warnings,TestDemoSDK这个是自己的framework名称,如果你没有登录trunk或者没有账户,自行百度。
看到这个就说明提交成功了。
使用的时候,用下面的方法导入,不写git地址的话,会等几个小时后才能使用。
最后将所有的文件放到github,可以对照着文件研究点击下载