我正在开发一个闭源框架,它将使用 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) 我为 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 时,我在终端上收到了下面提到的消息,并且没有生成 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)
有什么我想念的吗?
我的 iOS 项目分为几个 SPM 模块。现在我想将其中一些作为 .xcframework 分发。
有没有办法从 SPM 模块自动创建 .xcframeworks?或者我可以使用一些(fastlane?)脚本来创建它们?
我的 Xcode 12.0 有问题。我正在尝试使用 Carthage 切换到 XCFrameworks --use-xcframeworks。Carthage 构建成功,我可以将胖库切换到 XCFrameworks 并使 App 目标构建并运行。问题在于测试。当我添加 Quick、RxTesting 或 RxBlocking 来测试它未构建的目标时,Xcode 看不到符号。我在 RxSwift git 上发现了一个问题:https://github.com/ReactiveX/RxSwift/issues/2292
也许有人让它工作并成功切换到 XCFrameworks。
我已经在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) 我创建了一个 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) 我有一个静态库,主要是用 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
我现在应该如何进行?
我想创建一个带有具有子依赖项的二进制目标的 Swift 包。由于二进制目标不支持开箱即用的子依赖项,因此我创建了一个依赖于二进制框架和其他依赖项的包装器目标,如此处所述
包有一个名为 的目标Logger。
CocoaLumberjack是 的依赖项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) 我有一个 XCFramework,其中有另一个 XCFramework。它们都包含 dSYMs 文件夹。当我尝试xcodebuild主框架时出现错误:
Missing path from XCFramework as defined by DebugSymbolsPath in its Info.plist file
我该如何解决这个问题?问题是,当我从本地计算机 xcodebuild 时,我没有看到任何错误,但是当我尝试从 CircleCI 运行它时 - 我的 CI 作业因此错误而停止。