【文章前言】
🏷️作为一名合格的开发者,GitHub上开源项目相信大家都在开发中或多或少使用过,对于这些第三方SDK,知名的或者不知名的大家了解的也一定很多。
🏷️通过第三方SDK项目集成,用投入较少学习成本,就能快速实现需求功能的优势,所带来的高效开发,相信大家都尝到了甜头,甚至我们可以这样评价,我们的美好工作建立在了它们的无私奉献上。
🏷️那么问题来了,针对第三方SDK我们为何对它们如此信任?第三方SDK的代码内容遵循哪些规则?还有,如何来辨别第三方SDK是否是一个优秀的开源项目?
🏷️再随着深入的研究,从一个使用者到提供者的转变,针对一个开源SDK的开发,我们要如何去定义一套优秀的API?如何去实现一套高效的需求功能?最终,如何让自己的SDK能得到其他使用者们的认可?
🌟【SDK目标】
针对上文的提问,总结了下面四点目标:
1: 有一套简洁,易懂的API;
2: 功能需求性能高效;
3: 代码逻辑安全,健壮。包括有一套异常收集和处理;
4: 功能点兼容处理;
🌟【API的合理性】
API的合理性定义,是比较关键的。
我们开发中去使用第三方SDK,通常都是从暴露的API入手去分析和思考怎么实现功能,同时最关心API参数怎么传,关心API参数支持的数据类型,还关心API是否支持特殊的需求功能实现。特殊的功能需求实现简单讲就是,SDK功能扩展的智能强度。
OC开发的SDK API的合理性包括:
1). 属性的暴露合理性;
2). 方法定义和方法入参定义的合理性;
一起看下知名SDK: Masonry API定义案例:
1): Masonry中暴露属性的readonly修饰,保证了属性安全性。
2): API的清晰简洁。仅仅提供3条API就实现了强大的布局功能,作者在开发前的构思上是下了功夫的,值得学习。
🌟【性能高效】
性能高效是多方面的综合性评分,其中包括线程使用的正确性,数据结构使用的正确性,缓存机制使用的正确性,代码逻辑的优化,对内存管理的关心等。虽然“性能高效”注意点就前面几十个字,但都是精华,这里就不详细说了。
🌟【代码安全,SDK健壮】
一): 数据方面
iOS的OC是一门动态语言,编译时对数据类型的不确定性,是最致命的缺点,所以我们在开发中需要注意这个问题,写SDK关键需要判断数据类型;
注意对字典取数据和判断数据类型处理,写SDK必不可少的步骤;
注意对数据集合非空判断和取值判断处理,避免为空和数组越界,导致奔溃;
二): 权限方面
权限方面是指iOS在对用户隐私设置的保护,如果SDK有用到设置功能,需要判断状态,并给予提示。
三): 内存管理方面
内存管理注意点包括以下:
1): 属性修饰类型;
2): Block的强引用;
3): 对象生命周期的管理;
4): 数据存储优化;
注释:上面的注意点就不详细介绍了,都是平级的要点。
🌟【功能点兼容】
一): UI方面的手机型号适配
包括iPhoneX以后的刘海,下巴UI和iPhone5,4小屏UI适配,能在SDK中处理,就不应该在外面让使用者手动设置值。
-----优化方案:
可以通过提供按照比例缩放和边距最小值适配方案,通过自定义枚举值类型参数和配置默认值,来实现使用者的调整需求。
-----温馨提示:
减少在SDK外部对SDK中UI功能值的设置,最好的效果是去除所有在外部值设置,如果没有达到这个目标,再好好优化一下API和功能代码实现逻辑。
二): 数据的异常收集
SDK数据处理可能出现的报错情况,需要我们对错误数据进行处理,防止程序崩溃,并将错误数据进行收集,Debug提示使用者,方便快速定位和解决问题。
—-看下案例:
🌟【SDK目标总结】:
开发SDK,是通过多年的开发经验来预防和处理各种可能出现的问题,防止一个不合格的SDK成为APP中的一部分,导致拉低性能和用户体验。