构建iOS8扩展目标时重复符号

时间:2014-09-19 22:57:04

标签: ios ios8 cocoapods ios-app-extension

我花了数小时尝试扩展目标,以便从主目标使用单独的pod配置。原因是Pods与扩展目标重复,从而使整个应用程序的大小增加了两倍。需要使扩展仅包含那里必需的pod。

在将Extension扩展到主目标时,XCode似乎有一些魔力,CocoaPods似乎对整个过程一无所知?或者我做错了?我尝试了各种Podfile配置,没有任何作用。 任何人都能成功实现这一目标吗?

重现:

  1. 创建一个新项目,目标" MainTarget"
  2. 选择添加目标>今天扩展,名称目标"扩展"
  3. 创建podfile:
  4. target 'MainTarget' do
    pod 'RestKit', '~> 0.20.3'
    pod 'AFNetworking', '~> 1.3.1'
    pod 'SSKeychain', '~> 1.2.0'
    pod "MagicalRecord/Shorthand", '~> 2.2'
    pod 'StyledPageControl', '~> 1.0'
    pod 'GoogleAnalytics-iOS-SDK', '~> 3.0.2'
    end
    
    target 'Extension' do
        pod 'AFNetworking', '~> 1.3.1'
    end
    

    4次运行pod install   5 build

    结果:

    /Users/d/Library/Developer/Xcode/DerivedData/MainTarget-fvmcyblwdybpkdgfzflcjhqpjxab/Build/Products/Debug-iphonesimulator/libPods.a(AFHTTPRequestOperation.o)
    /Users/d/Library/Developer/Xcode/DerivedData/MainTarget-fvmcyblwdybpkdgfzflcjhqpjxab/Build/Products/Debug-iphonesimulator/libPods-MainTarget.a(AFHTTPRequestOperation.o)
    duplicate symbol _OBJC_IVAR_$_AFHTTPRequestOperation._successCallbackQueue in:
    /Users/d/Library/Developer/Xcode/DerivedData/MainTarget-fvmcyblwdybpkdgfzflcjhqpjxab/Build/Products/Debug-iphonesimulator/libPods.a(AFHTTPRequestOperation.o)
    /Users/d/Library/Developer/Xcode/DerivedData/MainTarget-fvmcyblwdybpkdgfzflcjhqpjxab/Build/Products/Debug-iphonesimulator/libPods-MainTarget.a(AFHTTPRequestOperation.o)
    

    ...(依此类推......每个文件重复4次。)

    ld: 2148 duplicate symbols for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

2 个答案:

答案 0 :(得分:3)

这是因为您至少要包括AFNetworking两次。如果它是您的扩展程序中唯一需要的库,则应使用:

target 'Extension', :exclusive => true do
  pod 'foo'
end

记录here

如果您希望所有图书馆都与您的扩展程序相关联,则应删除您的主要目标'分组并使用link_with

显示here

答案 1 :(得分:3)

感谢Keith Smiley,我想出了怎么做。 它需要我一点测试。这就是我做的事情

platform :ios, 7.0

link_with ['Target', 'Target todays widget']

pod 'AFNetworking', '~> 2.2'

在重做 pod安装之前,我必须删除libPods.a和其他,并且它有效。