【问题标题】:Vendored framework with dependencies cocoapods linking error具有依赖项 cocoapods 链接错误的供应商框架
【发布时间】:2020-05-04 10:17:45
【问题描述】:

我需要发布一个已编译的框架 - 我们称之为 Abc.framework with cocoapods。

这个框架有一些依赖——假设我需要NomosiKeychainSwift

Pod 文件:

platform :ios, '10.0'
use_frameworks!

target 'Abc' do
  pod "Nomosi", "0.1.2"
  pod "KeychainSwift", "18.0"
end

我能够使用脚本like this 构建一个胖框架。

Pod 规格:

Pod::Spec.new do |s|
  s.name             = 'Abc'
  s.version          = '0.0.1'
  s.summary          = 'Abc description.'
  s.description      = 'Abc looong description.'
  s.homepage         = 'https://test.com'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'Author' => 'me@test-email.com' }
  s.source           = { :git => 'https://github.com/test/this-is-not-a-repo.git', :tag => s.version.to_s }
  s.ios.deployment_target = '10.0'
  s.public_header_files = "Build/Abc.framework/Headers/*.h"
  s.source_files = "Build/Abc.framework/Headers/*.h"
  s.vendored_frameworks = 'Build/Abc.framework'
  s.dependency 'KeychainSwift', '18.0'
  s.dependency 'Nomosi', '0.1.2'
end

现在,如果我使用本地 pod 创建一个演示项目,它会编译但会出现运行时崩溃:

dyld: Symbol not found: _$s6Nomosi15ServiceResponseP5parse4dataxSg10Foundation4DataV_tKFZTq
  Referenced from: /Users/mario/Library/Developer/CoreSimulator/Devices/DFF39FE4-F274-4E4E-9710-AB24B043CFB0/data/Containers/Bundle/Application/A9C811DE-19D6-4535-996B-B5F2D142D691/AbcDemo.app/Frameworks/Abc.framework/Abc

如果 podspec 指向实际源代码(而不是提供已编译的 fat 框架),则应用不会崩溃。

这可能与框架中的一些链接错误有关(@rpath?),但我真的不知道如何修复它。

【问题讨论】:

标签: swift xcode frameworks cocoapods


【解决方案1】:

构建脚本可能需要选项BUILD_LIBRARY_FOR_DISTRIBUTION=YES

我只能在 https://xcodebuildsettings.com/ 找到最少的文档:

确保您的库是为分发而构建的。对于斯威夫特, 这可以支持库的演变和模块的生成 接口文件。

我假设该选项还应确保正确导出任何随机客户端库或应用程序可以使用的所有符号。

【讨论】:

  • Paul,你能解释一下为什么需要这样做吗?
  • @Honey 为答案添加了更多内容
猜你喜欢
  • 2019-11-16
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 2015-09-29
相关资源
最近更新 更多