问题标签 [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.
ios - Xcode 未使用 XCFrameworks 找到架构 x86_64 的符号
Xcode(11.2.1 和 11.3.1)在使用 XCFrameworks 时无法找到 x86_64 架构符号。问题在于架构位于 XCFramework 内部,但首先让我向您展示该框架是如何创建的。
为了生成 XCFramework,我制作了两个档案:
对于 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
对于 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
有什么想法吗?
谢谢!
xcframework - Binary XCFramework 是否可以与旧的 swift 版本一起使用?
我们正在为 iOS(以及后来的 macOS)构建一个新的二进制框架。但是,我们正在考虑用 Swift 构建它,经过一些研究和WWDC 谈话,我仍然缺少一些细节:
我们能否将其发送到应用程序:
- 使用旧的 Swift 版本?(例如斯威夫特 2)
- 使用Objective-C?
我们知道 cocoapods 1.9 支持 XCFramework,但它仍处于测试阶段,您认为我们应该如何分发框架?
- 如果 XCFramework 还不够成熟,那么现在唯一的选择是使用旧的
.framework
Objective-C 吗?
谢谢你,正在寻找你的建议..
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)
ios - 模块 'SocketIO' 未在库演化支持下编译;使用它意味着无法保证框架的二进制兼容性
当我使用 Swift 包管理器在我的框架项目中安装 SocketIO 时,构建成功,但出现警告“模块 'SocketIO' 未使用库演化支持编译;使用它意味着无法保证'框架名称'的二进制兼容性” .
注意:我在两个项目目标中都将 Build Libraries for Distribution启用为 YES。我使用 Swift Package Manager 在我的框架项目中安装的 Socket IO 框架。(使用可可豆荚 xcframework 生成不适用于 SocketIO)。
最终我必须从这个框架项目中生成 XCFramework,即使我生成带有警告的 XCFramework,当我将它导入任何项目时,最终的 .xcframework 也不支持。Xcode 说“加载模块 SocketIO 失败”
谁可以帮我这个事?从上周开始,我尝试了很多可能性。提前致谢。
ios - “ ipatool 失败并出现异常:#
选择“从位码重建”导出选项时,我无法存档 ipa,出现以下错误
ipatool failed with an exception: #<CmdSpec::NonZeroExitExcept
选择“从位码重建”导出选项时,我无法存档 ipa,出现以下错误
注意:- 我检查了我所有的依赖框架都是 .xcframework,支持 Bitcode。
有人可以在这里帮助我吗?提前致谢。
我可以通过添加“allowedcontent:true”配置来禁用自动 ACF 来解决此问题,而这可能会导致将不安全内容添加到编辑器中的问题。有关更多信息,请参阅此链接:https ://ckeditor.com/docs/ckeditor4/latest/examples/acf.html
选择“从位码重建”导出选项时,我无法存档 ipa,出现以下错误
ipatool failed with an exception: #<CmdSpec::NonZeroExitExcept
选择“从位码重建”导出选项时,我无法存档 ipa,出现以下错误
注意:- 我检查了我所有的依赖框架都是 .xcframework,支持 Bitcode。
有人可以在这里帮助我吗?提前致谢。
我可以通过添加“allowedcontent:true”配置来禁用自动 ACF 来解决此问题,而这可能会导致将不安全内容添加到编辑器中的问题。有关更多信息,请参阅此链接:https ://ckeditor.com/docs/ckeditor4/latest/examples/acf.html
ios13 - 由于“IPA 处理失败”而无法归档应用程序,使用 .xcframework 依赖项
无法使用 .xcframework 归档我的应用程序。如果我在归档时选择“从位码重建”导出选项,则会出现“ IPA 处理失败”错误。
请在这里帮助我。提前致谢。
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 中展示了它,框架出售了一个模块。如果我仍然尝试设置标头搜索路径,那么您现在每个体系结构都有不同的标头。
ios - 设置失败后无法引用(子类化)Swift 类:更改为 BUILD_LIBRARY_FOR_DISTRIBUTION = YES 后失败
问题如标题。
以下是重现步骤:
- 基于Objective-C创建项目
- 创建一个子类 UIViewController 的 Swift 类。它将自动创建一个桥接头。
- 通过在 Objective-C 文件的顶部添加“#import "FooProjectName-Swift.h" 来使用 Objective-C 项目中的 Swift 类(例如默认的 ViewController)。
- 设置 BUILD_LIBRARY_FOR_DISTRIBUTION = YES(WWDC 视频谈到了这个)
- Xcode 将显示一个错误,建议我们删除桥接头
- 按照建议删除桥接头
- 不会引用 Swift 类,Xcode 显示错误
这是带有提交的示例项目,显示了这些步骤 https://github.com/allenlinli/BUILD_LIBRARY_FOR_DISTRIBUTION-Bug-When-Use-Swift
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,并将这两个框架都包含在项目中,但针对不同的目标。它也不起作用。
- 尝试所有框架嵌入选项:嵌入并签名或嵌入而不签名。它给出了上面显示的错误。
我有点迷茫,我不知道我还能尝试什么。任何可以对此有所了解的人将不胜感激。
audiokit - 将 AudioKit iOS 应用程序移植到 Catalyst macOS 应用程序时出现编译错误
我有一个 iOS 应用程序在 AudioKit 的 iOS 版本中运行良好。我想尝试通过加入 AudioKit.xcframework 来移植到 macOS w Catalyst。这是我所做的
- 从源代码编译 AudioKit-4.9.5 以生成 AudioKit.xcframework(我之前一直在使用本地编译的同一源代码版本的 AudioKit iOS 框架,在非 Catalyst 版本上没有问题)
- 在“常规”选项卡中,
- 选中 Mac 作为部署目标
- 移除了旧的 AudioKit iOS 框架
- 添加了 AudioKit.xcframework
- 在“构建设置”选项卡中,
- 将“Framework Search Paths”从AudioKit iOS框架的父目录更改为AudioKit.xcframework的父目录
- 在“构建阶段”选项卡中,
- AudioKit.xcframework 出现在“Link Binary with Libraries”中
- AudioKit.xcframework 出现在“嵌入框架”中
我收到以下错误,
当前使用 Xcode 11.4.1。