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获取登录页面进行登录。

 

猜你喜欢

转载自www.cnblogs.com/yuhao309/p/8960730.html