iOS SDK开发、集成、合并、脚本

SDK开发


一般分静态库和动态库
静态库:1.模块化,分工合作。2.避免少量改动经常导致大量的重复编译链接。3.也可以重用,注意不是共享使用。( .a和.framework)

动态库:1.使用动态库,可以将最终可执行文件体积缩小。2.使用动态库,多个应用程序共享内存中得同一份库文件,节省资源。3.使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。 (.dylib和.framework)
静态库分两种,一个是 Framework,一个是Static Library(.a)
(1)Static Library的产出物只是一个.a文件,为二进制执行文件。分享给别人的时候,头文件、静态资源文件需要另外提供。
(2)Framework为一站式分享方案,其实是一个文件夹,其中包含代码签名、头文件、二进制执行文件、静态资源文件等。


本文讲的是Framework

创建
  1. 新建Framework 选择framework


  2. 命名为TestSDK



修改配置
  1. 更改 Info -> development target 到目标系统版本


  2. 确认 Target -> Build Settings -> Mach-O Type 为 Static Library


  3. 更改 Target -> Build Settings -> Build Active Architchture Only 为 NO。该编译项用于设置是否只编译当前使用的设备对应的arm指令集。


  4. 添加Other Linker Flags -ObjC ,在静态库中使用分类,那静态库里和使用该静态库的项目都要添加-ObjC。


  5. 更改 Edit scheme -> Run -> Build Configuration 为 Release


创建类文件
  1. 创建类ShowMessage
    .h文件
@interface ShowMessage : NSObject
/*
 * 展示消息
 * message 消息
 */
+ (void)showWithMsg:(NSString *)message;
@end

.m文件

#import "ShowMessage.h"
@implementation ShowMessage
+ (void)showWithMsg:(NSString *)message {
    NSLog(@"%@",message);
}
@end
  1. 设置需要公开的ShowMessage.h 为 public


  2. 在 TestSDK.h 文件中引入公开的头文件



生成SDK
  1. 选择模拟器 command+B


  2. 然后打开编译生成的模拟器架构的SDK目录


  3. 同理切换真机 command+B


  4. 最后生成的两个不同架构的SDK文件如下,可以看到一个是iphoneos,一个是iphonesimulator



创建demo工程
  1. 创建 Demo 工程,并将生成的模拟器架构的framework拷进来


  2. 在ViewController里调用 TestSDK的测试代码


  3. 查看打印,成功了。如果你要真机,那你就换那个真机架构的framework



合并framework
  1. 上面讲到我们现在有两个framework,使用肯定是不方便的。那我们需要合并它们为一个,先使用lipo -info分别查看一下它们的架构信息
    先 cd 到framework文件夹里,去lipo -info 那个TestSDK文件。(其实我们就是合并TestSDK文件)
lipo -info TestSDK
  1. 真机架构


  2. 模拟器架构


  3. 使用(lipo -create 真机架构SDK路径 模拟器架构SDK路径 -output 输出路径 )合并,记得有空格
lipo -create xx/iphoneos/TestSDK.framework/TestSDK xx/iphonesimulator/TestSDK.framework/TestSDK -output xx/TestSDK
  1. 生成结果如下


  2. 查看一下架构,发现已经支持模拟器和真机了,但是体积也相应的变大了。这个时候只要将这个文件 随便放到之前生成的真机或者模拟器的framework里替换一下就可以了



脚本

上述合并是比较麻烦的 如果用脚本是可以直接command+B 直接生成

  1. 在之前的SDK工程里,添加New Run Script Phase


  2. 将如下脚本拷入
TARGET_NAME=${PROJECT_NAME}
OUTPUT_DIR=${SRCROOT}/Products/${TARGET_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework

if [ -d "${OUTPUT_DIR}" ]
then
rm -rf "${OUTPUT_DIR}"
fi

mkdir -p "${OUTPUT_DIR}"
cp -R "${DEVICE_DIR}/" "${OUTPUT_DIR}/"

lipo -create "${DEVICE_DIR}/${TARGET_NAME}" "${SIMULATOR_DIR}/${TARGET_NAME}" -output "${OUTPUT_DIR}/${TARGET_NAME}"

open "${SRCROOT}/Products"
  1. command+b 后生成


  2. lipo -info查看确认一下


有问题可以留言

你可能感兴趣的:(iOS SDK开发、集成、合并、脚本)