在 swift 框架中使用 GTM 时,'Pods-App' 目标具有包含静态二进制文件的传递依赖项
The 'Pods-App' target has transitive dependencies that include static binaries when using GTM in a swift framework
我正在尝试重新制作 swift 3 项目的一部分,使其成为 swift 框架 以便将其用作 pod .问题是我需要使用 GoogleTagManager legacy (v3) 作为依赖项,并且在执行 pod spec lint
时出现以下错误:
ERROR | [iOS] unknown: Encountered an unknown error (The 'Pods-App'
target has transitive dependencies that include static binaries:
(/private/var/folders/7t/0cd0n1gn46xd7r1cywrgcy2w0000gn/T/CocoaPods/Lint/Pods/GoogleTagManager/Libraries/libTagManager.a))
during validation.
或者,使用 GTM v5:
ERROR | [iOS] unknown: Encountered an unknown error (The 'Pods-App'
target has transitive dependencies that include static binaries:
(/private/var/folders/7t/0cd0n1gn46xd7r1cywrgcy2w0000gn/T/CocoaPods/Lint/Pods/GoogleTagManager/Frameworks/GoogleTagManager.framework))
during validation.
我使用的是最新的 cocoapods 版本 (1.1.0.rc.2),据我了解,问题出在 GTM pod 的依赖项上,其中至少有一个是静态库.
我读了一些线程,其中人们谈论在框架内安装静态库或在创建 pod 时将静态库包装到框架中的解决方法。问题是静态库是 GTM pod 的依赖项,所以我无法控制它。至少那是我在 here.
中的理解
这是我的 Podfile :
# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
target 'MyProject' do
# Comment this line if you're not using Swift and don't want to use dynamic frameworks
# use_frameworks!
# Pods for MyProject
pod 'GoogleTagManager', '~> 3.15.2'
end
这是我的(Whosebug 的简称)MyProject.podspec :
Pod::Spec.new do |s|
s.name = "MyProject"
s.version = "0.1.0"
s.platform = :ios, '8.0'
s.ios.deployment_target = '8.0'
s.source_files = "MyProject", "MyProject/**/*.{h,m}", "MyProject/**/*.{swift}"
s.dependency 'GoogleTagManager', '~> 5.0.0'
end
我已经尝试下载 GTM SDK 并在没有 cocoapods 的情况下安装它,但我想我错过了一步,因为我无法让它工作。
所以我想要一些关于我的 podspec 和 podfile 文件的建议,或者关于如何在没有 cocoapods 的情况下安装 SDK 的解释。非常感谢!
好吧,几个月后我不得不回到这个项目。由于 GTM pod 没有改变并且仍然有静态库作为依赖项,因此仍然不可能创建一个具有 GTM pod 作为依赖项的框架并通过 Cocoapods.[=36 分发它=]
我最终决定忽略 Cocoapods 并手动将第三方框架添加到我的。所以这个答案并不完全符合我的问题,但这是我发现分发我的框架的唯一方法。
所以,第一步是创建一个新项目。 Select Cocoa 触控框架 :
给它起个名字,我的是myFramework。一旦您的工作场所准备就绪,请为其添加一个新目标:
单击跨平台选项卡和 select 聚合模板。我将我的命名为 Aggregate(非常有创意)。不过我们暂时不会太在意。
完成后,您的工作场所就准备好了,您可以创建自己的惊人框架!让我们再深入一点!
您现在要创建或复制您的源文件。如果您复制它们,请不要忘记选中 如果需要复制项目 复选框,并确保它们已添加到框架目标中:
到现在为止,我想没有什么大惊喜。
由于我的问题是关于 GTM 的,因此我们将添加该框架作为我们框架的依赖项。我在 Cocoapods 上的其他地方找不到源,所以我创建了一个新项目(我使用应用程序模板并将其命名为 PodApp),然后我添加了Cocoapods。打开终端并导航到 PodApp 项目文件夹:
pod init
vi Podfile
- 对于 PodApp,在 #Pods 下,添加
pod 'GoogleTagManager', '~> 6.0.0'
- 保存并关闭 Podfile,然后 运行
pod install
- 下载并安装依赖项后,关闭 PodApp 项目 window 和 运行
open PodApp.xcworkspace
在您的框架项目中,添加一个您将命名为 Frameworks 的新组(右键单击 Xcode 导航器 -> 新组)。您将复制 myFramework 的框架组下的 PodApp 项目中下载的所有依赖项 Cocoapods。再一次,不要忘记将其添加到 myFramework 目标 并如上所示在需要时复制项目。
在下图中,点击1、2、3,如果一切正常一切顺利,您应该会看到刚刚在 4 上添加的 frameworks/libs。
要使 Firebase 正常工作,您还必须 link 和 AdSupport.framework。只需单击 + (5),搜索并添加它。
我在使用 GoogleToolBoxForMac 时也遇到了一些麻烦,我必须做的是构建 PodApp 项目,并将 GoogleToolBoxForMac.framework 复制到 下PodApp/Pods/Products/ 在组 myFramework/Frameworks/ 中。 记得将其添加到正确的目标并复制项目。
另一个与 GTM 相关的棘手细节:您必须向您的框架添加一些资源。按照下一张图片上的步骤操作:
在打开的弹出窗口中,单击 添加其他 并找到保存 GTM.framework 的位置,展开它并添加 TagManagerResources.bundle(不要不要忘记复制项目!)。
由于其他资源可能会给您警告(在此特定示例中),您可以使用 -.
删除它们
如果您希望框架的最终用户能够使用您嵌入的框架,请在 "Copy Bundle Resources" 上方打开 "Headers" 面板,拖放所有 项目 headers 到 public.
所有这些框架现在都可以通过您自己的框架访问,但是要使它们可用,您必须在您的 myFramework.h 中导入它们的 headers :
#import <myFramework/AnObjectiveCClass.h>
#import <GoogleTagManager/GoogleTagManager.h>
#import <GoogleTagManager/TAGCustomFunction.h>
#import <myFramework/GTMDefines.h>
#import <myFramework/GTMNSData+zlib.h>
#import <FirebaseCore/FirebaseCore.h>
#import <FirebaseAnalytics/FirebaseAnalytics.h>
#import <FirebaseInstanceID/FirebaseInstanceID.h>
#import <myFramework/GAI.h>
#import <myFramework/GAIDictionaryBuilder.h>
#import <myFramework/GAIEcommerceFields.h>
#import <myFramework/GAIEcommerceProduct.h>
#import <myFramework/GAIEcommerceProductAction.h>
#import <myFramework/GAIEcommercePromotion.h>
#import <myFramework/GAIFields.h>
#import <myFramework/GAILogger.h>
#import <myFramework/GAITrackedViewController.h>
#import <myFramework/GAITracker.h>
#import <myFramework/pb_encode.h>
#import <myFramework/pb.h>
#import <myFramework/pb_decode.h>
#import <myFramework/pb_common.h>
好的,我们快完成了!
现在,select 您项目的信息部分(上图中的 1),检查您正在构建的版本(我的版本是 8.0 向后与大多数设备的兼容性)。在 Configurations 面板下,通过 select 删除 Debug,然后按 -.
现在 select 构建设置(图像上的 2),我们将在此处进行一些更改。
- 仅构建活动架构:否
- 允许Non-modular包含在框架模块中:否
- 有效架构 : arm64 armv7 i386 x86_64 (因为在此示例中 armv7s 不针对某些框架构建)
- 预处理器宏:PB_NO_PACKED_STRUCTS=1 PB_FIELD_32BIT=1
- 启用模块(C 和 Objective-C) : Ye
在你的两个target中,对于提到的Build Settings,将它们设置为$(inherited),这意味着它们将继承你刚刚在Project Build上设置的参数设置。
在框架目标中,我也将 Other Linker Flags 设置为 PodApp 项目中的设置,但我不是 100% 确定这是必要的。
(仅供参考,它们在这里:$(继承)-ObjC -l"GoogleAnalytics" -l"c++" -l"sqlite3" -l"z"-框架"AdSupport"-框架"CoreTelephony"-框架"FirebaseAnalytics"-框架"FirebaseCore"-框架"FirebaseInstanceID"-框架"GoogleSymbolUtilities"-框架"GoogleTagManager" -框架"GoogleToolboxForMac" -框架"GoogleUtilities" -框架"JavaScriptCore" -框架"SystemConfiguration" -框架"StoreKit" -框架"AddressBook" -框架"CoreData")
将定义模块设置为是。
现在 select 聚合目标,它将创建一个胖框架,一个包含我们框架的多个版本的文件,一个用于我们在几步前指定的每个体系结构(arm64 armv7 i386 x86_64)。我们必须告诉 Xcode 我们希望它构建什么。按照下图 (1) 的步骤操作:
在构建阶段,您希望聚合目标在构建自身之前先构建 myFramework.framework。
添加myFramework.framework后,按图中注释为2的+,select 新运行脚本阶段。
将以下脚本粘贴到其中:
# Merge Script
# 1
# Set bash script to exit immediately if any commands fail.
set -e
# 2
# Setup some constants for use later on.
FRAMEWORK_NAME="myFramework"
# 3
# If remnants from a previous build exist, delete them.
if [ -d "${SRCROOT}/build" ]; then
rm -rf "${SRCROOT}/build"
fi
# 4
# Build the framework for device and for simulator (using
# all needed architectures).
xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -arch arm64 -arch armv7 -arch armv7s only_active_arch=no defines_module=yes -sdk "iphoneos"
xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -arch x86_64 -arch i386 only_active_arch=no defines_module=yes -sdk "iphonesimulator"
# 5
# Remove .framework file if exists from previous run.
if [ -d "${PROJECT_DIR}/${FRAMEWORK_NAME}.framework" ]; then
rm -rf "${PROJECT_DIR}/${FRAMEWORK_NAME}.framework"
fi
# 6
# Copy the device version of framework to Framework directory.
cp -r "${SRCROOT}/build/Release-iphoneos/${FRAMEWORK_NAME}.framework" "${PROJECT_DIR}/${FRAMEWORK_NAME}.framework"
# 7
# Replace the framework executable within the framework with
# a new version created by merging the device and simulator
# frameworks' executables with lipo.
lipo -create -output "${PROJECT_DIR}/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" "${SRCROOT}/build/Release-iphoneos/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" "${SRCROOT}/build/Release-iphonesimulator/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}"
# 8
# Copy the Swift module mappings for the simulator into the
# framework. The device mappings already exist from step 6.
cp -r "${SRCROOT}/build/Release-iphonesimulator/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule/" "${PROJECT_DIR}/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule"
# 9
# Delete the most recent build.
if [ -d "${SRCROOT}/build" ]; then
rm -rf "${SRCROOT}/build"
fi
# 10
# Remove .zip file if exists from previous run.
if [ -d "${PROJECT_DIR}/${FRAMEWORK_NAME}.zip" ]; then
rm -rf "${PROJECT_DIR}/${FRAMEWORK_NAME}.zip"
fi
# 11
# Zip the Framework and License all together.
zip -r "${PROJECT_DIR}/${FRAMEWORK_NAME}.zip" "${PROJECT_DIR}/LICENSE" "${PROJECT_DIR}/${FRAMEWORK_NAME}.framework"
在脚本的第 2 步中,将名称更改为您的框架名称。花点时间了解它的作用,如果不符合您的要求,请更改其行为。它最后所做的是在您的项目文件夹中创建一个框架和一个 zip 存档。我在每个 Github 版本中对 link 都这样做了。
现在一切正常。 Select 聚合为活动方案,并运行 它。
如果您想在测试应用程序中添加您的框架,创建一个新的应用程序项目,只需将您的myFramework.framework(从例如,您的 myFramework 文件夹 ) 到您的应用程序项目。再一次,不要忘记将其添加到正确的目标,并复制项目。在您的应用程序目标中,在 General 选项卡下,将您的框架添加到 Embedded Binaries 面板中,但从 中将其删除一次Linked Frameworks and Libraries 面板,因为它应该在那里两次(在做之前检查一下)。导入您的框架
import myFramework
并开始使用您构建的内容!
注意: 如果您尝试使用 GTM,请不要忘记添加与 GTM 集成相关的内容(您的容器和 GoogleInfo plist):
真心希望对您有所帮助!如果有任何不清楚的地方或遇到问题,请随时发表评论,我会尽力帮助您。
请在下面找到我的来源:
我正在尝试重新制作 swift 3 项目的一部分,使其成为 swift 框架 以便将其用作 pod .问题是我需要使用 GoogleTagManager legacy (v3) 作为依赖项,并且在执行 pod spec lint
时出现以下错误:
ERROR | [iOS] unknown: Encountered an unknown error (The 'Pods-App' target has transitive dependencies that include static binaries: (/private/var/folders/7t/0cd0n1gn46xd7r1cywrgcy2w0000gn/T/CocoaPods/Lint/Pods/GoogleTagManager/Libraries/libTagManager.a)) during validation.
或者,使用 GTM v5:
ERROR | [iOS] unknown: Encountered an unknown error (The 'Pods-App' target has transitive dependencies that include static binaries: (/private/var/folders/7t/0cd0n1gn46xd7r1cywrgcy2w0000gn/T/CocoaPods/Lint/Pods/GoogleTagManager/Frameworks/GoogleTagManager.framework)) during validation.
我使用的是最新的 cocoapods 版本 (1.1.0.rc.2),据我了解,问题出在 GTM pod 的依赖项上,其中至少有一个是静态库.
我读了一些线程,其中人们谈论在框架内安装静态库或在创建 pod 时将静态库包装到框架中的解决方法。问题是静态库是 GTM pod 的依赖项,所以我无法控制它。至少那是我在 here.
中的理解这是我的 Podfile :
# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
target 'MyProject' do
# Comment this line if you're not using Swift and don't want to use dynamic frameworks
# use_frameworks!
# Pods for MyProject
pod 'GoogleTagManager', '~> 3.15.2'
end
这是我的(Whosebug 的简称)MyProject.podspec :
Pod::Spec.new do |s|
s.name = "MyProject"
s.version = "0.1.0"
s.platform = :ios, '8.0'
s.ios.deployment_target = '8.0'
s.source_files = "MyProject", "MyProject/**/*.{h,m}", "MyProject/**/*.{swift}"
s.dependency 'GoogleTagManager', '~> 5.0.0'
end
我已经尝试下载 GTM SDK 并在没有 cocoapods 的情况下安装它,但我想我错过了一步,因为我无法让它工作。
所以我想要一些关于我的 podspec 和 podfile 文件的建议,或者关于如何在没有 cocoapods 的情况下安装 SDK 的解释。非常感谢!
好吧,几个月后我不得不回到这个项目。由于 GTM pod 没有改变并且仍然有静态库作为依赖项,因此仍然不可能创建一个具有 GTM pod 作为依赖项的框架并通过 Cocoapods.[=36 分发它=]
我最终决定忽略 Cocoapods 并手动将第三方框架添加到我的。所以这个答案并不完全符合我的问题,但这是我发现分发我的框架的唯一方法。
所以,第一步是创建一个新项目。 Select Cocoa 触控框架 :
给它起个名字,我的是myFramework。一旦您的工作场所准备就绪,请为其添加一个新目标:
单击跨平台选项卡和 select 聚合模板。我将我的命名为 Aggregate(非常有创意)。不过我们暂时不会太在意。
完成后,您的工作场所就准备好了,您可以创建自己的惊人框架!让我们再深入一点!
您现在要创建或复制您的源文件。如果您复制它们,请不要忘记选中 如果需要复制项目 复选框,并确保它们已添加到框架目标中:
到现在为止,我想没有什么大惊喜。
由于我的问题是关于 GTM 的,因此我们将添加该框架作为我们框架的依赖项。我在 Cocoapods 上的其他地方找不到源,所以我创建了一个新项目(我使用应用程序模板并将其命名为 PodApp),然后我添加了Cocoapods。打开终端并导航到 PodApp 项目文件夹:
pod init
vi Podfile
- 对于 PodApp,在 #Pods 下,添加
pod 'GoogleTagManager', '~> 6.0.0'
- 保存并关闭 Podfile,然后 运行
pod install
- 下载并安装依赖项后,关闭 PodApp 项目 window 和 运行
open PodApp.xcworkspace
在您的框架项目中,添加一个您将命名为 Frameworks 的新组(右键单击 Xcode 导航器 -> 新组)。您将复制 myFramework 的框架组下的 PodApp 项目中下载的所有依赖项 Cocoapods。再一次,不要忘记将其添加到 myFramework 目标 并如上所示在需要时复制项目。
在下图中,点击1、2、3,如果一切正常一切顺利,您应该会看到刚刚在 4 上添加的 frameworks/libs。
要使 Firebase 正常工作,您还必须 link 和 AdSupport.framework。只需单击 + (5),搜索并添加它。
我在使用 GoogleToolBoxForMac 时也遇到了一些麻烦,我必须做的是构建 PodApp 项目,并将 GoogleToolBoxForMac.framework 复制到 下PodApp/Pods/Products/ 在组 myFramework/Frameworks/ 中。 记得将其添加到正确的目标并复制项目。
另一个与 GTM 相关的棘手细节:您必须向您的框架添加一些资源。按照下一张图片上的步骤操作:
在打开的弹出窗口中,单击 添加其他 并找到保存 GTM.framework 的位置,展开它并添加 TagManagerResources.bundle(不要不要忘记复制项目!)。
由于其他资源可能会给您警告(在此特定示例中),您可以使用 -.
删除它们如果您希望框架的最终用户能够使用您嵌入的框架,请在 "Copy Bundle Resources" 上方打开 "Headers" 面板,拖放所有 项目 headers 到 public.
所有这些框架现在都可以通过您自己的框架访问,但是要使它们可用,您必须在您的 myFramework.h 中导入它们的 headers :
#import <myFramework/AnObjectiveCClass.h>
#import <GoogleTagManager/GoogleTagManager.h>
#import <GoogleTagManager/TAGCustomFunction.h>
#import <myFramework/GTMDefines.h>
#import <myFramework/GTMNSData+zlib.h>
#import <FirebaseCore/FirebaseCore.h>
#import <FirebaseAnalytics/FirebaseAnalytics.h>
#import <FirebaseInstanceID/FirebaseInstanceID.h>
#import <myFramework/GAI.h>
#import <myFramework/GAIDictionaryBuilder.h>
#import <myFramework/GAIEcommerceFields.h>
#import <myFramework/GAIEcommerceProduct.h>
#import <myFramework/GAIEcommerceProductAction.h>
#import <myFramework/GAIEcommercePromotion.h>
#import <myFramework/GAIFields.h>
#import <myFramework/GAILogger.h>
#import <myFramework/GAITrackedViewController.h>
#import <myFramework/GAITracker.h>
#import <myFramework/pb_encode.h>
#import <myFramework/pb.h>
#import <myFramework/pb_decode.h>
#import <myFramework/pb_common.h>
好的,我们快完成了!
现在,select 您项目的信息部分(上图中的 1),检查您正在构建的版本(我的版本是 8.0 向后与大多数设备的兼容性)。在 Configurations 面板下,通过 select 删除 Debug,然后按 -. 现在 select 构建设置(图像上的 2),我们将在此处进行一些更改。
- 仅构建活动架构:否
- 允许Non-modular包含在框架模块中:否
- 有效架构 : arm64 armv7 i386 x86_64 (因为在此示例中 armv7s 不针对某些框架构建)
- 预处理器宏:PB_NO_PACKED_STRUCTS=1 PB_FIELD_32BIT=1
- 启用模块(C 和 Objective-C) : Ye
在你的两个target中,对于提到的Build Settings,将它们设置为$(inherited),这意味着它们将继承你刚刚在Project Build上设置的参数设置。
在框架目标中,我也将 Other Linker Flags 设置为 PodApp 项目中的设置,但我不是 100% 确定这是必要的。
(仅供参考,它们在这里:$(继承)-ObjC -l"GoogleAnalytics" -l"c++" -l"sqlite3" -l"z"-框架"AdSupport"-框架"CoreTelephony"-框架"FirebaseAnalytics"-框架"FirebaseCore"-框架"FirebaseInstanceID"-框架"GoogleSymbolUtilities"-框架"GoogleTagManager" -框架"GoogleToolboxForMac" -框架"GoogleUtilities" -框架"JavaScriptCore" -框架"SystemConfiguration" -框架"StoreKit" -框架"AddressBook" -框架"CoreData")
将定义模块设置为是。
现在 select 聚合目标,它将创建一个胖框架,一个包含我们框架的多个版本的文件,一个用于我们在几步前指定的每个体系结构(arm64 armv7 i386 x86_64)。我们必须告诉 Xcode 我们希望它构建什么。按照下图 (1) 的步骤操作:
在构建阶段,您希望聚合目标在构建自身之前先构建 myFramework.framework。
添加myFramework.framework后,按图中注释为2的+,select 新运行脚本阶段。 将以下脚本粘贴到其中:
# Merge Script
# 1
# Set bash script to exit immediately if any commands fail.
set -e
# 2
# Setup some constants for use later on.
FRAMEWORK_NAME="myFramework"
# 3
# If remnants from a previous build exist, delete them.
if [ -d "${SRCROOT}/build" ]; then
rm -rf "${SRCROOT}/build"
fi
# 4
# Build the framework for device and for simulator (using
# all needed architectures).
xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -arch arm64 -arch armv7 -arch armv7s only_active_arch=no defines_module=yes -sdk "iphoneos"
xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -arch x86_64 -arch i386 only_active_arch=no defines_module=yes -sdk "iphonesimulator"
# 5
# Remove .framework file if exists from previous run.
if [ -d "${PROJECT_DIR}/${FRAMEWORK_NAME}.framework" ]; then
rm -rf "${PROJECT_DIR}/${FRAMEWORK_NAME}.framework"
fi
# 6
# Copy the device version of framework to Framework directory.
cp -r "${SRCROOT}/build/Release-iphoneos/${FRAMEWORK_NAME}.framework" "${PROJECT_DIR}/${FRAMEWORK_NAME}.framework"
# 7
# Replace the framework executable within the framework with
# a new version created by merging the device and simulator
# frameworks' executables with lipo.
lipo -create -output "${PROJECT_DIR}/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" "${SRCROOT}/build/Release-iphoneos/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" "${SRCROOT}/build/Release-iphonesimulator/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}"
# 8
# Copy the Swift module mappings for the simulator into the
# framework. The device mappings already exist from step 6.
cp -r "${SRCROOT}/build/Release-iphonesimulator/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule/" "${PROJECT_DIR}/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule"
# 9
# Delete the most recent build.
if [ -d "${SRCROOT}/build" ]; then
rm -rf "${SRCROOT}/build"
fi
# 10
# Remove .zip file if exists from previous run.
if [ -d "${PROJECT_DIR}/${FRAMEWORK_NAME}.zip" ]; then
rm -rf "${PROJECT_DIR}/${FRAMEWORK_NAME}.zip"
fi
# 11
# Zip the Framework and License all together.
zip -r "${PROJECT_DIR}/${FRAMEWORK_NAME}.zip" "${PROJECT_DIR}/LICENSE" "${PROJECT_DIR}/${FRAMEWORK_NAME}.framework"
在脚本的第 2 步中,将名称更改为您的框架名称。花点时间了解它的作用,如果不符合您的要求,请更改其行为。它最后所做的是在您的项目文件夹中创建一个框架和一个 zip 存档。我在每个 Github 版本中对 link 都这样做了。
现在一切正常。 Select 聚合为活动方案,并运行 它。
如果您想在测试应用程序中添加您的框架,创建一个新的应用程序项目,只需将您的myFramework.framework(从例如,您的 myFramework 文件夹 ) 到您的应用程序项目。再一次,不要忘记将其添加到正确的目标,并复制项目。在您的应用程序目标中,在 General 选项卡下,将您的框架添加到 Embedded Binaries 面板中,但从 中将其删除一次Linked Frameworks and Libraries 面板,因为它应该在那里两次(在做之前检查一下)。导入您的框架
import myFramework
并开始使用您构建的内容!
注意: 如果您尝试使用 GTM,请不要忘记添加与 GTM 集成相关的内容(您的容器和 GoogleInfo plist):
真心希望对您有所帮助!如果有任何不清楚的地方或遇到问题,请随时发表评论,我会尽力帮助您。
请在下面找到我的来源: