iOS-SDK制作
可以直接看我优化后的另外一篇文章:
https://www.jianshu.com/p/9572b56590e2
1.首先在xcode新建一个framework
cmd+shift+n.png
2.创建好了之后是这样,然后自己修改需要支持的设备和系统版本
image.png
3.接着创建pod文件,把需要的三方库导入进来。
再把代码文件放进来,然后项目结构如下
image.png
4.创建bundle用来放资源文件
image.png
5.修改Build Setting的一些配置
修改为No
修改为Static Library
6.继续修改bundle的一些配置
修改为iOS
设置为No
路径全部删除
7.项目里需要用的的资源添加进bundle里面
image.png
-
framework和bundle的Edit Scheme→Run→Info→Build Configuration都修改为Release
image.png
把需要暴露的头文件拖到Public 下面
image.png
分别run一下,让Products文件夹下的这两个由红色变成黑色,这就是我们最终需要的东西
image.png
Show in Finder获得
image.png
把.bundle文件放入.framework里面,里面的nib文件和一些不需要的资源文件可以删除掉,不影响使用,因为bundle里面已经有了
image.png
创建一个文件夹,新建一个.podSpec文件 把framework文件也放进来
image.png
.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
image.png
- 上传提审时报错
Missing Code Signing Entitlements. No entitlements found in bundle 'com.test.xxxResource' for executable 'xxx/xxx.app/xxxResource.bundle/xxxResource."
这是因为bundle里面包含了可执行文件
image.png
把这个文件删除掉,然后把Versioning System改为None
image.png
在bundle的info.plist里面把Executable file项也删除掉
image.png
再次上传就没问题了。
参考文章:
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