Duplicate symbol __OBJC_IVAR__$_及微信分享报WXAPI.a未导入

这两天做一个项目,里面集成微信,QQ,微博之类的分享平台。这个项目是有几个子项目共同组成的,主项目通过framework的形式引用个子项目,在子项目中进行开发,编译后系统自动生成的framework并引入到主工程中。项目需要在主工程appDelegate中进行初始化配置,在子工程中对SDK进行调用。一般情况下,单独一个工程开发的话,将SDK导入主工程就行了,可以在各个地方调用,但是我们项目的特点,要求将SDK在主工程中导入一次,也需要在子工程中导入一次,所以就出现了问题。

1.Duplicate symbol OBJC_IVAR$_ ……

当我将SDK的包导入两个工程时,Xcode报重复错误:
Duplicate symbol __OBJC_IVAR__$_及微信分享报WXAPI.a未导入_第1张图片
报错后,我能确定的是,两个包导入后,工程间引用有问题,但最终没有找到方法解决,只有将其中一个SDK移除工程。移除主工程后我再进行初始化配置是又会报找不到头文件、找不到引用等问题。后来问了一朋友,并将我工程等截图截给他,并把问题描述给他看了后,他告诉我这是因为静态库重复引用导致的。后来在他的指导下解决了这个问题。具体的解决方法如下:

  • 进入你引用SDK的子工程
  • 找到SDK包所在的目录,从上面截图来看是微博爆的错,所以找到libWeiboSDK.a
  • 选中后打开Xcode右侧的文件检查器

  • Duplicate symbol __OBJC_IVAR__$_及微信分享报WXAPI.a未导入_第2张图片

  • 将Target Membership前面的勾去掉。
  • 这样同时在主工程和子工程中引用同一静态库时就不会报重复引用的错误了。

  • 这里可以举一反三的地方有:当你是单独一个工程时,见第一张图所报重复引用时,你一定要注意仔细查看有没有在项目中重复的引用同一个静态库。

  • 下面呈上一个简书上关于此类问题的汇总,传输门

2.微信分享报WXAPI.a未导入

这个问题也是在继承ShareSDK的时候出现的,具体情况是,我对QQ,微信,微博进行继承时,选取了QQ、微信好友,QQ空间、微信朋友圈子功能,在AppDelegate中进行配置,配置完成后,QQ、新浪微博相关的分享可以正常操作,但是微信在客户端上提示未引入libWXAPI.a,我根据提示去网上找了很多资料,也试用了很多方法,最终还是没有解决问题。报错截图:
Duplicate symbol __OBJC_IVAR__$_及微信分享报WXAPI.a未导入_第3张图片
后来在帖子中发现有其它猿通过咨询ShareSDK的客服来决解了问题,然后我抱着试试的心态,关注了ShareSDK的QQ公众号。最开始客服估计我项目里少了东西,但是我很确定那我刚下的Demo里的SDK文件,不会少东西,后来他叫我把初始化的代码截图给他,他就截图给他吧。然后叫我把微信的appkey换成demo里面的key尝试一下,结果还是不行。等了几分钟过后,客服说我代码写错了,叫我对比他们的Demo,我不相信啊,还说不会,然后他说配置的时候需要用平台的大类型配置,不能用子类型配置。还是抱着试试的心态,诶,可以了。。。。。

  • 虽然不知道ShareSDK为什么这个时候会爆出这样的错,但是还是得说,自己写代码的时候需要小心,不然一天的时间就得花费在这个上了。
  • 下面呈上客服的公众号:
  • 微信公众号二维码
  • QQ公众号(传输门):4006852216
  • 以及我的示例代码:

[ShareSDK registerApp:ShareSDKAppID
activePlatforms:@[
@(SSDKPlatformTypeSinaWeibo),
@(SSDKPlatformSubTypeQZone),//qq空间
@(SSDKPlatformSubTypeQQFriend),
@(SSDKPlatformSubTypeWechatSession),
@(SSDKPlatformSubTypeWechatTimeline)
]
onImport:^(SSDKPlatformType platformType)
{
switch (platformType)
{
case SSDKPlatformTypeWechat://就是这里写错了,写成SSDKPlatformSubTypeWechatSession了,所以就报错了!细心啊
[ShareSDKConnector connectWeChat:[WXApi class]];
break;
case SSDKPlatformTypeQQ:
[ShareSDKConnector connectQQ:[QQApiInterface class] tencentOAuthClass:[TencentOAuth class]];
break;
case SSDKPlatformTypeSinaWeibo:
[ShareSDKConnector connectWeibo:[WeiboSDK class]];
break;

         default:
             break;
     }
 }
      onConfiguration:^(SSDKPlatformType platformType, NSMutableDictionary *appInfo)
 {

     switch (platformType)
     {
         case SSDKPlatformTypeSinaWeibo:
             //设置新浪微博应用信息,其中authType设置为使用SSO+Web形式授权
             [appInfo SSDKSetupSinaWeiboByAppKey:WBAppKey
                                       appSecret:WBAppSecret
                                     redirectUri:@"http://www.sharesdk.cn"
                                        authType:SSDKAuthTypeBoth];
             break;
         case SSDKPlatformTypeWechat:
             [appInfo SSDKSetupWeChatByAppId:WXAppID
                                   appSecret:WXAppSecret];
             break;
         case SSDKPlatformTypeQQ:
             [appInfo SSDKSetupQQByAppId:QQAppId
                                  appKey:QQAppKey
                                authType:SSDKAuthTypeBoth];
             break;

         default:
             break;
     }

最后,上面的内容希望路过的小伙伴能看到,别再掉进我掉过的坑哦,哈哈!

[简书.死缠烂打的小幸福 ]http://www.jianshu.com/p/c1a1e9f273c9

你可能感兴趣的:(iOS开发)