ios - 如何通过 CocoaPods 将 AFNetworking 作为在 iOS 应用程序和扩展中使用的框架

标签 ios xcode6 afnetworking cocoapods ios8-extension

注意:这与 this question 有关在项目结构上,但我决定使用大量用例来更好地抽象问题。

问题

如何包含 在我的 iOS 应用程序和随附的 iOS 扩展程序( )中通过 CocoaPods?

问题

  • 要在扩展中使用,AFNetworking 需要使用#define AF_APP_EXTENSIONS 构建,这是否意味着我需要 2 个版本的 AFNetworking?一个用于扩展程序,一个用于应用程序?

  • 如何设置 Podfile 以便构建框架并将其复制到正确的位置? use_frameworks! 的文档有点薄。

最佳答案

更新:

正如 Rhythmic Fistman 提到的那样,在进行新的 pod 安装时,原始答案的方法会被覆盖。

Aelam在这个 Github issue 中提供了以下方法:

Add this to your podfile. remember to replace the target name

post_install do |installer_representation|
    installer_representation.project.targets.each do |target|
        if target.name == "Pods-YOU_EXTENSION_TARGET-AFNetworking"
            target.build_configurations.each do |config|
                    config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'AF_APP_EXTENSIONS=1']
            end
        end
    end
end

过时的答案:

1) 确保 pod 'AFNetworking' 包含在您的 podfile 中的两个目标(您的容器应用程序和扩展)。

以我为例:

target 'ContainerAppTarget', :exclusive => true do
  pod "SDKThatInternallyUsesAFNetworking"
end

target 'ExtensionTarget', :exclusive => true do
   pod 'AFNetworking'
end

2) 在 XCode 中,单击层次结构 View 上的 Pod 以显示其构建选项。然后在构建选项上,选择您要在下拉列表中查看构建选项的目标。选择 Pods-{Extension Target Name}-AFNetworking(它应该是由 pod install 自动创建的。然后选择 Build Settings。然后在 Apple LLVM 6.0 - Language 下,验证 Prefix header 是否有文件名。我的文件名是 Target Support Files/Pods-{Extension Target Name}-AFNetworking/Pods-{Extension Target Name}-AFNetworking-prefix.pch。如果它没有这样的文件名或类似的,然后添加它。

3) 转到在此处命名或您在此处添加的前缀头文件。它几乎是空的,然后在末尾添加以下行:

#define AF_APP_EXTENSIONS

这应该允许您的容器应用程序指向正常构建的 AFNetworking 版本,而您的扩展应用程序指向另一个使用标志集构建的版本。所以只有一个版本的库,但以两种不同的方式构建,每种方式都基于一个目标。

关于ios - 如何通过 CocoaPods 将 AFNetworking 作为在 iOS 应用程序和扩展中使用的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28987586/

相关文章:

swift - Xcode 6 Beta/Swift - Playground 不更新

ios - Xcode 6 - "universal storyboard"项目将支持 iOS 7?

ios - AFHTTPRequestOperationManager 的操作没有得到 header

objective-c - 将来自 AFHTTPRequestOperation 的响应传递给 UIWebview

ios - 如何让 UIBarButtonItem 打开一个新的 View Controller swift 3

ios - 如何在不使用 [RACSignal createSignal] 的情况下返回 RACSignal

swift - 无法将表达式的类型 '()' 转换为类型 'UINavigationController?'

ios - 更改自定义 tableViewCell 的背景颜色

ios - 如何调用 selectItemAt : function at collectionView(_:didSelectItemAt:)?

ios - NSURLSessionDownloadTask 从 http 切换到 https