尝试在cocoapod中包装供应商框架,但编译器找不到头文件

jes*_*old 6 xcode ios ios-frameworks cocoapods xcode7

希望有人已经解决了这个问题; 我正在尝试将第三方库(Airwatch)包装在一个cocoapod中,以便更好地管理我们的应用程序.不过,我有一段时间试图让它发挥作用.我已经在一个静态库周围创建了一个pod,但是这个是一个动态框架,我有一段时间来编译它.框架中的标题只能在包含的应用程序中访问....

这是我已经尝试过的:

  • 当我在podspec中设置vendored_libraries时,我似乎无法使用引号或<>访问标题.Xcode抱怨为"未找到"
  • 接下来,我尝试将框架中的标头路径添加为source_files,就像这样

    s.source_files = 'Pod/Classes/**/*','Pod/Framework/AWSDK.framework/Versions/A/Headers/*.h'
    
    Run Code Online (Sandbox Code Playgroud)

这允许xcode找到导入的标题,如:

    import "AWSDKCore.h"  //Documented as the framework's main header
Run Code Online (Sandbox Code Playgroud)

但是这会对原始框架中的现有导入产生错误:

在此输入图像描述

我认为这是一个坏主意,但我想我会尝试将我的cocoapod命名为与Framework相同的名称(应保留导入路径).因此,这会抛出一堆错误,说某些枚举要么未声明,要么被声明两次.

如果有人有想法,我会永远很高兴......

仅供参考,这是我的podspec:

Pod::Spec.new do |s|
 s.name             = "AirwatchSDK"
 s.version          = "0.1.0"
 s.summary          = "A short description of AirwatchSDK."

 s.homepage         = "https://github.com/<GITHUB_USERNAME>/AirwatchSDK"
 s.license          = 'MIT'
 s.author           = { "xxxxx" => "xxxx" }
 s.source           = { :git => "https://github.com/<GITHUB_USERNAME>/AirwatchSDK.git", :tag => s.version.to_s }

 s.platform     = :ios, '8.0'
 s.requires_arc = true
 #s.module_name = 'AWSDK'
 s.source_files = 'Pod/Classes/**/*','Pod/Framework/AWSDK.framework/Versions/A/Headers/*.h'

 s.vendored_frameworks = 'Pod/Framework/AWSDK.framework'
 s.frameworks = 'CFNetwork','CoreData','CoreFoundation','CoreGraphics','CoreLocation','CoreTelephony','CoreText'
 s.libraries = 'stdc++','z','sqlite3','c++'
end
Run Code Online (Sandbox Code Playgroud)

jes*_*old 15

既然我想出了自己的答案,我想我会在这里发布给下一个人......

事实证明,关键是没有'source_files'(或将其评论出来).我不确定这是不是一个bug,但我的最终podspec有vendored_framework设置和source_files没有设置如下:

#can't have source files if you want to access vendor framework
#s.source_files = 'Pod/Classes/**/*'

# airwatch framework.
s.vendored_frameworks = 'AWSDK.framework'
Run Code Online (Sandbox Code Playgroud)

  • 我很惊讶地遇到这个问题,这确实是我得到同样方案的唯一方法.作为"下一个人",我非常感谢您发布自己的答案. (3认同)