问题标签 [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 - 构建 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”对象。但是当我尝试编译应用程序时,我得到了上述错误。
我确定我做错了很容易解决的问题。但我不知道那是什么。
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
- 绿色,第三方库,例如 auth0,alamofire ->
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
ios - xcodebuild 使用嵌入式库创建 xcframework
我对 Xcode 12.5 的 xcodebuild xcframeworks 有一点奇怪的问题。
- 当我创建新框架时,我的新框架中总是有其他嵌入式框架。
- 创建的 xcframework 不起作用。
我试过了:
- 是的,我做了“BUILD_LIBRARY_FOR_DISTRIBUTION = YES”
- 是的,我试图在创建的库中删除文件夹“/Frameworks”...请问您有什么想法吗?
ios - 从两个静态库(libssl.a、libcrypto.a)中创建 XCFramework
考虑 OpenSSL,该项目本身有两个产品:libssl.a
和libcrypto.a
. 为简单起见,让我们使用存储在此存储库中的预编译库并仅考虑iphonesimulator
平台。
在查看存储库时,每个平台,例如,iphonesimulator
或iphoneos
将有一组静态库,用于所有需要的架构。
我的目标是创建一个捆绑这两个静态库的 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.a
都libssl.a
具有相同的架构。
所以,我的问题是,是否可以使用单个 XCFramework 将两个静态库捆绑在一起?或者我应该创建两个单独的 XCFrameworks,以便每个库都有自己的?
在上面提到的存储库中,静态库实际上在另一个构建阶段用作输入,.framework
为每个平台生成一个。构建逻辑在OpenSSL.xcodeproj
. 所以,我想,我要问的根本不可能?
ios - 为模拟器构建排除 XCFramework
我的项目使用第三方 xcframeworks,但其中一个 xcframework 不支持导致构建失败的模拟器。有没有办法从模拟器构建但在设备构建中排除特定的 xcframework?
ios - 使用 Cocoapods 和 Swift 包管理器分发 XCFramework
在我们的软件公司,我们想创建一个 XCFramework 并使用 Cocoapods 和 Swift Package Manager 分发它。实际上,我们有两个不同的项目:第一个使用 Cocoapods 作为第三方依赖项,第二个使用 SPM 出于同样的原因。这些项目之间的唯一区别是第三方库的依赖关系:除此之外,里面的代码完全相同。
我们想了解是否有一种方法可以创建一个独特的项目(例如,使用 Cocoapods),生成一个 XCFramework 并使用 Cocoapods 和 SPM 分发它,而不会出现依赖关系带来的问题和/或麻烦。
ios - 将 Swift 5 项目与 React Native 集成
项目 1(旧项目) 这是一个 Swift 5 中的 iOS 项目,其中有很多 StoryBoards 文件、xibs、Pods、OneSignalNotificationServiceExtention
项目 2(新项目)在 React Native 中
我的目标 --> 我想将 Project1 与 Project2 集成。所以我可以从 project2 获得两个项目的功能。我已经通过制作 XcFramework/Cocoapods 进行了检查,但没有任何效果。
我的 Project1 Podfile
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 工具包)