将完整的iOS项目转换成一个framework,并做成CocoaPods远程依赖

将完整的项目制作成framework和正常制作工具类SDK一个道理,需要注意的点是:

1.图片及文件(word等)资源需要制作成Resource.bundle
2.app里面得依赖有的是动态库,有的是静态库,他们引入方式要注意一下(这里顺带讲一下项目pods库处理)
3.反射类名调用及交换方法要特别注意调用的实际和影响范围
4.项目启动方式要改,你只能移动项目的内容,appdelegte不需要,一些设置得从appdelegate中挪到其他地方

1.图片及文件资源的bundle制作

image.png

建好之后直接将图片及文件资源直接拖到bundle中


image.png

在项目中的图片、文件加载方式换一下,类似于

btn.imageName = [NSString stringWithFormat:@"Resource.bundle/%@",icons[I]];
image.png

2.制作framework

先看下需要做成远程依赖的演示项目,就这么一个简单的页面和一个弹框。


image.png

下面是制作framework的过程


image.png

因为我们是将项目制作成framework供其他人调用,所以删除创建时生成的TestDemoSDK.h,重新创建一个继承于NSObject的类,用来写方法名和实现供他人使用。


image.png

image.png

然后是一些framework的常规配置
image.png

image.png

image.png

设置framework支持的设备和最低版本号


image.png

将演示项目中的主要代码导入到这个framework中,Resource.bundle可以不用导入,后面提交的时候需要用到,导入了也没关系,就是打出来的包里面会多了一个Resource.bundle包,这样后面在写podspec的时候可以不写source地址,直接食用framework包里面的bundle资源也是同样可以的


image.png

image.png

将pch文件设置一下地址,和你正常项目中设置是一样的$(SRCROOT)/TestDemo/LFPrefixHeader.pch
image.png

项目中依赖了Masonry这个三方库,所以要将当前的framework工程和普通项目一样进行pod init ->pod install一下,将Masonry库集成到framework工程中
继承后的项目是

到这里编译一下项目,如果报三方库头文件找不到,可能是因为上面第4步导致的原因,Build Active Architecture Only 
设置为NO的意思是当前打包的.framework支持所有的设备.否则打包时只能用当前版本的模拟器或真机运行.可以测试下,
将debug改成YES,release改成NO,如果编译成功了,说明是这个问题导致的

这样应该就能够解决编译报错的问题

3.构建自定义代码类

在刚才创建的TestDemoSDKManager里面写方法供别人调用你的项目


image.png

完事之后将需要暴露给别人使用的或是看到的.h文件暴露出去,直接从project中拽到public中就可以了


image.png

4.编译framework合并模拟器和真机包

分别选择真机和模拟器com+b编译


image.png

image.png

合并两个包,在终端输入命令行 -lipo create 真机包地址(直接拖拽进来) 模拟器包地址 -output 真机包地址


image.png
image.png

合并完了之后,将真机包复制出来,这就是最后的framework包,可以先测试下这个包能不能用,新建一个测试项目,将刚才导出的framework包和Resource.bundle包导入到项目中,并pods之前SDK依赖的Masonry库


image.png

我这里跑一下是没有问题的,下面就是上传做远程依赖了

5.制作cocoapods远程依赖库

在github上创建自己的仓库,注意勾选指示的位置


image.png

将仓库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
image.png

该写的都写了,然后就是提交这个仓库了


image.png

image.png

提交完后,打tag


image.png

然后提交自己的pod,执行pod trunk push TestDemoSDK.podspec --allow-warnings,TestDemoSDK这个是自己的framework名称,如果你没有登录trunk或者没有账户,自行百度。


image.png

看到这个就说明提交成功了。
使用的时候,用下面的方法导入,不写git地址的话,会等几个小时后才能使用。


image.png

最后将所有的文件放到github,可以对照着文件研究点击下载

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容