Swift Framework



我制作了一个包含Objective-C类的swift框架。在我的测试应用程序(一个单独的项目)中,如果我将构建目标设置为"Generic iOS Device",我就可以访问swift类和项目编译,而不会出现问题。如果我设置了destination to any simulator,那么框架中的所有.Swift类在代码中都不可见也不可访问,并且我得到了"Use of undeclared type",而Obj-C类是可访问的。

使用XCode 7.2

提前谢谢。

编辑:可能是因为这个STO答案吗?

我使用了Alamofire(swift框架)来尝试您的案例,它对swift有效,但对objective-c无效。首先,在构建设置中,搜索启用模块,我们不能改变模块使用swift框架而不是Objective-c和c。另一方面,我找不到任何可以在Objective-c中使用的方法,比如函数、变量。它可以知道AlamofireVersionNumber和AlamofireVersion String。可能是其他(swift框架)在objective-c中支持limited(该类必须是NSObject的固有类)。https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-ID136

该网站表示,它可以使用在Swift中定义的Generics、Tuples、Enumerations而不使用Int原始值类型、在Swift定义的Structures、在Swi夫特中定义的Top level函数、在Swift中定义的Global variables、在Swift中规定的Typealias、Swift风格的variadics、嵌套类型、带objective-c的Curried函数,尽管该类应该是NSObject的固有类。您不能在Objective-C中对Swift类进行子类化。

由于这个要点解决了我的问题

事实证明,我需要在构建框架后运行一个脚本,以便iPhone和iPhone模拟器文件包含在框架中。然而提交到应用商店时,必须删除iPhone模拟器文件。

我从上面的链接使用的脚本:

#!/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 (if it exists) to the copied framework directory
SIMULATOR_SWIFT_MODULES_DIR="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule/."
if [ -d "${SIMULATOR_SWIFT_MODULES_DIR}" ]; then
cp -R "${SIMULATOR_SWIFT_MODULES_DIR}" "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule"
fi
# 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}"

最新更新