iOS SDK开发流程

开发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了。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Morris_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值