标签: xcframework

使用 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 部分工作。

// swift-tools-version:5.3
import PackageDescription
let package = Package(
    name: "MyFramework",
    platforms: [
        .iOS(.v13)
    ],
    products: [
        .library(name: "MyFramework", targets: ["MyFramework", "MyFramework-Dependencies"])
    ],
    dependencies: [
        .package(name: "Auth0", url: "https://github.com/auth0/Auth0.swift.git", from: "1.30.1")
    ], …
Run Code Online (Sandbox Code Playgroud)

ios swift swift-package-manager xcframework

6
推荐指数
1
解决办法
1217
查看次数

从 Objective-C 使用 FFmpeg XCFramework,未找到标头

我为 Apple 平台构建了 FFmpeg 作为 XCFramework。我使用https://github.com/kewlbear/FFmpeg-iOS-build-script/pull/147中的脚本来执行此操作。

我现在尝试在传统的 iOS/macOS 框架(名为 VideoEditing)中使用该框架,然后在我的 iOS 应用程序中使用该框架(很快将尝试成为 Catalyst)。

VideoEditing我链接到FFmpeg.xcframework然后在使用VideoEditing我链接和嵌入的应用程序中FFmpeg.xcframework。之前我将 FFmpeg 构建为标准静态库,并VideoEditing在 Objective-C++ 包装器内部使用它,这样我就可以从 Swift 中使用它。

在该 Objective-C++ 文件中,我将导入 FFmpeg 标头,例如#import <libswscale/swscale.h>为了使其工作,我必须设置标头搜索路径。转换到 XCFramework 后该怎么做?我已经尝试过了@import FFmpeg#import <FFmpeg/libswscale/swscale.h>以及#import <FFmpeg/swscale.h>#import <libswscale/swscale.h>在每种情况下我都会收到一个file not found错误import

Apple 的所有示例都仅在 Swift 中通过框架提供模块来展示它。如果我尝试仍然设置标头搜索路径,那么现在每个架构都有不同的标头。

XCFramework内容概述

xcode ffmpeg objective-c linker-errors xcframework

5
推荐指数
1
解决办法
1761
查看次数

XCFramework 问题,标识符为“ios-armv7_arm64”的库已经存在

在创建 XCFramework 时,我在终端上收到了下面提到的消息,并且没有生成 xcframework A library with the identifier "ios-armv7_arm64" already exists.

这是我正在运行的命令

xcodebuild -create-xcframework \
-framework ./archives/My-iOS.xcarchive/Products/Library/Frameworks/My.framework \
-framework ./archives/My-iOS-Simulator.xcarchive/Products/Library/Frameworks/My.framework \
-output My.xcframework
Run Code Online (Sandbox Code Playgroud)

有什么我想念的吗?

xcode xcodebuild swift xcframework

5
推荐指数
1
解决办法
599
查看次数

将 SPM 模块转换为 .xcframework

我的 iOS 项目分为几个 SPM 模块。现在我想将其中一些作为 .xcframework 分发。

有没有办法从 SPM 模块自动创建 .xcframeworks?或者我可以使用一些(fastlane?)脚本来创建它们?

swift-package-manager swift5 ios13 xcframework xcode12

5
推荐指数
0
解决办法
560
查看次数

Xcode 12.0 - XCFrameworks 无法在测试目标中工作

我的 Xcode 12.0 有问题。我正在尝试使用 Carthage 切换到 XCFrameworks --use-xcframeworks。Carthage 构建成功,我可以将胖库切换到 XCFrameworks 并使 App 目标构建并运行。问题在于测试。当我添加 Quick、RxTesting 或 RxBlocking 来测试它未构建的目标时,Xcode 看不到符号。我在 RxSwift git 上发现了一个问题:https://github.com/ReactiveX/RxSwift/issues/2292 也许有人让它工作并成功切换到 XCFrameworks。

xcode xctest swift rx-swift xcframework

5
推荐指数
0
解决办法
738
查看次数

pod 规范 lint 验证失败:无法为当前构建架构找到匹配的 .xcframework 切片 (x86_64 i386)

我已经在cocoapod中有我的框架,使用xcframework,里面有几个框架: ios-arm64 ios-arm64_x86_64-maccatalyst ios-arm64_x86_64-simulator tvos-arm64 tvos-arm64_x86_64-simulator

在第一次推送时,我只将 s.ios.deployment_target 放入 podspec 中,但忘记了 s.tvos.deployment_target。我编辑 podspec 文件(更新的 s.version 旧版为 1.0.0,新版为 1.0.0-tvOS ,添加 s.tvos.deployment_target),在 github 上提交并推送,并创建一个与版本同名的标签。

Pod::Spec.new do |s|
s.name             = 'projectSwift'
s.version          = '1.0.0-tvOS'
s.summary          = 'summ'
s.description      = 'descri'
s.homepage         = 'http://homepage.com'
s.license          = { :type => 'MIT', :file => 'LICENSE' }
s.author           = { 'author' => 'author@mmmail.com' }
s.source           = { :git => 'linktogit', :tag => s.version  }
s.vendored_frameworks = "projectSwift.xcframework"
s.ios.deployment_target = '10.2'
s.tvos.deployment_target = '9.0'
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' …
Run Code Online (Sandbox Code Playgroud)

ios cocoapods podspec xcframework

5
推荐指数
0
解决办法
1216
查看次数

在 React Native 库中使用本地 .xcframework 的 Podspec 文件应该是什么?

我创建了一个 React Native 库,它是在 React Native 项目中使用本机 iOS 框架的包装器。早些时候我使用过.framework,它运行良好。现在我在使用这个库时遇到问题.xcframework而不是.framework

我将此库添加为项目的依赖项,然后在运行时pod install出现以下错误:

[!] [Xcodeproj] 生成重复的 UUID:

当我打开项目并尝试构建它时,它在设备上成功构建,但在模拟器上失败。

以下是我在库项目中使用的 Podspec 文件:

Pod::Spec.new do |s|
  s.name         = "react-native-myLibrary"
  s.version      = "1.0.0"
  s.summary      = "react-native-myLibrary"
  s.description  = <<-DESC
                    react-native-myLibrary
                   DESC
  
  s.homepage     = "https://github.com/geektimecoil/react-native-onesignal"
  s.license      = "MIT"
  s.author       = { "author" => "author@domain.cn" }
  s.platform     = :ios, "10.0"
  s.source       = { :http => 'file:' + __dir__ + '/' }

  s.source_files = "**/*.{h,m,swift}"
  s.requires_arc = true
  s.vendored_frameworks = …
Run Code Online (Sandbox Code Playgroud)

ios cocoapods podspec react-native-ios xcframework

5
推荐指数
1
解决办法
7133
查看次数

如何为obj c静态库创建xcframework?

我有一个静态库,主要是用 Objective C / C++ 编写的,称为 libA。现在我想使用另一个名为 libB 的静态库中的标头,该库位于 swift 上。

因此,我必须通过 Bridging-Header.h 公开标头,并在 libA 中创建一个空的 swift 文件,以便将 libA 作为 import A 导入到 libB 的 swift 类中。

现在我想为 libA 创建二进制框架(xcframework),为此我必须启用“Build Libraries for Distribution”,但我无法执行此操作,因为我在 libA 中使用 Bridging-Header.h

我现在应该如何进行?

static-libraries xcframework

5
推荐指数
0
解决办法
317
查看次数

在 Swift 包管理器中添加对二进制目标的依赖项

我想创建一个带有具有子依赖项的二进制目标的 Swift 包。由于二进制目标不支持开箱即用的子依赖项,因此我创建了一个依赖于二进制框架和其他依赖项的包装器目标,如此处所述

包有一个名为 的目标LoggerCocoaLumberjack是 的依赖项Logger

Logger我已生成 XCFramwork 并托管在可公开访问的服务器中。下面我添加了用于生成 XCFramwork 的 Xcode 项目的屏幕截图。

请参阅包清单文件。

import PackageDescription

let package = Package(
    name: "spmpoc",
    products: [
        .library(
            name: "Logger",
            targets: ["LoggerTarget"]),
    ],
    dependencies: [
        .package(
            name: "CocoaLumberjack",
            url: "https://github.com/CocoaLumberjack/CocoaLumberjack.git",
            from: "3.6.1"),
    ],
    targets: [
        .target(
              name: "LoggerTarget",
              dependencies: [.target(name: "LoggerWrapper",
                                     condition: .when(platforms: [.iOS]))]
            ),
        .target(
              name: "LoggerWrapper",
              dependencies: [
                .target(name: "Logger", condition: .when(platforms: [.iOS])),
                .product(name: "CocoaLumberjack", package: "CocoaLumberjack")
              ]
            ),
        .binaryTarget(name: "Logger", url: "https://mypath.com/Logger.xcframework.zip", …
Run Code Online (Sandbox Code Playgroud)

ios swift swift-package-manager xcframework

5
推荐指数
1
解决办法
2761
查看次数

缺少 Info.plist 文件中 DebugSymbolsPath 定义的 XCFramework 路径

我有一个 XCFramework,其中有另一个 XCFramework。它们都包含 dSYMs 文件夹。当我尝试xcodebuild主框架时出现错误:

Missing path from XCFramework as defined by DebugSymbolsPath in its Info.plist file

我该如何解决这个问题?问题是,当我从本地计算机 xcodebuild 时,我没有看到任何错误,但是当我尝试从 CircleCI 运行它时 - 我的 CI 作业因此错误而停止。

xcode ios dsym circleci xcframework

5
推荐指数
1
解决办法
4230
查看次数