我在桌面上创建了名为MyXCFramework.xcframework的 xcframework ,然后像Boris在 WWDC2020 中关于将二进制框架分发为 Swift 包时所说的那样将其压缩,这两个文件都在桌面上,我想获取校验和,然后我在终端中使用了这行代码:
cd ~/Desktop/
swift package compute-checksum ~/Desktop/MyXCFramework.xcframework.zip
Run Code Online (Sandbox Code Playgroud)
但终端出现此错误:
error: root manifest not found
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个错误?
我不知道为什么终端试图在这一点上体现?!因为还没有清单!我需要校验和来构建我的清单,以将二进制框架分发为 Swift 包。那么我该如何解决这个问题呢?
我正在尝试从 xcframework 创建一个 swift 包,问题是框架是否需要从 .bundle 文件加载某些资源,该包是否应该是框架的一部分,即。xc框架?我在单个 zip 文件中有以下文件:
MyPackage.xcframework
MyPackage.bundle
Run Code Online (Sandbox Code Playgroud)
并将其上传到主机服务器,在我的Package.swift:
MyPackage.xcframework
MyPackage.bundle
Run Code Online (Sandbox Code Playgroud)
我可以将 Swift 包添加到我的项目中并使用它,但在运行时它找不到该.bundle文件。
我发现有人遇到同样的问题: https://devforum.zoom.us/t/bundling-the-zoom-sdk-within-a-swift-package/48400
即使将 .bundle 文件作为 .bundle 文件的依赖项Package.swift,它也不起作用,除非将捆绑文件手动复制到项目中。
所以我的问题是,这个捆绑包应该是 .xcframework 文件的一部分,而不是与 .xcframework 文件一起作为独立的 .bundle 文件吗?或者还有什么我可以做的吗?
谢谢!
我制作了一个简单的空白项目并通过swift-package-manager添加了Bugsee。
它位于https://github.com/bugsee/spm。
我可以成功为 iOS 设备构建项目。
但对于模拟器来说却失败了。而且错误并不是很详细(路径被缩短):
Cannot open file handle for file at path: Path(str: ".../Bugsee.xcframework/ios-arm64_i386_x86_64-simulator/Bugsee.framework")
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
我还发现,在将 Bugsee.xcframework 添加到Frameworks、Libraries 和 Embedded Content中后,模拟器的构建就可以了。

有谁知道出了什么问题吗?
我正在尝试将我的框架编译成 xcframework,我使用以下脚本执行此操作:
xcodebuild archive \
-scheme CleanUI \
-configuration Release \
-destination 'generic/platform=iOS' \
-archivePath './build/CleanUI.framework-iphoneos.xcarchive' \
SKIP_INSTALL=NO \
BUILD_LIBRARIES_FOR_DISTRIBUTION=YES
xcodebuild archive \
-scheme CleanUI \
-configuration Release \
-destination 'generic/platform=iOS Simulator' \
-archivePath './build/CleanUI.framework-iphonesimulator.xcarchive' \
SKIP_INSTALL=NO \
BUILD_LIBRARIES_FOR_DISTRIBUTION=YES
xcodebuild -create-xcframework \
-framework './build/CleanUI.framework-iphonesimulator.xcarchive/Products/Library/Frameworks/CleanUI.framework' \
-framework './build/CleanUI.framework-iphoneos.xcarchive/Products/Library/Frameworks/CleanUI.framework' \
-output './build/CleanUI.xcframework'
Run Code Online (Sandbox Code Playgroud)
在我将 CleanUI.xcframework 导入测试项目之前,这完全正常。我收到以下错误:
所有这些错误根本没有意义。当我将框架构建为普通框架时,使用Cmd+ B,一切正常。
我删除了派生数据文件夹,清理了每个构建文件夹,然后重新启动了我的 Mac 一千次。过去 10 个小时我一直在研究这个问题,我感觉我搜索了整个网络并尝试了每一个可能的解决方案。
我正在寻找创建一个闭源 CocoaPod。根据我的研究,建议似乎是将其作为 XCFramework 分发。(来源)似乎还可以通过在 Podspec 文件中指定其他 CocoaPods 来使您的框架依赖于它们。( source ) ( source ) 这将确保当有人将此 pod 添加到其 Podfile 并运行时pod install,它将安装此框架及其依赖项。
我创建了一个框架 Xcode 项目,并在我们应用程序的工作区中将其作为子项目进行开发。所以此时,应用程序已经通过 CocoaPods 安装了所有依赖项,这使得其中的框架可以利用它们。现在我准备好准备分发框架,以便它可以在其他应用程序中使用。
据我了解,我需要先创建一个 XCFramework,然后才能为其创建一个 CocoaPod。当我去归档框架项目时,我收到一个错误,因为它找不到依赖项,这是有道理的。此时我不明白这是如何工作的,因为框架似乎需要包含在其自身中的依赖项才能成功创建 XCFramework,但我从我的研究中预计这将由 CocoaPods 处理,而不包含在框架本身。
xcodebuild archive \
-scheme MyFramework \
-configuration Release \
-destination 'generic/platform=iOS' \
-archivePath './build/MyFramework.framework-iphoneos.xcarchive' \
SKIP_INSTALL=NO \
BUILD_LIBRARIES_FOR_DISTRIBUTION=YES
Run Code Online (Sandbox Code Playgroud)
/Users/.../AppName/MyFramework/Helpers/Extensions.swift:10:8: error: no such module 'Kingfisher'
import Kingfisher
^
** ARCHIVE FAILED **
Run Code Online (Sandbox Code Playgroud) 我有一个静态库,为多种架构编译,包含在 XCFramework 中。
它看起来像这样:
| framework_1.xcframework
|---- _CodeSignature
|---- Info.plist
|---- ios-arm64_arm64e
|---- Headers
|---- libframework.a
|---- ios-arm64_x86_64-simulator
|---- Headers
|---- libframework.a
|---- macos-arm64_arm64e_x86_64
|---- Headers
|---- libframework.a
Run Code Online (Sandbox Code Playgroud)
我正在开发一个带有 Podspec 的 iOS 框架,如下所示:
Spec do |spec|
spec.information
spec.subspec 'XCFrameworkPod' do |xcframework|
xcframework.vendored_frameworks = 'path/to/framework_1.xcframework'
end
Run Code Online (Sandbox Code Playgroud)
我已经通过指定以下内容成功包含了我的标题:
xcframework.source_files = 'path/to/framework_1.xcframework/ios-arm64_x86_64-simulator/Headers/**/*.h'
Run Code Online (Sandbox Code Playgroud)
这样,我的标题就可以在我的项目中使用。但是当我尝试使用其中之一时,它无法编译。我有以下错误:
在框架模块内包含非模块化标头: '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/clang/include/inttypes.h' 在框架内包含非模块化标头模块:'/Users/myuser/Library/Developer/Xcode/DerivedData/MyProject/Build/Products/Debug-iphonesimulator/XCFrameworkIntermediates/MyPod/XCFrameworkPod/Headers/header.h'
如何正确集成xcframework和标头?
我尝试设置“Clang 允许非模块化标头”,但它在 Swift 项目中不起作用。
感谢您的帮助 !
我正在使用二进制框架创建 SPM。我在服务器上上传了一个 zip 文件,该链接在 SPM 中使用。
let package = Package(
name: "MyDemoPackage",
platforms: [
.iOS(.v13)
],
products: [
.library(
name: "MyDemoPackage",
targets: ["MyDemoPackage"]),
],
dependencies: [
],
targets: [
.binaryTarget(
name: "MyDemoPackage",
url:"https:domain.com/frameork.zip",
checksum: "29725502a0b4e61c375f71eec3d5432ac84c")
]
)
Run Code Online (Sandbox Code Playgroud)
编译后显示错误
显示最近消息下载的二进制目标“MyDemoPackage”的存档不包含预期的二进制工件“MyDemoPackage”。
我无法弄清楚如何解决此错误。谁能帮我吗?
当在 M1 芯片上运行时使用 Xcode 13.3 构建时,我的一个 XCFrameworks 抛出以下错误。
__DATA/__bss 部分的类型为零填充,但对于架构 arm64 有非零文件偏移量
在 Monterey 上运行 Xcode 13.2.1 上的同一项目没有错误。在任何 Xcode 或 macOS 版本上运行的英特尔芯片也不会出现错误。
有没有人见过这个问题并知道潜在的解决方案?
我已经开发了一个框架,并且能够使用DocC生成文档。当我在客户端应用程序中包含 .framework 时,我可以在按住 Option 键单击方法或属性时看到文档。但是,当我将框架作为 XCFramework 分发并包含在客户端应用程序中时,当 Option-Click 方法或属性时,Xcode 不会显示任何文档。当我检查 XCFramework 时,有一个名为“arm64-apple-ios.swiftdoc”的文件似乎包含文档。但它不是任何地方都可以访问的。
我仍然无法在互联网上找到任何资源。如果可以随 XCFramework 一起携带文档,请分享如何执行此操作。任何帮助深表感谢。
我有一个 XCFramework,其目录结构如下:
\n.\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 WechatOpenSDK-XCFramework.xcframework\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Info.plist\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.txt\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ios-arm64_armv7\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Headers\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 WXApi.h\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 WXApiObject.h\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 WechatAuthSDK.h\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Modules\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 module.modulemap\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 libWechatOpenSDK.a\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ios-arm64_i386_x86_64-simulator\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Headers\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 WXApi.h\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 WXApiObject.h\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 WechatAuthSDK.h\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Modules\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 module.modulemap\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 libWechatOpenSDK.a\nRun Code Online (Sandbox Code Playgroud)\n我添加了Modules目录和module.modulemap文件。XCFramework 最初并不包含这些。
为了module.modulemap文件,我尝试将其定义为:
framework module WechatOpenSDK {\n umbrella header "WXApi.h"\n\n export *\n module * { …Run Code Online (Sandbox Code Playgroud) xcframework ×10
ios ×7
swift ×6
xcode ×5
cocoapods ×2
bundle ×1
docc ×1
frameworks ×1
mach-o ×1
objective-c ×1
podspec ×1
swiftui ×1