App Clip 可以在 iOS Cocoapods 项目中使用吗?

Posted

技术标签:

【中文标题】App Clip 可以在 iOS Cocoapods 项目中使用吗?【英文标题】:Can App Clip be used in an iOS Cocoapods project? 【发布时间】:2020-07-08 02:25:44 【问题描述】:

我们的应用程序是在 2018 年中期使用 Swift 4 创建的,其他 3rd 方依赖于 Cocoapods。 我添加了一个 Clip 目标,项目结构与 session 下的下载链接给出的不同。运行这个目标,这里是崩溃错误:

Reason: image not found

dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire
  Referenced from: /private/var/containers/Bundle/Application/57185773-B735-4EE5-BB51-790DF004A85B/kt_ios_Clip.app/kt_iOS_Clip
  Reason: image not found
dyld: launch, loading dependent libraries
DYLD_LIBRARY_PATH=/usr/lib/system/introspection
DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libBacktraceRecording.dylib:/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib:/Developer/Library/PrivateFrameworks/GPUTools.framework/libglInterpose.dylib:/usr/lib/libMTLCapture.dylib

这是 Podfile:

platform :ios, '10.0'
inhibit_all_warnings!

target '<Main App>' do
    use_frameworks!
  
    pod 'SnapKit' , '4.2.0'                     
    pod 'Alamofire' , '4.7.3' 
    ......                  
    
  target '<Main App>Tests' do
    inherit! :search_paths
  end
  
  swift_41_pod_targets = ['Spring','PKHUD', 'FSPagerView', 'SQLite.swift','FaveButton']
  
  post_install do | installer |
      
      installer.pods_project.targets.each do |target|
          if target.name == 'Cache'
              target.build_configurations.each do |config|
                  level = '-Osize'
                  config.build_settings['SWIFT_OPTIMIZATION_LEVEL'] = level
                  puts "Set #target.name #config.name to Optimization Level #level"
              end
          end
          if swift_41_pod_targets.include?(target.name)
              
              target.build_configurations.each do |config|
                  
                  config.build_settings['SWIFT_VERSION'] = '4.1'
                  
              end
              
          end
          
      end
      
  end

  target '<Main App>UITests' do
    inherit! :search_paths
  end

end

【问题讨论】:

【参考方案1】:

正如提到的其他答案,单独的应用剪辑目标和use_modular_headers! 为我工作

platform :ios, '13.0'

target 'MainAppTarget' do
  
  use_frameworks!

  pod 'Firebase/Analytics'
  pod 'Firebase/RemoteConfig'

  target 'MainAppTargetTests' do
    inherit! :search_paths
  end

end

target 'AppClipTarget' do
  
  use_modular_headers!

  pod 'Firebase/Analytics'

  target 'AppClipTargetTests' do
    inherit! :search_paths
  end

  target 'AppClipTargetUITests' do
  end

end

【讨论】:

【参考方案2】:

我通过在我的 podfile 中添加另一个指向 AppClip 目标的目标来解决此问题

参考:https://www.natashatherobot.com/cocoapods-installing-same-pod-multiple-targets/

【讨论】:

不行,使用'use_modular_headers!'而不是“use_frameworks!” . 当我刚刚在 Podfile 中复制 Target(用于 AppClip)时,它对我有用。【参考方案3】:

有,但目前没有(2020.7.15)。

igor-makarov 已经向 master 提交了一个 app clip 支持,现在就等下一个 CocoaPods 发布吧。

https://github.com/CocoaPods/CocoaPods/commit/3a5deed0adfa306307027753898cca5e23be14bd

【讨论】:

【参考方案4】:

我认为正确的做法是设置另一个目标(在我的情况下,我将它放在主要目标之外,因为我只想要几个 pod)。

但是,Cocoapods 需要更新一些内容才能正确导出/设置所有内容。由于最近引入了 App Clips,Cocoapods 还没有发布带有修复的新稳定版本 (https://github.com/CocoaPods/CocoaPods/pull/9882)。所以我们只需要稍等片刻,我猜。同时,您可以手动添加 Embed Pods Frameworks,它会正常工作。

参考:https://developer.apple.com/forums/thread/652683?login=true

【讨论】:

【参考方案5】:

对我有用的是:

sudo gem install cocoapods --pre

在本文发布时 Cocoapods 最新的稳定版本不支持带有 cocoaPods 的应用剪辑目标。

【讨论】:

以上是关于App Clip 可以在 iOS Cocoapods 项目中使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何为现有项目创建 App Clip iOS 14

iOS SwiftUI App Clip WKWebView 和 SFSafariViewController 不起作用

如何在商店中没有应用的情况下配置 App Clip

iOS Catalyst Cocoapod 框架错误 - 签名需要开发团队

如何创建一个 cocoapod 库

如何使用 NFC 标签修复 App Clip 启动体验?