问题标签 [xcframework]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1337 浏览

ios - Xcode 未使用 XCFrameworks 找到架构 x86_64 的符号

Xcode(11.2.1 和 11.3.1)在使用 XCFrameworks 时无法找到 x86_64 架构符号。问题在于架构位于 XCFramework 内部,但首先让我向您展示该框架是如何创建的。

为了生成 XCFramework,我制作了两个档案:

  1. 对于 iOS:

    xcodebuild archive -scheme MyPod -target MyPod -destination="iOS" -archivePath build/ios.xcarchive -derivedDataPath /tmp/iphoneos -sdk iphoneos SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES

  2. 对于 iOS 模拟器:

    xcodebuild archive -scheme MyPod -target MyPod -destination="iOS Simulator" -archivePath build/iossimulator.xcarchive -derivedDataPath /tmp/iphoneos -sdk iphonesimulator SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES

然后我生成了 XCFramework:

xcodebuild -create-xcframework -framework ./build/ios.xcarchive/Products/Library/Frameworks/MyPod.framework -framework ./build/iossimulator.xcarchive/Products/Library/Frameworks/MyPod.framework -output xcframework/MyPod.xcframework

这是创建的 XCFramework,我们可以在其中看到两种架构: XCFramework preview

创建后,我通过 Cocoapods (1.9.0.beta.3) 分发它。所以我的 .podspec 看起来像:

s.subspec "Vendored" do |framework| framework.vendored_framework = 'xcframework/MyPod.xcframework' end

然后我在另一个项目中使用它,在编译时,它失败了,因为它找不到模拟器的架构(在它工作的设备上)

我得到的日志如下:

ld: warning: ignoring file /Path/To/MyProject/Pods/MyPod/xcframework/MyPod.xcframework/ios-armv7_arm64/MyPod.framework/MyPod, missing required architecture x86_64 in file /Path/To/MyProject/Pods/MyPod/xcframework/MyPod.xcframework/ios-armv7_arm64/MyPod.framework/MyPod (2 slices) Undefined symbols for architecture x86_64: "_OBJC_CLASS_$MyPod", referenced from: objc-class-ref in SomeClass.o ld: symbol(s) not found for architecture x86_64

看起来 xcodebuild 总是转到ios-armv7_arm64文件夹而不是那个文件夹,ios-i386_x86_64-simulator有什么想法吗?

谢谢!

0 投票
1 回答
61 浏览

xcframework - Binary XCFramework 是否可以与旧的 swift 版本一起使用?

我们正在为 iOS(以及后来的 macOS)构建一个新的二进制框架。但是,我们正在考虑用 Swift 构建它,经过一些研究和WWDC 谈话,我仍然缺少一些细节:

  1. 我们能否将其发送到应用程序:

    • 使用旧的 Swift 版本?(例如斯威夫特 2)
    • 使用Objective-C?
  2. 我们知道 cocoapods 1.9 支持 XCFramework,但它仍处于测试阶段,您认为我们应该如何分发框架?

  3. 如果 XCFramework 还不够成熟,那么现在唯一的选择是使用旧的.frameworkObjective-C 吗?

谢谢你,正在寻找你的建议..

0 投票
0 回答
2119 浏览

ios - 使用 Cocoapods 创建 XCFramework 时出错

我正在尝试从 Xcode 框架项目(项目名称 XCFramework)生成 iOS XCFramework。项目包含一些 cocoa-pods 库,如 Socket IO、SwiftKeyChainWrapper 等。如果我在没有 cocoa-pods 的情况下生成 XCFramework,xcodebuild 命令将为 iOS 和 iOS 模拟器目标成功生成 XCFramework,但是当我在框架项目中安装 pods 时我收到很多错误。如果有人遇到这种情况并成功帮助使用 cocoa-pods 生成 XCFramework 示例项目,那将非常有帮助。

注意:a) 我使用了一个名为xcframework的小包,它在命令 (1) 中生成 xcfremwork b) 如果我直接从 Xcode 存档项目,则存档会成功。

1) 构建命令:- xcframework build --project XCFramework.xcodeproj --name XCFramework --iOS EcallXCFramework

...... ...... ** 存档失败 **

以下构建命令失败:Ld /Users/*******/Library/Developer/Xcode/DerivedData/XCFramework-gccrcnyzlsezmugkrqqlnpusjfci/Build/Intermediates.noindex/ArchiveIntermediates/XCFramework/InstallationBuildProductsLocation/Library/Frameworks/XCFramework.framework/ XCFramework 正常 arm64 (1 失败)

2) 构建命令:- xcodebuild archive -scheme XCFramework -destination="generic/platform=iOS" -destination="generic/platform=iOS Simulator" SKIP_INSTALL=NO

...... ....... 来自命令行的用户默认值:destination = generic/platform=iOS Simulator

从命令行构建设置:SKIP_INSTALL = NO

xcodebuild:错误:无法使用方案 XCFramework 构建项目 EcallXCFramework。原因:运行目标 My Mac 对归档方案“XCFramework”无效。

3) 构建命令:- xcodebuild 存档 ..... ..... ld:找不到框架 SwiftKeychainWrapper clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

** 存档失败 **

以下构建命令失败:Ld /tmp/EcallXCFramework.dst/Library/Frameworks/EcallXCFramework.framework/EcallXCFramework normal arm64 (1 failure)

0 投票
1 回答
990 浏览

ios - 模块 'SocketIO' 未在库演化支持下编译;使用它意味着无法保证框架的二进制兼容性

当我使用 Swift 包管理器在我的框架项目中安装 SocketIO 时,构建成功,但出现警告“模块 'SocketIO' 未使用库演化支持编译;使用它意味着无法保证'框架名称'的二进制兼容性” .

注意:我在两个项目目标中都将 Build Libraries for Distribution启用为 YES。我使用 Swift Package Manager 在我的框架项目中安装的 Socket IO 框架。(使用可可豆荚 xcframework 生成不适用于 SocketIO)。

最终我必须从这个框架项目中生成 XCFramework,即使我生成带有警告的 XCFramework,当我将它导入任何项目时,最终的 .xcframework 也不支持。Xcode 说“加载模块 SocketIO 失败”

谁可以帮我这个事?从上周开始,我尝试了很多可能性。提前致谢。

0 投票
2 回答
2487 浏览

ios - “ ipatool 失败并出现异常:#

选择“从位码重建”导出选项时,我无法存档 ipa,出现以下错误

注意:- 我检查了我所有的依赖框架都是 .xcframework,支持 Bitcode。

有人可以在这里帮助我吗?提前致谢。


我可以通过添加“allowedcontent:true”配置来禁用自动 ACF 来解决此问题,而这可能会导致将不安全内容添加到编辑器中的问题。有关更多信息,请参阅此链接:https ://ckeditor.com/docs/ckeditor4/latest/examples/acf.html

0 投票
0 回答
145 浏览

ios13 - 由于“IPA 处理失败”而无法归档应用程序,使用 .xcframework 依赖项

无法使用 .xcframework 归档我的应用程序。如果我在归档时选择“从位码重建”导出选项,则会出现“ IPA 处理失败”错误。

请在这里帮助我。提前致谢。

0 投票
2 回答
1031 浏览

objective-c - 从 Objective-C 使用 FFmpeg XCFramework,找不到标头

我为 Apple 的平台构建了 FFmpeg 作为 XCFramework。我使用了https://github.com/kewlbear/FFmpeg-iOS-build-script/pull/147中的脚本来执行此操作。

我现在正尝试在传统的 iOS/macOS 框架(名为 VideoEditing)中使用该框架,然后在我的 iOS 应用程序中使用该框架(很快将尝试成为 Catalyst)。

VideoEditing我已链接到FFmpeg.xcframework,然后在使用VideoEditing我已链接和嵌入的应用程序中FFmpeg.xcframework。以前我将 FFmpeg 构建为标准静态库,并VideoEditing在 Objective-C++ 包装器中使用它,这样我就可以从 Swift 中使用它。

在那个 Objective-C++ 文件中,我将导入 FFmpeg 标头,如#import <libswscale/swscale.h>要使其工作,我必须设置标头搜索路径。转换为 XCFramework 后应该怎么做?我试过@import FFmpeg, #import <FFmpeg/libswscale/swscale.h>,#import <FFmpeg/swscale.h>以及#import <libswscale/swscale.h>. 在每种情况下,我都会遇到file not found错误import

Apple 的所有示例都只是在 Swift 中展示了它,框架出售了一个模块。如果我仍然尝试设置标头搜索路径,那么您现在每个体系结构都有不同的标头。

XCFramework 内容概览

0 投票
1 回答
222 浏览

ios - 设置失败后无法引用(子类化)Swift 类:更改为 BUILD_LIBRARY_FOR_DISTRIBUTION = YES 后失败

问题如标题。

以下是重现步骤:

  1. 基于Objective-C创建项目
  2. 创建一个子类 UIViewController 的 Swift 类。它将自动创建一个桥接头。
  3. 通过在 Objective-C 文件的顶部添加“#import "FooProjectName-Swift.h" 来使用 Objective-C 项目中的 Swift 类(例如默认的 ViewController)。
  4. 设置 BUILD_LIBRARY_FOR_DISTRIBUTION = YES(WWDC 视频谈到了这个
  5. Xcode 将显示一个错误,建议我们删除桥接头
  6. 按照建议删除桥接头
  7. 不会引用 Swift 类,Xcode 显示错误

这是带有提交的示例项目,显示了这些步骤 https://github.com/allenlinli/BUILD_LIBRARY_FOR_DISTRIBUTION-Bug-When-Use-Swift

0 投票
1 回答
497 浏览

ios - 无法在 watchOS 上使用 XCFramework

我正在开发一个 iOS 应用程序,它使用单独的 SDK 来处理一些常见的业务逻辑。该 SDK 是在另一个单独的项目中开发的,该项目创建了一个动态二进制框架作为输出。该框架的捆绑包类型是 Apple 建议从 Xcode 11 开始使用的 XCFramework。此 XCFramework 的内容如下:

如果我在 iOS 目标上使用 XCFramework,一切都按预期工作,只需导入 MySDK 模块,我就可以毫无问题地使用 SDK。

但是,如果我在 Watch Extension 目标上导入相同的框架,并将其运行到真正的 iWatch 中,则会出现以下错误:

细节

SDK 目标是为 watchOS 架构编译的,因为你们可以在其内容中看到相应的文件夹 (watchos-armv7k_arm64_32)。另外,我确保它是使用 LIPO 工具正确编译的。

我试过的:

  • 在此处此处此处关注相关问题,但没有任何成功。
  • 仅使用 watchos 架构复制 XCFramework,并将这两个框架都包含在项目中,但针对不同的目标。它也不起作用。
  • 尝试所有框架嵌入选项:嵌入并签名或嵌入而不签名。它给出了上面显示的错误。

我有点迷茫,我不知道我还能尝试什么。任何可以对此有所了解的人将不胜感激。

0 投票
2 回答
225 浏览

audiokit - 将 AudioKit iOS 应用程序移植到 Catalyst macOS 应用程序时出现编译错误

我有一个 iOS 应用程序在 AudioKit 的 iOS 版本中运行良好。我想尝试通过加入 AudioKit.xcframework 来移植到 macOS w Catalyst。这是我所做的

  1. 从源代码编译 AudioKit-4.9.5 以生成 AudioKit.xcframework(我之前一直在使用本地编译的同一源代码版本的 AudioKit iOS 框架,在非 Catalyst 版本上没有问题)
  2. 在“常规”选项卡中,
    • 选中 Mac 作为部署目标
    • 移除了旧的 AudioKit iOS 框架
    • 添加了 AudioKit.xcframework
  3. 在“构建设置”选项卡中,
    • 将“Framework Search Paths”从AudioKit iOS框架的父目录更改为AudioKit.xcframework的父目录
  4. 在“构建阶段”选项卡中,
    • AudioKit.xcframework 出现在“Link Binary with Libraries”中
    • AudioKit.xcframework 出现在“嵌入框架”中

我收到以下错误,

AudioKit.xcframework 编译错误

当前使用 Xcode 11.4.1。