在Xcode 7中导入自己的Swift Cocoa Touch Framework时遇到错误

时间:2015-08-29 16:30:50

标签: ios xcode frameworks

我在Swift应用程序中导入自己的Swift Cocoa Touch Framework时遇到问题。 该框架包含一个Swift文件,头文件和Info.plist。 我在其中创建框架的项目还包含一个测试应用程序作为另一个目标(单视图应用程序)。

测试应用程序中的测试工作正常。我使用

在Swift Test App中导入了Framework
import MyUtilities

它有效。但是当我将.framework文件复制到另一个Projekt并将其添加到“Embedded Binaries”和“Linked Frameworks and Libraries”时,导入时会出错。

Cannot load underlying module for 'MyUtilities'

在选择我的iPhone后构建框架后,我在debug-iphoneos文件夹中使用.framework文件,并在新项目中选择我的iPhone后构建并运行我的框架。

我还尝试使用来自互联网的脚本,它应该为模拟器和设备创建一个universal.framework文件。它显示了同样的错误。

奇怪的是,我得到了上面的错误,但Xcode说Build Succeeded并且还在我的iPhone上运行应用程序让我使用我的框架的代码......所以实际上是导入工作,但我没有得到completition,看不到我的框架的文档......可能这是Xcode的错误......

所以对我的问题:有人知道,如何解决这个问题,所以我再次看到Xcode中的代码完整并摆脱了这个错误?

这是脚本,我下载导出框架以供普遍使用:

#CONFIG=${CONFIGURATION}
CONFIG=Release

# Step 1. Make sure the output directory exists
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIG}-universal
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"

# Step 2. Build Device and Simulator versions
xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIG} -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build

xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIG} -sdk iphonesimulator -arch x86_64 -arch i386 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build

# Step 3. Copy the framework structure to the universal folder. Subsequently copy the files of the swiftmodule (in Modules directory) of -iphonesimulator to the swiftmodule of universal framework directory.

cp -R "${BUILD_DIR}/${CONFIG}-iphoneos/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/"

cp -R "${BUILD_DIR}/${CONFIG}-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}/${CONFIG}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIG}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}"

以下是我的项目的一些屏幕截图,其中我编写了框架:

导出通用框架的脚本:

测试应用的依赖关系:

当我在测试应用中使用我的框架时没有错误:

从新项目中,我尝试导入框架:

框架正确链接:

尝试导入时出错:

从我的框架运行代码时的输出消息:

1 个答案:

答案 0 :(得分:1)

我认为问题在于您无法访问框架的头文件。我刚刚在这个问题上苦苦挣扎了很长一段时间。在Build Settings中,我认为你需要参考框架。如果要在使用框架的项目中构建框架,则应该可以:

现在为了恩典:在Build Settings下,搜索Framework Search Paths。并加入:

${TARGET_BUILD_DIR}/YourFrameworkName.framework

请查看How Do I Create a Development Framework In iOS Including Swift?了解更多详情。