无法在 Today Extension 上使用 AFNetworking

Posted

技术标签:

【中文标题】无法在 Today Extension 上使用 AFNetworking【英文标题】:Can't use AFNetworking on Today Extension 【发布时间】:2016-01-08 10:08:51 【问题描述】:

我正在努力让 AFNetworking 用于我的 Today Extension。

我的应用程序是一个带有 cocoapods (0.39.0) 的 Objective-c 项目,其中我开始将一些东西迁移到 Swift。我成功地让 Swift 与 Objective-c 一起工作,并且我在 Swift 和 Objective-c 代码中都使用了 AFNetworking。

我添加了一个 Today Extension(用 Swift 制作),当我尝试使用使用 AFNetworking 的 Swift 类时,它抱怨找不到“AFHTTPRequestOperationManager”和其他与 AFNetworking 相关的类。

我对 Podfile 尝试了不同的解决方案,目前配置如下:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

def testing_pods
    pod 'Google/Analytics', '~> 1.0.0'
    pod 'AFNetworking', '~> 2.6'
    pod 'XCDYouTubeKit', '~> 2.4.0'
    pod 'FBSDKCoreKit'
    pod 'FBSDKShareKit'
    pod 'FBSDKLoginKit'
    pod 'Parse'
    pod 'ParseUI'
    pod 'ParseFacebookUtilsV4'
    pod 'ParseTwitterUtils'
end

target '***' do

    testing_pods

end

target '***' do

    testing_pods

end

target 'todayExtension' do
    pod 'AFNetworking', '~> 2.6'
end

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']
            end
        end
        target.build_configurations.each do |config|
            puts "Setting only_active_arch in config: #config"
            config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
        end
    end
end

我已经删除了所有的 pod 和工作区并重新创建了它们,但问题还是一样。

有什么建议吗?

谢谢

【问题讨论】:

首先清理构建并尝试制作新的 bridging-header.h 文件 @imjaydeep 谢谢,但这与它有什么关系?我忘了说这个扩展是一个 Swift 扩展,不是 objetive-c,我会把它放在主帖中。 这个链接帮你创建头文件***.com/questions/34627082/… 如果您想通过 AFnetworking 获得 json 响应,此链接的最后一个答案将很有帮助***.com/questions/34669707/… 【参考方案1】:

默认情况下cocoapods 正在为 pod 创建静态库,但 swift 不支持静态库。因此,要快速使用cocoapods,您应该指定使用动态框架。为此包括以下行到您的Podfile

use_frameworks!

欲了解更多信息,请通过

https://blog.cocoapods.org/CocoaPods-0.36/

http://www.raywenderlich.com/97014/use-cocoapods-with-swift

更新 还要注意AFHTTPRequestOperationManager 和其他NSURLConnection 相关类在AFNetworking 3.x 中不可用。

【讨论】:

以上是关于无法在 Today Extension 上使用 AFNetworking的主要内容,如果未能解决你的问题,请参考以下文章

iOS扩展Extension之Today

iOS 8 Today Extension:是否可以添加可编辑的文本字段?

Today Widget Extension 中经常出现“无法加载”

Today Widget Extension 动画在 iOS 10 上不起作用

如何在 Today Extension 中调整 UITableView 的大小

iOS - 在 Today Extension 上显示图像时收到内存警告