我需要交付一个已编译的框架-我们称其为带有cocoapods的Abc.framework。
此框架具有某些依赖性-假设我需要Nomosi和KeychainSwift。
Podfile:
platform :ios, '10.0'
use_frameworks!
target 'Abc' do
pod "Nomosi", "0.1.2"
pod "KeychainSwift", "18.0"
end
我能够使用脚本like this构建胖框架。
Podspec:
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?),但我真的不知道如何解决。
答案 0 :(得分:1)
构建脚本可能需要选项 BUILD_LIBRARY_FOR_DISTRIBUTION=YES
我只能在 https://xcodebuildsettings.com/ 找到最少的文档:
<块引用>确保您的库是为分发而构建的。对于斯威夫特, 这可以支持库的演变和模块的生成 接口文件。
我假设该选项还应该确保任何随机客户端库或应用程序可以使用的所有符号都被正确导出。