标签: xcframework

带有 Pod 依赖项的 XCFramework

我们的目标是创建一个隐藏我们内部代码的框架,并为我们的客户提供 SDK。我们已经考虑创建满足我们要求的 XCFramework。互联网上也建议使用 Umbrella 框架,但主要建议避免这种方法。我们的框架依赖于我们通过 Pod 使用的一些第三方库。

问题:XCFramework 不编译 pods 框架。我们收到类似“未找到 Xyz(Pod) 模块”的错误消息。即使我们从客户端添加 pod,它也不起作用。

创建 XCFramework 的代码如下

1)为iOS平台创建一个存档

xcodebuild archive -workspace ABC.xcworkspace \
  -scheme ABC \
  -sdk iphoneos \
  -archivePath "./archives/ios_devices.xcarchive" \
  BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
  SKIP_INSTALL=NO
Run Code Online (Sandbox Code Playgroud)

2) 为 iOS-Simulator 平台创建存档

  xcodebuild archive  -workspace ABC.xcworkspace \
  -scheme ABC \
  -sdk iphonesimulator \
  -archivePath "./archives/ios_simulators.xcarchive" \
  BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
  SKIP_INSTALL=NO
Run Code Online (Sandbox Code Playgroud)

3) 从档案创建一个 XCFramework

xcodebuild -create-xcframework \
-framework ./archives/ios_devices.xcarchive/Products/Library/Frameworks/ABC.framework \
-framework ./archives/ios_simulators.xcarchive/Products/Library/Frameworks/ABC.framework \
-output build/ABC.xcframework
Run Code Online (Sandbox Code Playgroud)

我们成功获得了 ABC XCFramework,但 XCFramework 中不包含依赖项。有什么解决办法吗?或者有什么方法可以将框架搜索路径设置为客户端?或任何替代方法?

frameworks xcodebuild ios xcframework

17
推荐指数
2
解决办法
5359
查看次数

错误:旧版构建系统不支持使用 xcframeworks

我已经创建了 .xcframework 并尝试通过在 xcode 项目中嵌入 .xcframework 来在另一个应用程序中使用,但我收到一个错误“错误:遗留构建系统不支持使用 xcframeworks”。我正在 xcode 11.3 中测试这个

xcode swift xcframework

12
推荐指数
1
解决办法
6345
查看次数

使用 Cocoapods 创建 XCFramework 的错误

我正在尝试从 Xcode 框架项目(项目名称 XCFramework)生成一个 iOS XCFramework。项目由一些 cocoa-pods 库组成,如 Socket IO、SwiftKeyChainWrapper 等。 如果我生成没有 cocoa-pods 的 XCFramework,xcodebuild 命令会为 iOS 和 iOS 模拟器目标成功生成 XCFramework,但是当我在框架项目中安装 pod 时我收到很多错误。如果有人遇到这种情况并成功地帮助使用可可豆荚生成 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 …

ios cocoapods arm64 xcode11 xcframework

10
推荐指数
1
解决办法
1842
查看次数

自定义 XCFramework 的使用者如何访问标头文档?

我正在开发一个 XCFramework,它的公共接口有很多很好的文档(如 docstrings/Markup Apple Markup Formatting Reference )。但是,当框架包含在客户端应用程序中时,当您在方法或属性上按住 Option 键单击(“快速帮助”)时,Xcode 不会显示任何文档。

在 SDK.xcframework 文件夹中,有一个文件Headers/SDK-Swift.h实际上包含所有这些文档字符串。

有没有办法告诉 Xcode 使用附带的文档?

我的 XCFramework 是通过创建的xcodebuild -create-xcframework -framework x.framework -framework y.framework -output z.xcframework

xcode ios swift xcframework

9
推荐指数
0
解决办法
238
查看次数

无法从其模块界面构建模块;它可能已损坏,或者可能在生成时触发了 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?

ios swift xcframework

9
推荐指数
2
解决办法
3342
查看次数

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

环境

  • MacBook Pro(13 英寸,2017 年,两个 Thunderbolt 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 中运行它时,它就会崩溃。在调试器控制台中它抱怨

dyld: Library not loaded: @rpath/Auth0.framework/Auth0
  Referenced from: /private/var/containers/Bundle/Application/9575D8AA-BD35-447B-ACC3-F8545CDB62EE/FIT dev.app/FIT dev
  Reason: image not found
dyld: launch, loading dependent libraries
DYLD_LIBRARY_PATH=/usr/lib/system/introspection
DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libBacktraceRecording.dylib:/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib
Run Code Online (Sandbox Code Playgroud)

解决方案

最后,我看到了两年前的这篇Medium 帖子embed & sign,其中建议了拖放到项目中的框架。我对我的项目做了同样的事情,将Embed一些框架的状态从更改为Do not …

xcode ios carthage xcframework xcode12.5

9
推荐指数
1
解决办法
1754
查看次数

使用两个静态库(libssl.a、libcrypto.a)创建 XCFramework

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

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

我的目标是创建一个捆绑这两个静态库的 XCFramework,以便可以方便地将 Swift Package Manager 作为单个包使用。

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

xcodebuild -create-xcframework \
-library iphonesimulator/lib/libcrypto.a \
-headers iphonesimulator/include/ \
-library iphoneos/lib/libcrypto.a \
-headers iphoneos/include/ \
-output OpenSSL.xcframework
Run Code Online (Sandbox Code Playgroud)

输出如下:

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

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

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

xcodebuild -create-xcframework \
-library iphonesimulator/lib/libcrypto.a \
-headers iphonesimulator/include/ \
-library iphonesimulator/lib/libssl.a …
Run Code Online (Sandbox Code Playgroud)

openssl static-libraries ios libcrypto xcframework

9
推荐指数
1
解决办法
4726
查看次数

创建 xcframework 时无法从其模块界面构建模块“XXX”

目前我正在一个框架项目中工作,以分发给我们拥有的客户。该框架具有 SPM 依赖项,我想从中创建一个 XCFramework。我找到了使用该xcodebuild工具存档和生成 XCFramework 的脚本。问题是生成不工作,我收到以下错误Failed to build module 'XXX' from its module interface; it may have been damaged or it may have triggered a bug in the Swift compiler when it was produced。我不知道是否可以构建一个具有 SPM 依赖项的框架作为 XCFramework 我试图将它作为二进制框架分发以保护我们的源代码。我以前寻找过这个,但找不到任何有关此事的信息。有人可以帮助我吗?

xcode swift swift-package-manager xcframework

8
推荐指数
1
解决办法
996
查看次数

排除 XCFramework 进行模拟器构建

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

xcode ios xcframework

7
推荐指数
0
解决办法
1215
查看次数

具有 iOS Arm64 二进制框架 (.xcframework) 和 cinterop 的 KMM

我按照此处的指南尝试在新的 KMM 项目中使用不带 CocoaPods 的 iOS 框架:

https://kotlinlang.org/docs/kmm-add-dependency.html#without-cocoapods

我有一个现有的、工作的 .xcframework,我将其添加到 .xcframework 下的项目中shared/src。我添加了一个MyKit.def文件并在同一共享目录中src/nativeInterop/cinterop/更新了该文件:build.gradle.kts

MyKit.def 看起来像

language = Objective-C
modules = MyKit
package = MyKit
Run Code Online (Sandbox Code Playgroud)

构建.gradle.kts

import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget

plugins {
    kotlin("multiplatform")
    id("com.android.library")
}

kotlin {
    android()

    val iosTarget: (String, KotlinNativeTarget.() -> Unit) -> KotlinNativeTarget =
        if (System.getenv("SDK_NAME")?.startsWith("iphoneos") == true)
            ::iosArm64
        else
            ::iosX64

    iosTarget("ios") {
        binaries {
            framework {
                baseName = "shared"
            }
        }
    }
    sourceSets {
        val commonMain by getting
        val commonTest by getting { …
Run Code Online (Sandbox Code Playgroud)

android ios kotlin-multiplatform xcframework kotlin-multiplatform-mobile

7
推荐指数
1
解决办法
2229
查看次数