macos tutorial 如何在iOS和OS X之間創建單個共享框架




swift coredata save (2)

我正在嘗試創建一個框架來保存在iOS和OS X上運行的應用程序的公共實體類。目前我只是在每個目標中包含文件,但這需要更改數據模型,以便從當前目標獲取類(因為在Swift中你必須指定模型文件中具有類的模塊)。 這當然意味著我有時會忘記,事情不起作用。

顯而易見的解決方案是創建一個包含實體類的共享框架,以便數據模型始終指向同一個位置。

問題是似乎沒有任何方法可以創建構建在兩個平台上的框架。

有沒有人找到一種方法來創建一個適用於這兩個平台的單一框架或庫?


事實證明,答案是超級簡單但不是很明顯,至少在我發布這個問題並處理其他事情之後才會這樣。

所有需要做的就是為每個平台製定一個框架目標,然後將產品名稱設置為相同。 由於這也是Swift中的模塊名稱,因此您可以將Core Data模型中的類字段設置為一個值,並使其在兩個平台上都能正常工作。

我正在使用的設置是在兩個框架中包含模型文件,但是將模型本身直接包含在每個應用程序目標中。

您還應該能夠將兩個應用程序設置為具有相同的產品名稱並使一切正常,但我沒有對其進行測試,並且框架允許您根據需要使用MyAppMyAppMobile


如果您希望創建單個動態框架二進製文件,可以按照以下步驟操作(如http://colemancda.github.io/2015/02/11/universal-ios-osx-framework ):

1.更改項目的有效體系結構和支持的平台。

這應該改變您的框架和測試單元的有效架構和支持的平台。 如果沒有,則手動更改它們以繼承項目的構建設置。

  • 基礎SDK:我推薦OS X,但它也適用於iOS。 請注意,使用iOS作為基本SDK時,“我的Mac”目標分為3個不同的目標。

  • 支持的平台: macosx iphoneos iphonesimulator

  • 有效架構: arm64 armv7 armv7s i386 x86_64

2.更改單元測試包的搜索路徑

  • Runpath搜索路徑: $(inherited) @executable_path/Frameworks @loader_path/Frameworks @executable_path/../Frameworks @loader_path/../Frameworks

  • 框架搜索路徑: $(SDKROOT) $(inherited)

它比具有兩個單獨的目標更好的解決方案。







ios8