可以直接看我优化后的另外一篇文章:
https://www.jianshu.com/p/9572b56590e2
1.首先在xcode新建一个framework
2.创建好了之后是这样,然后自己修改需要支持的设备和系统版本
3.接着创建pod文件,把需要的三方库导入进来。
再把代码文件放进来,然后项目结构如下
4.创建bundle用来放资源文件
5.修改Build Setting
的一些配置
6.继续修改bundle的一些配置
7.项目里需要用的的资源添加进bundle里面
-
framework
和bundle
的Edit Scheme
→Run
→Info
→Build Configuration
都修改为Release
把需要暴露的头文件拖到Public
下面
分别run
一下,让Products
文件夹下的这两个由红色变成黑色,这就是我们最终需要的东西
Show in Finder
获得
把.bundle
文件放入.framework
里面,里面的nib文件和一些不需要的资源文件可以删除掉,不影响使用,因为bundle
里面已经有了
创建一个文件夹,新建一个.podSpec
文件 把framework
文件也放进来
.podSpec
这个里面按照自己的需求写,注意依赖的三方库
和bundle的路径
Pod::Spec.new do |spec|
spec.name = 'TestSDK'
spec.version = '1.0'
#spec.license = { :type => 'BSD' }
spec.homepage = '111'
spec.authors = { 'xxx' => 'xxx.com' }
spec.summary = 'TestSDK'
spec.source = {:git => 'https://xxx.com'}
spec.ios.deployment_target = '11.0'
#spec.source_files = 'TestSDK/**/*.{h,m}'
spec.xcconfig = { 'CLANG_MODULES_AUTOLINK' => 'YES' }
spec.requires_arc = true
spec.static_framework = true
spec.vendored_frameworks = 'TestSDK.framework'
spec.resource = "TestSDK.framework/TestSDKResource.bundle"
spec.dependency 'AFNetworking'
spec.dependency 'MJRefresh'
spec.dependency 'WebViewJavascriptBridge'
spec.dependency 'Masonry'
spec.dependency 'YYKit'
spec.dependency 'DZNEmptyDataSet'
spec.dependency 'FMDB'
spec.dependency 'IQKeyboardManager'
spec.dependency 'KLCPopup'
spec.dependency 'SocketRocket'
spec.dependency 'VTMagic'
spec.dependency 'IJKMediaFramework'
end
最后把这个文件夹放入需要引入SDK的项目根目录下,修改Podfile
,添加
pod 'TestSDK' , :path => 'TestSDK'
然后再pod install
即可,到此SDK就引入完成了。
其他注意点:
- 如果
framework
里面有category
,那么需要在Other Linker Flags
添加-all_load
(加载静态库中所有文件) - 访问bundle里的资源文件要这样取,不然取不到
[NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"TestSDKResource" withExtension:@"bundle"]];
- 项目中如果有MRC的文件需要给对应文件增加
-fno-objc-arc
- 上传提审时报错
Missing Code Signing Entitlements. No entitlements found in bundle 'com.test.xxxResource' for executable 'xxx/xxx.app/xxxResource.bundle/xxxResource."
这是因为bundle
里面包含了可执行文件
把这个文件删除掉,然后把Versioning System
改为None
在bundle
的info.plist
里面把Executable file
项也删除掉
再次上传就没问题了。
参考文章:
IOS开发SDK(.FRAMEWORK静态库,.BUNDLE资源文件,脚本打包SDK和.BUNDLE)
https://www.freesion.com/article/3001905534
IOS SDK制作
https://www.jianshu.com/p/e8f4684fa9aa
https://www.jianshu.com/p/6536ef96add6
https://www.jianshu.com/p/88022bb5d4fb
https://www.jianshu.com/p/f5dcca0ee4bb
https://www.jianshu.com/p/ed65aed59fd1
https://www.jianshu.com/p/62abd9ab0407