MeetYouDevs / cocoapods-imy-bin

1.05k stars 245 forks source link

xcodebuild没有生成.a静态库 #74

Closed dabing1022 closed 3 years ago

dabing1022 commented 3 years ago

image https://github.com/MeetYouDevs/cocoapods-imy-bin/issues/54 问题和这个问题有些相似,报错也一致。仔细看了build-{arch}的目录下都是framework,导致

begin
            @framework_path = builder.lipo_build(@@build_defines) unless @skip_archive
          rescue
            @skip_archive = true
          end

lipo_build因为缺少合并的.a静态库导致失败,走了rescue,后续

          build_static_framework
          unless @skip_archive
            unless  CBin::Build::Utils.is_framework(@spec)
              build_static_library
              zip_static_library
            else
              zip_static_framework
            end
          end

因为@skip_archive为True,也不会build_static_library

根本原因在于pod bin auto --all-make之后,Demo-build-temp/bin-archive/Demo/build-arm64目录下是framework库,暂时没发现是怎么引起的。

@su350380433 可否提供一下排查思路。十分感谢。

pod env信息:

Stack

   CocoaPods : 1.10.0
        Ruby : ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin20]
    RubyGems : 3.1.4
        Host : macOS 11.1 (20C69)
       Xcode : 12.3 (12C33)
         Git : git version 2.24.3 (Apple Git-128)
Ruby lib dir : /Users/xxxxx/.rvm/rubies/ruby-2.7.2/lib
Repositories : MyPrivateBinarySpecs - git - git@gitlab.xxxx.com:xxxxx/MyPrivateBinarySpecs.git @ 2c1d88f60dfa35092b700958b2650e3400db982d

               MyPrivateSpecs - git - git@gitlab.xxxx.com:xxxxx/MyPrivateSpecs.git @ 32599860fb27f9c804094849f4d20a8bd7bbdd19

               trunk - CDN - https://cdn.cocoapods.org/

Installation Source

Executable Path: /Users/xxxxx/.rvm/gems/ruby-2.7.2/bin/pod

Plugins

cocoapods-deintegrate                 : 1.0.4
cocoapods-disable-podfile-validations : 0.1.1
cocoapods-generate                    : 2.0.1
cocoapods-imy-bin                     : 0.3.0.12
cocoapods-plugins                     : 1.0.0
cocoapods-search                      : 1.0.0
cocoapods-trunk                       : 1.5.0
cocoapods-try                         : 1.2.0

Podfile

source 'https://github.com/cocoapods/specs.git'

#命令写在这里也是等效, 已移动到Podfile_local中,避免git提交冲突等场景
#plugin 'cocoapods-imy-bin'
#use_binaries!

target 'Demo' do
  pod 'FMDB'
  pod 'LKDBHelper'

  pod 'YYModel',:podspec => 'https://github.com/ibireme/YYModel/raw/master/YYModel.podspec'

  pod 'YYCache',:podspec => 'https://github.com/ibireme/YYCache/raw/master/YYCache.podspec'

  end
dabing1022 commented 3 years ago

我diff了一下正常的Pods/Pods.xcodeproj文件 区别在于

      productType = "com.apple.product-type.library.static";

      productType = "com.apple.product-type.framework"; 

但为啥同样的命令generate出来的项目的工程配置会有差别,还在排查。

dabing1022 commented 3 years ago

大概原因是我本地使用RubyMine进行调试的是master最新代码,和cocoapods-imy-bin-0.3.0.11代码有所差别,而终端命令行调试用的是cocoapods-imy-bin-0.3.0.11。这里面有一些差异,比如:

image

我diff了master和0.3.0.11发版tag的代码,目前全部是readme的一些改动。猜测cocoapods-imy-bin-0.3.0.11在作者自己的分支上进行的发布,图片中的改动,并没有在master分支上这个文件的历史中找到。

建议:大家调试的时候使用稳定tag版本。master目前还存在一些改动,并没有得到验证。图中左侧为master的目前最新代码, lipo -create -output #{output} #{libs.join(' ')} 用来合并不同架构的静态库,比如找到build-arm64/libXXX-iOS.a静态库,但该架构目录下其实打出来的静态库并没有带平台iOS的名字(多平台iOS),导致说静态库合并找不到文件报错。

def target_name
        #区分多平台,如配置了多平台,会带上平台的名字
        # 如libwebp-iOS
        if @spec.available_platforms.count > 1
          "#{@spec.name}-#{Platform.string_name(@spec.consumer(@platform).platform_name)}"
        else
          @spec.name
        end
end