【问题标题】:Adding a .a file to a project via CocoaPods通过 CocoaPods 将 .a 文件添加到项目中
【发布时间】:2015-03-25 10:57:15
【问题描述】:

我目前正在开发一个使用 CocoaPods 的项目。这是我第一次使用它们,希望能帮助我们解决我们遇到的问题。

我们有多个使用相同数据模型的应用。我们没有重复代码,而是创建了一个单独的项目,将其作为 pod 文件添加到每个子项目中。在这个项目中,我们还有很多第三方库(Facebook SDK、GoogleAnalytics 等),因为它们在我们的多个应用程序中使用。我们使用的 2 个库是 Flurry 5.4.0 和 Appsflyer。不幸的是,这些家伙是 .a 文件,而不是其他返回 .h 文件的 pod 文件。

我们拥有的基础项目将毫无问题地清理和编译。但是当我们尝试通过 pods 将这个项目添加到任何子项目时,它会导致这个编译错误:

Undefined symbols for architecture i386:
"_OBJC_CLASS_$_AppsFlyerTracker", referenced from:
  objc-class-ref in libPods.a(SHAnalyticsUtility.o)
"_OBJC_CLASS_$_Flurry", referenced from:
  objc-class-ref in libPods.a(SHAnalyticsUtility.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我尝试了所有不同的方法来更新 Podfile(https://github.com/CocoaPods/CocoaPods/issues/2018) 和 PodSpec(https://github.com/CocoaPods/Specs/issues/1483) 文件,但到目前为止没有任何效果。欢迎任何和所有建议:) PODSPEC

Pod::Spec.new do |s|


  s.name     = 'company-framework-ios'
  s.version  = '1.13.16'
  s.platform = :ios
  s.license  = 'MIT'
  s.summary  = 'Framework for all the iOS apps'

  s.source_files = 'CompanyFramework/CompanyFramework/*.{h,m}','CompanyFramework/CompanyFramework/**/*.{h,m}'

  s.frameworks = 'QuartzCore', 'CoreLocation'
  s.dependency 'Masonry'
  s.dependency 'Mixpanel'
  s.dependency 'GoogleAnalytics-iOS-SDK'
  s.dependency 'AFNetworking', '2.4.1'
  s.dependency 'NSDate+Calendar'
  s.dependency 'RXPromise'
  s.dependency 'SAMCategories'
  s.dependency 'FlurrySDK'
  s.dependency 'AppsFlyer-SDK'
  s.dependency 'Facebook-iOS-SDK', '3.18.2'

  s.ios.deployment_target = "7.1"

  s.requires_arc = true
  s.ios.vendored_library = 'Pods/FlurrySDK/Flurry/libFlurry_5.4.0.a'
  s.ios.vendored_library = 'Pods/AppsFlyer-SDK/libAppsFlyerLib.a'

end

【问题讨论】:

  • 你能检查一下 lib 是否是为所需的架构构建的吗? xcrun -sdk iphoneos lipo -info $(FILENAME)
  • fat 文件中的架构:libPods-Shyp.a 为:i386 x86_64
  • fat 文件中的架构:libFlurry_5.4.0.a 是:armv7s i386 x86_64 armv6 armv7 arm64
  • fat文件:libAppsFlyerLib.a中的架构是:armv7 armv7s i386 x86_64 arm64
  • @René 似乎是为正确的架构而构建的

标签: ios objective-c xcode cocoapods podspec


【解决方案1】:

所以这个问题的答案是,当您将 .a 文件添加到自定义 pod 时,您还必须在安装自定义 pod 后将 .a 文件添加到您的项目中。

【讨论】:

  • Frameworks 和 .a 文件将包含在 CocoaPods 的 0.36(Next Release) 中。
  • 在 Podspec 中有没有办法做到这一点?
  • 嗨,5 年后,我们可以在 podspec 中做吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多