iOS项目功能模块封装SDK使用总结
Posted yuhao309
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS项目功能模块封装SDK使用总结相关的知识,希望对你有一定的参考价值。
一、功能模块SDK封装步骤:
1、创建ios Framework工程
先我们需要创建一个iOS的CocoaTouch工程,点击Next,输入我们Framework的名字即可。下方我们暂且将该Framework的名字命名为“CreateLoginSDKFramework”。操作如下所示:
Xcode ——》File\New\Project ——》iOS\Framework and Library\Cocoa Touch Framework ——》命名项目工程 ——》保存目录
2、设置兼容版本:
创建完工程后,我们要选择“Deployment Target”, 此处我们选择的是8.0。也就是说此处我们封装的SDK所支持的iOS系统版本是iOS8.0+。操作所示:
Xcode ——》Project ——》Targets ——》General ——》Deployment Info ——》ios8.0(最低支持的兼容版本)
3、配置静态库:
由于创建的framework默认是动态库,所以我们要讲Mach-O Type设置为静态库“Static Library”。操作如下所示:
Xcode ——》Project ——》Targets ——》Build Settings ——》Mach-O Type——》Static Library
4、导入源代码文件,进行编译:
将事先准备好的SDK源代码引入到我们的Framework的工程中进行编译了,在编译之前我们要选择SDK用户可以看到的文件。在Build Phases下的Headers中进行设置的。将用户可以看到的头文件放在Public中,用户看不到的放在Project中。操作如下所示:
Xcode ——》Project ——》Targets ——》Build Phases ——》Headers——》Public/Private/Project
5、编译工程:
设置和配置完毕后,我们就要对我们的Framework工程进行编译了。先选择模拟器进行编译,然后选择真机进行编译。编译完后,在Products下会生成相应的Framework, 然后通过Show in Finder进行查看即可。查看时,如果想看“模拟器”和“真机”的framework的话,在Show in finder后,需要前往上层文件夹查看。
6、合并Framework库:
因为在模拟器下编译会生成模拟器下使用的Framework,在真机下编译会生成真机使用的Framework。如果想我们生成的Framework既可以在真机下使用,也可以在模拟器下使用,那么我们需要将两个Framework进行合并。使用终端命令将上述两个文件进行合并。下方就是合并上述两个文件的执行命令, 执行完下方命令后会生成合并后的新文件。操作如下所示:
打开终端 ——》lipo -create 模拟器framework路径 真机framework路径 -output 新的文件
7、注意事项:
1、编译Framework工程前,需要设置Edit Scheme, 选择run->将Debug模式改成Release模式,选择Close。
2、合并Framework出现error:can‘t map input file: xxxFramework.framework/ (Invalid argument),原因是如果工程名称和Framework的Target名称不一样的话,要自定义FrameworkName。
lipo -info xxxFramework.framework/xxxFramework 或者
cd xxxFramework.framework
lipo -info xxxFramework
完整命令如下:
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
二、资源文件的Bundle封装步骤:
1、Bundle工程的创建:
首先像创建Framework工程一样创建一个Bundle工程,因为iOS工程下方没有Bundle类型的工程,所以我们需要在OS X -> Framework & Library -> Bundle下面来创建我们的Bundle工程。操作如下所示:
Xcode ——》File\New\Project ——》macOS\Framework and Library\Bundle——》命名项目工程 ——》保存目录
2、配置Bundle工程:
创建完Bundle工程后,我们要对其进行相应的配置。因为我们是选择OS X创建的Bundle,默认的Bundle是不能在iOS中使用的,所以我们得将Base SDK进行设置,选择相应的iOS版本即可,如下所示。选择完Base SDK后,我们还要像上面Framework的封装一样,设置一下要兼容的iOS版本(iOS Deployment Target)。操作如下所示:
A、Xcode ——》Project ——》Targets ——》Build Settings ——》Base SDK ——》ios8.0
B、Xcode ——》Project ——》Targets ——》General ——》Deployment Info ——》ios8.0(最低支持的兼容版本)
3、导入资源文件进行编译:
进行上述配置完后,接下来就是引入资源文件进行编译了,下方引入的资源文件就是我们的LoginSDK.storyboard。引入资源后,进行编译,编译后会在Products下面生成相应的Bundle资源文件,该文件就可以和我们的Framework进行使用了。
4、项目中Bundle资源的加载:
生成完Bundle资源文件后,我们在SDK的源代码中,要从Bundle资源文件中进行资源的加载。下方代码就是加载相应Bundle的代码。通过下方的宏定义,就可以通过“Bundle”的名字来加载Bundle。
#define LOGIN_SDK_BUNDLE_NAME @"LoginSDKResource.bundle"
#define LOGIN_SDK_BUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: LOGIN_SDK_BUNDLE_NAME]
#define LOGIN_SDK_BUNDLE [NSBundle bundleWithPath: LOGIN_SDK_BUNDLE_PATH]
5、注意事项:
如果Bundle工程中中引用了资源文件,工程编译过后会出现.storyboardc或者.xibc文件才算真正封装成功。
三、封装后的SDK文件的使用步骤:
1、导入SDK,进行路径配置:
导入SDK到我们的App工程后,我们要对其进行相应的配置。首先我们要对Framework Search Paths进行配置,也就是说告诉编译器我们的第三方SDK所在的位置。下方这个配置项在引入SDK后就默认存在的,如果没有的话就进行配置即可。操作如下所示:
Xcode ——》Project ——》Targets ——》Build Settings ——》Search Paths\Framework Search Paths ——》$(PROJECT_DIR)/LoginSDK
2、进行编译配置:
配置完路径后,接下来我们要在Other Linker Flags添加上-Objc和-all_load选项。-Objc这个flag告诉链接器把库中定义的Objective-C类和Category都加载进来。而-all_load会强制链接器把目标文件都加载进来,即使没有objc代码。操作如下所示:
Xcode ——》Project ——》Targets ——》Build Settings ——》Linking\Other Link Flags——》-Objc和-all_load
3、SDK的使用:
配置完毕后,接下来就是在我们App中使用该SDK了。下方代码就是我们上述LoginSDK的使用方式,首先获取单例,然后检查是否登录,登录成功后根据Block回调跳转到首页,如果未登录,就通过LoginAPI获取登录页面进行登录。
以上是关于iOS项目功能模块封装SDK使用总结的主要内容,如果未能解决你的问题,请参考以下文章
游戏开发教程Unity iOS平台接入微信SDK,实现微信登录等功能(教程 | 流程讲解)