[英]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無關,而是一般包含框架的問題。
希望這可以幫助。
在Swift上:
創建框架: -
啟動Xcode - >創建一個新的Xcode項目 - > iOS - > Framework&Library - > Cocoa Touch Framework - >命名框架(例如sampleCocoaFramework) - > Create。
設置目標 - >常規 - >部署信息 - >部署目標。
添加公共類:文件 - >新文件 - > iOS - > Swift文件 - >命名它(例如openCocoaClass) - >創建。
現在添加一些代碼到openCocoaClass.swift。
import Foundation public class openCocoaClass { public init() { } public var samplePublicVariable = "samplePublicVariable @ openCocoaClass" public func samplePublicFunction() { print("samplePublicFunction @ openCocoaClass") }
}
清潔項目:產品 - >清潔
配置方案設置:產品 - >方案 - >編輯方案 - >運行 - >構建配置 - >發布。
構建框架:Product - > Build。
向項目添加框架: -
啟動一個Xcode項目並命名它(例如CocoaFrameworkTest)。
將sampleCocoaFramework.framework拖放到CocoaFrameworkTest的項目文件夾中。
目標 - >常規 - >嵌入二進制 - >添加其他 - >選擇框架 - >根據需要復制項目 - >完成。
訪問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
在Objective-C橋接頭文件中,導入要向Swift公開的每個Objective-C頭。 例如:
#import "XYZCustomCell.h"
#import "XYZCustomView.h"
#import "XYZCustomViewController.h"
在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
只ommand+B
就可以了!
原因:通過Cocoapods
添加框架將創建另一個包含所需框架的pod項目。 對於識別框架的主項目,必須橋接兩個項目的靜態庫。 要實現這一目標,需要構建工作空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.