我想创建一个只包含其他公司开放平台提供的框架和捆绑资源的pod。但是我遇到了一些问题。
第一次,我刚创建了一个podspec文件,它只使用s.ios.vendored_frameworks
和捆绑资源来包含框架。当我运行pod spec lint
时它会通过验证。然后我导入了它是podfie中的Objective-C项目,当我运行pod install
时它可以工作,我可以使用#import <xxx/xxx.h>
但我发现在 xcworkspace 项目文件中,它会自动生成一个方案,如上图所示。似乎生成的方案是mac的目标。 称之为情境A
如果我在pod中添加一个名为Version.h和Version.m的自定义新类,并使用s.source_files = "Classes", "Version/*.{h,m}"
更新podspec文件,那么当我运行pod install
时,它会生成静态图书馆,这就是我想要的,也是我认为的结果。 称之为情境B
所以问题是:
为什么当我没有包含任何自定义类文件时,pod会为mac生成一个方案,并且最重要吗?
为什么在我提到自定义类时pod会生成静态库?
第二部分是我还需要将pod导入一个快速项目。我也遇到了类似的问题。
目前,我在podfie中使用use_frameworks!
关键字。
情况A:我无法导入框架,没有这样的模块xxx ,来自编译器的错误。
在情况B:无法构建Objective-C moulde xxx ,来自编译器的错误,我尝试清理并删除DerivedData目录,但它不起作用。它不会生成modulemap和xx-umbrella.h文件。当我使用谷歌广告sdk
时,我发现了同样的问题pod 'Google-Mobile-Ads-SDK', "~> 7.4.0"
在情况A中,当pod生成pods项目时,它不会从我的pod安装目标。在情况B中,它从我的pod安装目标。比如pod中的以下日志
//situation b
- Creating Pods project
- Adding source files to Pods project
- Adding frameworks to Pods project
- Adding libraries to Pods project
- Adding resources to Pods project
- Linking headers
- Installing targets
- Installing target `AliPay` iOS 8.0
//situation a
- Creating Pods project
- Adding source files to Pods project
- Adding frameworks to Pods project
- Adding libraries to Pods project
- Adding resources to Pods project
- Linking headers
- Installing targets
- Installing target `Pods-NewCategory` iOS 8.0
- Generating Info.plist file at `Pods/Target Support
Files/Pods-NewCategory/Info.plist`
- Generating module map file at `Pods/Target Support
Files/Pods-NewCategory/Pods-NewCategory.modulemap`
- Generating umbrella header at `Pods/Target Support
Files/Pods-NewCategory/Pods-NewCategory-umbrella.h`
- Running post install hooks
我在github创建了主持人,在情境A上创建了标记0.0.1,在情境B上创建了标记0.0.2。
答案 0 :(得分:1)
对于情况A,
您应该在pod规范中指定pod所用的平台,如下所示:
s.platform = :ios
s.development_target = '8.0'
对于情况B,
在swift中你不能使用静态库,这就是为什么cocoa pods引入了属性use_frameworks!
要摆脱找不到模块的错误,您必须指定一个包含伞头的模块映射文件。