将Objective C框架连接到Swift iOS 8应用程序(Parse框架)

时间:2014-06-17 19:50:18

标签: ios objective-c xcode parse-platform swift

我正在尝试使用带有Swift编程语言的Objective C框架进行iOS 8开发。这是导入的特定情况,但一般问题是:

如何将Objective C框架导入swift并获得导入识别?

我正在尝试使用iOS 8和Xcode 6测试版将Parse框架集成到一个快速的应用程序中。

以下是Objective C中Parse框架集成的技术:

https://www.parse.com/apps/quickstart#social/mobile/ios/native/existing

我已经将Parse框架下载为压缩存档,将其解压缩并将其导入Xcode 6而没有任何问题。在我的应用程序中,它显示为名为Parse.framework的格式正确的框架。

我当前的思考过程是修改项目根目录中的AppDelegate.swift文件。这是当前没有修改的文件(在快速项目创建时由Xcode自动生成):

https://gist.github.com/fconcklin/e8ef7d8b056105a04161

我尝试通过在行import Parse下方添加行import UIKit来导入解析。但是,Xcode会发出警告,指出没有找到这样的模块,并且构建失败。

我还尝试使用${PROJ_NAME_HERE}-Bridging-Header.h创建包含Parse的Objective C导入的文件import <Parse/Parse.h>。这条线不会引发错误,但似乎最终没有任何区别。

提前致谢。 如果您需要更多信息,请告诉我。

6 个答案:

答案 0 :(得分:70)

经过进一步的研究,我找到了解决方案并意识到我只是感到困惑。

正确的方法如下:

  • 通过将框架拖放到Xcode 6 Swift项目中来导入Objective C框架。

  • 在项目中创建一个新的Objective C文件(File-&gt; New-&gt; File [Objective C for iOS])。

  • 接受提示(同意)以在Objective C和Swift之间创建桥接头文件。

  • 删除新创建的Objective C文件,但保留桥接头文件${YOURPROJ}-Bridging-Header.h

  • 在Bridging头文件中,使用标准的 Objective C 导入语法(例如#import <Parse/Parse.h>)导入框架。

  • 这使您无需在import Parse文件中执行AppDelegate.swift语句。您现在可以编写使用任何框架的代码,只要使用桥接头导入即可。它可以在整个项目的Swift文件中使用。

现在,如果您想在项目中测试Parse集成,可以键入Parse.并使用代码完成来浏览框架,并查看代码完成是否表示导入成功。

但是,在使用桥接头文件时需要解决另一个需要注意的问题。还需要在桥接头文件中指定框架的所有依赖项。在将Parse框架集成到Swift应用程序的情况下,您的Bridging Header文件将如下所示:

 #import <Foundation/Foundation.h>

 // Parse Dependencies
 #import <AudioToolbox/AudioToolbox.h>
 #import <CFNetwork/CFNetwork.h>
 #import <CoreGraphics/CoreGraphics.h>
 #import <CoreLocation/CoreLocation.h>
 #import <MobileCoreServices/MobileCoreServices.h>
 #import <QuartzCore/QuartzCore.h>
 #import <Security/Security.h>
 #import <StoreKit/StoreKit.h>
 #import <SystemConfiguration/SystemConfiguration.h>

 // Import parse framework
 #import <Parse/Parse.h>

希望这会有所帮助。

答案 1 :(得分:49)

A&#34;傻瓜证明&#34;添加桥接头的方法如下:

如果您有一个 Swift 项目,请在项目中添加一个新的 Objective-C文件,如果您想使用桥接标头配置项目,Xcode会提示。按是。

如果您有 Objective-C 项目,请向其添加新的 Swift文件,您将收到相同的提示。按是。

获得桥接标题后,您可以删除刚刚添加的文件。

答案 2 :(得分:9)

将Parse框架添加到Swift项目: 将此库添加到Swift项目中。

enter image description here

将这个框架从ParseSDK粘贴到您的项目中:

enter image description here

添加包含此类内容的ProjectName-Bridging-Header.h(https://developer.apple.com/library/ios/documentation/swift/conceptual/buildingcocoaapps/MixandMatch.html)(https://stackoverflow.com/a/24272431/1847511)文件。

enter image description here

添加绑定桥接标题的路径:

enter image description here

添加TestCode:

enter image description here

运行该应用。

答案 3 :(得分:2)

我的问题的答案是不同的。我的框架搜索路径在我的项目的构建设置设置为递归,当它们应该非递归时。

在我的情况下,我的目标将其框架搜索路径设置为 $(继承),这意味着从我的项目继承该设置。

我项目的框架搜索路径只有一条路径, $ PROJECT_DIR /../外部/ ** (两个星号意味着&#34;递归搜索此文件夹&#34我的 Parse.framework 文件位于External文件夹的基础级别。

为我修改从递归非递归的路径。很奇怪......

答案 4 :(得分:1)

新的Parse框架版本需要一些更新。

例如你应该在Library Binary With Libraries中插入libsqlite3.0.dylib并用#import和#import

更新头文件

答案 5 :(得分:0)

在Swift中使用Objective-C类

如果要在App Target中导入代码(在一个项目中混合Swift和Objective-C),则应使用bridging header文件将Objective-C代码公开给Swift代码。 [在项目中混合Swift和Objective-C代码]

在这篇文章中,我将描述如何将Objective-C框架导入Swift代码

Swift使用者-> Objective-C动态框架

Xcode版本10.2.1

创建Objective-C框架

创建框架项目或创建框架目标

File -> New -> Project... -> Cocoa Touch Framework
//or
Project editor -> Add a Target -> Cocoa Touch Framework

将生成两个文件:

  1. Info.plist-Build Settings -> Info.plist File
  2. <product_name>.h-Build Phases -> Headers。这是伞头文件[About]

将所有.h文件添加到将向消费者开放的伞状文件

#import "header_1.h"
#import "header_2.h"

添加实施文件.m

Select `.m` file -> Select File Inspectors Tab -> Target Membership -> Select the target
//or
Project editor -> select a target -> Build Phases -> Compile Sources -> add files

添加.h<product_name>.hheader_1.h[can not do it] [public target membership]

中列出的头文件header_2.h
Select `.h` file -> Select File Inspectors Tab -> Target Membership -> Select the target and make it **public**
//or
Project editor -> select a target -> Build Phases -> Headers -> add files to the **public** zone

构建框架-⌘命令 + B Product -> Build

注意:确保为框架构建与客户端代码相同的流程体系结构。

查找生成的输出[Build location]

Products group -> <product_name>.framework -> Show in Finder

该框架包括

  • Info.plist
  • Modules文件夹,其中:
  • Headers文件夹,其中:
      Headers节中的
    • 个文件。有公共接口/定义

具有Objective-C框架的快速消费者

Drag and drop将二进制文件放入Xcode项目[About]

Embed binaries [Library not loaded] [Link vs Embed]

Project editor -> select a target -> General -> Embedded Binaries -> path to `<product_name>.framework` file

我将自动将框架添加到:

  1. Project editor -> select a target -> General -> Linked Frameworks and Libraries
  2. Project editor -> select a target -> Build Phases -> Embed Frameworks
  3. Project editor -> select a target -> Build Phases -> Link Binary With Libraries

添加Framework Search paths [Module not found] [Recursive path]

Project editor -> select a target -> Build Settings -> Search Paths -> Framework Search paths -> add path to the parent of `<product_name>.framework` file

将模块导入到Swift客户端代码[module_name]

import module_name

More examples here