Cocoapod 具有针对相同架构但不同平台(ios 和 ios 模拟器)的预构建静态库

问题描述 投票:0回答:2

我们有这个 podspec 使用

spec.vendored_libraries
引用静态库。静态库是针对两种情况构建的:

  • arm64、ios

  • arm64,ios模拟器

Pod::Spec.new do |spec|
    spec.platform                 = :ios
    spec.name                     = 'pod_lib'
    spec.version                  = '1.0.0'
    spec.homepage                 = 'pod_lib'
    spec.source                   = { :git => "Not Published", :tag => "Cocoapods/#{spec.name}/#{spec.version}" }
    spec.authors                  = 'Authors'
    spec.license                  = ''
    spec.summary                  = 'pod_lib'
    spec.ios.deployment_target    = '13.5'
    spec.source_files             = 'headers/**/*.h'
    spec.public_header_files      = 'headers/**/*.h'
    spec.vendored_libraries       = 'iosArm64/lib/a.a'
    spec.header_mappings_dir      = 'headers'
    spec.static_framework         = true
    spec.libraries                = 'c++'
    spec.pod_target_xcconfig      = {
    'CLANG_CXX_LANGUAGE_STANDARD' => 'c++20',
    'CLANG_CXX_LIBRARY' => 'libc++',
    'ARCHS' => 'arm64',
    }
end

是否可以在 cocoapod podspec 中指定这两个库?

我想要一些类似的东西

    spec.vendored_libraries       = 'iosArm64/lib/a.a',
                                    'iosSimulatorArm64/lib/a.a'

由于库名称相同,这不起作用,而且似乎尚不支持此类功能:https://github.com/CocoaPods/CocoaPods/issues/8688

作为一种解决方法,有些人建议使用

lipo
来构建通用二进制文件:

lipo -create -output libuniversal.a ./iosArm64/lib/a.a ./iosSimulatorArm64/lib/a.a

这不起作用,因为两个二进制文件已经为相同的架构(arm64)构建。

是否有可能拥有一个包含两个平台的 cocoapod?或者有其他方法可以解决这个问题吗?

ios cocoapods ios-simulator podspec xcframework
2个回答
0
投票

支持具有相同架构的多个平台的问题是 Apple 创建 XCFramework 构造的原因。详情请见https://developer.apple.com/documentation/xcode/creating-a-multi-platform-binary-framework-bundle


0
投票

在下面的链接中,描述了使用

ar
libtool
来制作通用静态库,然后可以将其包装到适用于 iOS 和 iOS 模拟器平台的 XCFramework 中

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

© www.soinside.com 2019 - 2024. All rights reserved.