接入EMAS解决TBJSONModel冲突的问题
EMAS接入
集成阿里云平台在很大程度上能够完成项目上的一站式需求能力,可以节省大量的人力成本去自研
AKTBJSONModel依赖问题描述
接入EMAS三大功能,奔溃分析,性能分析,远程日志
Podfile分别引入的SDK的为AlicloudCrash、AlicloudAPM、AlicloudTLog,再三个库都依赖了TBJSONModel.framework二进制资源包。
但是IMS物联网库,IMSThingCapability和IMSDeviceCenter依赖的AKTBJSONModel其实就是TBJSONModel,如下图:
导致在pod install的时候碰到二进制资源冲突的问题,如下图:
反馈给阿里云同学,IMS物联网同学给出的修复结论:
- 他们内部已经在推送修改,但是涉及50多个库,还有修改完官方文档的更新,明确的修复完成时间没有确定。
- 尝试将对应版本的IMS两个库的静态资源下载,进行本地集成。
解决方案
修改IMS相关依赖的AKTBJSONModel
从Podfile.lock文件中知道,仅需修改两个库IMSThingCapability和IMSDeviceCenter两个库
pod install原理,为查找aliyun-aliyun-specs文件夹中对应版本资源,如:
pod IMSThingCapability, ‘1.9.0’
查找的是~/.cocoapods/repos/aliyun-aliyun-specs/Specs/IMSThingCapability/1.9.0
翻看此podspec
修改EMAS相关依赖的TBJSONModel
修改涉及四个库AliHACore、AliHAProtocol、RemoteDebugChannel、TRemoteDebugger四个库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
- AliHACore (10.0.3.6):
- AliHALogEngine (>= 10.0.2)
- AliHAProtocol (>= 10.0.2.1)
- TBJSONModel
- TBRest (>= 1.0.0.18)
- AliHAProtocol (10.0.3):
- TBJSONModel
- RemoteDebugChannel (10.0.4.5):
- AliHAProtocol (>= 10.0.0.3)
- AliHASecurity
- AliyunOSSiOS
- TBJSONModel
- TBRest (>= 1.0.0.18)
- ZipArchive
- TRemoteDebugger (10.0.6.6):
- AliHALogEngine (>= 10.0.6)
- AliHAMethodTrace (>= 1.0.1.2)
- AliHAProtocol (>= 10.0.0.5)
- AliHASecurity (>= 10.0.4)
- AliRemoteDebugInterface (>= 0.0.1.2)
- TBJSONModel
- TBRest (>= 1.0.0.18)
操作也是同上面提到的IMS那样,找到对应版本的库,进行如下操作,并解决编译问题
开始手动安装
IMS
IMS下载资源
查找到需要安装的版本的podspec,将其copy下来,放到本地库中,并做修改:
- 修改AKJSONModel为 s.dependency ‘TBJSONModel’, ‘~> 0.1.15’
- 下载s.source指向的资源,实际就是s.vendored_frameworks和s.resources
最后文件结构如下:
再重复操作IMSDeviceCenter,并上传远程仓库。
将源指向本地资源或是codeup仓库
pod install
编译执行,测试配网流程,无问题
EMAS
EMAS下载资源和本地集成
资源详细见 https://github.com/RamboQiu/EMAS
本地集成如下:
上面为依赖了TBJSONModel的库,需要改成AKTBJSONModel
下面的为奔溃分析、APM和远程日志SDK
替代方案
- 崩溃分析目前集成有腾讯的Bugly,纯在有部分崩溃捕捉不到的情况,尝试使用Facebook的Fabric。
- APM性能监控相关,尝试使用友盟埋点进行,无大盘。
- 远程日志,使用push能力制作静默推送用户出发上报SLS。
主要问题和收益
问题
IMS版本大概一个月一个版本,后续如果物联网那边一直没有解决此问题,IMS SDK的更新需要从原有的直接修改podfile的版本,改成如上述方案的方式进行更新。
从原自动方式,变成手动方式,容易发生在人为操作的手动失误上引起的问题。
替代方案中,目前就崩溃分析Fabric相对成熟,有大盘可看,另外能力缺乏较大。
收益
EMAS能力两端统一使用,对于管理更方便。
EMAS的平台型能力更强,对于数据正好的平台可视化做的较完善。
IMS那边已经在推进改动,后续改造完成,可以做平滑迁移。
EMAS接入进展
8.1 完成接入
奔溃分析
性能分析
远程日志
其他
接入AlicloudCrash奔溃分析,会碰到FBRetainCycleDetector的问题,按官方提供方案进行解决https://help.aliyun.com/document_detail/448230.html
RemoteDebugProtocol.h头文件引入了其他module的头文件#import <TBJSONModel/TBJSONModel.h>导致的问题
https://stackoverflow.com/questions/27776497/include-of-non-modular-header-inside-framework-module