具有依赖项 cocoapods 链接错误的供应商框架
Vendored framework with dependencies cocoapods linking error
我需要发布一个已编译的框架 - 让我们用 cocoapods 称它为 Abc.framework。
此框架有一些依赖项 - 假设我需要 Nomosi and KeychainSwift。
播客文件:
platform :ios, '10.0'
use_frameworks!
target 'Abc' do
pod "Nomosi", "0.1.2"
pod "KeychainSwift", "18.0"
end
我可以使用脚本构建一个胖框架 like this。
播客规范:
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?)中的某些链接错误有关,但我真的不知道如何解决它。
构建脚本可能需要选项 BUILD_LIBRARY_FOR_DISTRIBUTION=YES
我只能在 https://xcodebuildsettings.com/:
找到最少的文档
Ensures that your libraries are built for distribution. For Swift,
this enables support for library evolution and generation of a module
interface file.
我假设该选项还应确保正确导出任何随机客户端库或应用程序可以使用的所有符号。
我需要发布一个已编译的框架 - 让我们用 cocoapods 称它为 Abc.framework。
此框架有一些依赖项 - 假设我需要 Nomosi and KeychainSwift。
播客文件:
platform :ios, '10.0'
use_frameworks!
target 'Abc' do
pod "Nomosi", "0.1.2"
pod "KeychainSwift", "18.0"
end
我可以使用脚本构建一个胖框架 like this。
播客规范:
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?)中的某些链接错误有关,但我真的不知道如何解决它。
构建脚本可能需要选项 BUILD_LIBRARY_FOR_DISTRIBUTION=YES
我只能在 https://xcodebuildsettings.com/:
找到最少的文档Ensures that your libraries are built for distribution. For Swift, this enables support for library evolution and generation of a module interface file.
我假设该选项还应确保正确导出任何随机客户端库或应用程序可以使用的所有符号。