问题标签 [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 投票
0 回答
176 浏览

ios - 构建 xcframework 时架构 arm64 的未定义符号

我有一些第三方静态库已放入 XCFramework。当我将框架添加到另一个应用程序时,导入框架时库中的类是可见的,但是当我编译应用程序时,出现以下错误:

环境:

IDE: Xcode 12.4

操作系统: macOS 11.15.4 - Catalina

机器: MacBookPro15,1

细节:

XCFramework 是从基于框架模板的项目构建的。

库,即 *.a 文件,包含在项目中,它们是“必需的”。它们各自的头文件 *.h 文件被包含并设置为公共。它们还使用以下符号列在伞形头文件中:

在构建设置中,SKIP_INSTALL 设置为 NO。BUILD_LIBRARY_FOR_DISTRIBUTION 设置为 YES。

我使用以下终端命令来归档框架:

然后我使用以下终端命令创建 Xcframework:

我把这个产品放到我想使用这些库的应用程序项目的“框架、库和嵌入式内容”部分。我可以将库放到框架之外的应用程序中(我有并且它们工作得很好),但我想构建一个可移植的对象,这样我就可以将这个功能从一个项目移动到另一个项目,而无需大量复制和粘贴。

到目前为止,一切都很好。当我在 swift 类中引用一个对象时,如下所示:

一切似乎都很好。我没有从 Xcode 中得到任何错误,说它找不到“ClassInName”对象。但是当我尝试编译应用程序时,我得到了上述错误。

我确定我做错了很容易解决的问题。但我不知道那是什么。

0 投票
1 回答
946 浏览

ios - 迁移到 xcframwork Xcode 12.5,dyld:未加载库

环境

  • MacBook Pro(13 英寸,2017 年,两个雷雳 3 端口)
  • 大苏尔 11.3.1
  • Xcode 12.5
  • Apple Swift 5.4 版 (swiftlang-1205.0.26.9 clang-1205.0.19.55)
  • 目标:x86_64-apple-darwin20.4.0

问题

直到 Xcode 12.4,我们使用这个解决方法来获取我们项目的框架,这些框架是捆绑包的形式(黄色公文包图标)。此外,我需要为Carthage Copy File我的每个目标手动雕刻一个脚本(在构建阶段下),这很烦人且容易出错。

几天前,我阅读了 Carthage 官方文档,它建议使用xcframework. 从这些步骤听起来copy file不再需要烦人的步骤,我决定试一试。

我完全遵循了迁移步骤。我还更改了框架搜索路径,使其指向从$(PROJECT_DIR)/YOUR_PROJECT/Carthage/Build/iOS$(PROJECT_DIR)/YOUR_PROJECT/Carthage/Build。该应用程序刚刚在模拟器中运行,但现在振作起来还为时过早,每当我尝试在 iPhone 中运行它时它就会崩溃。在调试器控制台中它抱怨

解决方案

终于,我看到了 2 年前的这篇Medium 帖子embed & sign,它向被拖放到项目中的框架提出了建议。Embed我通过将一些框架的状态从Do not embed更改为Embed & Sign(从选项卡)对我的项目做了同样的事情General/Frameworks, Libraries and Embedded Content

答对了!该项目在模拟器和真机上运行,​​UI测试也和以前一样运行。

Carthage 官方文档中的迁移步骤根本没有提到这一步。另外,我找不到任何解决类似问题的帖子。所以我只想分享我的迁移步骤,希望这可能会有所帮助

  • 完全遵循迁移步骤(如果您有多个目标,这里的技巧是将所有 xcframeworks 放在/Frameworks文件导航器中的组下,这样您就可以一次性将 xcframeworks 链接到所有目标)

在此处输入图像描述

在此处输入图像描述

  • 为您新添加的 xcframeworks设置embed状态,请参阅下面的快照,我将框架分为三组

    • 绿色,第三方库,例如 auth0,alamofire ->Embed and Sign
    • 橙色 -> 开发库 ->Embed and Sign
    • 其余的,在我的例子中是用于 Firebase 的 xcframeworks ->Do not embed

设置嵌入状态

0 投票
0 回答
42 浏览

ios - XCode 12 Crash dyld:找不到符号'_X509_get_issuer_name'

swift代码清理、分析、编译,并成功安装在真机上。但是,该应用程序在安装后几秒钟内就会崩溃。

它在控制台中提供以下输出。

dyld:找不到符号'_X509_get_issuer_name',预计在'/private/var/containers/Bundle/Application/1151B1B3-3D48-4543-8FC7-40251F7F9052/abc.app/Frameworks/DocumentReaderCore.framework/DocumentReaderCore'中,需要'/私有/var/containers/Bundle/Application/1151B1B3-3D48-4543-8FC7-40251F7F9052/abc.app/Frameworks/SmartPathSDK.framework/helloSDK'

我相信,嵌入式框架没有问题。我在更新 pod 后突然遇到它。

为了解决这个问题,我什至尝试运行“pod deintegrate; pod update”但是,没有运气。

我无法理解其背后的原因。有人可以帮我解决它吗?这阻碍了我继续我的发展。

XCode 版本:12.5(甚至在 12.3 上尝试过;仍然失败)iOS 版本:14.3

0 投票
1 回答
18 浏览

swift - XCFramework 在未指定时询问 self 的实例

我正在尝试创建一个可以跨平台使用的框架。我已经成功地将框架添加到测试应用程序中,这就是测试框架的样子。很简单,我要做的就是导入框架并调用HelloComputer.getHello()并打招呼作为回报。

但是当我导入框架时会发生这种情况

在此处输入图像描述

我错过了什么吗?为什么它要求它自己的一个实例?

0 投票
1 回答
250 浏览

ios - xcodebuild 使用嵌入式库创建 xcframework

我对 Xcode 12.5 的 xcodebuild xcframeworks 有一点奇怪的问题。

  • 当我创建新框架时,我的新框架中总是有其他嵌入式框架。
  • 创建的 xcframework 不起作用。

我试过了:

  • 是的,我做了“BUILD_LIBRARY_FOR_DISTRIBUTION = YES”
  • 是的,我试图在创建的库中删除文件夹“/Frameworks”...请问您有什么想法吗?
0 投票
1 回答
1237 浏览

ios - 从两个静态库(libssl.a、libcrypto.a)中创建 XCFramework

考虑 OpenSSL,该项目本身有两个产品:libssl.alibcrypto.a. 为简单起见,让我们使用存储在此存储库中的预编译库并仅考虑iphonesimulator平台。

在查看存储库时,每个平台,例如,iphonesimulatoriphoneos将有一组静态库,用于所有需要的架构。

我的目标是创建一个捆绑这两个静态库的 XCFramework,以便将 Swift 包管理器作为单个包使用。

我绝对可以使用以下命令从静态库创建一个支持多个平台的 XCFramework:iOS Simulator ( i386, x86_64, arm64), iOS ( arm64, ...):arm7

输出如下:

xcframework 成功写入:/Users/name/OSSL_test/OpenSSL.xcframework

框架的结构是正确的,它包含标题和libcrypto.a. 当导入另一个 Xcode 项目时,此 XCFramework 会被识别并用于构建应用程序。

但是,当我也尝试添加时libssl.a,我收到以下错误:

具有标识符“ios-arm64_i386_x86_64-simulator”的库已经存在。

这是有道理的,因为两者libcrypto.alibssl.a具有相同的架构。

所以,我的问题是,是否可以使用单个 XCFramework 将两个静态库捆绑在一起?或者我应该创建两个单独的 XCFrameworks,以便每个库都有自己的?

在上面提到的存储库中,静态库实际上在另一个构建阶段用作输入,.framework为每个平台生成一个。构建逻辑在OpenSSL.xcodeproj. 所以,我想,我要问的根本不可能?

0 投票
0 回答
238 浏览

ios - 为模拟器构建排除 XCFramework

我的项目使用第三方 xcframeworks,但其中一个 xcframework 不支持导致构建失败的模拟器。有没有办法从模拟器构建但在设备构建中排除特定的 xcframework?

0 投票
1 回答
352 浏览

ios - 使用 Cocoapods 和 Swift 包管理器分发 XCFramework

在我们的软件公司,我们想创建一个 XCFramework 并使用 Cocoapods 和 Swift Package Manager 分发它。实际上,我们有两个不同的项目:第一个使用 Cocoapods 作为第三方依赖项,第二个使用 SPM 出于同样的原因。这些项目之间的唯一区别是第三方库的依赖关系:除此之外,里面的代码完全相同。

我们想了解是否有一种方法可以创建一个独特的项目(例如,使用 Cocoapods),生成一个 XCFramework 并使用 Cocoapods 和 SPM 分发它,而不会出现依赖关系带来的问题和/或麻烦。

0 投票
0 回答
72 浏览

ios - 将 Swift 5 项目与 React Native 集成

项目 1(旧项目) 这是一个 Swift 5 中的 iOS 项目,其中有很多 StoryBoards 文件、xibs、Pods、OneSignalNotificationServiceExtention

项目 2(新项目)在 React Native 中

我的目标 --> 我想将 Project1 与 Project2 集成。所以我可以从 project2 获得两个项目的功能。我已经通过制作 XcFramework/Cocoapods 进行了检查,但没有任何效果。

我的 Project1 Podfile

0 投票
0 回答
71 浏览

swift - 如何解决 `Firebase/FirebaseCore.h not found` 与`Failed to build module "MyCustom" from its module interface`?

我尝试在我的(演示项目)中使用我生成的“MyCustom.xcframework”。“MyCustom.xcframework”有没有 Cocoapods 的 Firebase。我跟着这个。https://mokacoding.com/blog/setting-up-firebase-without-cocoapods/

在我的(演示项目)中使用“MyCustom.xcframework”之前,我使用的是自 2018 年以来运行良好的“MyCustom.framework”。但从现在开始我需要使用 xcframework。

问题是我在(演示项目)中收到以下错误(请参见下面的屏幕截图)

在此处输入图像描述

我的模块图(库项目)如下。

根据https://bugs.swift.org/browse/SR-14195,我的问题是模块名称与类型相同。但我不知道如何正确更改模块名称。但我试图改变Product Module Name构建设置。它不能解决问题。

任何帮助都会得到帮助。=)

笔记:

  • 我只有 .xcodeproj,因为我不使用 Cocoapods。
  • 我正在使用 Xcode 12.5(尝试过早期版本并且错误相同)
  • 我使用了这个firebase 框架(尤其是 ML 工具包)