注意:这与项目结构上的this question有关,但我已经决定使用大量用例来更好地解决问题。
如何通过CocoaPods在我的iOS应用和随附的iOS扩展程序(afnetworking,ios8-extention或ios8-today-widget)中加入ios8-share-extension?
要在扩展程序中使用,需要使用#define AF_APP_EXTENSIONS
构建AFNetworking,这是否意味着我需要2个版本的AFNetworking?一个用于扩展,一个用于应用程序?
如何设置Podfile以构建框架并将其复制到正确的位置? use_frameworks!
上的文档有点薄。
答案 0 :(得分:13)
<强>更新强>
正如Rhythmic Fistman所说,在进行新的pod安装时,原始答案的方法会被覆盖。
将此添加到您的podfile。记得替换目标名称
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)确保podfile中的两个目标(您的容器应用和扩展程序)都包含pod 'AFNetworking'
。
我的案例:
target 'ContainerAppTarget', :exclusive => true do
pod "SDKThatInternallyUsesAFNetworking"
end
target 'ExtensionTarget', :exclusive => true do
pod 'AFNetworking'
end
2)在XCode中,单击层次结构视图上的Pods以显示其构建选项。然后在构建选项中,选择要在下拉列表中查看构建选项的目标。选择Pods-{Extension Target Name}-AFNetworking
(它应该是由pod安装自动创建的。然后选择Build Settings。然后在Apple LLVM 6.0 - 语言下,验证Prefix标题是否有文件名。我的案例中的文件名为Target Support Files/Pods-{Extension Target Name}-AFNetworking/Pods-{Extension Target Name}-AFNetworking-prefix.pch
如果它没有这样的文件名或类似文件,那就添加它。
3)转到那个在那里命名的前缀头文件,或者你在那里添加。它几乎是空的,然后在最后添加以下行:
#define AF_APP_EXTENSIONS
这应该允许您的容器应用指向正常构建的AFNetworking版本,并将扩展应用指向另一个使用该标志设置构建的应用。所以只有一个版本的库,但是以两种不同的方式构建,每个版本都在一个目标上。
答案 1 :(得分:9)
对于这篇文章的新人来说,情况有所改变。
我花了相当多的时间撞在墙上,希望这会使你们中的一些人免于同样的命运。
Cocoapods已更改,现在它只为每个pod生成一个库,因此为了正确设置AF_APP_EXTENSIONS
宏,实际上需要在AFNetworking目标中设置,而不是扩展程序的目标。
例如(包含一些漂亮的日志语句):
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
puts "=== #{target.name}"
if target.name == "AFNetworking"
puts "Setting AFNetworking Macro AF_APP_EXTENSIONS so that it doesn't use UIApplication in extension."
target.build_configurations.each do |config|
puts "Setting AF_APP_EXTENSIONS macro in config: #{config}"
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'AF_APP_EXTENSIONS=1']
end
end
end
end
另请注意pods_project
installer_representation.pods_project.targets.each do |target|
Cocoapods已弃用project
,已更改为pods_project
这有点不利于AFNetworking也不会在容器应用程序中使用任何UIApplication API,但这在我的项目中不是问题。
希望这有帮助。
答案 2 :(得分:0)
将您的pod更新到至少2.6版可以解决此问题。请参阅要求表:https://github.com/AFNetworking/AFNetworking