iOS支付宝AlipaySDK与阿里百川反馈YWFeedbackFMWK冲突

来源:互联网 发布:国内算法班 编辑:程序博客网 时间:2024/06/04 20:10

总结一下从昨天晚上到今天上午踩过的坑, 希望能对大家有所帮助!

很多时候很多大事件貌似和我们没有关系, 但是冥冥中可能某天, 你就会感受到某个事件的影响, 比如阿里巴友盟收购了, 之前还觉得只是一个大公司收购一个小公司, 和自己没有啥关系, 但是慢慢地, 有些问题就开始暴露了, 前段时间, 友盟用户反馈sdk 突然停止服务, 给了一个阿里百川的服务, 让去迁移, 然后作为开发者, 你可以选择不用这些第三方服务, 但是为了节约开发成本, 又不得不去使用. 无奈只有去迁移.

接第三方, 一个看起来类似搬运工的活, 但是有时候也会有很多坑要踩. 下面就说一下我遇到的坑吧!

1. cocoapods 导入YWFeedback的坑

​ 因为项目中大部分第三方库都是使用cocoapods管理, 那么要接入第三方第一件事情肯定是要看看是否支持cocoapods, 看官方接入文档说可以支持cocoapods, 然后就按照文档写的去接入, 文档如下:

source 'http://repo.baichuan-ios.taobao.com/baichuanSDK/AliBCSpecs.git'source 'http://repo.baichuan-ios.taobao.com/baichuanSDK/AliBCSpecsMirror.git'target 'YourTargetName' do    pod 'YWFeedbackFMWK', '~> 2.0.3.1'end

看完果断Copy and paste, 然后通过终端执行命令 pod update –no-repo-update 然后就是静待, 这个过程非常慢, 然后我就一直盯着终端 , 突然就发现一个问题, 就是明明我是执行的更新, 不知道为啥所有文件都重新安装了一遍, 然后安装到baidumapsdk的时候突然报错, 一大堆红, 看了一下, 貌似说是远程端的错误, 好像是不存在这样的库, 反正没有懂, 但是据我猜测应该是 Copy过来的前两行 source的问题, 于是乎吧那两行注释掉重新更新, 这次倒是很干脆直接报 YWFeedbackFMWK 不存在, 然后就联想了一下, 难道这个东西必须得上这个source上下载? 但是使用这两行代码就会报错, 这可如何是好, 以前从来没有研究过 podfile文件, 这次实在搞不懂, 于是乎开始找podfile 语法, 百度关键字”podfile 语法” 找到了一个比较优秀的文章 Podfile语法参考(译) 里面写了这样一段内容, 直接解决了我的疑问

Sources

Podfile检索了所有sources(repos)中的specs

Sources是全局的,不存储在每个target定义里面

source

指定specs的位置

使用这个方法指定sources。sources的顺序是有关系的的。CocoaPods将使用pod第一次出现的source中的最高版本(后续的source中哪怕出现了更高的版本,也不予考虑)

cocoapods 官方source是隐式的需要的,一旦你指定了其他source 你就需要也把官方的指定上

例子:

指定Artsy库然后带上官方的

CocoaPods Master Repositorysource 'https://github.com/artsy/Specs.git'source 'https://github.com/CocoaPods/Specs.git'

也就是说我的podfile文件中没有指定 默认的两个source, 导致了百度地图等很多第三方库找不到, 所以报错 加入这两行(注意一定要注意顺序) , 然后就顺利解决了这个问题, 然后继续在终端中执行pod update –no-repo-update 本以为万事大吉, 但是事情总是出乎意料, 接下来就开始说重点了: 支付宝AlipaySDK与阿里百川用户反馈YWFeedbackFMWK的冲突!

pod库更新完成后, 编译,报一个error, 按理说通过pod导入的第三方库, 环境都是默认配置好的, 不应该报错的, 但总是用这么一个意外. 下面是是报错信息我直接拷贝出来吧,

ld: warning: object file (/Users/wangjunling/Desktop/AAA-iOS/khb/Vendor/UMSocial_Sdk_Extra_Frameworks/SinaSSO/libSocialSinaSSO.a(UMSocialSinaSSOHandler.o)) was built for newer iOS version (8.2) than being linked (7.0)duplicate symbol _OBJC_METACLASS_$_UTDIDAES in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDAES.o)duplicate symbol _OBJC_CLASS_$_UTDIDAES in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDAES.o)duplicate symbol _OBJC_METACLASS_$_UTDIDBaseUtils in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDBaseUtils.o)duplicate symbol _OBJC_CLASS_$_UTDIDBaseUtils in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDBaseUtils.o)duplicate symbol _OBJC_CLASS_$_AidRequester in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(AidRequester.o)duplicate symbol _OBJC_METACLASS_$_AidRequester in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(AidRequester.o)duplicate symbol _OBJC_CLASS_$_AidManager in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(AidManager.o)duplicate symbol _OBJC_METACLASS_$_AidManager in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(AidManager.o)duplicate symbol _OBJC_METACLASS_$_UTDIDIntUtils in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDIntUtils.o)duplicate symbol _OBJC_CLASS_$_UTDIDIntUtils in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDIntUtils.o)duplicate symbol _OBJC_METACLASS_$_UTDIDStringUtils in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDStringUtils.o)duplicate symbol _OBJC_CLASS_$_UTDIDStringUtils in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDStringUtils.o)duplicate symbol _OBJC_CLASS_$_UTDIDTypeConvert in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDTypeConvert.o)duplicate symbol _OBJC_METACLASS_$_UTDIDTypeConvert in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDTypeConvert.o)duplicate symbol _OBJC_CLASS_$_UTDIDMain in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDMain.o)duplicate symbol _OBJC_METACLASS_$_UTDIDMain in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDMain.o)duplicate symbol _OBJC_CLASS_$_UTDIDOpenUDID in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDOpenUDID.o)duplicate symbol _OBJC_METACLASS_$_UTDIDOpenUDID in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDOpenUDID.o)duplicate symbol _OBJC_CLASS_$_UTDIDHelper in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDHelper.o)duplicate symbol _OBJC_METACLASS_$_UTDIDHelper in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDHelper.o)duplicate symbol _OBJC_CLASS_$_AidStorage in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(AidStorage.o)duplicate symbol _OBJC_METACLASS_$_AidStorage in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(AidStorage.o)duplicate symbol _OBJC_CLASS_$_UTDevice in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDevice.o)duplicate symbol _OBJC_METACLASS_$_UTDevice in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDevice.o)duplicate symbol _OBJC_IVAR_$_UTDIDKeychainItemWrapper.genericPasswordQuery in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDKeychainItemWrapper.o)duplicate symbol _OBJC_IVAR_$_UTDIDKeychainItemWrapper.keychainItemData in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDKeychainItemWrapper.o)duplicate symbol _OBJC_CLASS_$_UTDIDKeychainItemWrapper in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDKeychainItemWrapper.o)duplicate symbol _OBJC_METACLASS_$_UTDIDKeychainItemWrapper in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDKeychainItemWrapper.o)duplicate symbol _OBJC_CLASS_$_UTDIDPersistentConf in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDPersistentConf.o)duplicate symbol _OBJC_METACLASS_$_UTDIDPersistentConf in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDPersistentConf.o)duplicate symbol _OBJC_CLASS_$_UTDIDPersistentFile in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDPersistentFile.o)duplicate symbol _OBJC_METACLASS_$_UTDIDPersistentFile in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDPersistentFile.o)duplicate symbol _OBJC_METACLASS_$_UTDIDGTMBase64 in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDGTMBase64.o)duplicate symbol _OBJC_CLASS_$_UTDIDGTMBase64 in:    /Users/wangjunling/Desktop/AAA-iOS/Pods/Pingpp/lib/Channels/Alipay/AlipaySDK.framework/AlipaySDK    /Users/wangjunling/Desktop/AAA-iOS/Pods/UTDID/UTDID.framework/UTDID(UTDIDGTMBase64.o)ld: 34 duplicate symbols for architecture arm64clang: error: linker command failed with exit code 1 (use -v to see invocation)

对于经验丰富的老程序员来说一看可能就知道是什么意思了, 但是我还没有遇到过这样的问题, 第一件事当然是百度啦, 关键字”clang: error: linker command failed with exit code 1 (use -v to see invocation)” 找了一堆,没有找到问题是什么原因, 换关键字”ld: 34 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)” 终于看到一个比较好的描述的文章, 里面大概意思是说, 有文件冲突, 或者重名, 然后我才想起来看看上面的报错信息, 仔细分析发现, 原来是alipaysdk 和百川sdk里面的UTDID文件冲突, 也许是因为同一个公司的缘故吧, 在做封装的时候封装了相同的库, 造成了冲突. 算是找到了报错原因, 接下来就是慢慢的找解决方案路.

百度关键词”iOS 开发第三方库冲突”, 又是一堆烂帖子博客, 挨个去看, 其实最大的感触就是在中国的博客上都是相互抄袭, 甚至一个人写错了, 一堆人都跟着错, 真不明白那些人抄袭这样的博客有啥用, 就算你抄也抄经典的, 然后加入自己的思想, 这样也算是进步对吧! 有人会问我那你为啥不去google搜索, 其实我到时想用google, 但是英文不好, 找不到好的关键字搜索的话, 用google并不见得比百度好, 比如你用百度搜索”日历”, 然后日历就直接出来了, 但是你用google搜索calendar, 出来的就不是你想要的答案. 好了不扯淡, 下面是我找到的写的看起来靠谱点的博客, 关于解决多个第三方库冲突的文章, iOS 第三方库冲突的处理 , 摘抄一下这篇文章的内容:

  1. 创建临时文件夹,用于存放armv7平台解压后的.o文件:mkdir armv7
  2. 取出armv7平台的包:lipo libx.a -thin armv7 -output armv7/libx-armv7.a
  3. 查看库中所包含的文件列表:ar -t armv7/libx-armv7.a
  4. 解压出object file(即.o后缀文件):cd armv7 && ar xv libx-armv7.a
  5. 找到冲突的包(JSONKit),删除掉rm JSONKit.o
  6. 重新打包object file:cd .. && ar rcs libx-armv7.a armv7/*.o,可以再次使用[2]中命令确认是否已成功将文件去除
  7. 将其他几个平台(armv7s, i386)包逐一做上述[1-6]操作
  8. 重新合并为fat file的.a文件:
    lipo -create libx-armv7.a libx-armv7s.a libx-i386.a -output libMiPushSDK-new.a
  9. 拷贝到项目中覆盖源文件:
    cp libMiPushSDK-new.a /Users/tony/Desktop/XXXProject/Lib/libMiPushSDK.a

看完文章感觉比较适合我的问题, 然后就开始按照步骤操作, 在执行到第4步的时候就出问题了, 终端中报错

wangjunlingdeMacBook-Pro:librepack wangjunling$ ar -t armv7/libx-armv7.aar: armv7/libx-armv7.a: Inappropriate file type or format

然后我就怀疑是我自己的错, 重复n遍发现还是不行, 我就换个思路, 去打开那个utdid包, 然后打开后, 发现里面的全部内容, 都是冲突内容, 那么也就是说重新封装这个库是不可能的了, alipay打不开, 这个有不能重新封装, 貌似所有的解决方案都没有了, 绝望中, 只能找到他们的客服, 下载一个叮叮客服端, 注册, 登录, 加他们提供的服务群, 然后就没信了, 可能是太晚了, 此时已经是凌晨一点了, 今天肯定是解决不了了, 无奈睡觉!

第二天, 一上班就看叮叮有没有通过我的申请, 一看有个客服回复消息了, 然后赶紧去咨询, 很明显这个问题应该是有人遇到过了, 客服直接和我说, 把UTDID删除, 问题是我删除了还是报错, 客服的意思是说吧支付宝里的UTDID删除,问题是iOS 10的是封装的.framework, 不可能去删除里面的东西, 而且通过上面的终端命令也试过, 根本打不开alipaysdk, 可能是他们有特殊加密, 后来客服说他们有一个不包含UTDID的alipaysdk, 然后将信将疑的把, 之前的alipaysdk换掉, 到此, 问题解决. 虽然最终的解决方式很没有技术含量, 但是这两天我收获了很多东西, 所以记录一下, 希望遇到同样问题的你, 在没有方案时不要绝望, 办法总是会有的, 坚持下去, 总会有收获!

0 0