2

我们正在开发一个框架,它依赖于一些 firebase 依赖项,如登录、分析等。一旦我们的框架开发完成,我们会将其分发给我们的客户。

需要注意的事情是

  1. 代码不可见(最好的建议是创建 XCFramework)
  2. 如果可能,创建一个动态框架而不是静态框架
  3. 可以通过 Swift 包管理器或 cocoapods 分发

我们尝试过的

  1. 我们尝试使用 pod 创建一个动态框架,然后创建一个 XCFramework。但是在导入客户端应用程序时,找不到 pods 模块
  2. 我们创建了静态库并手动添加了 firebase(直接在项目中)而不是 pod,在这种情况下 XCFramework 没有被导入

我们已尝试创建 带有 Pods Dependencies 的 XCFramework,如此处所述(对于动态框架)

可以使用隐藏代码伞框架和通用库,但是对于firebase,这种方法是典型的,并且在许多地方也没有在互联网上建议有没有其他/替代方法可以满足我们的要求?

4

1 回答 1

1

我们现在有完全相同的设置,而且效果很好。希望对你也有帮助。

需要注意的事项:

  • 这是一个 XCFramework 发行版。
  • 它由 CocoaPods 分发(尽管在私有 Podspec 存储库中)
  • 这是一个动态的框架。

先决条件:

  • CocoaPods 版本 >= 1.10.1
  • Xcode 版本 >= 11.6(可能会更低,但不确定)

创建你的 后.xcframework,你需要有一个.podspec框架,它应该如下所示:

Pod::Spec.new do |s|

  # ―――  Spec Metadata  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  s.name         = "MyAwesomeSDK"
  s.version      = "1.0.0"
  s.summary      = "Best framework ever: MyAwesomeSDK"
  s.description  = <<-DESC
                   "Best framework ever: MyAwesomeSDK"
                   DESC
  s.homepage     = "http://github.com"
  s.license      = "MIT"
  s.author       = { "ItIsI" => "me@myself.com" }

  # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  s.platform = :ios
  s.ios.deployment_target = '11.3'

  # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  s.source = { :http => '<MyAwesomeSDK.zip> (We're storing our zipped .xcframework in a hosted page)' }
  s.vendored_frameworks = 'MyAwesomeSDK.xcframework'

  s.swift_version = "5.0"

  # ――― Dependencies ―――――――――――――――――――――――――――---――――――――――――――――――――――――――――――― #
  s.dependency 'SwiftProtobuf',   '1.12.0'
  s.dependency 'lottie-ios',      '3.1.8'
  # Any other dependency you might need.
end

然后,我们通过 Podfile 在另一个项目中使用它,如下所示:

platform :ios, '13.0'

# If you're going to have a private Podspec repo, add the source URL here.
# Don't forget to add the original source if you're going to specify another source.
# source 'https://cdn.cocoapods.org/'

target 'Test' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # If you are publishing the SDK publicly or in a private Podspec repository, this is it:
  pod 'MyAwesomeSDK'

  # If not, you should provide the .podspec to your customers, and:
  pod 'MyAwesomeSDK', :podspec => '<path/to/MyAwesomeSDK.podspec>'

  target 'TestTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'TestUITests' do
    # Pods for testing
  end

end

那么,就是这样!运行时pod install,您应该看到:

Analyzing dependencies
Downloading dependencies
Installing MyAwesomeSDK (1.0.0)
# These are our own:
# ---
Installing SwiftProtobuf (1.12.0)
Installing lottie-ios (3.1.8)
# ---
Generating Pods project
Integrating client project
Pod installation complete! There is 1 dependency from the Podfile and 3 total pods installed.

PS:我们还必须在 Podfile 中添加 post_install 设置,否则它将无法正确链接依赖框架:

if ["SwiftProtobuf", "lottie-ios"].include? target.name
  target.build_configurations.each do |config|
    config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
  end
end
于 2020-11-07T12:30:54.973 回答