一, 功能模块 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 获取登录页面进行登录.
来源: http://www.bubuko.com/infodetail-2576836.html