簡體   English   中英

Swift項目中導入框架,Xcode

[英]Import Framework in Swift Project, Xcode

我正在嘗試將myFramework導入到項目中。 我在 Build Phases->Link Binary With Libraries 中添加了myFramework

Objective-c作品:

#import <UIKit/UIKit.h>
#import <myFramework/myFramework.h>

但是在 Swift 中,我得到一個No such module myFramework錯誤:

import UIKit
import myFramework

根據Swift 文檔

導入外部框架

您可以導入具有純 Objective-C 代碼庫、純 Swift 代碼庫或混合語言代碼庫的外部框架。 無論框架是用一種語言編寫的還是包含兩種語言的文件,導入外部框架的過程都是相同的。 當您導入外部框架時,請確保您正在導入的框架的定義模塊構建設置設置為是。

您可以使用以下語法將框架導入不同目標中的任何 Swift 文件:

SWIFT

 import FrameworkName

您可以使用以下語法將框架導入不同目標中的任何 Objective-C.m 文件:

OBJECTIVE-C

 @import FrameworkName;

我使用 Xcode 5 創建了myFramework 5 沒有“定義模塊”構建設置。

問題出在哪兒?

如果我正確地為您提供了框架的單獨構建目標(您已經使用XCode 5構建它)並將框架包含在項目的構建目標中。

您所指的文檔部分是關於不同目標中的框架。 由於您的框架位於項目的目標中,因此這部分文檔不適用於此。

在您的情況下,您無法在Swift文件中導入框架。 這就是為什么你收到錯誤消息“沒有這樣的模塊myFramework” myFramework不是模塊 - 它是項目模塊的一部分(默認情況下由您的產品名稱決定)。 因此,框架中的類應該是可訪問的。

但是,您的框架是用Objective-C編寫的。 所以,你必須做的是所描述的進口在橋接報頭中的斯威夫特面對類在這里

請注意,這與Swift導入模塊無關。 bridging-header文件中的import指令只是通知編譯器將Objective-C頭文件“轉換”為Swift語法,並使公共頭文件對Swift可見。

那你現在該怎么辦?

  • 首先在bridging-header中導入您感興趣的頭文件。 您只需要導入將在Swift中與之交互的標頭。

  • 嘗試在此階段編譯您的項目。 如果XCode找不到框架的頭文件,那么你的問題可能與Swift或XCode 6無關,而是一般包含框架的問題。

  • 之后嘗試實例化你在bridging-header中導入的類,可能在你的AppDelegate.swift中。 XCode自動完成應該為您提供類型名稱。

希望這可以幫助。

在Swift上:

創建框架: -

  1. 啟動Xcode - >創建一個新的Xcode項目 - > iOS - > Framework&Library - > Cocoa Touch Framework - >命名框架(例如sampleCocoaFramework) - > Create。

  2. 設置目標 - >常規 - >部署信息 - >部署目標。

  3. 添加公共類:文件 - >新文件 - > iOS - > Swift文件 - >命名它(例如openCocoaClass) - >創建。

  4. 現在添加一些代碼到openCocoaClass.swift。

     import Foundation public class openCocoaClass { public init() { } public var samplePublicVariable = "samplePublicVariable @ openCocoaClass" public func samplePublicFunction() { print("samplePublicFunction @ openCocoaClass") } 

    }

  5. 清潔項目:產品 - >清潔

  6. 配置方案設置:產品 - >方案 - >編輯方案 - >運行 - >構建配置 - >發布。

  7. 構建框架:Product - > Build。

  8. 導出框架:Products - >選擇框架 - > Identity and type - > Full Path - > Released Framework。

向項目添加框架: -

  1. 啟動一個Xcode項目並命名它(例如CocoaFrameworkTest)。

  2. 將sampleCocoaFramework.framework拖放到CocoaFrameworkTest的項目文件夾中。

  3. 目標 - >常規 - >嵌入二進制 - >添加其他 - >選擇框架 - >根據需要復制項目 - >完成。

訪問ViewController上的框架: -

import UIKit
import sampleCocoaFramework


class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let frameworkObject =  openCocoaClass.init()
        frameworkObject.samplePublicFunction()
        print(frameworkObject.samplePublicVariable)


    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

根據Swift文檔

將Objective-C代碼從同一目標導入Swift

  1. 在Objective-C橋接頭文件中,導入要向Swift公開的每個Objective-C頭。 例如:

    #import "XYZCustomCell.h"

    #import "XYZCustomView.h"

    #import "XYZCustomViewController.h"

  2. 在Build Settings下,確保Swift Compiler - Code Generation下的Objective-C Bridging Header構建設置有一個標題路徑。 路徑必須直接到文件本身,而不是它所在的目錄。路徑應該與項目相關,類似於在Build Settings中指定Info.plist路徑的方式。 在大多數情況下,您不需要修改此設置。

Swift可以看到此橋接頭文件中列出的任何公共Objective-C標頭。 Objective-C功能將自動在該目標內的任何Swift文件中提供,無需任何import語句。 使用與系統類相同的Swift語法使用自定義Objective-C代碼。

 let myCell = XYZCustomCell() myCell.subtitle = "A custom cell" 

此外,請確保“打包”下的“定義模塊”構建設置設置為“是”。

你需要在你的目標c項目中使用與你app同名的公共頭文件,在你的案例FrameworkName.h中添加你想要公開的所有類(這些類應該作為項目屬性中的公共頭添加)一旦你這樣做,您添加框架並添加對您的公共標頭導入FrameworkName的引用

您可以使用以下語法將外部objC框架導入swift項目:

#import "objCExternalFramework-name/headerfilename.h"

好的,現在是Xcode 7.2。 我觀察到的是,快速導入區分大小寫。 示例 - import uikit不起作用。 你必須輸入它作為import UIKit

只是我的兩分錢。

最新的XCode提供了將框架嵌入其他項目的選項。 這個鏈接( https://stackoverflow.com/a/37328591/1084174 )對我來說效果很好。

Defines Module(DEFINES_MODULE) [About]生成.modulemap [About ]以使用來自 Objective-C ( @import ) 或 Swift ( import ) 的Modular Framework

[混合 Objective-C 和 Swift]使用不同的方法

same target - Bridging-Header.h
different targets - .modulemap

一步一步的例子在這里[Swift consumer -> Objective-C dynamic framework]

ommand+B就可以了!

原因:通過Cocoapods添加框架將創建另一個包含所需框架的pod項目。 對於識別框架的主項目,必須橋接兩個項目的靜態庫。 要實現這一目標,需要構建工作空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM