[英]OSX and iOS shared swift module
如果您希望創建單個動態框架二進制文件,可以按照以下步驟操作(如http://colemancda.github.io/programming/2015/02/11/universal-ios-osx-framework/中所述 ):
這應該改變您的框架和測試單元的有效架構和支持的平台。 如果沒有,則手動更改它們以繼承項目的構建設置。
基礎SDK:我推薦OS X,但它也適用於iOS。 請注意,使用iOS作為基本SDK時,“我的Mac”目標將分為3個不同的目標。
支持的平台: macosx iphoneos iphonesimulator
有效架構: arm64 armv7 armv7s i386 x86_64
Runpath搜索路徑: $(inherited) @executable_path/Frameworks @loader_path/Frameworks @executable_path/../Frameworks @loader_path/../Frameworks
框架搜索路徑: $(SDKROOT) $(inherited)
這將允許您將其導入為import MyFramework
而不是
#if os(iOS)
import MyFramework
#else
import MyFrameworkOSX
#endif
好吧,通用框架真的很痛苦。 不僅適用於iOS和OSX,還適用於iOS內部,因為您需要2個框架:一個用於模擬器,一個用於設備。 處理iOS的方式是使用“聚合”目標。 我相信可以利用相同的途徑來集成OS X目標。
構建框架時,會得到一個.framework(lego block)文件夾。 在那里,有兩件非常重要的事情要做:
在這兩個地方,您必須具有實現以支持您希望支持的所有體系結構。 如果您在哪里單獨構建框架並希望將它們融合在一起,則必須執行以下操作:
實際上,它是一團糟,所以這就是我的工作!
這個腳本非常簡單,有點涉及,我確信可以調整它來添加OSX支持。 我希望這能指出你正確的方向:)
腳本內容:
#!/bin/sh
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal
# make sure the output directory exists
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"
# Step 1. Build Device and Simulator versions
xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
# Step 2. Copy the framework structure (from iphoneos build) to the universal folder
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/"
# Step 3. Copy Swift modules (from iphonesimulator build) to the copied framework directory
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule/." "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule"
# Step 4. Create universal binary file using lipo and place the combined executable in the copied framework directory
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}"
# Step 5. Convenience step to copy the framework to the project's directory
cp -R "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework" "${PROJECT_DIR}"
# Step 6. Convenience step to open the project's directory in Finder
open "${PROJECT_DIR}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.