概述
文章目录
- 搭建工作区间
- 1、创建一个本地代码库文件夹
- 2、创建一个工作区间
- 3、创建一个项目
- 4、创建Framework制作的项目
- 5、添加项目到Workspace
- 编写和调试Framework
- 编写SDK代码
- 1、添加一个类
- 2、在类里添加一个方法
- 3、在类的头文件添加到WeSDK.h中
- 4、添加Public头文件
- 4.1 合并SDK库并设置SDK生成路径
- 4.2 上线前去除模拟器的库
- 调试和使用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了。
最后
以上就是文艺奇异果为你收集整理的iOS SDK开发流程的全部内容,希望文章能够帮你解决iOS SDK开发流程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复