Obj-C CocoaPods + Swift框架

时间:2014-07-22 00:17:50

标签: swift afnetworking cocoapods xcode6

我正在最新的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的任何地方得到编译错误。

有没有人想出正确的组合?

2 个答案:

答案 0 :(得分:3)

好吧,基于我所看到的herehere,我认为现在还无法从pod文件中编译任何内容。我试图用SCLAlertView-Swift库做类似的错误。我想你只需等待代码由cocoapods团队开发。

答案 1 :(得分:1)

所以我有一些工作。我的目标是使用cocoapod库在多个目标之间使用共享代码框架,以便在sharedCode中提供支持。我遇到的问题是非模块头问题和重复符号问题。

MainTarget -swift文件

SharedCode -swift文件 -objc文件 -cocoapods lib

添加&#39;运行脚本阶段&#39;在框架的顶部#39;目标

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标头,并且复制脚本不聪明,因此您可能会遇到路径问题。到目前为止对我这么好。这肯定是一种解决方法,因为非模块头事件阻塞了编译器。