注意:这与 this question 有关在项目结构上,但我决定使用大量用例来更好地抽象问题。
问题
如何包含 afnetworking在我的 iOS 应用程序和随附的 iOS 扩展程序( ios8-extention 、 ios8-today-widget 或 ios8-share-extension )中通过 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/