iOS SDK开发流程

2023-11-04

开发SDK的方法和思路有很多,这里仅是一种。
下面我们要做的是,在一个工作区间下,一边调试和编写SDK,一边在项目中调试和使用我们制作的SDK。

Demo地址

搭建工作区间

1、创建一个本地代码库文件夹

找个合适的位置,创建一个文件夹,存放接下来的所有的文件。我这里创建了一个名为MyProject的文件夹。

2、创建一个工作区间

创建一个Workspace,存放在MyProject中。

创建步骤:Xcode->File->New->Workspace

有了工作区间就可以在里面创建项目,包括程序项目、制作Framework的项目等,都可以放在一个工作区间上进行处理。

3、创建一个项目

创建一个可供调试的项目DemoProject。

创建步骤:Xcode->File->New->Project->iOS->Single View App。

将DemoProject和MyProject.xcworkspace方在同一级文件夹下,即MyProject文件夹里。

4、创建Framework制作的项目

创建一个制作Framework项目WeSDK。

创建步骤:Xcode->File->New->Project->iOS->Framework。

将创建好的WeSDK放在和将DemoProject、MyProject.xcworkspace同一级文件夹下,即MyProject文件夹里。

到这里,App工程、Framework工程、Workspace都已创阿完毕。接下来需要把他们关联起来,使得我们能在Framework工程中修改,直接在App工程中使用并调试。Workspacet是一个桥梁,提供了一个工作区间,在这个工作区间上,可以实现这个功能。

在这里插入图片描述

5、添加项目到Workspace

打开Workspace,点击左侧空白区域,Add File to “MyProject”,将DemoProject和WeSDK的xxx.xcodeproj都添加到工作区间来。

在这里插入图片描述

Add File to “MyProject”->DemoProject->DemoProject.xcodeproj->Next

Add File to “MyProject”->DemoProject->WeSDK.xcodeproj->Next

在这里插入图片描述

这时候从整体上看项目

在这里插入图片描述

编写和调试Framework

在WeSDK工程里编写SDK的代码,在DemoProject工程中使用和调试SDK。

编写SDK代码

1、添加一个类

WeSDK.h是创建Framework,自动生成的一个方SDK里向外提供的类的头文件的header文件。将所有需要暴露在外部的文件的头文件放在这个头文件中统一管理,外部使用SDK时,只需要引用WeSDK.h就可以了。

加入我们需要在SDK里添加一个类WeSDKService,直接在WeSDK下创建这个类即可

在这里插入图片描述

2、在类里添加一个方法

向WeSDKService中添加一个注册SDK的方法:

@interface WeSDKService : NSObject

/** Register. Registe SDK before used */
+ (void)setAppKey:(NSString *)appKey;

@end
@implementation WeSDKService

+ (void)setAppKey:(NSString *)appKey {
    NSLog(@"appKey: %@",appKey);
    if (!appKey || !appKey.length || ![appKey isKindOfClass:[NSString class]]) {
        NSLog(@"Unvalid AppKey!");
        return;
    }
    //...
}

@end

这里只是简单的调试一下而已。

3、在类的头文件添加到WeSDK.h中

#import <Foundation/Foundation.h>

//! Project version number for WeSDK.
FOUNDATION_EXPORT double WeSDKVersionNumber;

//! Project version string for WeSDK.
FOUNDATION_EXPORT const unsigned char WeSDKVersionString[];

// In this header, you should import all the public headers of your framework using statements like #import <WeSDK/PublicHeader.h>

#import <WeSDK/WeSDKService.h>

4、添加Public头文件

在TARGET->WeSDK->Build Phases->Hearders->Public下添加需要暴露到SDK外部的头文件。

将Project处的头文件移动到上面Public就行了。

在这里插入图片描述

这时候我们编译一下SDK工程就能生成SDK了,但是系统默认存放SDK的路径比较麻烦,所以我们设置一下,让SDK编译出来之后存在我们想要的位置。
而且默认编译出来是模拟器的库和真机的库分开的,我们需要将模拟器的库和真机的库合并成一个库,上线打包的时候将模拟器的库去掉就行了。

关于SDK编译后生成的库的位置可以在Products下show in finder查看,分别用真机和模拟器编译一下会生成对应的库。

在这里插入图片描述

4.1 合并SDK库并设置SDK生成路径

在TARGET->Building Phases下,点击左上角“+”,添加一个Run Script,将如下脚本添加到里面

# Framework库合并脚本

# 进入到项目主目录的前一级目录下,../ 表示往前返回一级目录。
cd ${PROJECT_DIR}/../
# 创建一个Frameworks的文件夹,用来存放SDK
mkdir -p Frameworks
cd Frameworks
# 创建一个WeSDK的文件夹来存放WeSDK
mkdir -p WeSDK
cd WeSDK

# 下面是找到模拟器合真机的打包路径,使用lipo -create命令进行合并。
cp -rf ${BUILD_DIR}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/${PRODUCT_NAME}.framework ./
iphoneosFile=${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PRODUCT_NAME}.framework/${PRODUCT_NAME}
iphonesimulatorFile=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PRODUCT_NAME}.framework/${PRODUCT_NAME}
if [ -f "$iphoneosFile" ] && [ -f "$iphonesimulatorFile" ]; then
lipo -create "$iphoneosFile" "$iphonesimulatorFile" -output ./${PRODUCT_NAME}.framework/${PRODUCT_NAME}
fi

rm -rf ./${PRODUCT_NAME}.framework/_CodeSignature

编译完成后在show in finder去查看编译出来的库。具体请参考:iOSSDK开发之使用脚本合并模拟器和真机的库

4.2 上线前去除模拟器的库

上线前打包ipa的时候需要去除掉模拟器的库,否则审核不会通过,我们只需要在项目中添加一段脚本,打包ipa的时候会自动去除模拟器的库。
在TARGET->Building Phases下点击“+”添加一个Run Scrit,添加脚本去除。
解决办法:TARGETS->Build Phases->点击加号选择New Run Script Phase->添加下面的脚本即可。

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
if [[ $APP_PATH != *ArchiveIntermediates* ]]; then
    exit 0
fi
# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
 
EXTRACTED_ARCHS=()
 
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
 
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
 
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
 
done

具体见:iOSSDK开发之使用脚本合并模拟器和真机的库

调试和使用SDK

我们把SDK打包到了本地文件夹下,这时候只需要在项目中引用进来就可以使用了。

在这里插入图片描述

引入SDK后,我们在ViewController里面引SDK头文件,并调试一下:

#import "ViewController.h"
#import <WeSDK/WeSDK.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    [WeSDKService setAppKey:@"My AppKey"];
}

@end

试了一下,打印了appKey: My AppKey,这时候我们可以一边改着SDK里的代码,改完之后直接编译生成新的SDK,接着直接在自己的项目中使用和调试SDK了。

至此,我们已经get到了在一个工作区间下,同时开发和调试SDK了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS SDK开发流程 的相关文章

随机推荐

  • 帆软移动端,展示顺序混乱

    取消掉 手机重布局 也可 帆软移动端展示顺序混乱 设计器中靠下的控件 但是在界面中展示靠上 原因 设计器中body的移动端属性 展示顺序没有调整 解决办法
  • 服务器高可用实现文档 百度网盘,分布式文件系统元数据服务器高可用设计与实现...

    摘要 伴随全球数据量的飞速增长和数据密集型应用的不断增加 分布式文件系统得到越来越广泛的应用 目前主流的分布式文件系统均采用将元数据与数据分离管理的机制 将命名空间和文件元数据保存在元数据节点 而数据保存在数据节点 很显然 元数据节点的高可
  • 电脑复制粘贴快捷键_Win10小技巧:剪贴板让「复制粘贴」效率加倍

    如果需要连续复制许多文字 普遍作法都是逐一按下 Ctrl C 和 Ctrl V 重复好多次 其实只要学会使用剪贴板 就能大幅加快工作效率 以下分享 Win 10 小技巧 让你的复制粘贴更有效率 Win 10 小技巧 复制粘贴 效率加倍 在
  • navicat cannot create oci 解决

    1 新建连接 2 连接时候报错 3 解决 3 1 选择对应版本OCI 3 1 配置OCI 工具 gt 选项
  • Mask Rcnn详解

    Mask RCNN 算法详解 Mask RCNN介绍 模型结构及数据变化推理 backbone FNP RPN ROI Align 预测头 box class mask box class分支 mask分支 模型训练流程 模型推理 测试 流
  • ubuntu下载Android 源码参考网址

    清华大学开源软件镜像站 HOME EVENTS BLOG RSS PODCAST 代号 标记和细分版本号
  • A记录和CNAME记录有什么区别?

    在使用高防DNS时 会发现有A记录 CNAME等多种域名记录 他们填写的规则和作用都不相同 那么下面一起来看看什么是A记录 CNAME解析 什么是A记录 A Address 记录是用来指定主机名 或域名 对应的IP地址记录 用户可以将该域名
  • FPGA学习回顾

    最近正在重新学习FPGA开发 把之前忽略的一些点记录下来 以便日后进行查阅 1 Output 和Output reg的区别 这个问题的回答具体可以看这篇博客 https blog csdn net crjmail article detai
  • 通信方向常用术语及缩略词

    GSM GOBLE SYSTEM FOR MOBILE COMMUNICATION全球移动通信系统 SS SWITCHING SYSTEM交换系统 BSS BASE STATION SYSTEM 基站系统 BSC BASE STATION
  • 32位和64位系统区别及int字节数

    一 64位系统和32位有什么区别 http zhidao baidu com question 100772591 html 1 64bit CPU拥有更大的寻址能力 最大支持到16GB内存 而32bit只支持4G内存 2 64位CPU一次
  • 【电商数仓】数仓搭建之数据应用(application data stpre -- ADS)层(ADS层之用户统计、行为漏斗分析、留存率,七天连续活跃人数,每分钟在线用户数、访客统计,路径分析等)

    一 用户统计 该需求为用户综合统计 其中包含若干指标 以下为对每个指标的解释说明 指标 说明 对应字段 新增用户数 统计新增注册用户人数 new user count 新增下单用户数 统计新增下单用户人数 new order user co
  • GOBY扫描篇

    喜欢大概就是 在我们俩对视的一瞬间 我突然就避开了你的视线 而当你走过去的时候 我却在你背后看了你好久 网易云热评 一 软件简介 新一代网络安全技术 通过为目标建立完整的资产数据库 实现快速的安全应急 二 下载地址 https gobies
  • ANTLR-语法树遍历机制

    文章目录 1 简介 2 主动遍历与被动遍历 3 Listener模式 3 1 使用示例 3 2 原理解析 4 Visitor模式 4 1 使用示例 4 2 原理解析 5 规则文件与Visitor对应关系 1 简介 2 主动遍历与被动遍历 P
  • R计算已知 总体标准差 ,均值 , N 求 置信区间

    葡萄酒进口商需要报告某国葡萄酒瓶中酒的平均度数 根据以往葡萄酒的经验 进口商认为酒的度数呈正态分布 总体标准差为12 进口商随机抽取了60瓶新酒 得出样本均值X 93 给出所有新酒瓶中酒的度数的95 置信区间 xbar 0 093 sigg
  • 分支定价算法求解VRPTW问题(代码非原创)

    参考文献 微信公众号 程序猿声 关于分支定价求解VRPTW的代码 A tutorial on column generation and branch and price for vehicle routing problems 框架 对于
  • CTF.show:萌新:web13

    这次过滤了更多的
  • 用javascript实现动态增加DataGrid行

  • STM32——TIM编码器接口

    文章目录 一 编码器接口简介 二 正交编码器 三 通用定时器框图 四 编码器接口基本结构 五 工作模式 六 实例 均不反相 七 实例 TI1反相 八 编码器接口测速 电路设计 关键代码 一 编码器接口简介 Encoder Interface
  • [转]scanf函数用法

    sscanf 读取格式化的字符串中的数据 swscanf 是 sscanf 的宽字符版本 swscanf 的参数是宽字符串 swscanf不处理 Unicode 全角十六进制或 兼容性区 字符 除此以外 swscanf 和 sscanf 的
  • iOS SDK开发流程

    文章目录 搭建工作区间 1 创建一个本地代码库文件夹 2 创建一个工作区间 3 创建一个项目 4 创建Framework制作的项目 5 添加项目到Workspace 编写和调试Framework 编写SDK代码 1 添加一个类 2 在类里添