Class: Pod::XBuilder

Inherits:
Object
  • Object
show all
Includes:
Config::Mixin, PodUtil, XcodeProjHelper, XcodeXBuilder
Defined in:
lib/cocoapods-framework/xbuilder.rb,
lib/cocoapods-framework/xbuilder/xcode_xbuild.rb,
lib/cocoapods-framework/xbuilder/xcodeproj_helper.rb

Defined Under Namespace

Modules: XcodeProjHelper, XcodeXBuilder

Instance Method Summary collapse

Methods included from PodUtil

#build_static_sandbox, #generic_new_podspec_hash, #installation_root, #podfile_from_spec, #spec_with_name, #spec_with_path

Methods included from XcodeProjHelper

#modify_xcode_project_sdk_to_simullator

Methods included from XcodeXBuilder

#xcode_xbuild

Constructor Details

#initialize(installer, source_dir, sandbox_root, spec, configuration) ⇒ XBuilder

Returns a new instance of XBuilder.



9
10
11
12
13
14
15
16
17
18
# File 'lib/cocoapods-framework/xbuilder.rb', line 9

def initialize(installer, source_dir, sandbox_root, spec, configuration)
# def initialize(platform, installer, source_dir, sandbox_root, spec, config)
    # @platform = platform
  @installer = installer
  @source_dir = source_dir
  @sandbox_root = sandbox_root
  @spec = spec
  @configuration = configuration
  @outputs = nil
end

Instance Method Details

#buildObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/cocoapods-framework/xbuilder.rb', line 20

def build
  UI.puts("Building framework #{@spec} with configuration #{@configuration}")
  UI.puts "Work dir is :#{@sandbox_root}"
  defines = "GCC_PREPROCESSOR_DEFINITIONS='$(inherited) PodsDummy_Pods_#{@spec.name}=PodsDummy_PodPackage_#{@spec.name}'"
  # defines << ' ' << @spec.consumer(@platform).compiler_flags.join(' ')

  if @configuration == 'Debug'
    defines << 'GCC_GENERATE_DEBUGGING_SYMBOLS=YES ONLY_ACTIVE_ARCH=NO'
  end

  build_all_device defines

  collect_xc_frameworks
end

#build_all_device(defines) ⇒ Object



55
56
57
58
59
# File 'lib/cocoapods-framework/xbuilder.rb', line 55

def build_all_device defines
  # build general first because simulator will exchange SDKROOT to simulat sdk
  build_general_device defines
  build_simulator_device defines
end

#build_general_device(defines) ⇒ Object



61
62
63
64
65
66
67
68
# File 'lib/cocoapods-framework/xbuilder.rb', line 61

def build_general_device defines
  UI.puts("--- Building framework #{@spec} with general device")
  xcode_xbuild(
    defines,
    @configuration,
    @sandbox_root
  )
end

#build_simulator_device(defines) ⇒ Object



70
71
72
73
74
75
76
77
78
# File 'lib/cocoapods-framework/xbuilder.rb', line 70

def build_simulator_device defines
  UI.puts("--- Building framework #{@spec} with simulator device")
  modify_xcode_project_sdk_to_simullator "#{@sandbox_root}/Pods.xcodeproj"
  xcode_xbuild(
    defines,
    @configuration,
    @sandbox_root
  )
end

#collect_xc_frameworksObject



35
36
37
38
39
# File 'lib/cocoapods-framework/xbuilder.rb', line 35

def collect_xc_frameworks
  export_dir = "#{@sandbox_root}/export/**/#{@spec.name}.framework"
  frameworks = Pathname.glob(export_dir)
  @outputs = create_xc_framework_by_frameworks frameworks
end

#create_xc_framework_by_frameworks(frameworks) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/cocoapods-framework/xbuilder.rb', line 41

def create_xc_framework_by_frameworks frameworks
  command = 'xcodebuild -create-xcframework '
  frameworks.each do |framework|
    command << "-framework #{framework} "
  end
  command << "-output #{@sandbox_root}/#{@spec.name}.xcframework 2>&1"
  UI.puts `#{command}`
  if $?.exitstatus != 0
    UI.puts(output)
    Process.exit
  end
  "#{@sandbox_root}/#{@spec.name}.xcframework"
end

#outputs(target_dir) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/cocoapods-framework/xbuilder.rb', line 80

def outputs target_dir
  if not File.exist? target_dir
    Pathname.new(target_dir).mkdir
  end
  outputs_xcframework target_dir
  new_spec_hash = generic_new_podspec_hash @spec
  new_spec_hash[:vendored_frameworks] = "#{@spec.name}.xcframework"
  require 'json'
  spec_json = JSON.pretty_generate(new_spec_hash) << "\n"
  File.open("#{target_dir}/#{@spec.name}.podspec.json",'wb+') do |f|
    f.write(spec_json)
  end
  UI.puts "result export at :#{target_dir}"
  target_dir
end

#outputs_xcframework(target_dir) ⇒ Object



96
97
98
99
100
101
102
# File 'lib/cocoapods-framework/xbuilder.rb', line 96

def outputs_xcframework target_dir
  `cp -rp #{@outputs} #{target_dir} 2>&1`
  if $?.exitstatus != 0
    UI.puts output
    Process.exit
  end
end