我的项目有9个目标:
- Prod
- Prod_app_extension_1
- Prod_app_extension_2
- Beta
- Beta_app_extension_1
- Beta_app_extension_2
- Dev
- Dev_app_extension_2
- Dev_app_extension_2我使用的是0.38.2coapod版本和2.5.4 AFNetworking。
我试图在cocoapod中使用AFNetworking,但是在编译过程中得到了AF_APP_EXTENSIONS错误。在网上搜索解决方案后,我理解了这个问题,并发现定义‘预处理宏’AF_APP_EXTENSIONS可以解决这个问题。
但这是一个难题:默认情况下,AF_APP_EXTENSIONS被正确地添加到我的6 app_extensions中。另一方面,当我在Pods目标中导航时,每个Pods都是分开的:
- NSDate+TimeAgo
- AFNetworking
- iRate
- AppUtils
- Prod
- Prod_app_extension_1
- Prod_app_extension_2
- Beta
- Beta_app_extension_1
- Beta_app_extension_2
- Dev
- Dev_app_extension_2
- Dev_app_extension_2在我做的另一个项目中,所有的吊舱都是这样生成的:
- Prod
- Pods-Prod-NSDate+TimeAgo
- Pods-Prod-AFNetworking
- Pods-Prod-iRate
- Pods-Prod-AppUtils
- Prod_app_extension_1
- Pods-Prod_app_extension_1-NSDate+TimeAgo
- Pods-Prod_app_extension_1-AFNetworking
- Pods-Prod_app_extension_1-iRate
- Prod_app_extension_2
- Pods-Prod_app_extension_2-NSDate+TimeAgo
- Pods-Prod_app_extension_2-AFNetworking
- Pods-Prod_app_extension_2-iRate
- Beta
- Pods-Beta-NSDate+TimeAgo
- Pods-Beta-AFNetworking
- Pods-Beta-iRate
- Pods-Beta-AppUtils
- Beta_app_extension_1
- Pods-Beta_app_extension_1-NSDate+TimeAgo
- Pods-Beta_app_extension_1-AFNetworking
- Pods-Beta_app_extension_1-iRate
- Beta_app_extension_2
- Pods-Beta_app_extension_2-NSDate+TimeAgo
- Pods-Beta_app_extension_2-AFNetworking
- Pods-Beta_app_extension_2-iRate
- Dev
- Pods-Dev-NSDate+TimeAgo
- Pods-Dev-AFNetworking
- Pods-Dev-iRate
- Pods-Dev-AppUtils
- Dev_app_extension_1
- Pods-Dev_app_extension_1-NSDate+TimeAgo
- Pods-Dev_app_extension_1-AFNetworking
- Pods-Dev_app_extension_1-iRate
- Dev_app_extension_2
- Pods-Dev_app_extension_2-NSDate+TimeAgo
- Pods-Dev_app_extension_2-AFNetworking
- Pods-Dev_app_extension_2-iRate我认为这就是为什么我的“预处理器宏”AF_APP_EXTENSIONS没有被定义为“AFNetworking”Pods目标的原因。
这是我的个人档案:
platform :ios, '7.0'
xcodeproj 'myProj.xcodeproj'
def generic_pods
pod 'NSDate+TimeAgo'
pod 'AFNetworking', '~> 2.0'
end
def app_pods
pod 'iRate'
pod 'AppUtils',
end
target "Prod" do
generic_pods
app_pods
end
target "Prod_app_extension_1" do
generic_pods
end
target "Prod_app_extension_2" do
generic_pods
end
target "Beta" do
generic_pods
app_pods
end
target "Beta_app_extension_1" do
generic_pods
end
target "Beta_app_extension_2" do
generic_pods
end
target "Dev" do
generic_pods
app_pods
end
target "Dev_app_extension_1" do
generic_pods
end
target "Dev_app_extension_2" do
generic_pods
end我不知道问题出在哪里,这让我发疯了。
发布于 2015-08-04 15:30:03
自0.38.0Coapod版以来,pod目标为非重复.这意味着,与其为每个项目目标(‘Pods-MyApp’、‘Pods-MyExtension’)扩展一个AFNetworking,只生成一个AFNetworking吊舱目标('Pods-AFNetworking')。
当添加到应用程序扩展时,AFNetworking需要在GCC_PREPROCESSOR_DEFINITIONS中使用“AF_APP_EXTENSIONS”标志来编译。
在0.372coopod版本之前,可以通过添加一个安装后例程从项目Podfile中添加标志:
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
if ar.include? target.name
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'AF_APP_EXTENSIONS=1']
end
end
end
end不幸的是,使用反重复的cocoapod特性,不再可能将AF_APP_EXTENSIONS标志单独添加到应用程序扩展结荚目标中。
我发现的唯一方法是创建一个文件:~/.cocoapods/config.yaml (在默认情况下,当您使用cocoapod时,您可以使用终端创建它):
deduplicate_targets: false 这样,豆荚不会被反复制,您可以在安装后将AF_APP_EXTENSIONS添加到应用程序扩展GCC_PREPROCESSOR_DEFINITIONS中。
我只希望他们能找到一个很好的方法来防止这个问题。
参考资料:
https://github.com/CocoaPods/CocoaPods/issues/3794 =>讨论了这个问题
https://stackoverflow.com/questions/31791365
复制相似问题