ios - 在 Xcode 7 中导入自己的 Swift Cocoa Touch Framework 时出错

标签 ios xcode frameworks

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

测试应用程序中的测试运行良好。我使用

在我的 Swift 测试应用程序中导入了框架
import MyUtilities

它奏效了。但是,当我将 .framework 文件复制到另一个 Projekt 并将其添加到“嵌入式二进制文件”和“链接框架和库”时,我在导入时遇到错误。

Cannot load underlying module for 'MyUtilities'

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

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

奇怪的是,我得到了上面的错误,但是 Xcode 说 Build Succeeded 并且还在我的 iPhone 上运行了应用程序并且让我使用我的框架的代码......所以实际上导入有效,但我没有完成,也看不到我的框架的文档...可能是 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}"

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

导出通用框架的脚本:

测试应用的依赖:

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

在我尝试导入框架的新项目中:

框架已正确链接:

尝试导入时的错误:

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

最佳答案

我认为问题在于您没有启用对框架头文件的访问。我只是在这个问题上挣扎了很长一段时间。在Build Settings中,我认为你需要引用框架。如果您正在使用该框架的项目中构建框架,那么这应该可行:

现在致命一击:在“build设置”下,搜索“框架搜索路径”。并添加:

${TARGET_BUILD_DIR}/YourFrameworkName.framework

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

关于ios - 在 Xcode 7 中导入自己的 Swift Cocoa Touch Framework 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32288266/

相关文章:

ios - 导航栏的自定义后退按钮

ios - 删除 "Embedded binary"后,Xcode 不会添加 "DerivedData"

javascript - Asp.net 开发和客户端操作集成

ios - CocoaPods:如何将每个子规范构建为自己的框架目标

objective-c - 在屏幕之间保存数据

iOS 将 UIImageView 附加到电子邮件

ios - 如何从 iOS 中的 url 请求中提取数据

ios - Xcode:控制拖动仅适用于第一个 Storyboard View Controller

ios - 运行时 Storyboard中设置的 UIButton 标题丢失

swift - 如何在 Swift 4 中使用 #selector() 处理 @objc 推理弃用?