问题标签 [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 回答
905 浏览

ios - iOS/macOS app distribution failed while using framework after upgrading Xcode12 and macOS BigSur

We are unable to distribute our sample app which uses our framework as well as our users can't. While archiving and distributing to AppStore, the app is rejected with the following message:

Invalid Bundle - One or more dynamic libraries that are referenced by your app are not present in the dylib search path. If your app contains bitcode, bitcode processing may have failed. Because of these errors, this build of your app will not be able to be submitted for review or placed on the App Store.

The framework contain the bitcode, or at least there's a BITCODE_GENERATION_MODE = bitcode build setting in our .xcconfig, which basically means, the Xcode will add -fembed-bitcode build flag to any clang invocation.

From here, we've started testing using Ad-Hoc builds, to speed up our trial and error attempts, which also fails while Rebuild from bitcode option is selected. Organiser shows the popup with the following contents: enter image description here

Logs provided isn't very informative, here is the snippet from IDEDistributionPipeline.log

which after bunch of warnings shows the actual error at the end of file (I can't include full log, since it's too much of a raw text):

Not sure what to to do with this, I've tried different build settings options, nothing helped... Already contacted apple, but no feedback yet, and knowing them, we can wait far too long...

The strange part here, is if we include our .framework directly as a source code and then archive the app - everything works as expected. If we include it as XCFramework or just .framework, which is pre-built - it fails as described above.

I might miss something simple or obvious here, so please let me know if somebody have some insights on that matter.

We've tried different combinations of macOS and Xcode, e.g.:

Any help is greatly appreciated. Thanks.

0 投票
0 回答
518 浏览

ios - dyld:导入 .xcframework 后找不到符号

我创建了一个.xcframework使用这个脚本:

但是,当我.xcframework在另一个项目中导入时,我收到此错误:

dyld:找不到符号:_$s12ReachabilityAAC10ConnectionO11unavailableyA2DmFWC

引用自:/private/var/containers/Bundle/Application/A5315543-8323-4270-8D40-8BB1C940801C/App.app/Frameworks/Framework.framework/Framework

预计在:/private/var/containers/Bundle/Application/A5315543-8323-4270-8D40-8BB1C940801C/App.app/Frameworks/Reachability.framework/Reachability

在 /private/var/containers/Bundle/Application/A5315543-8323-4270-8D40-8BB1C940801C/App.app/Frameworks/Framework.framework/Framework


dyld:启动,加载依赖库DYLD_LIBRARY_PATH=/usr/lib/system/introspection DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libBacktraceRecording.dylib:/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/GPUTools框架/libglInterpose.dylib:/usr/lib/libMTLCapture.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib

我在创建 an 时看到的每个示例都.xcframework不会使用 an 存档.xcworkspace,所以我认为我的问题必须与此有关。我需要存档,.xcworkspace因为框架有自己的 Cocoapod 依赖项(Reachability其中之一),但我正在集成的项目包含这些依赖项。

.xcframework有没有人成功地从具有 Pod 依赖项的源代码创建了一个?

0 投票
4 回答
5383 浏览

ios - 从模块接口构建模块失败;它可能已损坏或在生成时触发了 Swift 编译器中的错误

在创建这样的 xcframework 时

xcodebuild archive -project endiosOne-iOS.xcodeproj -scheme EOFoundation -destination="iOS" -archivePath /tmp/xcf/ios.xcarchive -derivedDataPath /tmp/iphoneos -sdk iphoneos SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES

xcodebuild archive -project endiosOne-iOS.xcodeproj -scheme EOFoundation -destination="iOS Simulator" -archivePath /tmp/xcf/iossimulator.xcarchive -derivedDataPath /tmp/iphoneos -sdk iphonesimulator SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES

xcodebuild -create-xcframework -framework /tmp/xcf/ios.xcarchive/Products/Library/Frameworks/EOFoundation.framework -framework /tmp/xcf/iossimulator.xcarchive/Products/Library/Frameworks/EOFoundation.framework -output /tmp/ xcf/EOFoundation.xcframework

然后将框架添加到现有项目或新项目中,我们在导入框架时会收到此错误。

无法从其模块接口构建模块“EOFoundation”;它可能已损坏或在生成时触发了 Swift 编译器中的错误

使用 xcode 12.1,也尝试使用 Xcode 11。尝试使用新的 UIKit 应用程序和新的仅 SwiftUI 应用程序

我们得到以下 UIKit 错误UIKit 错误

我无法像在 UIKit 中那样修复 UIkit 错误:不幸的是,苹果没有给我们提供很多关于如何解决这个问题的信息。

我该如何解决这个问题,以便我使用在另一个项目中生成的 xcframework?

0 投票
0 回答
363 浏览

ios - 无法在 xcframework 中导入框架

我开发了一个 XCFramework,内部有另一个第三方框架。例如,考虑“Sample”是 xcframework,它内部有 Alamofire 框架。现在我将这个 Sample.xcframework 导入另一个 ios 应用程序目标,现在我无法访问 xcframework 中的 Alamofire。

我在目标设置中添加了框架搜索路径。对于模拟器:

$(PROJECT_DIR)/Sample.xcframework/ios-x86_64-simulator/Sample.framework/Frameworks

对于 iOS 设备:

$(PROJECT_DIR)/Sample.xcframework/ios-arm64/Sample.framework/Frameworks

在构建 iOS 应用程序时,它显示错误

  • 无法从其模块接口构建模块“Sample”;它可能已损坏或在生成时触发了 Swift 编译器中的错误

  • 没有这样的模块'Alamofire'

注意:Alamofire 框架在内部可用 - $(PROJECT_DIR)/Sample.xcframework/ios-arm64/Sample.framework/Frameworks

0 投票
0 回答
197 浏览

ios - 创建 XCFrameworks 时缺少架构 x86_64

我正在尝试XCFramework使用XCode 12.2.

使用以下命令生成模拟器存档:

对于 iOS:

然后

当我尝试在其他项目中集成和使用时出现错误

架构 x86_64 的未定义符号:
OBJC_CLASS $_SnapshotHandler”,引用自:AppDelegate.o 中的 objc-class-ref

SnapshotHandler是 MyFramework 中的一个类。

我检查了它设置为的有效架构Standard Architectures,还构建了仅设置为的活动架构NO

如果我构建框架,XCode 11.6然后调用有效的架构并添加(i386 和 x86_64)。

任何帮助将不胜感激。

0 投票
1 回答
2474 浏览

ios - 使用 Swift 包管理器为二进制目标添加包依赖项

我正在开发一个封闭源代码框架,它将使用 SPM 作为 XCFramework 分发。这要归功于binaryTargetswift tools 5.3 中的新功能。在框架具有依赖关系之前,这可以正常工作。

416 - 二进制框架状态... binary frameworks cannot depend on Packages.,但这是在 5.3 之前,二进制目标根本不可能。在 Swift 论坛上有一个建议的解决方法,基本上是围绕添加一个虚拟目标来列出依赖项(binaryTarget初始化程序没有dependencies参数)。

解决方法一直有效,直到依赖项具有自己的依赖项。例如,没有任何依赖关系的Lottie可以正常工作,但有很多依赖关系的Auth0失败并出现错误 Missing required modules: 'Auth0ObjectiveC', 'SimpleKeychain'。即使使用 SPM 将 Auth0 直接添加到客户端项目也无法修复这些错误。

这是我的 Package.swift 部分工作。

有可能实际上有一个二进制框架依赖于一个包吗?如果不是,那么为二进制框架分配依赖项的正确方法是什么?

0 投票
1 回答
1405 浏览

ios - 为什么在创建 XCFramework 时出现此错误?:为 iOS 模拟器构建时,在路径中找不到库

我在脚本文件中编写了以下命令,为 iPhoneSimulator 和 iPhoneOS 创建 XCFrameworks,如下所示:

在将其拖放到嵌入式框架和库后,我尝试在项目中使用它

当我以设备为目标运行项目时,它工作正常。但是当我在模拟器上运行它时,它会抛出以下错误:

在为 iOS 模拟器构建时,在/Users/Ron/XCFrameworks/ProjectD.xcframework中找不到库

如果我更改存档和 XCFramework 创建的顺序,如下所示:

它适用于模拟器,而不适用于具有相同错误的设备:

在为 iPhone 构建时,在/Users/Ron/XCFrameworks/ProjectD.xcframework中找不到库

我也将Build Libraries for Distribution设置为Yes。如果我尝试使用不同的目的地创建它们(iPhone 和模拟器的 2 个 XCFrameworks)它正在工作。但这实际上违背了 XCFrameworks 的目的。

我是否遗漏了什么或做错了什么步骤?感谢您提前回答。

0 投票
0 回答
582 浏览

ios - 如何让 cmake 生成 iOS xcframework 作为存档

我正在使用 cmake 命令生成一个 xcframework。根据 Apple 的文档,我需要调用“xcodebuild archive”命令来生成可分发框架。我意识到当我运行“cmake --build”时,它会运行一个“xcodebuild build”命令。

有没有办法使用 cmake 创建可分发的存档?

0 投票
1 回答
2819 浏览

ios - 将 XCFramework 与目标 C 一起使用

我用 Swift 语言创建了一个 xcframework。我也用@objc 标记了.swift 类。

我尝试在目标 c 项目中使用 <frameworkname-Swift.h>,但它显示 Module not found 错误。

任何人都可以帮助如何将 xcframework 与 Objective-C 代码一起使用。

0 投票
1 回答
471 浏览

ios - 将 XCFrameworks 集成到开发和发布工作流程中

我有一个 Xcode 工作区,其中包含一个 iOS 框架目标和一个依赖并嵌入框架的 iOS SampleApp 目标。该框架是闭源的,因此以二进制形式交付给客户,在一个发布包中与整个 SampleApp 项目的源代码副本一起提供,以便他们可以使用我们的应用程序对其进行测试并查看集成是如何完成的。

通过这种设置,在开发阶段,我可以在 Xcode 中打开工作区并构建 SampleApp 目标,并且由于它对框架有显式依赖,Xcode 会立即触发框架的构建,然后构建并链接应用程序正确。

现在我想利用新的XCFramework 格式将这个框架分发给客户,而不是使用 lipo'ed fat 框架。我更新了生成发布包的 shell 脚本,以在最后创建一个支持所有各种平台的 xcframework 包,并更新 SampleApp 项目以依赖此 xcframework,而不是像以前那样依赖于单个框架。

但是更新后的 SampleApp 出现了问题:移除了对框架的依赖后,上述工作空间设置不再起作用,即在构建 SampleApp 目标时,Xcode 将不再自动构建框架目标,因为显式依赖两者之间的联系现在被打破了。

我第一次尝试解决这个问题,也包括让 xcframework 成为我常规开发工作流程的一部分。为此,我向框架构建目标添加了一个运行脚本阶段,该阶段生成一个仅限当前平台的 xcframework 包并将其复制到 SampleApp 期望找到它的位置,然后将框架目标添加到 SampleApp 的目标中构建方案,以便在构建 SampleApp 时构建框架。不幸的是,这种方法不起作用,因为 Xcode 12 似乎总是并行构建两个目标,无论“Parallelize Build”设置是什么,因此应用程序将无法构建,因为 xcframework 还没有准备好它由构建系统处理,该系统在 SampleApp 的构建阶段非常早期。所以除非有'

如果这种方法不起作用,那么我必须在未修改 SampleApp 的情况下发布 xcframework,并指示想要运行该应用程序的客户手动删除对通用框架的引用,然后将 xcframework 添加/拖动到它。这会起作用,但它很丑陋,而且对我来说似乎不够友好。

我还在考虑一种不同的方法,即发布脚本以编程方式修改 SampleApp.xcodeproj 以依赖于 xcframework 而不是通用框架,但这似乎是一件非常脆弱的事情,所以宁愿避免它如果有更好的方法。

这种情况对我来说似乎并不独特,所以我猜其他人一定也遇到过这个问题。如果是这样,您是如何解决的?