标签: xcframework

如何获取二进制包的校验和?

我在桌面上创建了名为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 包。那么我该如何解决这个问题呢?

swift swift-package-manager xcframework

5
推荐指数
1
解决办法
2970
查看次数

从 XCFramework 创建 Swift 包:.bundle 应该成为 xcframework 的一部分吗?

我正在尝试从 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 文件吗?或者还有什么我可以做的吗?

谢谢!

xcode bundle ios swift-package-manager xcframework

5
推荐指数
1
解决办法
1168
查看次数

具有 swift 包依赖性的模拟器构建错误。“无法打开路径:.framework 处的文件的文件句柄”

我制作了一个简单的空白项目并通过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中后,模拟器的构建就可以了。 在此输入图像描述

有谁知道出了什么问题吗?

xcode swift-package-manager xcframework

5
推荐指数
1
解决办法
733
查看次数

Xcode xcframework 错误,例如未知属性“Combine.Published”

我正在尝试将我的框架编译成 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 个小时我一直在研究这个问题,我感觉我搜索了整个网络并尝试了每一个可能的解决方案。

xcode objective-c swift swiftui xcframework

5
推荐指数
0
解决办法
754
查看次数

当闭源 CocoaPod 依赖于其他 pod 时,如何为它创建 XCFramework

我正在寻找创建一个闭源 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)

frameworks ios cocoapods xcframework

5
推荐指数
1
解决办法
2794
查看次数

将 XCFrameworks 包含到 Podspec 中

我有一个静态库,为多种架构编译,包含在 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 项目中不起作用。

感谢您的帮助 !

ios cocoapods podspec swift xcframework

5
推荐指数
1
解决办法
2838
查看次数

在 SPM 中集成二进制框架时出现错误,不包含预期的二进制工件

我正在使用二进制框架创建 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”。

我无法弄清楚如何解决此错误。谁能帮我吗?

ios swift swift-package-manager xcframework

5
推荐指数
1
解决办法
5130
查看次数

Xcode 13.3/XCFramework 编译错误:__DATA/__bss 部分的类型为零填充,但架构 arm64 的文件偏移量非零

当在 M1 芯片上运行时使用 Xcode 13.3 构建时,我的一个 XCFrameworks 抛出以下错误。

__DATA/__bss 部分的类型为零填充,但对于架构 arm64 有非零文件偏移量

在 Monterey 上运行 Xcode 13.2.1 上的同一项目没有错误。在任何 Xcode 或 macOS 版本上运行的英特尔芯片也不会出现错误。

有没有人见过这个问题并知道潜在的解决方案?

xcode mach-o ios xcframework macos-monterey

5
推荐指数
1
解决办法
1465
查看次数

是否可以将文档与 XCFramework 一起分发?

我已经开发了一个框架,并且能够使用DocC生成文档。当我在客户端应用程序中包含 .framework 时,我可以在按住 Option 键单击方法或属性时看到文档。但是,当我将框架作为 XCFramework 分发并包含在客户端应用程序中时,当 Option-Click 方法或属性时,Xcode 不会显示任何文档。当我检查 XCFramework 时,有一个名为“arm64-apple-ios.swiftdoc”的文件似乎包含文档。但它不是任何地方都可以访问的。

我仍然无法在互联网上找到任何资源。如果可以随 XCFramework 一起携带文档,请分享如何执行此操作。任何帮助深表感谢。

xcode ios swift xcframework docc

5
推荐指数
0
解决办法
146
查看次数

如何手动将 modulemap 文件添加到 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\n
Run Code Online (Sandbox Code Playgroud)\n

我添加了Modules目录和module.modulemap文件。XCFramework 最初并不包含这些。

\n

为了module.modulemap文件,我尝试将其定义为:

\n
framework module WechatOpenSDK {\n  umbrella header "WXApi.h"\n\n  export *\n  module * { …
Run Code Online (Sandbox Code Playgroud)

ios swift xcframework

5
推荐指数
1
解决办法
525
查看次数