在手游发行行业,业务流程一般如下
- 开发一套属于自己公司的游戏SDK
- 将游戏SDK给到CP方(游戏研发商)接入
- 发行公司拿到接入了SDK的游戏后(后续称为母包)对母包进行推广或分发给更多渠道
如果发行公司自己推广,那么一般得对母包进行分渠道,但由于iOS签名的限制,对母包进行修改的话需要重新签名,那么怎么不重签的情况下添加渠道标识呢?见下文"ipa不重签的情况下填加渠道标识"
如果发行公司继续把母包分发给其他渠道(比如其他发行公司),则需要接入其他公司的sdk,并将母包ipa以反编译方式更改为其他渠道,详情见下文"ipa分发其他渠道"
核心技术一:ipa不重签的情况下填加渠道标识
1.为ipa添加渠道标识
- 解压ipa->显示xxx.app内容
- 在xxx.app文件夹下新增一个文件夹,命名为channel,并再增加一个文件夹命名为"渠道号(1008)",如图:
- 然后再将压缩回ipa,至此,渠道号添加完毕
2.读取渠道号标识
代码如下
+ (NSString *)getChannel{
NSString *bunPath = [[NSBundle mainBundle] bundlePath];
NSString *codePath = [bunPath stringByAppendingPathComponent:@"channel"];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL flag = false;
[fileManager fileExistsAtPath:codePath isDirectory:&flag];
if (flag) {
NSArray<NSString *> *fileNames = [fileManager contentsOfDirectoryAtPath:codePath error:nil];
if (fileNames == nil) {
return nil;
}
// 读取ipa下的文件结构中,文件夹"xxx.app/channel"的第一个文件夹名称,也就是渠道号
return fileNames.firstObject;
}
return nil;
}
就这样,免重签,多渠道打包的就描述完毕!
核心技术二:ipa分包为其他sdk
- 自己出包用的sdk的framework需要弄成动态库了;
- 由于动态库,所以接入了动态库的ipa中的xx.app会有frameworks目录
- 自己的sdk代码中接入其他sdk,并再次打包为framework,称为嵌入其他sdk的framework
- 替换掉ipa中的framework,并重新压缩为ipa;
- 对ipa进行签名,签名教程点击此
此外 注意如果接入的其他sdk也为动态库,那么需要以下步骤 6. 新建一个demo工程并引入其他sdk 7. 新建一个framework的TARGETS,如下图 8. 将你sdk的源码放置新建的framework目录中即可 demo项目整体结构如下图 9. 这样做的目的是可以使ipa中的自己sdk的framework和其他sdk的动态framework共存!
总结
- 只有动态库framework才能通过反编译修改framework以达到分包的目的
- 分包其他sdk时,也为动态库的话,则反编译替换framework时需要所有的动态库目录在同一层,如下图
|