Obj-C CocoaPods + Swift Framework

28

我正在最新的 Xcode 6 DP4 中创建一个 Swift 框架。我需要在我的框架内部使用 AFNetworking,但无法找到编译它的方法。

我知道如何使用桥接头文件,但这些在 Swift 框架中不受支持。


我的框架 Core.framework 看起来像这样:

> Core.h
    #import <UIKit/UIKit.h>
    #import <AFNetworking/AFNetworking.h>

    //! Project version number for Core.
    FOUNDATION_EXPORT double CoreVersionNumber;

    //! Project version string for Core.
    FOUNDATION_EXPORT const unsigned char CoreVersionString[]; 

> SomeFileThatNeedsAFNetworking.swift

我正在使用podfile导入AFNetworking库。然而,当我编译时,出现以下错误:

<unknown>:0: error: ~/Core/Source/Core.h:2: include of non-modular header inside framework module 'Core'

因为AFNetworking的导入。但是如果我不包含它,那么编译错误将无处不在,引用AFNetworking。

有人找出了正确的组合吗?


你尝试过将构建设置CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES或“允许框架模块中的非模块包含”更改为Yes吗?只需在Frameworks Build Settings中搜索“module”即可找到它。 - Damien Pontifex
1
我在使用FMDB时遇到了同样的问题。允许非模块化头文件也不起作用。 - Thomas Denney
这里另一个 pod 也有同样的问题。 - paranoidroid
1
与另一个 pod 相同。因此似乎无法在 Swift 自定义框架中使用 Objective-C Cocoapod 对吗? - miya
在这里遇到了同样的问题,尝试在 Swift 框架中集成 SSZipArchive。 - Bruce
2个回答

3

根据我所看到的这里这里,我认为目前还不可能从pod文件中编译任何内容。我尝试使用SCLAlertView-Swift库进行了类似的操作,但出现了相似的错误。我想您只能等待cocoapods团队开发代码。


1
我有一些东西可以工作。我的目标是在多个目标中使用共享代码框架,并使用cocoapod库来支持sharedCode。我遇到的问题是非模块化头文件问题和重复符号问题。
主目标 - swift文件
共享代码 - swift文件 - obj-c文件 - cocoapods库
将“Run Script Phase”添加到“framework”目标的顶部
set -e

RESOURCES_TO_COPY=${PODS_ROOT}/headers-to-copy-${TARGETNAME}.txt
> "$RESOURCES_TO_COPY"

ls -d -1 ${PODS_ROOT}/Headers/Public/**/*.h >> "$RESOURCES_TO_COPY"

rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Headers"

rm -f "$RESOURCES_TO_COPY"

在框架的主标题中放置:

#import <{SHARED_FRAMEWORK_NAME}/PixateFreestyle.h>
#import <{SHARED_FRAMEWORK_NAME}/Lockbox.h>
#import <{SHARED_FRAMEWORK_NAME}/etc.h>

Voila,现在这些类已经可以在您的框架代码和框架依赖项中使用。这确实公开了所有cocoapods头文件,并且复制脚本不够智能,因此您可能会遇到路径问题。但对我来说一切都很顺利。由于非模块化头文件会阻塞编译器,因此这肯定是一个解决方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接