首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法编译依赖于第三方xcframework的xcframework

无法编译依赖于第三方xcframework的xcframework
EN

Stack Overflow用户
提问于 2022-05-27 21:50:31
回答 2查看 251关注 0票数 0

目前,我正在尝试将一个快速包(我已经封装在xcodeproj中,专门用于将包作为二进制的快速包发布,并且仍然在示例应用程序中运行本地代码)编译到xcframework中,以便我也可以将它作为Cocoapod发布。该项目构建良好,并在同一个存储库中的示例应用程序中运行,因此我对代码本身相当有信心。但是,我在归档时遇到了问题;无法找到来自快速包的依赖项的类。两个deps (只有2个)都是第三方二进制快速包。

代码语言:javascript
复制
▸ Compiling MySegmentLabel.swift

❌  /Users/***/Sources/Views/MySegmentLabel.swift:4:39: cannot find type 'SegmentedControlSegment' in scope

public final class MySegmentLabel: SegmentedControlSegment {
                                    ^~~~~~~~~~~~~~~~~~~~~~~

** ARCHIVE FAILED **

在上面的示例输出中,SegmentedControlSegment是一个来自第三方二进制xcframework依赖项的类。

我觉得这是我的归档命令或xcodeproj构建设置的问题,但我不知道需要调整哪些设置或以什么方式进行调整。

在我的xcodeproj构建设置中,我按照苹果的建议设置了SKIP_INSTALL=NOBUILD_LIBRARY_FOR_DISTRIBUTION=YES (显式地将它们添加到归档命令中也没有帮助)。这是我用来存档xcodeproj的命令:

代码语言:javascript
复制
# Archives the target scheme passed-in to the script
function archive () {
    local sdk=$1
    local configuration=$2
    local build_path="$build_root/$sdk"
    local xcarchive_path="$archive_root/$SCHEME-$sdk.xcarchive"

    xcodebuild \
        -workspace $xcworkspace \
        -scheme "$SCHEME" \
        -configuration $configuration \
        -archivePath $xcarchive_path \
        -derivedDataPath $build_path \
        -sdk $sdk \
        -scmProvider system \
        -showBuildTimingSummary \
        archive | xcpretty

}

archive "iphonesimulator" "Debug" # specifically this one fails. It is able to archive for non-simulators
archive "iphoneos" "Release"

因为它不是为iphonesimulator目标编译的,所以我几乎认为第三方库可能没有将x86_64框架绑定到它们的xcframework中(只是因为示例应用程序在我运行xcodeproj时在模拟器上运行得很好)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-31 23:11:04

在我的例子中(这可能是一个罕见的问题),问题是第三方xcframework deps都是与设置一起编译的,以排除iphone仿真器的arm64 arch。因此,当我试图为所有标准archs (其中包括arm64,现在由于M1)存档iphone仿真器SDK时,当它为arm64存档时,它将找不到来自第三方deps的类引用。

理想情况下,第三方代理会修复他们的黑客攻击,以排除模拟器的arm64,但我不控制那些SDK,所以我只需要把这些依赖项从链上踢下来,所以最终客户端(这是一个我永远不需要存档的应用程序)现在必须依赖于那些第三方库,而我的快速包需要重构,这样就不需要直接访问那些第三方程序了。

票数 0
EN

Stack Overflow用户

发布于 2022-05-28 14:26:31

Swift软件包管理器不允许传递依赖项。客户端应用程序要么需要直接依赖第三方Swift包,要么您的包需要重新公开需要通过的API。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72411384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档