iOS SDK框架开发中的那些坑

前言

    最近业务需求需要开发一个SDK集成到友方App中,于是就有了本文中的这些经验(掉坑->爬坑->掉下一个坑)。

前期---代码编写

坑点一:关键框架选型

    这个其实不涉及技术问题,但是也需要谨慎,因为我们的SDK属于一个比较完整的业务模块,所以依赖的第三方库还是挺多的,其中就用到了高德地图,(开始我们就用的通用版本,结果友方用的是另一个版本,结果为了能够集成成功,后期不得不更改高德地图版本),所以建议如果是这种明确合作方的SDK这种框架还是需要提前沟通好。
    PS:忍不住吐槽一下,高德地图整出一大堆乱七八糟的框架目的是个啥呢,又不能互相兼容,开发者还不知道选择哪个合适。

坑点二:资源类文件的处理

    原生App开发,资源文件最多的无非是图片,在平时项目开发中一般会放到asset文件夹中,但是在SDK中,需要创建.bundle文件(建议与项目同名)对资源文件进行管理。

+ (UIImage *)imageWithNamed:(NSString *)name inDirectory:(NSString *)directory {
    NSString *bundlePath = [[NSBundle mainBundle] pathForResource:bundle文件名 ofType :@"bundle"];
    NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
    /*资源在bundle文件夹中的路径 */
    NSString *directoryPath = [NSString stringWithFormat:@"images/%@", directory];
    NSString *imagesPath = [bundle pathForResource:name ofType:@"png" inDirectory:directoryPath];
    UIImage *img = [UIImage imageWithContentsOfFile:imagesPath];
    return img;
}

    该方法在项目中使用举例:

UIImage *refreshImg = [UIImage imageWithNamed:@"icon_exchange" inDirectory:@"common"];

中期---生成合格的.framework框架

坑点三:指令集冲突(模拟器包真机包合并时,提示冲突)

    简单来说,在生成模拟器.framework中与生成真机.framework时,都存在arm64架构,网上提供的通过后期命令行删除某个arm64的方式始终无法解决该问题。此时需要配置如图选项,大概意思是在模拟器生成的.framework的框架不再添加arm64,后期将模拟器库与真机库合并,各个架构模式就都存在了。

解决指令集冲突.png

此处参考文章
Xcode12 运行模拟器报building for iOS Simulator, but linking in object file built for iOS, file错误解决方案
tips:
查看打出包,包含哪些架构信息的命令行(在终端直接输入)

lipo -info 打出包所在路径

模拟器包与真机包合并命令行

lipo -create 模拟器包路径 真机包路径 -output 存放合并后包路径/合并包的名字(推荐和SDK名称一致)

后期---远程私有库制作

坑点四:spec文件的配置

制作远程私有库的教程有很多,此处就不展开来仔细说明了。iOS开发: 配置CocoaPods远程私有仓库重点说一下针对非开源的.framework框架,如何去配置spec

配置spec.png

设置自己的非开源SDK

  s.vendored_frameworks = 'ZDSweepCodeSDK.framework'

设置项目SDK相关的资源文件夹(bundle)

  s.resource = 'ZDSweepCodeSDK/ZDSweepCodeSDK.bundle'

坑点五:打包的SDK中的类目文件无法编译

当自己开发的SDK中包含类目文件时,编译就会有提示找不到,此时需要在设置页other_laflags添加'-objc',但是在SDK中无法设置,只能写在spec文件。

s.xcconfig = { "OTHER_LDFLAGS" => "-ObjC", "ENABLE_BITCODE" => "NO"}

坑点六:spec文件验证推送远程库报错

当调用pod lib lint --verbose --use-libraries时报了如下错误:
Ld .../Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/Objects-normal/arm64/Binary/App normal arm64

解决方案:

s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64' }

后记

    经历了整个SDK的完整开发流程,一步步排除问题,最终达到了最终结果。在此感谢一起解决问题的同事--卞老板。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容