【问题标题】:Xcode 12, framework build failed, cocoapods, arm64Xcode 12,框架构建失败,cocoapods,arm64
【发布时间】:2021-02-04 10:53:25
【问题描述】:

我尝试使用 cocoapods-packager 从 podspec 生成框架:

pod package MyCore.podspec --embedded --subspecs=SDK

在 Xcode 11 中,一切都很好,但在 Xcode 12 上,我收到了跟随错误:

致命错误: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: Pods/build/package.a 和 Pods/build-sim/package.a 具有相同的 架构(arm64)并且不能在同一个胖输出文件中

此处建议的解决方案:Xcode 12, building for iOS Simulator, but linking in object file built for iOS, for architecture arm64 添加:

s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

对我不起作用。这与我使用依赖项的事实有关吗?有人知道如何解决这个问题吗?

Podspec: 
#
# Be sure to run `pod lib lint **.podspec' to ensure this is a
# valid spec and remove all comments before submitting the spec.
#
# Any lines starting with a # are optional, but encouraged
#
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#

Pod::Spec.new do |s|
  s.name            = "MyCore"
  s.version         = "9.1.1.2360"
  s.summary         = "A short description of ***."
  s.homepage        = "https://github.com/***/***"
  s.license         = 'Private'
  s.author          = { "***" }
  s.source          = { :git => "***", :tag => s.version.to_s }
  
  s.platform        = :ios, '10.0'
  s.requires_arc    = true
  
  s.module_name     = '***'
  s.default_subspec = 'Core'
  s.static_framework = true
  s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
  s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

  s.subspec 'Core' do |ss|
      ss.source_files = 'Pod/Classes/**/*.{h,m,c}'
      ss.resources =     ['Pod/CoreData/DrivePal.{xcdatamodeld,xcmappingmodel}', 'Pod/CoreData/mapping_*.xcmappingmodel', 'Pod/Assets/**/*.{csv,storyboard}']
      ss.resource_bundle = { 
        '**Core_CoreData' => ['Pod/CoreData/DrivePal.{xcdatamodeld,xcmappingmodel}', 'Pod/CoreData/mapping_*.xcmappingmodel','Pod/Assets/**/crash*.txt'],
      }
      ss.preserve_paths = ['Pod/CoreData/*.xcdatamodeld', 'Pod/CoreData/*.xcmappingmodel']
      ss.frameworks = 'CoreLocation', 'CoreBluetooth', 'CoreMotion', 'CoreData', 'AVFoundation', 'SystemConfiguration', 'Foundation'
      ss.library = 'z'

      ss.dependency 'CocoaLumberjack', '~> 3.5.3'
      ss.dependency 'Mantle', '2.1.4'
      ss.dependency 'MTLManagedObjectAdapter', '~> 1.0.3'

      ss.dependency 'AFNetworking/Serialization', '~> 3.2.1'
      ss.dependency 'AFNetworking/Reachability', '~> 3.2.1'
      ss.dependency 'AFNetworking/NSURLSession', '~> 3.2.1'

      ss.test_spec '***CoreTests' do |core_tests|
        core_tests.source_files = 'Pod/***CoreTests/**/*.{h,m}'
        core_tests.resources = 'Pod/***CoreTests/**/*.{json,txt}'
      end
  end
  
  # Core is copy of SDK
  s.subspec 'SDK' do |sdk|
      sdk.source_files = 'Pod/Classes/**/*.{h,m,c}'
      sdk.exclude_files = ['Pod/***CoreTests/*']
      sdk.resources =     ['Pod/CoreData/DrivePal.{xcdatamodeld,xcmappingmodel}', 'Pod/CoreData/mapping_*.xcmappingmodel']
      sdk.resource_bundle = {
          '***Core_CoreData' => ['Pod/CoreData/DrivePal.{xcdatamodeld,xcmappingmodel}','Pod/CoreData/mapping_*.xcmappingmodel','Pod/Assets/**/crash*.txt'],
      }
      sdk.compiler_flags = '-DTESTING=0'
      sdk.preserve_paths = ['Pod/CoreData/*.xcdatamodeld', 'Pod/CoreData/*.xcmappingmodel']
      sdk.frameworks = 'CoreLocation', 'CoreBluetooth', 'CoreMotion', 'CoreData', 'AVFoundation', 'SystemConfiguration', 'Foundation'
      sdk.library = 'z'
      
      sdk.dependency 'CocoaLumberjack', '~> 3.5.3'
      sdk.dependency 'Mantle', '2.1.4'
      sdk.dependency 'MTLManagedObjectAdapter', '~> 1.0.3'

      sdk.dependency 'AFNetworking/Serialization', '~> 3.2.1'
      sdk.dependency 'AFNetworking/Reachability', '~> 3.2.1'
      sdk.dependency 'AFNetworking/NSURLSession', '~> 3.2.1'

      sdk.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64', 'ONLY_ACTIVE_ARCH' => 'YES' }
      sdk.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64','ONLY_ACTIVE_ARCH' => 'YES' }

      sdk.public_header_files = [****]
    end

end

更新: 如果我添加--exclude-deps 标志,它可以工作,但我的框架不包含依赖项。

【问题讨论】:

    标签: ios xcode cocoapods xcode12


    【解决方案1】:

    通过修改本地cocoapods-packager源码ruby代码解决。 修改.rb文件路径:

    /Library/Ruby/Gems/2.6.0/gems/cocoapods-packager-1.5.0/lib/cocoapods-packager/pod_utils.rb(路径可能不同/Users/USER/ .rvm/gems/ruby-2.6.3/gems/cocoapods-packager-1.5.0/lib/cocoapods-packager/pod_utils.rb)

    unless static_installer.nil?
      static_installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
          config.build_settings['CLANG_MODULES_AUTOLINK'] = 'NO'
          config.build_settings['GCC_GENERATE_DEBUGGING_SYMBOLS'] = 'NO'
          config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64' // <-- inserted here
        end
      end
      static_installer.pods_project.save
    end
    

    【讨论】:

    • 我不认为编辑 Cocoapods 源代码是一个真正可行的解决方案,为什么不将以下内容添加到 Podfile 的末尾post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['CLANG_MODULES_AUTOLINK'] = 'NO' config.build_settings['GCC_GENERATE_DEBUGGING_SYMBOLS'] = 'NO' config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" end end end
    • 这是一个可行的解决方案。正如它所指出的,配置需要如图所示进行调整。谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2021-01-06
    • 2021-01-21
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多