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 项目中使用吗?的主要内容,如果未能解决你的问题,请参考以下文章
iOS SwiftUI App Clip WKWebView 和 SFSafariViewController 不起作用